2009-06-23 7 views
33

Sto caricando un DLL tramite System.Reflection.Assembly.LoadFile e riflette sui suoi membri in un sistema plug-in-esque. Devo essere in grado di aggiornare/sovrascrivere questi DLL mentre il sistema è in esecuzione ma sembra che dopo aver chiamato System.Reflection.Assembly.LoadFile il file sia successivamente bloccato.
Qualcuno sa di un modo per sbloccare il file?
Ho letto di caricare il file in un appdomain separato? Ci sono delle insidie ​​a questo approccio?System.Reflection.Assembly.LoadFile Locks File

risposta

63

Se si utilizza questo:

System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path)) 

Non si blocca il file.

Modifica


Anche se questo funziona, non è la soluzione migliore, ma il modo migliore di farlo è molto più coinvolto (troppo solo per incollare tutto il codice qui per esso) .

ho creato un repository pubblico su Github qui con tutto il codice per fare questo correttamente:

Loading Assemblies without Locking by using Shadow Copying.

+0

Davvero?!? sarebbe fantastico se funzionasse! +1 –

+0

Ha funzionato perfettamente! Lascio questo aperto solo per vedere se qualcuno copre alcuni degli altri punti ... –

+0

Contento che ha funzionato per voi :) Non ho mai provato il metodo AppDomain, anche se ho letto un po 'su di esso mentre cercavo una soluzione per questo molto problema. – Pondidum

0

Usa Microsoft.Cci incluso in Microsoft FxCop

modello per la versione 1.35:

using Microsoft.Cci; 
// [...] 
AssemblyNode assembly = AssemblyNode.GetAssembly(path);