将 dll 加载到另一个域异常中

本文关键字:异常 另一个 dll 加载 | 更新日期: 2023-09-27 18:32:43

嗨,我

正在将dll加载到另一个域中,加载到该域时它工作正常,但是当我想通过代理对象从该域获得一些信息时,它给了我例外,下面是用于审查的代码是否有任何错误的步骤???

 public class AssemblyProxy
    {
        System.Type[] _types;
    public System.Type[] GetTypes() 
    {
        return _types;
    }
    public string FullName { get; set; }
    public void LoadAssembly(string path)
    {
        try
        {
            Evidence evidence = new Evidence(AppDomain.CurrentDomain.Evidence);
            AppDomain TestDomain = AppDomain.CreateDomain("AssemblyDomain", evidence, AppDomain.CurrentDomain.BaseDirectory, System.IO.Path.GetFullPath(path), true);
            Proxy _asmProxy = (Proxy)TestDomain.CreateInstanceFromAndUnwrap(AppDomain.CurrentDomain.BaseDirectory+"Common.dll", typeof(Proxy).FullName);
            _asmProxy.LoadAssembly(path);
            FullName = _asmProxy.FullName;
            _types = _asmProxy.GetTypes(); //Here i got Exception [Can not load file or assembly]
            AppDomain.Unload(TestDomain);
        }
        catch (Exception ex) 
        {
        }
    }
}
class Proxy : MarshalByRefObject
{
    System.Type[] _types;
    public string FullName { get; set; }
    public System.Type[] GetTypes() 
    {
        return _types;                    
    }
    public void LoadAssembly(string path) 
    {
        System.Reflection.Assembly _assembly = System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path));
        _types = _assembly.GetTypes();
        FullName = _assembly.FullName;
    }
}

我得到的例外是:

无法加载文件或程序集

将 dll 加载到另一个域异常中

我解决这个问题的方法是调用 LoadFrom(而不是 Load)并在 AppDomain 的上下文中:

sDomain = AppDomain.CreateDomain(DOMAIN_NAME);
sDomain.DoCallBack(AppDomainCallback);
// runs in the context of the AppDomain
private void AppDomainCallback()
{
  Assembly assembly = Assembly.LoadFrom(mAssemblyName);
}

我已经通过阅读以下博客文章解决了这个问题: 就我而言,问题是我正在从不允许的新域返回System.Type对象,您可以从代理对象返回字符串,但不能从System.Type对象返回字符串

链接

相关文章: