无法在新的appdomain中加载C模块

时间:2013-11-21 03:28:43

标签: c# com appdomain

我有一些需要在单独的AppDomain中运行的.NET代码,除了调用COM组件外,一切顺利。
为了说清楚,我写了一个非常简单的repro如下:

AppDomain ap = AppDomain.CreateDomain("newap");
ap.DoCallBack(
    () =>
    {
        //GroupPolicyObject is from assembly microsoft.grouppolicy.management.interop.dll
        GroupPolicyObject newGPO = new GroupPolicyObject();
    });

例外:

  

System.TypeInitializationException:类型初始值设定项   ''抛出一个例外。 --->   .ModuleLoadException:C ++模块失败   在尝试初始化默认appdomain时加载。 --->   System.Runtime.InteropServices.COMException:无效的操作。   (来自HRESULT的异常:0x80131022)at   System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(的Int32   errorCode,IntPtr errorInfo)at   .GetDefaultDomain()在   .DoCallBackInDefaultDomain(IntPtr函数,   Void * cookie)at   .LanguageSupport._Initialize(LanguageSupport *   ) 在   .LanguageSupport.Initialize(LanguageSupport *   )---内部异常堆栈跟踪结束--- at   .ThrowModuleLoadException(字符串   errorMessage,Exception innerException)at   .LanguageSupport.Initialize(LanguageSupport *   ).cctor()

代码可以在默认域中传递,而不应该是与.NET框架版本相关的问题。

我在互联网上做了很多搜索,但是没有有用的解决方案。有没有人有想法是什么问题以及如何实现这个目标?

1 个答案:

答案 0 :(得分:3)

最后我通过添加

修复了它
  <startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>

在配置文件中。

link非常有用。