.NET 4.0 기능 중 일부를 사용하려는 프로젝트가 있지만 핵심 요구 사항은 2.X에 대해 컴파일 된 System.Data.SQLite 프레임 워크를 사용할 수 있다는 것입니다. 나는 여기에 허용되는 대답 과 같이 이것이 가능하다는 언급을 보았지만 실제로 이것을 달성하는 방법을 보지 못했습니다.
2.X 어셈블리를 참조하면서 4.0 프로젝트를 시도하고 실행하면 다음과 같은 결과를 얻습니다.
혼합 모드 어셈블리는 런타임 버전 ‘v2.0.50727’에 대해 빌드되며 추가 구성 정보가 없으면 4.0 런타임에로드 할 수 없습니다.
어떤 “추가 구성”이 필요합니까?
답변
CLR 2.0 혼합 모드 어셈블리 를 사용 하려면 다음을 포함하도록 App.Config 파일을 수정해야합니다.
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
열쇠는 useLegacyV2RuntimeActivationPolicy
깃발입니다. 이로 인해 CLR은 최신 버전 (4.0)을 사용하여 혼합 모드 어셈블리를로드합니다. 이것이 없으면 작동하지 않습니다.
이것은 혼합 모드 (C ++ / CLI) 어셈블리에만 중요합니다. 에 지정하지 않고 모든 관리되는 CLR 2 어셈블리를로드 할 수 있습니다 app.config
.
답변
이 포럼 게시물 은 .NET Framework 개발자 센터에 있습니다. 통찰력을 제공 할 수 있습니다.
(앱의 구성 파일에 추가하십시오.)
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
답변
대상으로하는 프레임 워크의 버전에 따라 올바른 문자열을 얻기 위해 여기를 볼 수 있습니다.
http://msdn.microsoft.com/en-us/library/ee517334.aspx
.Net 4.0 클라이언트를 대상으로하는 릴리스에서 정식 버전이 필요한 이유를 파악하기 위해 몇 시간을 낭비했습니다. 나는 이것을 결국에 사용했다 :
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"
sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
답변
app.config 파일 을 설정하면 Visual Studio는 App.exe.config 라는 bin 폴더에 사본을 생성합니다 . 배치 중에이를 애플리케이션 디렉토리에 복사하십시오. 분명히 들리지만 놀랍게도 많은 사람들이이 단계를 놓칩니다. WinForms 개발자는 파일을 구성하는 데 사용되지 않습니다 :).
답변
2.0 및 4.0 어셈블리를 함께 사용하는 것은 그리 간단하지 않습니다.
app.config에서 지원되는 프레임 워크 선언의 ORDER는 실제로 혼합 모드가 발생하는 예외에 영향을줍니다. 선언 순서를 뒤집 으면 혼합 모드 오류가 발생합니다. 이것이이 답변의 목적입니다.
따라서 Windows Forms 앱에서 오류가 발생하면 대부분 Windows Forms 앱을 사용해보십시오.
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
<supportedRuntime version="v2.0.50727"></supportedRuntime>
</startup>
또는 프로젝트가 Windows Form이 아닌 경우. 웹 프로젝트에서 이것을 web.config 파일에 추가하십시오.
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v2.0.50727"></supportedRuntime>
</startup>
답변
“useLegacyV2RuntimeActivationPolicy” 속성이 설정된 “startup” 요소를 추가하여 문제를 해결할 수있었습니다 .
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
그러나이를 적용하려면 App.config에서 구성 태그의 첫 번째 하위 요소로 배치해야했습니다 .
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
......
....
답변
위의 내용은 저에게 효과적이지 않았습니다 (웹 응용 프로그램에서 작업 중입니다). 그러나 이것은 …
폴더에서 sgen.exe.config 파일을 편집하십시오 (먼저 생성해야 함). C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools (v7.0 폴더에도 하나 있지만 VS2012를 사용하고 있습니다)
XML의 내용은 다음과 같아야합니다 (이전 답변과 동일).
<?xml version ="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
</startup>
</configuration>