我正在尝试在我的控制台应用程序中的新AppDomain中加载程序集A,其中包含相同的基目录和RelativePath作为默认域。
当我使用CreateInstanceFrom从A创建类型时,它成功但当我使用CreateInstanceAndUnwrap
时,它无法找到带有FileLoadException
的程序集文件。请记住,程序集A.MyType
在其构造函数中调用程序集B.Typeb
中的方法。两个程序集文件都出现在执行程序集的父文件夹中的相同路径(.. \ Mytypes)
_domain = AppDomain.CreateDomain("MyDomain" + Guid.NewGuid(), null, AppDomain.CurrentDomain.SetupInformation);
var mytype = _domain.CreateInstanceAndUnwrap(pathtoassembly, typename);
以下是错误消息:
无法加载文件或程序集'.. \ Mytypes \ A.dll'或其中一个依赖项。给定的程序集名称或代码库无效。 (来自HRESULT的异常:0x80131047)`
答案 0 :(得分:15)
AppDomain.CreateInstanceAndUnwrap将在Load上下文中加载程序集,而AppDomain.CreateInstanceFromAndUnwrap将在LoadFrom上下文中加载程序集。
它与CreateInstanceFromAndUnwrap方法一起使用的原因是LoadFrom上下文将尝试解析Mytypes文件夹中的程序集。 Load上下文不会。它将尝试仅从AppDomain的GAC,BaseDirectory和RelativeSearchPath解析。
您拥有的一些选项是:
我建议使用2选项,它将允许您想要的文件夹结构以及通常优先选择的Load上下文。