質問

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 フレームワーク用に作り直す必要があると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top