[.net] 혼합 모드 어셈블리는 런타임 버전 ‘v2.0.50727’에 대해 빌드됩니다.

다음과 같은 예외가 발생합니다.

혼합 모드 어셈블리는 런타임 ‘v2.0.50727’버전에 대해 빌드되며 추가 구성 정보가 없으면 4.0 런타임에로드 할 수 없습니다.

WPF 프로그램에서 Crystal 보고서를 내보내려고 할 때 …

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



답변

구성 노드 아래의 app.config 에서이 정확한 시작 태그를 사용하십시오.

<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 파일에서 다음을 사용하십시오.

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

내 문제를 해결했다


답변

응용 프로그램 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>

문제를 해결할 것입니다.


답변

나는 실제로 솔루션 과 동일한 문제가있었습니다 . .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 지원 버전을 백업해야 할 수 있습니다.


답변

나에게 이것은 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에서 레거시를 활성화해도 효과가 없었습니다. 알 수없는 이유로 내 응용 프로그램이 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();
}
}


답변

프로젝트의 파일이 아닌 다른 구성 파일을 사용하고 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)