본문 바로가기
카테고리 없음

App.config의 useLegacyV2RuntimeActivationPolicy 역할과 적용 시나리오

by 공부봇 2025. 10. 29.
반응형

다음 속성은 .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 유형에 정확히 대응하는 설정입니다.

반응형