Mam domena aplikacji podrzędnej, w której chcę załadować niektóre biblioteki DLL przy uruchamianiu i zwalnianiu plików, aby każdy mógł je usunąć.Załaduj zestaw do potomnej aplikacji AppDomain i zwalniaj plik DLL
Na rozruchu zrobić
Loader al = (Loader)domain.CreateInstanceAndUnwrap(
typeof(Loader).Assembly.FullName,
typeof(Loader).FullName);
al.Load(path)
do następnej klasy.
class Loader : MarshalByRefObject
{
internal void Load(string path)
{
Assembly assembly;
try
{
assembly = Assembly.Load(File.ReadAllBytes(path));
}
catch (Exception) { return; }
}
internal UseType(string fullyQualifiedTypeName)
{
Type userType = Type.GetType(fullyQualifiedTypeName);
}
}
Później powołać UseType
i uzyskać prawidłowy typ, ale nie jestem w stanie usunąć plik dłużej, bo to tak jakby dziecko app-domena została zablokowana dll.
Zasadniczo chcę uzyskać pamięć podręczną pliku zespołu podczas uruchamiania, a następnie użyć wywołań GetType
, aby faktyczny plik dll został zwolniony.
Czy naprawdę można osiągnąć coś takiego?
CreateInstanceAndUnwrap() pobiera również typ załadowany do podstawowej aplikacji. Który blokuje plik. Użyj typu interfejsu zdefiniowanego w oddzielnym zestawie. –
Moim zadaniem jest posiadanie pliku zawierającego program ładujący, który ma być zablokowany. Lub dowolny typ używany w metodach Loadera spowoduje, że jego montaż zostanie załadowany w nadrzędnej domenie aplikacji? – Egor
Zobacz także: http://stackoverflow.com/questions/6480140/appdomain-shadow-copying-not-working-original-ssemblyblocks-locked – cdiggins