我尝试创建新的应用程序域并加载新程序集:
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
。怎么解决?
答案 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
程序集内,因此请确保您确实要加载哪个程序集。