0

我发现了很多类似的问题,但找不到任何解决方案。

我有以下代码:

    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 函数返回了一些其他类型,甚至是我的自定义可序列化类,一切都很好。有人知道我错过了什么吗?或者将加载的程序集返回到另一个域是不可能的?

谢谢

4

1 回答 1

0

我想File.IO是坐在你的主应用程序的 bin 目录中?如果是这样,您的 abc.dll 将不知道在哪里可以找到它(除非您的主应用程序也在其中C:\\)。

您需要执行以下操作之一

  1. BindAppDomain.AssemblyResolve事件并手动加载引用的dll
  2. 更改AppDomainSetup的基本目录(这是.NET知道查找 dll 的地方之一)
  3. 安装File.IOGAC(这是另一个.NET知道寻找 dll 的地方)
  4. 将 的位置添加File.IO到您的 AppDomainSetup 的私有探测路径(这是另一个.NET尝试查找 dll 的地方)。
于 2012-12-08T20:01:26.507 回答