Mixed mode assembly is built against version ‘v2.0.50727′ of the runtime
我有以下例外:
0当我试图从我的WPF程序中导出Crystal Report时…
我已经在app.config中添加了以下内容…
1 2 3 4 5 6 | <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> <runtime> <NetFx40_LegacySecurityPolicy enabled="true"/> </runtime> |
有专家能帮忙吗?????
我发现的参考文献:http://www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime
尝试在configuration node下的app.config中使用这个确切的启动标记。
1 2 3 4 | <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> <requiredRuntime version="v4.0.20506" /> </startup> |
该异常清楚地标识了.NET 4.0中包含的一些.NET 2.0.50727组件。在app.config文件中使用:
1 | <startup useLegacyV2RuntimeActivationPolicy="true" /> |
它解决了我的问题
请在应用程序app.config文件中添加属性uselegacyv2runtimeactivationpolicy="true"。
旧价值
1 2 3 | <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/> </startup> |
新价值
1 2 3 | <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/> </startup> |
它会解决你的问题。
我实际上和反解有同样的问题。我将.NET项目升级到.NET 4.0,然后恢复到.NET 3.5。我的项目中的app.config继续存在以下问题,这导致了上述错误:
1 2 3 | <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> |
解决此错误的方法是将其还原为正确的2.0引用,如下所示:
2因此,如果降级导致上述错误,您可能需要备份.NET框架支持的版本。
从app.config启用旧版对我来说不起作用。由于未知原因,我的应用程序没有激活v2运行时策略。我在这附近找到了一份工作。
从app.config启用遗留功能是一种推荐的方法,但在某些情况下,它不能按预期工作。在主应用程序中使用以下代码来强制使用旧版v2策略:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | public static class RuntimePolicyHelper { public static bool LegacyV2RuntimeEnabledSuccessfully { get; private set; } static RuntimePolicyHelper() { ICLRRuntimeInfo clrRuntimeInfo = (ICLRRuntimeInfo)RuntimeEnvironment.GetRuntimeInterfaceAsObject( Guid.Empty, typeof(ICLRRuntimeInfo).GUID); try { clrRuntimeInfo.BindAsLegacyV2Runtime(); LegacyV2RuntimeEnabledSuccessfully = true; } catch (COMException) { // This occurs with an HRESULT meaning //"A different runtime was already bound to the legacy CLR version 2 activation policy." LegacyV2RuntimeEnabledSuccessfully = false; } } [ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")] private interface ICLRRuntimeInfo { void xGetVersionString(); void xGetRuntimeDirectory(); void xIsLoaded(); void xIsLoadable(); void xLoadErrorString(); void xLoadLibrary(); void xGetProcAddress(); void xGetInterface(); void xSetDefaultStartupFlags(); void xGetDefaultStartupFlags(); [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] void BindAsLegacyV2Runtime(); } } |
对我来说,这是在
在里面
混合模式组件MSTEST在VS2015中失败
尝试使用另一个配置文件(不是项目中的配置文件),然后重新启动Visual Studio:
C:Program Files(x86)Microsoft Visual Studio 11.0Common7IDECommonExtensionsMicrosoftTestWindowvstest.ExecutionEngine.x86.exe.config(32位)
或
C:Program Files(x86)Microsoft Visual Studio 11.0Common7IDECommonExtensionsMicrosoftTestWindowvstest.ExecutionEngine.exe.config(64位)