AppDomain 加载错误

Posted

技术标签:

【中文标题】AppDomain 加载错误【英文标题】:AppDomain Loading Error 【发布时间】:2017-10-10 01:24:23 【问题描述】:

我遇到了加载问题,无法解决。 我得到的错误如下:

无法加载文件或程序集'BuildTest,版本=1.0.0.4, Culture=neutral, PublicKeyToken=null' 或其依赖项之一。这 系统找不到指定的文件。":"BuildTest, Version=1.0.0.4, Culture=neutral, PublicKeyToken=null"

我写的代码如下:

var buildTestPath = @"D:\BuildTest\bin\Debug";

AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationName = "BuildTest";
setup.ShadowCopyFiles = "true";
setup.PrivateBinPath = buildTestPath;

AppDomain domain = AppDomain.CreateDomain("MyDomain", AppDomain.CurrentDomain.Evidence, setup);

var assemblyFile = Path.Combine(buildTestPath, "BuildTest.dll");
var assemblyName = AssemblyName.GetAssemblyName(assemblyFile);
var assembly = domain.Load(assemblyName);

Type myType = assembly.GetType("BuildTest.Class1");
MethodInfo myMethod = myType.GetMethod("MethodA");
object obj = Activator.CreateInstance(myType);
myMethod.Invoke(obj, null);

AppDomain.Unload(domain);

谁能帮帮我?

谢谢

【问题讨论】:

您是否检查过此路径中是否有 BuildTest.dll - D:\BuildTest\bin\Debug? PrivateBinPath 必须是AppDomain.BaseDirectory 的子目录。另见answer。如果是这种情况,请使用fuslogvw.exe 获取有关程序集加载错误的详细信息。 【参考方案1】:

AppDomain.Load 只能用于将程序集加载到当前 AppDomain。

要将程序集(并创建该类型的实例)加载到新创建的域中,AppDomain 类会公开像 CreateInstanceAndUnwrap 这样的方法,您应该在此处使用。

【讨论】:

我创建了这样的代理:ProxyClass c = (ProxyClass)(domain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().CodeBase, typeof(ProxyClass).FullName)); Console.WriteLine(c == null); var dd = c.GetType(); var assemblyFilePath = Path.Combine(buildTestPath, "BuildTest.dll"); var assm = c.GetAssembly(assemblyFilePath); var types = assm.ExportedTypes; AppDomain.Unload(域); 我制作了代理并通过代理创建了程序集,但我得到了相同的结果。我想做的是:我想使用 appdomainsetup 创建单独的域并加载 some.dll 并获取类型并在卸载后删除 some.dll。我尝试了许多不同的方法,但对我没有任何效果。

以上是关于AppDomain 加载错误的主要内容,如果未能解决你的问题,请参考以下文章

AppDomain 程序集加载导致致命的执行引擎错误 (6B3979C6) (80131506)

vb.net编程,如何使用 appdomain 实现某进程DLL动态加载和卸载?

默认 AppDomain 与新 AppDomain 中不同的依赖解析行为加载程序集

从另一个 WPF 应用程序加载 WPF 应用程序程序集,出现错误:无法在同一个 AppDomain 中创建多个 System.Windows.Application 实例

AppDomain 卷影副本 - 加载/卸载动态加载的 Dll

进程和 AppDomain 加载/卸载