2011-11-25 10 views
7

Ho il codice seguente in un'app. Net 4 Winforms che carica un assembly. Tutti i file sono in C :. Ci sono numerosi DLL che funzionano bene ma due errori con il seguente:loadFromRemoteSources error using Assembly.LoadFrom

Si è tentato di caricare un assembly da un percorso di rete che avrebbe causato l'assemblea deve essere sandbox nelle versioni precedenti di .NET Struttura. Questa versione di in .NET Framework non abilita i criteri CAS per impostazione predefinita, quindi questo carico potrebbe essere pericoloso. Se questo carico non è inteso per sandbox l'assembly , abilitare l'opzione loadFromRemoteSources. Vedi http://go.microsoft.com/fwlink/?LinkId=155569 per ulteriori informazioni.

Questo sembra essere solo un problema su alcuni PC

Ecco il codice:

strDLLs = Directory.GetFileSystemEntries(strPath, "*.dll") 
For intIndex = 0 To strDLLs.Length - 1 
    Try 
     objDLL = [Assembly].LoadFrom(strDLLs(intIndex)) 
     ExamineAssembly(objDLL, strInterface, Plugins) 

    Catch e As Exception 
     ' MsgBox("Error whilst loading Library: " & strDLLs(intIndex) & ". Reported Error was:" & vbCrLf & e.ToString) 
    End Try 
Next 
+0

Controllare questa risposta, può risolvere il problema con eleganza [http://stackoverflow.com/a/33755170/1127429](http://stackoverflow.com/a/33755170/1127429) – GMG

risposta

20

Ben scopre che il problema è perché il file è stato probabilmente scaricato da internet.

Per fissare tasto destro -> Proprietà -> Sblocca

enter image description here

+0

Questo ha risolto il mio problema quando ho riscontrato questo errore nella finestra di progettazione in Visual Studio. –

2

Questo è come sono riuscito a farlo funzionare, senza ricorrere a qualsiasi clic sul lato client:

var appDomain = AppDomain.CreateDomain(assemblyName); 
var assembly = appDomain.Load(File.ReadAllBytes(assemblyName)); 

Tieni presente che se crei il parametro CreateDomain with Evidence, otterrai "Questo metodo utilizza il criterio CAS, che è stato reso obsoleto da .NET Framework". Messaggio.

In alternativa, è possibile impostare una sandbox corretta:

http://msdn.microsoft.com/en-us/library/bb763046.aspx http://blogs.msdn.com/b/shawnfa/archive/2005/08/08/449050.aspx

1

Portare in dono Jon, ho avuto questo problema, ma con un sacco di assemblee in molte cartelle diverse. Ho scaricato Streams da Sysinternals per sbloccare i file in massa. Ho trovato una buona discussione su Super User su questo argomento.

Streams from Sysinternals Super User discussion