.NET 응용프로그램은 기본적으로 특정 OS 및 CPU Architecture (x86, x64, Itanium) 을 고려하지 않아도 된다. 하지만 Native code 로 작성된 모듈과 연동을 하다보니 OS 및 CPU Architecture 도 신경을 써주게 되었다. 

.NET 응용프로그램에서 C/C++ dll 을 로드하는 경우가 있었는데 이 dll이 x64 환경에서 WOW 환경에서만 올바르게 동작이 되었다. 결국 .NET 응용프로그램을 WOW로 실행시켜야 한다. 

.NET 응용프로그램 프로젝트의 플랫폼 옵션을 변경해 주면 된다. 

MSDN 내용을 발취하면,

  • x86을 사용하면 어셈블리가 32비트, x86 호환 CLR에서 실행되도록 컴파일됩니다.

  • Itanium을 사용하면 어셈블리가 Itanium 프로세서 탑재 컴퓨터의 64비트 CLR에서 실행되도록 컴파일됩니다.

  • x64를 사용하면 어셈블리가 AMD64 또는 EM64T 명령 집합을 지원하는 컴퓨터의 64비트 CLR에서 실행되도록 컴파일됩니다.

  • anycpu(기본값)를 사용하면 어셈블리가 모든 플랫폼에서 실행되도록 컴파일됩니다.


64비트 Windows 운영 체제의 경우

  • /platform:x86으로 컴파일된 어셈블리는 WOW64에서 실행되는 32비트 CLR에서 실행됩니다.

  • /platform:anycpu로 컴파일된 실행 파일은 64비트 CLR에서 실행됩니다.

  • /platform:anycpu로 컴파일된 DLL은 이 DLL이 로드된 프로세스와 동일한 CLR에서 실행됩니다.




*)
/platform:x86 으로 컴파일된 DLL,
/platform:anycpu 으로 컴파일된 어셈블리(exe)가 있다.
이 어셈블리에서 참조 추가로 x86으로 컴파일된 DLL을 참조 추가하였을때, x64 에서 어셈블리를 실행하면 x86 DLL 사용 시 런타임 예외가 발생한다.


Posted by six605
,