[.net] .NET 4 구성에서 ‘useLegacyV2RuntimeActivationPolicy’의 기능은 무엇입니까?

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

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

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

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

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



답변

약간의 시간 (그리고 더 많은 검색) 후, 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로드로 되돌아갑니다.


답변

다음은이 속성에 대한 정보가없는 것을 돕기 위해 최근에 작성한 설명입니다.
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 문서가 더 좋습니다.


답변