VSTS 2010 SGEN: errore: impossibile caricare il file o l'assembly (eccezione da HRESULT: 0x80131515)


106

Sto riscontrando uno strano problema con VS2010. Usiamo TFS per creare le nostre DLL API e le facevamo riferimento nei nostri progetti utilizzando un'unità di rete mappata che era completamente attendibile. Lavoriamo così da almeno due anni e tutto ha funzionato perfettamente.

Oggi ho convertito una webapp in vs2010 e quando la compilo in Release, mi dà:

SGEN: errore: impossibile caricare il file o l'assembly "file: /// L: \ Api \ Release API_20100521.1 \ Release \ CS.API.Exceptions.dll" o una delle sue dipendenze. L'operazione non è supportata. (Eccezione da HRESULT: 0x80131515)

La cosa strana è che funziona quando è sotto il profilo Debug ...

Ho provato ad aggiungere il file

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

in app.config e ancora senza fortuna (vedere http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0 e http://msdn.microsoft.com/ it / library / dd409252 (VS.100) .aspx )

Sono abbastanza sicuro che questo problema provenga da Visual Studio o msbuild, poiché il nostro codice non verrà eseguito da una condivisione di rete quando in prod perché tutte le DLL di riferimento vengono copiate nella cartella bin.

Se qualcuno ha una soluzione (o solo un'idea per un percorso di ricerca) per favore fatemelo sapere!

Modifica: risulta che funzionava in modalità debug perché la generazione di assembly di serializzazione era disattivata. Come dice il titolo, è davvero un problema SGEN poiché è questa utility che dice che il percorso non è attendibile ...

Risposte:


213

Sono stato in grado di correggere questo errore trovando la DLL dell'assembly in Esplora risorse, facendo clic con il pulsante destro del mouse, scegliendo Proprietà e quindi premendo il pulsante "Sblocca". La DLL ha un flusso che la contrassegna come file esterno e facendo clic su Sblocca rimuovi tale designazione.


ha funzionato ... l'unico sviluppatore ad avere questo problema .. direttamente da TFS ... strano
spaghetticowboy

Il motivo per cui è stato bloccato è che il mio codice sorgente si trovava su una condivisione. Spostato il codice sul disco locale: tutto è andato bene. (Autorizzazioni .NET4 SGEN su problemi di condivisione).
thedrs

31
Dio ti benedica. Sul serio.
FAtBalloon

Tieni presente che la maggior parte delle aziende non consente l'accesso di amministratore locale o disabilita espressamente l'accesso al pulsante "Sblocca" per gli utenti regolari, inclusi gli sviluppatori.
kevinarpe

2
Ho avuto questo problema con le DLL copiate da un file zip.
79IT

59

Ho appena avuto lo stesso problema / simile su un server di compilazione TFS in cui una build faceva riferimento a dll da una condivisione di rete.

Il problema è che il modello di criteri di sicurezza CLR v4 è cambiato rispetto alle versioni precedenti e non sono assembly sandbox come prima.

Per risolvere il problema basta trovare la posizione di sgen.exe e creare un sgen.exe.config nella stessa cartella con i seguenti contenuti:

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

sgen.exe si trova solitamente in

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

È possibile leggere alcune delle modifiche ai criteri CAS in .NET 4.0 in questo post del blog: Link


1
sì, mi sono imbattuto in questa soluzione ma è stata inutile per me, non ho cambiato nulla ... abbiamo risolto quando gli assembly di serializzazione si sono disattivati
Developer IT

7
Per altre informazioni, SGEN si trova di solito in "C: \ Programmi \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools"
Steve Cooper

Sviluppatore IT: nel mio caso non è stato possibile disattivare la generazione di assembly di serializzazione poiché ne avevo bisogno. Ma anche il cambio di causa degli assembly di serializzazione può essere una soluzione.
Martin Hyldahl

1
Nota che se si tratta di una macchina a 64 bit devi crearla in ... \ Bin \ NETFX 4.0 Tools \ x64 \
Vivek Ayer

1
Per VS2015 individualo in: C: \ Programmi (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Strumenti
Farshid

23

Ha avuto lo stesso problema e la modifica della configurazione non ha funzionato. Solo quando ho impostato Generate Serialization Assembly su off nelle proprietà del progetto ha funzionato.


Ha funzionato anche per me. Questa è la risposta corretta anche per l'OP sulla base del suo commento modificato nella domanda.
akousmata

Ha funzionato per me. Tks.
Vinicius Gonçalves

1
Proprietà progetto -> Crea -> Genera assembly di serializzazione era Auto, dopo averlo impostato su Off, la compilazione ha iniziato a funzionare come un fascino. +1 e grazie.
Honza P.

Ha funzionato anche nel mio caso. Comunque mi chiedo cosa significhi esattamente disattivarlo, visto che di default è attivo per la configurazione Release: vorrei essere sicuro che non abbia alcun effetto collaterale sull'applicazione quando la pubblico in ambiente di produzione.
Asimov

Solo un progetto ha riscontrato questo problema - è stato impostato da Auto a Off - questo progetto faceva riferimento a SOAP WS.
Subha


3

Ho avuto lo stesso identico problema e l'ho risolto aggiungendo sgen.exe.config in C: \ Programmi (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools

con questa semplice configurazione come altri hanno detto

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

2

Per quelli di voi che eseguono una versione a 64 bit del servizio di compilazione TFS, ho dovuto creare il file di configurazione nel seguente percorso:

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

E il contenuto del file:

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

1

Ho avuto lo stesso problema, ho caricato l'assembly nel GAC e ho funzionato


il fatto è che non vogliamo quelli nel GAC. abbiamo risolto la disattivazione degli assembly di serializzazione
Developer IT

1

L'aggiunta dello snippet di seguito al file app.config ha funzionato nel mio caso. Utilizzo Windows XP, con VS2010 service pack 1.

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

0

Proprio come per tua informazione se stai utilizzando Windows 7, il file sgen.exe può essere trovato su:

C: \ Programmi (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin \ NETFX 4.0 Strumenti

Ho dovuto creare un sgen.exe.config e posizionarlo lì, quindi il problema è andato via.


0

Né il unblockné il hanno configfunzionato per me. Il trucco per me è stato questo suggerimentocaspol . Ho corso

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

Ed ero pronto per iniziare, nemmeno un riavvio di VisualStudio richiesto.


0

Ho avuto un problema simile e alla fine l'ho risolto rimuovendo il file License.licx nella cartella Proprietà della soluzione.


0

Nel caso in cui, come me, Unblock non fosse una soluzione, poiché Unblock non appare nelle proprietà del mio file dll. Ho continuato a cercare e ho finito per chiudere il mio file di soluzione e riaprirlo usando il C: copia locale invece del percorso UNC di rete per il file sln del progetto. È stato in grado di pubblicare dopo aver seguito questa strada.


0

Nel mio caso un mucchio di DLL sono state bloccate.

Per sbloccare tutti i file nella cartella ho usato Power Shell con il seguente comando

dir -Path [directory path] -Recurse | Unblock-File
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.