2009-06-23 7 views
33

Załaduję plik DLL przez System.Reflection.Assembly.LoadFile i odzwierciedlając jego członków w systemie wtyczki. Muszę być w stanie zaktualizować/zastąpić te DLL, gdy system jest uruchomiony, ale wydaje się, że po wywołaniu System.Reflection.Assembly.LoadFile plik jest następnie zablokowany.
Czy ktoś wie o sposobie odblokowania pliku?
Czy przeczytałem o ładowaniu pliku w oddzielnym appdomain? Czy są jakieś pułapki w tym podejściu?System.Reflection.Assembly.LoadFile Blokuje plik

Odpowiedz

63

Jeśli używasz to:

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

To nie zablokuje plik.

Edit


Chociaż to działa, nie jest najlepszym rozwiązaniem, ale lepszy sposób jest dużo bardziej zaangażowani (za dużo po prostu wklejając cały kod tutaj dla niego) .

Stworzyłem publicznego repozytorium Github tutaj ze wszystkimi kodu dla tej operacji odpowiednio:

Loading Assemblies without Locking by using Shadow Copying.

+0

Naprawdę?!? to będzie fajne, jeśli zadziała! +1 –

+0

To działało idealnie! Zostawię to otwarte tylko po to, żeby sprawdzić, czy ktokolwiek obejmuje niektóre z innych punktów ... –

+0

Cieszę się, że zadziałało dla ciebie :) Nigdy nie testowałem metody AppDomain, chociaż przeczytałem trochę o tym, szukając rozwiązania ten bardzo problem. – Pondidum

0

Zastosowanie Microsoft.Cci zawarte w programie Microsoft FxCop

próbek do wersji 1.35:

using Microsoft.Cci; 
// [...] 
AssemblyNode assembly = AssemblyNode.GetAssembly(path); 
Powiązane problemy