MSBUILD / csc:x64 mscorlib 警告 1607 を処理する最もクリーンな方法
質問
VS08SP1 のデフォルトのプロジェクト システムを使用して、明示的な x64 モードで C# コンパイルを呼び出そうとしています ( AnyCpu
)。モジュールを明示的に x64 としてマークすると、次のメッセージが表示されます。
警告 CS1607:アセンブリの生成 -- 参照されたアセンブリ「mscorlib.dll」は別のプロセッサをターゲットにしています
それを削除する 1 つの方法は、 /nowarn:1607
. 私の研究に基づいて, 、これを実行しても実際には問題はありません。実際に遭遇した問題を指摘できる人がいたら、遠慮なく答えてください。
ただし、これは間違っていると感じます。そこで私が使用した別のアプローチは、 /nostdlib+
, を追加してから、 <Reference>
ハードコードされた <HintPath>
明示的に 64 ビット mscorlib に追加します。
<Reference Include="mscorlib">
<HintPath>$(windir)\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll</HintPath>
</Reference>
これは機能しますし、おそらくより良いものです (以前のアプローチが優れている理由を誰かが指摘しない限り) が、できれば権威あるものを引用して、これが適切なことであると誰かが確認できますか?
解決
プロジェクトのターゲット フレームワークを .NET Framework 4 に変更すると、警告が表示されなくなることがわかりました。
他のヒント
このブログでは ここに丸ごとコピーするには長すぎる提案を見つけましたが、簡単に言うと、このアイデアは次の内容を要約して説明できます。 このコメント:
プロジェクト ファイルでは、カスタム変数を定義できます。 プロパティグループ 各ビルド構成のセクション。例:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<MyCustomPath>C:\Windows\Microsoft.NET\Framework64</MyCustomPath>
</PropertyGroup>
次のようなタグを追加するだけです
<Reference Include="System.Data">
<HintPath>$(MyCustomPath)</HintPath>
</Reference>
次に、マクロを使用して参照パスを定義します。定義できます 私のカスタムパス 異なるビルド構成 (プラットフォームおよび/またはデバッグ/リリース) の異なる場所に移動します。
MS が VS UI でこれをサポートしていれば問題は発生しませんが、それまではこれで機能します。私はこの手法を使用して、デバッグ ビルドとリリース ビルドで同じアセンブリの異なるバージョンを参照します。よく働く!
上記の朗読では、ソースの解説で失われたタグを復元し、表現をもう少し詳細に変更しました。
からの追加の興味深い部分 同じブログ:
これを行う方法は他にもいくつかありますが、プロジェクト ファイルを手動で編集する必要もあります。1 つの方法は、PropertyGroup セクションに条件を指定することです。これ スタックオーバーフロー 質問では条件の使用が強調されています。
私はあなたの2番目のオプションを信じます(明示的な参照 /nostdlib+
) の方が優れています。同じプラットフォーム上に構築されていない他のアセンブリを参照した場合、この警告は抑制されないからです。
私の場合、ソリューションに x86 プロジェクトと x64 プロジェクトが混在していたため、この警告が発生しました。すべてのプロジェクトで x86 ビルド構成を作成し、それをビルドの対象にすると、警告は表示されなくなります。ただし、完全に x64 をターゲットにしたい場合は、プロジェクトを再構築して (または上記のアドバイスに従って) x64 フレームワーク用に作り直す必要があると思います。