我发现了很多类似的问题,但找不到任何解决方案。
我有以下代码:
string file = "c:\\abc.dll";
AppDomainSetup ads = new AppDomainSetup();
ads.PrivateBinPath = Path.GetDirectoryName(file);
AppDomain ad2 = AppDomain.CreateDomain("AD2", null, ads);
ProxyDomain proxy = (ProxyDomain)ad2.CreateInstanceAndUnwrap(typeof(ProxyDomain).Assembly.FullName, typeof(ProxyDomain).FullName);
Assembly asm = proxy.GetAssembly(file); // exception File.IO assembly not found is thrown here after succesfully running the funktion GetAssembly.
public class ProxyDomain : MarshalByRefObject
{
public Assembly GetAssembly(string assemblyPath)
{
try
{
Assembly asm = Assembly.LoadFile(assemblyPath);
//...asm is initialized correctly, I can see everything with debugger
return asm;
}
catch
{
return null;
}
}
}
然后我的GetAssembly funktion返回其他类型的最有趣的事情,即使我的自定义可序列化类,一切都很好。有人知道我错过了什么吗?或者只是不可能将加载的程序集返回到另一个域?
谢谢
答案 0 :(得分:0)
我想File.IO
位于主应用程序的bin目录中?如果是这样,你的abc.dll将不知道在哪里找到它(除非你的主应用程序也位于C:\\
)。
你需要做一个
Bind
到AppDomain.AssemblyResolve
事件并手动加载引用的dll AppDomainSetup
的基目录(.NET
知道查找dll的地方之一)File.IO
安装到GAC
(.NET
知道要查找dll的另一个地方)File.IO
的位置添加到AppDomainSetup的私有探测路径(这是.NET
将尝试查找dll的另一个地点)。