繁体   English   中英

AppDomain.Load()引发System.IO.FileNotFoundException

[英]AppDomain.Load() throws System.IO.FileNotFoundException

我尝试创建新的应用程序域并加载新的程序集:

AppDomain newDomain = AppDomain.CreateDomain("SecondaryDomain");

newDomain.AssemblyLoad += (sender, eventArgs) => Console.WriteLine("Assembly loaded");
newDomain.DomainUnload += (sender, EventArgs) => Console.WriteLine("Domain unloaded");

Console.WriteLine($"New domain name: {newDomain.FriendlyName}");
newDomain.Load(new AssemblyName("System.Dynamic"));

foreach (Assembly assembly in newDomain.GetAssemblies())
    Console.WriteLine($"Assembly in secondary domain: {assembly.GetName().Name}");

AppDomain.Unload(newDomain);

即使添加了对System.Dynamic引用,它也会引发System.IO.FileNotFoundException 怎么解决呢?

当创建AssemblyName用字符串参数情况下,你应该使用装配完全合格的名字 ,提到这里 因此,除了只写程序集名称外,还应该指定其版本,区域性和公共密钥令牌。

当使用程序集全限定名时,加载程序集的行可能类似于以下内容:

newDomain.Load(new AssemblyName("System.Dynamic, Version=<version>, Culture=<culture>, PublicKeyToken=<public key token>"));

但是标有<>占位符应该用适当的值代替

有关程序集标准名称的更多信息,您可以在此处查看

有几种方法来获取程序集的完全限定名称。 如果在获取要加载的程序集的全名时遇到任何问题,可以查看以下链接:

更新

正如Hans Passant在评论中提到的那样, System.Dynamic命名空间似乎位于System.Core程序集中,因此请确保您确实要加载哪个程序集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM