【发布时间】:2010-06-28 21:45:07
【问题描述】:
简单的问题,你可能很容易回答。
我的应用程序的同一输出文件夹中有一个名为“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 记录器并查看第一个正在寻找什么以及在哪里?
-
没有必要,解决方案就是答案。感谢您的宝贵时间。
-
只想指出,此代码将加载到主 AppDomain 并在应用程序的生命周期内锁定目标程序集。为防止这种情况(并实际卸载目标),您需要创建一个动态加载的代理对象,动态加载目标(此代码),最后将可序列化数据(如果需要)打乱回调用应用程序。
标签: c# .net assemblies appdomain