混合模式程序集是根据运行库的版本‘ v2.0.50727’生成的

我得到了下面的例外:

混合模式程序集是根据运行库版本‘ v2.0.50727’生成的,如果没有其他配置信息,则不能在4.0运行库中加载。

当我试图从 WPF 程序中导出水晶报告时。

我已经在 app.config 中添加了以下内容..。

<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

153732 次浏览

尝试在配置节点下的 app.config 中使用这个精确的启动标记

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<requiredRuntime version="v4.0.20506" />
</startup>

尝试使用另一个配置文件(不是项目中的配置文件)和 RESTART Visual Studio:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.config
(32-bit)

或者

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.exe.config
(64-bit)

实际上我在 相反解决方案中遇到了同样的问题。我升级了一个。NET 项目。NET 4.0,然后恢复到。NET 3.5.在我的项目中 app.config 继续有以下内容,这些内容导致了上面提到的错误:

<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

解决这个问题的办法是将它恢复到适当的2.0引用,如下所示:

<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>

因此,如果降级导致出现上述错误,您可能需要备份.NETFramework 支持的版本。

这个异常清楚地标识了. NET 4.0中包含的一些.NET 2.0.50727组件:

<startup useLegacyV2RuntimeActivationPolicy="true" />

解决了我的问题

对于我来说,这是在 MSTest(VS2015)下运行单元测试时抛出的

<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>

进去

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\TE.ProcessHost.Managed.exe.config

VS2015中混合模式组装 MSTest 失败

请在应用程序 app.config 文件中添加属性 useLegacyV2RuntimeActivationPolicy = “ true”。

旧价值观

  <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
</startup>

新价值

  <startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
</startup>

这能解决你的问题。

启用 app.config 的遗产对我来说不起作用。由于未知的原因,我的应用程序没有激活 V2运行时策略。我在 给你找到了一份工作。

启用 app.config 的遗留功能是一种推荐的方法,但是在某些情况下它并不能像预期的那样工作。在您的主应用程序中使用以下代码强制执行遗留 V2策略:

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();
}
}

如果错误发生在错误列“ File”为 SGEN 的情况下,那么修复程序需要位于 sgen.exe旁边的 sgen.exe.config文件中。例如,对于 VS2015,创建 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config。最小文件内容: <configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

资料来源: 混合模式组件