.NET 4 구성에서 'useLegacyV2RuntimeActivationPolicy'의 기능은 무엇입니까?


214

SlimDX를 사용하고 따라서 관리되지 않는 코드가있는 프로젝트를 .NET 4.0으로 변환하는 중에 다음 오류가 발생했습니다.

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

인터넷 검색을 통해 솔루션을 제공했습니다.이를 응용 프로그램 구성에 추가하는 것입니다.

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

내 질문은 useLegacyV2RuntimeActivationPolicy뭐하는거야? 그것에 관한 문서를 찾을 수 없습니다.

답변:


165

약간의 시간 (그리고 더 많은 검색) 후, Jomo Fisher의 블로그 항목 을 찾았습니다 .

최근에 확인한 문제 중 하나는 단계별 런타임 지원으로 인해 .NET 4.0이 이전 혼합 모드 어셈블리에 바인딩하는 방식이 변경되었다는 것입니다. 이러한 어셈블리는 예를 들어 C ++ \ CLI에서 컴파일 된 어셈블리입니다. 현재 사용 가능한 DirectX 어셈블리는 혼합 모드입니다. 이와 같은 메시지가 표시되면 문제가 발생한 것입니다.

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

[한조각]

응용 프로그램에 대한 좋은 소식은 app.config 플래그를 다음과 같이 설정하여 이러한 어셈블리에 대한 .NET 2.0 시대 바인딩으로 돌아가는 옵션이 있다는 것입니다.

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

따라서 런타임이 혼합 모드 어셈블리를로드하는 방식이 변경된 것 같습니다. 이 변경 사항에 대한 세부 사항 또는 해당 변경 사항을 찾을 수 없습니다. 그러나이 useLegacyV2RuntimeActivationPolicy특성은 CLR 2.0로드로 되돌아갑니다.


28
한편 marklios answer ( stackoverflow.com/questions/1604663/… )는이 변경에 대한 철저한 설명으로 연결되는 링크를 제공합니다.
Steffen Opel 2016 년

1
(명시 적 해결책은 위에서 언급 한 언급하지 않지만)이 철저한 설명은 MSDN에서 찾을 수 있습니다 : msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane

내 응용 프로그램의 구성과 UnitTest 프로젝트의 구성 모두에 이것을 추가하고 테스트를 실행할 때 파일로드 오류가 계속 발생하면 어떻게해야합니까? 새로운 질문을 게시해야합니까?
CodenameCain

126

다음은이 속성에 대한 정보가없는 것을 돕기 위해 최근에 작성한 설명입니다. http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx(Internet Archive Wayback Machine 링크)

가장 관련성이 높은 비트를 인용하려면 :

[.NET 설치] v4는“비 효과적”입니다. 설치시 기존 구성 요소의 작동을 변경해서는 안됩니다.

useLegacyV2RuntimeActivationPolicy 속성을 사용하면 기본적으로“레거시 shim API에 대한 종속성이 있습니다. 선택한 런타임과 관련하여 예전 방식으로 작동하게하십시오.”

왜 이것을 기본 동작으로하지 않습니까? 이 동작이 더 호환 가능하며 이전 버전의 코드를 훨씬 쉽게 포팅 할 수 있다고 주장 할 수 있습니다. 기억 하시겠지만 v4 설치에 영향을 미치므로 시스템에 설치된 기존 앱이 손상 될 수 있기 때문에 이것이 기본 동작이 될 수 없습니다.

전체 게시물에서이를 자세히 설명합니다. RTM에서는 이에 대한 MSDN 문서가 더 좋습니다.


user20493, 환경 변수 COMPlus_CLRLoadLogDir을 앱에 쓰기 액세스 권한이있는 빈 디렉토리로 설정하고 결과 로그를 공유하여 앱을 실행할 수 있습니까 (공유하기 전에 모든 PII를 제거하십시오). 무슨 일이 일어나고 있는지 설명하는 데 도움이 될 수 있습니다. config 속성은 앱이 실행되는 컨텍스트에 적용되지 않을 수 있습니다.
Mark Miller

이 링크는 또한 문제의 해결책이 당신을 위해 무엇을하고 있는지, 그리고 무엇을 이해하는 데 도움이 될 것입니다 msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.