Chcę załadować do nowego zestawu AppDomain
, który ma złożone drzewo odniesień (MyDll.dll -> Microsoft.Office.Interop.Excel.dll -> Microsoft.Vbe.Interop.dll -> Office.dll -> stdole .dll)Jak załadować zespół do aplikacji AppDomain z rekurencyjnie wszystkimi odwołaniami?
Z tego co zrozumiałem, gdy zespół jest ładowany do AppDomain
, jego referencje nie zostaną załadowane automatycznie i muszę je załadować ręcznie. Więc kiedy zrobić:
string dir = @"SomePath"; // different from AppDomain.CurrentDomain.BaseDirectory
string path = System.IO.Path.Combine(dir, "MyDll.dll");
AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
setup.ApplicationBase = dir;
AppDomain domain = AppDomain.CreateDomain("SomeAppDomain", null, setup);
domain.Load(AssemblyName.GetAssemblyName(path));
i dostał FileNotFoundException
:
Nie można załadować pliku lub zestawu 'MyDll, Version = 1.0.0.0, Culture = neutral, TokenKluczaPublicznego = null' lub jeden z jego zależności. System nie może odnaleźć określonego pliku.
Myślę, że kluczową częścią jest jedna z jego zależności.
Ok, zrobię następny przed domain.Load(AssemblyName.GetAssemblyName(path));
foreach (AssemblyName refAsmName in Assembly.ReflectionOnlyLoadFrom(path).GetReferencedAssemblies())
{
domain.Load(refAsmName);
}
Ale dostał FileNotFoundException
znowu na innym (odwołanie) montażu.
Jak ładować rekurencyjnie wszystkie odwołania?
Czy przed załadowaniem zespołu głównego trzeba utworzyć drzewo referencyjne? Jak uzyskać referencje zespołu bez jego ładowania?
Załadowałem już takie zestawy wiele razy wcześniej, nigdy nie musiałem ręcznie ładować wszystkich jego odniesień. Nie jestem pewien, czy przesłanka tego pytania jest prawidłowa. – Mick