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 实例