.net 混合模式组装是根据版本‘;v2.0.50727′;运行时的
我得到以下异常: 混合模式程序集是根据运行时版本“v2.0.50727”构建的,如果没有其他配置信息,则无法在4.0运行时中加载 当我试图从我的WPF程序导出crystal report时 我已经在app.config中添加了以下内容.net 混合模式组装是根据版本‘;v2.0.50727′;运行时的,.net,visual-studio-2010,.net-4.0,ado.net,crystal-reports,.net,Visual Studio 2010,.net 4.0,Ado.net,Crystal Reports,我得到以下异常: 混合模式程序集是根据运行时版本“v2.0.50727”构建的,如果没有其他配置信息,则无法在4.0运行时中加载 当我试图从我的WPF程序导出crystal report时 我已经在app.config中添加了以下内容 <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>
有专家可以帮忙吗
我找到的参考资料:
尝试在“配置”节点下的app.config中使用此确切的启动标记
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<requiredRuntime version="v4.0.20506" />
</startup>
尝试使用另一个配置文件(不是项目中的配置文件)并重新启动Visual Studio:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.config
(32-bit)
或
实际上,我对逆解也有同样的问题。我将一个.NET项目升级到.NET4.0,然后又恢复到.NET3.5。我的项目中的app.config继续存在以下问题,导致上述错误:
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
解决此错误的解决方案是将其恢复为正确的2.0参考,如下所示:
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
因此,如果降级导致上述错误,您可能需要备份.NET Framework支持的版本。异常清楚地标识了.NET 4.0中包含的某些.NET 2.0.50727组件。在App.config文件中,使用以下命令:
<startup useLegacyV2RuntimeActivationPolicy="true" />
它解决了我的问题对于我来说,这是在
MSTest
(VS2015)下运行单元测试时抛出的。不得不补充
<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>
在
C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\TE.ProcessHost.Managed.exe.config
请在应用程序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>
新值
<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.config
文件中,位于SGEN.exe
旁边。例如,对于VS 2015,创建C:\Program Files(x86)\Microsoft SDK\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config
。最小文件内容:
来源:实际上,你应该在你的app.*exe**.config中添加一些棘手的行。编译器将在生成时重命名它。唯一需要的部分是useLegacyV2RuntimeActivationPolicy=“true”。您可以保留当前的框架版本。当Ben说,我遗漏了额外的requiredRuntime,问题就消失了时,我可以加倍。此链接还可以帮助您了解问题所在,以及解决方案为您做了什么:我将对此进行扩展,因为绕过驻留在应用程序中且通常需要用于其他应用程序配置的本机
.config
不是一个好的解决方案。对于单元测试,配置更改必须发生在vstest.executionengine.x86.exe.config文件中,因为该可执行文件是您正在测试的代码的父进程。这个问题应该在Visual Studio 2012 SP4中修复,但它仍然存在于我的计算机上。(注意,您不必重新启动Visual Studio,更改才能生效。您只需结束vstest上的任务。*进程,因为即使在单元测试完成后,这些进程仍会挂起。)向上解释这一点,因为它会将我带到我必须更改它的实际位置。这需要一个结束斜杠
重要提示:如果错误列“File”为SGEN
,则修复程序需要位于SGEN.exe.config
旁边的文件SGEN.exe
。例如,对于VS 2015,创建C:\Program Files(x86)\Microsoft SDK\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config
。来源:最小文件内容:
请注意,您可能不仅有“C:\Program Files(x86)\Microsoft SDK\Windows\v10.0A\bin\NETFX 4.6 Tools\”,而且在该目录下,还有一个“x64”目录,其中还包含一个sgen.exe,可能还有几个其他sgen副本/版本,它们都位于不同的路径中,取决于您安装的VS的数量和版本。@ToolmakerSteve请将您的评论作为答案发布,以便我对其进行投票;其他答案对我都没有帮助。@Malcolm-好的,很高兴知道它对你有用。谢谢你的评论!它对我有用