我有一些需要在单独的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框架版本相关的问题。
我在互联网上做了很多搜索,但是没有有用的解决方案。有没有人有想法是什么问题以及如何实现这个目标?
答案 0 :(得分:3)
最后我通过添加
修复了它 <startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
在配置文件中。
link非常有用。