development

.NET 4.0 프로젝트에서 .NET 2.0 혼합 모드 어셈블리를 참조하려면 어떤 '추가 구성'이 필요합니까?

big-blog 2020. 2. 11. 22:33
반응형

.NET 4.0 프로젝트에서 .NET 2.0 혼합 모드 어셈블리를 참조하려면 어떤 '추가 구성'이 필요합니까?


.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>

웹 서비스에서 작업 중이고 v2.0 어셈블리가 WcfSvcHost.exe에 의해로드 된 종속성 인 경우 다음을 포함해야합니다.

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

.. \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ WcfSvcHost.exe.config 파일

이런 식으로 Visual Studio는 런타임에 로더를 통해 올바른 정보를 보낼 수 있습니다.


Visual Studio 2015로 변경했을 때이 문제가 발생 했습니다 . 위의 답변 중 어느 것도 우리에게 효과가 없었습니다. 결국 우리는 다음 구성 파일을 컴퓨터의 모든 sgen.exe 실행 파일에 추가하여 작동하게했습니다.

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

특히이 위치에서 .NET 4.0을 대상으로하는 경우에도

C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 도구


이 구성을 사용했습니다.

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

나를 위해 일했다


Visual Studio 2015로 업그레이드 할 때이 문제가 있었으며 여기에 게시 된 솔루션은 아무런 차이가 없었지만 구성이 옳았지만 변경 위치는 아닙니다. 이 구성을 추가하여이 문제를 해결했습니다.

<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>

받는 사람 : C : \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ TE.ProcessHost.Managed.exe.config

그런 다음 Visual Studio를 다시 시작했습니다.


3-4 시간의 인터넷 검색 후이 문제를 해결했습니다. 나는 다음을 추가했다

<startup selegacyv2runtimeactivationpolicy="true">
  <supportedruntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

그래도 문제가 해결되지 않으면-> Right Click on DLL오류가 발생 하는 프로젝트 참조 에서-> Select Properties-> Check the Run-time Version-> v2.0.50727문제 가있는 경우 해당 문제를 알고 있습니다. 문제는 :-당신은 2.0 Version of respective DLL.해결책입니다 :- delete the respective DLL프로젝트 참조 download the latest version of DLL's에서 해당 웹 사이트에서 최신 버전 DLL 참조의 참조를 추가하면 작동합니다.


이 같은 오류가 발생하여 제안 된 시작 명령문을 솔루션의 다양한 구성 파일에 영원히 추가하여 프레임 워크 불일치를 격리하려고했습니다. 아무것도 효과가 없었습니다. 또한 XML 스키마시작 정보를 추가했습니다 . 그것도 도움이되지 않았습니다. 문제를 일으킨 실제 파일 ( "이동 또는 삭제 된 것"만 표시)을 보면 실제로 라이센스 컴파일러 (LC) 인 것으로 나타났습니다.

문제가있는 licenses.licx 파일을 삭제하면 문제가 해결 된 것 같습니다.


VS 2008에서 VS 2010으로 일부 코드를 마이그레이션하는 동안 비슷한 문제가 발생했습니다. App.config 파일을 변경하면 문제가 해결되었습니다.

<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"
         sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
</configuration>

이 위치에 다음을 추가하십시오 .C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools \ x64 FileName : sgen.exe.config

 <?xml version ="1.0"?>

<configuration>
 <runtime>        
        <generatePublisherEvidence enabled="false"/>    
    </runtime>

    <startup useLegacyV2RuntimeActivationPolicy="true">

                <supportedRuntime version="v4.0" />

    </startup>    

</configuration>

이렇게하면 문제가 해결되었습니다.


나는 사용한다

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

작동하지만 </configuration>태그 직전 에 시작 태그가 제대로 작동하지 않습니다


또한 클래스 라이브러리에 문제가있는 경우 클래스 라이브러리에 문제가있는 경우 주 응용 프로그램에 추가했습니다. 그냥 추가

<startup useLegacyV2RuntimeActivationPolicy="true">

클래스 라이브러리에서 선택하는 기본 응용 프로그램.

참고 URL : https://stackoverflow.com/questions/2455654/what-additional-configuration-is-necessary-to-reference-a-net-2-0-mixed-mode



반응형