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 문서가 더 좋습니다.