[英]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.