VSTS 2010 SGEN: Fehler: Datei oder Assembly konnte nicht geladen werden (Ausnahme von HRESULT: 0x80131515)

106

Ich habe ein seltsames Problem mit VS2010. Wir verwenden TFS, um unsere API-DLLs zu erstellen, und wir haben sie in unseren Projekten verwendet, um ein zugeordnetes Netzwerklaufwerk zu verwenden, das vollständig vertrauenswürdig war. Wir arbeiten seit mindestens zwei Jahren so und alles hat perfekt funktioniert.

Heute habe ich eine Webanwendung auf vs2010 konvertiert und wenn ich sie in Release kompiliere, gibt es mir:

SGEN: Fehler: Datei oder Assembly 'file: /// L: \ Api \ Release API_20100521.1 \ Release \ CS.API.Exceptions.dll' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Der Betrieb wird nicht unterstützt. (Ausnahme von HRESULT: 0x80131515)

Das Seltsame ist, dass es funktioniert, wenn es sich unter dem Debug-Profil befindet ...

Ich habe versucht, das hinzuzufügen

<runtime>
   <loadFromRemoteSources enabled="true" />
</runtime>

in app.config und immer noch kein Glück (Siehe http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0 und http://msdn.microsoft.com/ de-de / library / dd409252 (VS.100) .aspx )

Ich bin mir ziemlich sicher, dass dieses Problem von Visual Studio oder msbuild stammt, da unser Code in prod nicht von einer Netzwerkfreigabe ausgeführt wird, da alle referenzierten DLLs in den Ordner bin kopiert werden.

Wenn jemand eine Lösung hat (oder nur eine Idee für einen Suchpfad), lass es mich wissen!

Bearbeiten: Es stellte sich heraus, dass es im Debug-Modus funktionierte, da die Generierung von Serialisierungsassemblys deaktiviert war. Wie der Titel schon sagt, handelt es sich wirklich um ein SGEN-Problem, da dieses Dienstprogramm besagt, dass der Pfad nicht vertrauenswürdig ist ...

Entwickler IT
quelle

Antworten:

213

Ich konnte diesen Fehler beheben, indem ich die Assembly-DLL im Windows Explorer fand, mit der rechten Maustaste klickte, Eigenschaften auswählte und dann auf die Schaltfläche "Entsperren" drückte. Die DLL verfügt über einen Stream, der sie als externe Datei markiert. Wenn Sie auf "Blockierung aufheben" klicken, wird diese Bezeichnung entfernt.

Slaggg
quelle
funktionierte ... nur Entwickler, um dieses Problem zu haben ... direkt von TFS ... seltsam
spaghetticowboy
Der Grund, warum es gesperrt wurde, ist, dass mein Quellcode auf einer Freigabe gespeichert war. Der Code wurde auf die lokale Festplatte verschoben - alles ging gut. (.NET4 SGEN-Berechtigungen für Aktienemissionen).
thedrs
31
Gott segne dich. Ernsthaft.
FAtBalloon
Bitte beachten Sie, dass die meisten Unternehmen den lokalen Administratorzugriff nicht zulassen oder den Zugriff auf die Schaltfläche "Entsperren" für reguläre Benutzer, einschließlich Entwickler, ausdrücklich deaktivieren.
Kevinarpe
2
Ich hatte dieses Problem mit DLLs, die aus einer Zip-Datei kopiert wurden.
79IT
59

Ich hatte gerade das gleiche / ähnliche Problem auf einem TFS-Build-Server, auf dem ein Build auf DLLs von einer Netzwerkfreigabe verwies.

Das Problem besteht darin, dass sich das Sicherheitsrichtlinienmodell von CLR v4 seit früheren Versionen geändert hat und keine Sandbox-Assemblys wie zuvor sind.

Um Ihr Problem zu beheben, suchen Sie einfach den Speicherort von sgen.exe und erstellen Sie eine sgen.exe.config im selben Ordner mit folgenden Inhalten:

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

sgen.exe ist normalerweise bei

"C:\Program Files\Microsoft SDKs\Windows\v[current version]\bin\NETFX 4.0 Tools"

In diesem Blogpost können Sie einige Änderungen an CAS-Richtlinien in .NET 4.0 nachlesen: Link

Martin Hyldahl
quelle
1
Ja, ich bin auf diese Lösung gestoßen, aber sie war für mich nutzlos. Ich habe nichts geändert. Wir haben uns entschlossen, als die Serialisierungsassemblys deaktiviert wurden
Developer IT
7
Für andere Informationen befindet sich SGEN normalerweise unter "C: \ Programme \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools"
Steve Cooper,
Entwickler-IT: In meinem Fall konnte die Generierung von Serialisierungsassemblys nicht deaktiviert werden, da ich sie benötigte. Natürlich kann das Drehen der Serialisierungsbaugruppen auch eine Lösung sein.
Martin Hyldahl
1
Beachten Sie, dass Sie, wenn es sich um eine 64-Bit-Maschine handelt, diese unter ... \ Bin \ NETFX 4.0 Tools \ x64 \
Vivek Ayer
1
Suchen Sie für VS2015 unter: C: \ Programme (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools
Farshid
23

Hatte das gleiche Problem und die Konfigurationsänderung hat nicht funktioniert. Nur wenn ich Generate Serialization Assembly in den Projekteigenschaften deaktiviert habe, hat es funktioniert.

rauben
quelle
Hat auch für mich gearbeitet. Dies ist auch die richtige Antwort für das OP, basierend auf seinem bearbeiteten Kommentar in der Frage.
Akousmata
Hat für mich gearbeitet. Tks.
Vinicius Gonçalves
1
Projekteigenschaften -> Erstellen -> Serialisierungsassembly generieren war Auto. Nach dem Deaktivieren begann die Kompilierung wie ein Zauber. +1 und Danke.
Honza P.
Das hat auch in meinem Fall funktioniert. Wie auch immer, ich frage mich, was genau das Ausschalten bedeutet, da es standardmäßig für die Release-Konfiguration aktiviert ist: Ich möchte sichergehen, dass es keine Nebenwirkungen auf die Anwendung hat, wenn ich es in der Produktionsumgebung veröffentliche.
Asimov
Nur ein Projekt hatte dieses Problem - es wurde von "Auto" auf "Aus" gesetzt - dieses Projekt bezog sich auf ein SOAP-WS.
Subha
3

Ich hatte genau das gleiche Problem und habe es behoben, indem ich die Datei sgen.exe.config unter C: \ Programme (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools hinzugefügt habe

mit dieser einfachen Konfiguration, wie andere gesagt haben

<?xml version ="1.0"?>
<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>
Matt Watson
quelle
2

Für diejenigen unter Ihnen, die eine 64-Bit-Version des TFS-Builddienstes ausführen, musste ich die Konfigurationsdatei unter folgendem Pfad erstellen:

 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64

Und der Dateiinhalt:

<?xml version ="1.0"?>
<configuration>
<runtime>
    <loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
gmasselli
quelle
1

Ich hatte das gleiche Problem, lud die Baugruppe in den GAC und arbeitete

gabouy
quelle
Die Sache ist, wir wollen die nicht im GAC. Wir haben beschlossen, als Serialisierungsassemblys deaktiviert wurden
Developer IT
1

Das Hinzufügen des folgenden Snippets zur Datei app.config hat in meinem Fall funktioniert. Ich verwende Windows XP mit VS2010 Service Pack 1.

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>
Venetien
quelle
0

Genau wie zu Ihrer Information, wenn Sie Windows 7 ausführen, finden Sie die Datei sgen.exe unter:

C: \ Programme (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools

Ich musste eine sgen.exe.config erstellen und dort platzieren, und dann verschwand dieses Problem.

ewahner
quelle
0

Weder das unblocknoch das confighat für mich funktioniert. Was der Trick für mich war, war dieser Tippcaspol . Ich rannte

 %windir%\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -m -ag 1.2 -url file://UncPathName/UncSubPath/* FullTrust

Und ich war bereit zu gehen, nicht einmal ein VisualStudio-Neustart erforderlich.

Yahoo Serious
quelle
0

Ich habe ein ähnliches Problem und bin schließlich damit fertig geworden, indem ich die Datei licenses.licx im Ordner Properties der Lösung entfernt habe.

clemchen
quelle
0

Nur für den Fall wie ich war Unblock keine Lösung, da Unblock nicht in den Eigenschaften meiner DLL-Datei angezeigt wird. Habe nachgesehen und meine Lösungsdatei geschlossen und mit der lokalen C: -Kopie anstelle des UNC-Netzwerkpfads zur Projekt-SLN-Datei erneut geöffnet. Konnte nach dieser Route veröffentlichen.

Taersious
quelle
0

In meinem Fall wurden einige DLLs blockiert.

Um alle Dateien im Ordner zu entsperren, habe ich die Power Shell mit dem folgenden Befehl verwendet

dir -Path [directory path] -Recurse | Unblock-File
Daniil Grankin
quelle