Appdomain.Load(AssemblyName) 引发文件未找到异常

Posted

技术标签:

【中文标题】Appdomain.Load(AssemblyName) 引发文件未找到异常【英文标题】:Appdomain.Load(AssemblyName) raises file not found exception 【发布时间】:2015-04-08 19:35:17 【问题描述】:

这个 sn-p 工作正常:

System.Security.PermissionSet PS = new System.Security.PermissionSet(PermissionState.None);
PS.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, Path));
PS.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
AppDomainSetup ADS = AppDomain.CurrentDomain.SetupInformation;
AppDomain domain = AppDomain.CreateDomain("Pluging", null, ADS, PS, null);
Assembly asm = Assembly.LoadFile(DLLPath); 
domain.Load(asm.FullName);

创建新的 AppDomainSetup 失败:

System.Security.PermissionSet PS = new System.Security.PermissionSet(PermissionState.None);
PS.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, Path));
PS.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
AppDomainSetup ADS = new AppDomainSetup();
ADS.ApplicationBase= Path;
AppDomain domain = AppDomain.CreateDomain("Pluging", null, ADS, PS, null);
Assembly asm = Assembly.LoadFile(DLLPath); 
domain.Load(asm.FullName);

整个事情在一个用 VS2012 开发的 asp.net 项目中运行。

这是我收到的异常:

Could not load file or assembly 'MacroBase, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system 
cannot find the file specified.

你能帮忙吗?

【问题讨论】:

【参考方案1】:

问题是我曾经在存储 dll 之前重命名它们。我仍然不知道解决方法,但我更改了算法,以便可以存储和调用与最初编译时同名的 dll。问题解决了。

更改 AppDomainSetup 的效果如何?在第一个替代方案中,asp.net 在 asp.net 项目的 bin 目录中找到了重命名的 dll(具有原始名称)的副本。

【讨论】:

以上是关于Appdomain.Load(AssemblyName) 引发文件未找到异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 AppDomain.Load 将 DLL 文件加载到新创建的应用程序域中。

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

VS2016 发布项目提示 CS0006 C# Metadata file 'xxxxxxx.dll' could not be found