Załaduję wszystkie biblioteki DLL z określonego katalogu "rozszerzeń" w nowym AppDomain, aby uzyskać z nich informacje związane z odbiciem.Wyjątek od otrzymania odwołania do zestawu z innej aplikacji AppDomain
To co usiłuję:
stworzyłem nową bibliotekę AssemblyProxy
w moim rozwiązanie, które ma tylko tę klasę:
public class AssemblyProxy : MarshalByRefObject
{
public Assembly LoadFile(string assemblyPath)
{
try
{
return Assembly.LoadFile(assemblyPath);
}
catch
{
return null;
}
}
}
I upewnić się, że biblioteka DLL jest obecny wewnątrz moich „rozszerzeń” informator. Następnie używam następującego kodu, aby załadować wszystkie zespoły z katalogu "extensions" do nowego AppDomain
.
foreach(string extensionFile in Directory.GetFiles(ExtensionsDirectory, "*.dll"))
{
Type type = typeof(AssemblyProxy.AssemblyProxy);
var value = (AssemblyProxy.AssemblyProxy) Domain.CreateInstanceAndUnwrap(
type.Assembly.FullName,
type.FullName);
var extensionAssembly = value.LoadFile(extensionFile);
types.AddRange(extensionAssembly.GetTypes());
}
Niektóre biblioteki DLL są ładowane z powodzeniem, ale w niektórych bibliotek DLL jest wyjątek tak:
Could not load file or assembly 'Drivers, Version=2.3.0.77, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
EDIT: wyjątek nie zostanie zgłoszony w nowym AppDomain. Biblioteka DLL zostanie pomyślnie załadowana w nowej domenie AppDomain. Wyjątek zostanie zgłoszony, gdy odwołanie do zestawu zostanie zwrócone do głównej/wywołującej domeny aplikacji. Czy główna/wywołująca AppDomena próbuje załadować zespół samodzielnie po otrzymaniu odwołania?
Dzięki.
czego spróbowałeś? –
Czy ["ReflectionLoadOnly"] (http://msdn.microsoft.com/en-us/library/ms172331 (v = vs.100) .aspx) nie wystarcza do swoich (niezliczonych) celów? –
Co jest nie tak z [CreateInstanceAndUnwrap] (http://msdn.microsoft.com/en-us/library/system.appdomain.createinstancefromandunwrap.aspx)? – Algirdas