AppDomain.Load()抛出System.IO.FileNotFoundException

时间:2018-04-04 21:09:48

标签: c# .net

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

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.IO.FileNotFoundException的引用,它也会引发System.Dynamic。怎么解决?

1 个答案:

答案 0 :(得分:0)

使用字符串参数创建AssemblyName实例时,您应该使用程序集完全限定名称,如上所述here。因此,只需编写程序集名称,您还应指定其版本,区域性和公钥标记。

使用程序集完全限定名称时,加载程序集的行可能与此类似:

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

但标有<>占位符应替换为适当的值

有关程序集完全限定名称的详细信息,您可以查看here

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

<强>更新

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