簡單的問題,可能很容易讓您回答。在另一個應用程序域加載獨立程序集
我在我的應用程序的同一輸出文件夾中有一個名爲「MigrationSteps.dll」的dll。 我想要做的是,將該程序集加載到新的AppDomain中,並在該DLL內部的類的實例上執行方法。
這裏是我的代碼
string migrationStepsDllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MigrationSteps.dll");
AppDomainSetup appDomainSetup = new AppDomainSetup() { PrivateBinPath = AppDomain.CurrentDomain.BaseDirectory };
Evidence evidence = AppDomain.CurrentDomain.Evidence;
AppDomain appDomain = AppDomain.CreateDomain("MigrationAppDomain", evidence, appDomainSetup);
//NOT WORKING
Assembly assembly = appDomain.Load(@"C:\Output\Debug\OptimeToolbench\MigrationSteps.dll");
//WORKING
Assembly assembly = Assembly.LoadFrom(@"C:\Output\Debug\OptimeToolbench\MigrationSteps.dll"); ****works.
//This part works well
Type type = assembly.GetType("MigrationSteps.Foo");
object foo = Activator.CreateInstance(type);
MethodInfo methodInfo = type.GetMethod("HelloWorld");
methodInfo.Invoke(foo, null);
AppDomain.Unload(appDomain);
每次行表示爲工作不拋出一個
FileNotFoundException異常
。
這是爲什麼?
感謝您的時間。
你可以啓用Fusion記錄器,看看第一個在尋找什麼? – 2010-06-28 21:55:25
這將不是必要的,解決方案就是答案。謝謝你的時間。 – esylvestre 2010-06-29 12:13:21
只是想指出,此代碼將加載到主AppDomain中,並在應用程序的整個生命週期中鎖定目標程序集。爲了防止(並實際卸載目標),您需要創建一個動態加載的代理對象,動態加載目標(此代碼),最後再將可序列化的數據(如果需要的話)洗牌回調用應用程序。 – JoeBrockhaus 2014-12-05 21:24:19