반응형
다음 속성은 .NET Framework 4.x 프로세스에서, .NET 2.0/3.5(v2 CLR)용으로 빌드된 혼합 모드(C++/CLI) 어셈블리를 로드할 수 있게 해 주는 “레거시 활성화 정책” 스위치입니다.
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
핵심 역할
- 기본 동작 변경: .NET 4부터는 혼합 모드(v2 대상) 어셈블리를 기본 설정만으로는 로드하지 않습니다.
useLegacyV2RuntimeActivationPolicy="true"를 주면 v4 CLR이 기동되더라도 v2 CLR과의 공존/호환 경로를 열어 v2 타깃 혼합모드 DLL을 로드/활성화할 수 있습니다. - 해결 대상: 메시지
“혼합 모드 어셈블리는 … ‘v2.0.50727’에 대해 빌드되며, 추가 구성 정보 없이 ‘4.0’ 런타임에 로드할 수 없습니다.”
와 같은 FileLoadException을 해결하는 설정입니다.
언제 필요한가
- 실행 프로세스는 .NET Framework 4.x이고,
- 참조(또는 동적 로드)하는 C++/CLI 혼합 모드 어셈블리가 .NET 2.0/3.5(v2 CLR) 타깃일 때.
순수 C# 어셈블리(IL-only) 간 버전 호환 문제와는 별개입니다. 주로 네이티브 라이브러리를 래핑한 C++/CLI 혼합모드에서 필요합니다.
적용 범위/특징
- 프로세스 전체에 적용: 해당 exe의 App.config(실행 시 yourapp.exe.config)에 있을 때만 효력.
- .NET Framework 전용: .NET Core/5+ 런타임에는 효과 없음.
- 보안/정책: 오래된 라이브러리에서 구 정책을 기대한다면가 추가로 필요할 때가 있으나, 필수는 아님(최소 적용 원칙 권장).
- <runtime><NetFx40_LegacySecurityPolicy enabled="true"/></runtime>
주의사항
- 플랫폼 일치: 혼합모드 DLL이 x86이면 호출 프로세스도 x86으로 빌드해야 합니다(AnyCPU로 64비트 실행 시 로드 실패 가능).
- 장기 해법 아님: 가능하면 해당 C++/CLI 프로젝트를 .NET 4 이상으로 재빌드(또는 최신 버전 교체)하는 것이 바람직합니다.
- 진단: 여전히 실패하면 Fuslogvw.exe(Fusion Log)나 FileLoadException.FusionLog로 어느 DLL에서 막히는지 확인하세요.
요약
useLegacyV2RuntimeActivationPolicy="true" =
“.NET 4 프로세스에서 v2 타깃 혼합모드(C++/CLI) 어셈블리를 레거시 방식으로 로드 허용” 스위치입니다.
현재 겪으신 FileLoadException 유형에 정확히 대응하는 설정입니다.
반응형