28

VS08SP1 の既定のプロジェクト システムを使用して、明示的な x64 モードで C# コンパイルを起動しようとしています (とは異なりますAnyCpu)。モジュールを明示的に x64 としてマークすると、次のようになります。

警告 CS1607: アセンブリの生成 -- 参照されたアセンブリ 'mscorlib.dll' は別のプロセッサをターゲットにしています

それを削除する 1 つの方法は、/nowarn:1607. 私の調査によると、実際にはこれを行うことに問題はありません。実際に遭遇した問題を強調できる人がいれば、遠慮なく回答してください。

しかし、これは間違っているように感じます!したがって、私が使用した別のアプローチは、 を実行し、明示的に 64 ビットの mscorlib にハードコードされた/nostdlib+a を追加することでした。<Reference><HintPath>

<Reference Include="mscorlib">
  <HintPath>$(windir)\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll</HintPath>
</Reference>

これは機能し、おそらくより優れています(以前のアプローチが優れている理由を誰かが指摘したい場合を除きます)が、誰かがこれが適切なことであることを確認できますか?

4

4 に答える 4

9

このブログで私はそれを完全にここにコピーするには長すぎる提案を見つけました、しかし要するにアイデアはこのコメントから適応された要約で説明することができます:

プロジェクトファイルでは、ビルド構成ごとにPropertyGroupセクションでカスタム変数を定義できます。例:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <MyCustomPath>C:\Windows\Microsoft.NET\Framework64</MyCustomPath>
</PropertyGroup>

次のようなタグを追加するだけです

<Reference Include="System.Data">
    <HintPath>$(MyCustomPath)</HintPath> 
</Reference>

次に、マクロを使用して参照パスを定義します。MyCustomPathは、ビルド構成(プラットフォームおよび/またはデバッグ/リリース)ごとに異なる場所に 定義できます。
MSがVSUIでこれをサポートする場合、問題は存在しませんが、それまでは機能します。この手法を使用して、デバッグビルドとリリースビルドで同じアセンブリの異なるバージョンを参照します。よく働く!

上記の引用で、私はソースの解説で失われたタグを回復し、言い回しをもう少し詳細に変更しました。


同じブログ からの追加の興味深い作品:

これを行う方法は他にもいくつかありますが、プロジェクトファイルを手動で編集する方法も必要です。1つの方法は、PropertyGroup-sectionsに条件を指定することです。このStackOverflowの質問は、条件の使用に焦点を当てています。

于 2012-02-03T21:03:42.573 に答える
6

プロジェクトのターゲット フレームワークを .NET Framework 4 に変更すると、警告が表示されなくなりました。

于 2011-04-13T17:47:39.923 に答える
3

/nostdlib+同じプラットフォーム上に構築されていない他のアセンブリを参照する場合、この警告が抑制されないため 、2 番目のオプション ( を使用した明示的な参照) の方が優れていると思います。

于 2010-11-03T16:08:09.260 に答える
1

私の場合、ソリューションに x86 プロジェクトと x64 プロジェクトが混在していたため、この警告が表示されました。すべてのプロジェクトで x86 ビルド構成を作成し、それをビルドのターゲットにすると、警告が消えます。ただし、全体として x64 をターゲットにしたい場合は、プロジェクトを再構築 (または上記のアドバイスに従う) して x64 フレームワーク用に作り直す必要があると思います。

于 2014-08-29T14:23:50.740 に答える