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


163

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

혼합 모드 어셈블리는 런타임 '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


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. 소스 : SGEN 혼합 모드 어셈블리 최소 파일 내용 :<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve

1
"C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \"뿐만 아니라 그 아래에 sgen이있는 'x64'디렉토리가있을 수 있습니다. exe, 설치 한 VS 버전 및 버전에 따라 서로 다른 경로에 sgen의 다른 사본 / 버전이있을 수 있습니다.
MickeyfAgain_BeforeExitOfSO

@ToolmakerSteve 의견을 올리려면 답변으로 댓글을 올리십시오. 다른 답변들 중 어느 것도 나를 도우 지 못했습니다.
Malcolm

답변:


238

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

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

2
실제로 YourApp. ** exe **. config에 까다로운 줄을 추가해야합니다.
AntonK

24
app.config입니다. 컴파일러는 빌드시 이름을 바꿉니다.
Jeff

65
필요한 유일한 부분은 useLegacyV2RuntimeActivationPolicy = "true"입니다. 현재 프레임 워크 버전을 그대로 둘 수 있습니다.
Ben Gripka

3
벤이 말하면 두 배로 늘릴 수 있습니다. 필요한 추가 런타임을 생략하고 문제가 사라졌습니다.
Mike Malter

1
이 링크는 또한 문제의 해결책이 당신을 위해 무엇을하고 있는지, 그리고 무엇을 이해하는 데 도움이 될 것입니다 msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane

85

예외는 .NET 4.0에 포함 된 일부 .NET 2.0.50727 구성 요소를 명확하게 나타냅니다. App.config 파일에서 다음을 사용하십시오.

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

내 문제를 해결했다


마감 슬래시가 필요합니다<startup useLegacyV2RuntimeActivationPolicy="true" />
Jonn

8

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

문제를 해결할 것입니다.


그것이 당신을 위해 일했다는 것을 알고 반갑습니다. 귀하의 의견에 감사드립니다!
Brijesh Kumar Tripathi

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 지원 버전을 백업해야 할 수 있습니다.


1

나에게 이것은 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 실패


1

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

1

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

.config응용 프로그램에 상주하고 일반적으로 추가 응용 프로그램 구성에 필요한 기본 을 우회하는 것은 좋은 해결책 이 아니기 때문에 이것을 확장 할 것입니다.
atconway

3
단위 테스트의 경우 실행 파일이 테스트중인 코드의 상위 프로세스이므로 vstest.executionengine.x86.exe.config 파일에서 구성 변경이 발생해야합니다. 이 문제는 Visual Studio 2012 SP4에서 수정 된 것으로 생각되지만 여전히 내 컴퓨터에 있습니다.
Brandon S

변경 사항을 적용하기 위해 Visual Studio를 다시 시작할 필요는 없습니다. 단위 테스트가 완료된 후에도 중단되기 때문에 vstest. * 프로세스에 대한 작업을 종료하면됩니다.
Brandon S

이것을 변경하면 실제 장소로 연결됩니다.
Janis S.

1

오류 열 "파일"에서 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 혼합 모드 어셈블리

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.