2011-08-07 10 views
0

私は常にx86/32ビットをターゲットにしているようなプロジェクトがあり、その理由を見つけることはできません。ソリューションのすべてのプロジェクトを完了し、PlatformTargetがAnyCPUであることを確認しました。VS 2010プロジェクト常にx86/32ビットをターゲットにしています

dumpbinを使ってすべてのバイナリを調べると、 '14C machine(x86)'と表示されます。

以前はx86でしたが、ビルドマシンはx64です。

これ以外に何が起こる可能性があり、何を確認すればよいですか?

+0

プラットフォーム固有のP/Invokeを実行していますか? x86またはx64のビルドマシンとは何ですか? –

+0

私が知っているプラ​​ットフォーム固有のP/Invokeはありません。 – Craig

+0

テキストエディタで.csproj(または.vbprojファイル)を見ると、Visual Studioで作成された新しく作成されたプロジェクトと比較して、コンパイル対象が賢明に見えますか?または彼らは奇妙に見える? –

答えて

4

Dumpbin.exeに表示される出力については、/ headersオプションを使用して説明する必要があります。どの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、(x86の別名)IMAGE_FILE_MACHINE_I386の値に設定されています。これは重要ではありません。ターゲット名AnyCPUは、関係のない最も強いヒントかもしれません。 x64オペレーティングシステムと同様に、x86でも動作します。 corflags.exeであるあなたが本当に使いたい

は、それはあなたのファイルにCORヘッダを示しています

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

32BITフラグが重要な一つであり、0はAnyCPUが使用されたことを示しています。 ILONLY = 1は、アセンブリにILのみが含まれ、マシンコードは含まれないことを示します。 C++/CLI言語でアセンブリを作成すると、0になります。

マシンをx64に設定してイメージファイルを作成します。私はそれが.NET 3.0(別名.NET 2.0 SP1)で導入されたと思います。プラットフォームターゲットをx64に設定すると、マシンタイプフィールドはIMAGE_FILE_MACHINE_AMD64(別名x64)に設定されます。これは、プログラムが32ビットオペレーティングシステム上で実行されないことと、メインスレッドが1 MBスタックの代わりに4 MBスタックで開始されるという点を除いて、大きな違いはありません。

32ビットの実行可能イメージを64ビットプロセスに変換する魔法は、this answerに記載されています。

+0

これをチェックします。 – Craig

関連する問題