2011-08-07 3 views
0

저는 항상 x86/32 비트를 대상으로하는 것으로 보이는 프로젝트가 있는데 그 이유를 찾을 수 없습니다. 솔루션의 모든 프로젝트를 완료하고 PlatformTarget이 AnyCPU인지 확인했습니다. 나는 '14C 기계 (86)'얻을 모든 바이너리를 검토 DUMPBIN을 사용하여VS 2010 프로젝트는 항상 x86/32 비트를 대상으로합니다.

.

이전에 x86 이었지만 빌드 머신은 x64입니다.

그 밖의 원인이 될 수 있으며 무엇을 검사해야합니까?

+0

플랫폼 별 P/Invoke를 수행하고 있습니까? x86 또는 x64 빌드 머신은 무엇입니까? –

+0

내가 아는 플랫폼 관련 P/Invoke가 없습니다. – Craig

+0

텍스트 편집기에서 .csproj (또는 .vbproj 파일)을 보면 Visual Studio에서 만든 새 프로젝트와 비교할 때 컴파일 대상이 적합하게 보이나요? 아니면 이상하게 보입니까? –

답변

4

당신은 당신이/헤더 옵션을 DUMPBIN.EXE에서 볼 출력에 대해 이야기해야합니다. anycpu를 설정 플랫폼 대상으로 컴파일되어 .NET 어셈블리에서 실행하면 다음과 같습니다 어떤 :

Dump of file ConsoleApplication1.exe 

PE signature found 

File Type: EXECUTABLE IMAGE 

FILE HEADER VALUES 
      14C machine (x86) 
       3 number of sections 
     4E3E987F time date stamp Sun Aug 07 08:51:59 2011 
       0 file pointer to symbol table 
       0 number of symbols 
       E0 size of optional header 
      102 characteristics 
        Executable 
        32 bit word machine 
etc.. 

예, IMAGE_FILE_HEADER.Machine 값이 0x14c로 설정되어, IMAGE_FILE_MACHINE_I386의 값 (일명 86). 이것은 아무런 결과가 아닙니다. 대상과 관련이없는 가장 강력한 힌트가 AnyCPU입니다. x64 운영 체제와 마찬가지로 x86에서도 실행됩니다. corflags.exe 무엇 당신이 정말로 사용할

, 그것은 당신에게 파일의 COR 헤더를 보여줍니다

Version : v4.0.30319 
CLR Header: 2.5 
PE  : PE32 
CorFlags : 1 
ILONLY : 1 
32BIT  : 0 
Signed : 0 

32 비트 플래그가 중요 하나, 0 anycpu를 사용되었음을 나타냅니다. ILONLY = 1은 조립품이 IL 만 포함하고 기계 코드는 포함하지 않음을 나타냅니다. C++/CLI 언어를 사용하여 어셈블리를 만들면 0이됩니다.

사용자 x64로 설정된 이미지 파일을 만들 수 있습니다. .NET 3.0 (일명 .NET 2.0 SP1)에서 소개 된 것 같습니다. 플랫폼 대상을 x64로 설정하면 시스템 유형 필드가 IMAGE_FILE_MACHINE_AMD64 (일명 x64)로 설정됩니다. 이는 프로그램이 32 비트 운영 체제에서 실행되지 않으며 주 스레드가 1MB 스택 대신 4MB 스택으로 시작된다는 점 이외에 별 차이가 없습니다.

this answer에서 설명하는 64 비트 프로세스로 32 비트의 실행 이미지를 회전 마법.

+0

확인할 것입니다. – Craig