Visual Studio“Any CPU”대상은 무엇을 의미합니까?
Visual Studio 2008의 .NET 플랫폼 빌드 옵션과 관련하여 혼란이 있습니다.
"모든 CPU"컴파일 대상은 무엇이며 어떤 종류의 파일을 생성합니까? 이 "Any CPU"빌드의 출력 실행 파일을 조사한 결과 x86 실행 파일입니다 (누군가는 보이지 않을 것입니다). 따라서 실행 파일을 x86에 타겟팅하는 것과 "모든 CPU"에 차이가 있습니까?
내가 주목 한 또 다른 점은 관리되는 C ++ 프로젝트에는이 플랫폼이 옵션으로 없다는 것입니다. 왜 그런 겁니까? 이것이 일반 32 비트 실행 파일 인 "모든 CPU"실행 파일에 대한 나의 의심이 옳다는 것을 의미합니까?
anycpu를는 64 비트 프로세스에로드 할 때, 32 비트는 32 비트 프로세스에로드 조립체 때 64 비트 코드 JIT 것이다.
CPU를 제한하면 다음과 같이 말할 수 있습니다. 어셈블리에서 사용중인 항목 (관리되지 않는 항목)이 32 비트 또는 64 비트를 필요로합니다.
나는 대부분의 중요한 것들이 언급되었다고 생각하지만 한 가지만 추가 할 것이라고 생각했습니다. 모든 CPU 로 컴파일 하고 x64 플랫폼에서 실행하면 32 비트 dll을로드 할 수 없습니다. 앱이 WOW64에서 시작되지 않았지만 해당 dll을 실행해야합니다.
x86으로 컴파일하면 x64 시스템이 WOW64에서 앱을 실행하고 32 비트 dll을로드 할 수 있습니다.
따라서 어느 환경에서든 종속성을 실행할 수 있으면 "Any CPU"를 선택해야하지만 32 비트 종속성이있는 경우 x86을 선택해야합니다. Microsoft 의이 기사는 이것을 조금 설명합니다.
/ CLRIMAGETYPE (CLR 이미지 유형 지정)
덧붙여, 이 다른 Microsoft 설명서 는 x86이 일반적으로 더 이식성있는 선택이라는 데 동의합니다.
거의 모든 장치에서 실행되므로 x86을 선택하는 것이 일반적으로 앱 패키지에 가장 안전한 구성입니다. 일부 장치에서는 x86 구성의 앱 패키지 (예 : Xbox 또는 일부 IoT Core 장치)가 실행되지 않습니다. 그러나 PC의 경우 x86 패키지가 가장 안전하며 장치 배포 범위가 가장 큽니다. Windows 10 장치의 상당 부분이 x86 버전의 Windows를 계속 실행합니다.
다음 은 다양한 빌드 대상을 설명 하는 빠른 개요 입니다.
내 경험에 비추어 볼 때 x86 및 x64 플랫폼 모두에서 실행되는 프로젝트를 구축하려고하고 특정 x64 최적화가없는 경우에는 특별히 "x86"이라고 빌드로 변경합니다.
그 이유는 x64 환경에서 충돌하는 일부 DLL 또는 충돌하는 WOW 코드를 얻을 수 있기 때문입니다. x64 OS는 구체적으로 x86을 지정하여 앱을 순수한 x86 앱으로 취급하고 모든 것이 원활하게 실행되도록합니다.
Visual Studio .NET 플랫폼 대상 설명 기사를 확인하십시오 .
기본 설정 인 "Any CPU"는 어셈블리가 현재 실행중인 CPU에서 기본적으로 실행됨을 의미합니다. 즉, 64 비트 시스템에서 64 비트로 실행되고 32 비트 시스템에서 32 비트로 실행됩니다. 어셈블리가 64 비트 응용 프로그램에서 호출되면 64 비트 어셈블리 등으로 작동합니다.
위의 링크가 끊어진 것으로보고되었으므로 다음과 유사한 설명이있는 다른 기사가 있습니다. AnyCPU가 실제로 .NET 4.5 및 Visual Studio 11의 의미
"모든 CPU"는 프로그램이 시작될 때 .NET Framework가 OS 비트를 기준으로 32 비트 또는 64 비트로 프로그램을 실행할지 여부를 알아냅니다.
x86 과 모든 CPU 에는 차이가 있습니다 . x64 시스템에서 X86 용으로 컴파일 된 실행 파일은 32 비트 실행 파일로 실행됩니다.
의심이가는 한 Visual Studio 2008 명령 줄로 이동하여 다음을 실행하십시오.
dumpbin YourProgram.exe /headers
그것은 당신에게 프로그램의 비트와 더 많은 것을 알려줄 것입니다.
"CLR을 통한 CLR"예약에 대한 크레딧은 다음을 참조하십시오.
https://books.google.co.uk/books?id=36tCAwAAQBAJ&pg=PT38
모든 CPU는 모든 플랫폼에서 작동 함을 의미합니다. 관리 코드가 Java와 유사하기 때문입니다. 런타임에 .NET Framework에서 해석되는 바이트 코드로 컴파일되는 것으로 생각하십시오.
C ++에는 플랫폼 별 머신 코드로 컴파일되므로이 옵션이 없습니다.
AnyCPU를 사용할 때의 의미는 다음과 같습니다.
- 프로세스가 32 비트 Windows 시스템에서 실행되는 경우 32 비트 프로세스로 실행됩니다. IL은 x86 머신 코드로 컴파일됩니다.
- 프로세스가 64 비트 Windows 시스템에서 실행되면 32 비트 프로세스로 실행됩니다. IL은 x86 머신 코드로 컴파일됩니다.
- 프로세스가 ARM Windows 시스템에서 실행되면 32 비트 프로세스로 실행됩니다. IL은 ARM 기계 코드로 컴파일됩니다.
참고 URL : https://stackoverflow.com/questions/516730/what-does-the-visual-studio-any-cpu-target-mean
'development' 카테고리의 다른 글
팩토리와 추상 팩토리 디자인 패턴의 기본 차이점은 무엇입니까? (0) | 2020.02.14 |
---|---|
Node.js에서 스택 추적을 인쇄하는 방법은 무엇입니까? (0) | 2020.02.14 |
"[False, True]의 not (True)"이 False를 반환하는 이유는 무엇입니까? (0) | 2020.02.14 |
ArithmeticException :“비 종료 소수점 확장; (0) | 2020.02.14 |
LINQ를 사용하여 하나의 List <>에서 다른 List <>에없는 항목을 가져옵니다. (0) | 2020.02.14 |