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

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)。不得不加

4

在里面

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

混合模式组件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位)