为什么我找不到那个集会

本文关键字:找不到 为什么 | 更新日期: 2023-09-27 17:54:25

AppDomainSetup domainSetup = new AppDomainSetup();
// Assign a global path that includes "prinergyweb'bin"
domainSetup.ApplicationBase = @"E:'Projects'IPP'main'prinergyweb";
domainSetup.PrivateBinPath = @"bin";
AppDomain newDomain = AppDomain.CreateDomain("Test", null, domainSetup);
newDomain.Load("A");

我确保所有的路径都是正确的,但它仍然抛出一个异常"FileNotFound"......为什么?你认为有多少原因会导致这个问题?(我已经确定"a.d l ll"存在)。

其他信息:

PS1: My disc is compacted

PS2: a .dll不是强命名的dll。

PS3:路径是我的PerForce的映射路径

为什么我找不到那个集会

问题是AppDomain.Load组装被加载到两个域中。

如果当前AppDomain对象表示应用程序域A,并且从应用程序域B调用Load方法,则将程序集加载到两个应用程序域中。

当前域需要知道这些程序集并加载它们。

如果你使用程序集绑定日志查看器,你会看到新创建的域从私有bin路径加载程序集,但当前的应用程序域不会。

这就是为什么你会得到"File not found"的异常。

来自MSDN AppDomain。加载方法

此方法应仅用于将程序集加载到当前应用程序域。提供这种方法是为了方便不能调用静态程序集的互操作性调用者。负载方法。要将程序集加载到其他应用程序域中,请使用方法,如CreateInstanceAndUnwrap。

如果您想从不同的位置加载一些程序集,您应该像我在这个答案中所说的那样做:从资源加载的程序集引发无法加载文件或程序集并处理AppDomain。AssemblyResolve事件