[Windows] アセンブリーの対応CPU(x86, x64)を確認

VS2010上で.NET Framework 3.5をターゲットにして32bit上で開発中のあるビルドをx64に変更した後の出力に以下の警告が:

警告 CS1607: アセンブリの生成 -- 参照アセンブリ 'System.Data.dll' は異なるプロセッサを対象にしています。
警告 CS1607: アセンブリの生成 -- 参照アセンブリ 'mscorlib.dll' は異なるプロセッサを対象にしています。
警告 CS1607: アセンブリの生成 -- 参照アセンブリ 'PresentationCore.dll' は異なるプロセッサを対象にしています。

CS1607の警告は以下のドキュメントに解説されている。
コンパイラの警告 (レベル 1) CS1607
http://msdn.microsoft.com/ja-jp/library/4a0640cd(VS.80).aspx

コンパイルのアセンブリ作成フェーズで警告が発生しました。
64 ビット アプリケーションを 32 ビット プラットフォームで作成する場合、64 ビット バージョンのすべての参照アセンブリが対象プラットフォームにインストールされていることを確認する必要があります。
x86 固有のすべての共通言語ランタイム (CLR: Common Language Runtime) アセンブリには、対応する 64 ビットのアセンブリがあります (すべての CLR アセンブリが全プラットフォームに存在します)。このため、CLR アセンブリについての CS1607 警告は無視してかまいません。

(原文)
If you are building a 64-bit application on a 32-bit platform, you must ensure that 64-bit versions of all referenced assemblies are installed on the target platform.
All x86-specific common language runtime (CLR) assemblies have 64-bit counterparts (every CLR assembly will exist on all platforms). Therefore, you can safely ignore CS1607 for CLR assemblies.

この説明が正しいとすると、警告が出たアセンブリが全部CLRのものなので心配ない。だったらリンカは警告しなくてもいいのにな。コンパイル対象のソースコード、コンパイルの構成などはVisual Studioが把握しているんだから、その情報を参照すれば何が起こっているのかわかるはず。
この警告は VS2010で .NET Framework 4.0をターゲットにしていると発生しない。

アセンブリの対応CPUをチェックするには、 corflags.exeを使用する。

C:> corflags myexe.exe
Microsoft (R) .NET Framework CorFlags Conversion Tool
Copyright (c) Microsoft Corporation. All rights rese
Version : v2.0.50727
CLR Header: 2.5
PE : PE32+
CorFlags : 1
ILONLY : 1
32BIT : 0
Signed : 0

ここで、32BITが立っているかどうかで確認できる。0ならばAnyCPUなので32bit CPU限定ではない。PE32は32bit, PE32+が64bit。
.NET Frameworkのツールは以下にリストされている。

Alphabetical Listing of Tools (.NET Framework)

.NET関連ツールへのリンクページは以下。
http://msdn.microsoft.com/en-us/library/d9kh6s92(v=vs.110).aspx

 

広告
%d人のブロガーが「いいね」をつけました。