混合模式程序集是根据运行时的版本“v2.0.50727”构建的

时间:2011-06-21 13:06:46

标签: .net visual-studio-2010 .net-4.0 ado.net crystal-reports

我遇到以下异常:

  

混合模式程序集是针对运行时的版本“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

8 个答案:

答案 0 :(得分:226)

尝试在配置节点

下的app.config中使用此确切的启动标记
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <requiredRuntime version="v4.0.20506" />
  </startup>

答案 1 :(得分:78)

该异常清楚地表明.NET 4.0中包含一些.NET 2.0.50727组件。在App.config文件中使用:

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

它解决了我的问题

答案 2 :(得分:5)

请添加属性useLegacyV2RuntimeActivationPolicy =&#34; true&#34;在您的应用程序app.config文件中。

旧值

  <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>

它将解决您的问题。

答案 3 :(得分:4)

我实际上与解决方案存在同样的问题。我已经将.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>

因此,如果降级产生上述错误,则可能需要备份.NET Framework支持的版本。

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

对我来说,在MSTest(VS2015)下运行单元测试时抛出了这个。不得不添加

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

in

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

Mixed-Mode Assembly MSTest Failing in VS2015

答案 6 :(得分:1)

从app.config启用旧版本对我来说不起作用。出于未知原因,我的应用程序未激活V2运行时策略。我在here周围找到了解决方法。

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

答案 7 :(得分:1)

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

来源:SGEN Mixed mode assembly