如何在具有不同NET版本的AppDomain中加载dll

时间:2012-10-20 16:59:09

标签: appdomain appdomainsetup

我有一些使用Net 2.0构建的第三方程序集。虽然我当然可以在net 4中引用该程序集,但运行该应用程序会导致各种奇怪的错误。

所以我虽然在一个单独的应用程序域中加载它将解决问题,但事实并非如此。我假设它仍然使用Net 4运行时执行。有没有办法强制在不同的网络版本中执行应用程序域?

我使用CreateInstanceFromAndUnwrap而不是调用代理。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您可以使用supportedRuntime配置元素来设置AppDomain的CLR版本。如果您不想将其添加到app.config,则可以添加第二个.config文件,该文件将在构建新AppDomain期间使用。有关详细信息,请查看AppDomainSetup.ConfigurationFile

答案 1 :(得分:0)

  1. 创建AppDomain。并在新域中创建DomainManager:MarshalByRef对象。
  2. DomainManager加载程序集创建(新)域。
  3.   

    AppDomainSetup ads = new AppDomainSetup();             AppDomain managerAD = AppDomain.CreateDomain(“AD1”,null,ads);

          Assembly asm = managerAD.Load(typeof(DomainManager).Assembly.FullName);
          string typeName = typeof(DomainManager).FullName;
    
          DomainManager manager = (DomainManager)managerAD.CreateInstanceAndUnwrap(asm.GetName().Name,
    
         

    的typeName);       公共类DomainManager:MarshalByRefObject         {

        public void GetAppDomain(string assemblyFileName)
        {
          Assembly asm2 = Assembly.LoadFrom(assemblyFileName);
          Type neededType = asm2.GetType(<paste type>);
          object instance = Activator.CreateInstance(procType);
        }