1. ホーム
  2. .net

[解決済み] Visual Studioのコンパイルエラー "mismatch between processor architecture "を修正するにはどうしたらいいですか?

2022-03-20 01:31:57

質問

Visual Studio 2010のプロジェクト構成は初めてですが、これまでいくつか 研究 が、この問題がまだよくわかりません。私はC#のDLLを参照するC++のDLLを持つVisual Studioのソリューションを持っています。C#のDLLは、私のプロジェクト内と外部のいくつかの他のDLLを参照しています。C++のDLLをコンパイルしようとすると、次のような警告が表示されます。

警告 MSB3270: ビルドするプロジェクトのプロセッサ・アーキテクチャ "MSIL"と参照する "[内部 C# dll]", "x86" のプロセッサ・アーキテクチャの間にミスマッチが発生しました。

アーキテクチャを揃えるために、構成マネージャに行くように言われました。C# DLL はプラットフォームターゲット x86 で設定されています。これを Any CPU のような他のものに変更しようとすると、外部 DLL の 1 つである それ に依存しており、プラットフォームターゲットがx86である。

構成マネージャを見ると、C# DLL のプラットフォームは x86 で、C++ プロジェクトのプラットフォームは Win32 と表示されています。これは正しい設定のように思えます。確かに、私のC++プロジェクトのプロジェクトにプラットフォームをx64に設定させたくはないのです。

私はここで何を間違えているのでしょうか?

どうすればいいですか?

この警告は、新しい Visual Studio 11 Beta と .NET 4.5 で導入されたようですが、以前から可能だったかも知れませんね。

まず、これは本当にただの警告です。x86の依存関係を扱うだけであれば、何の支障もないはずです。Microsoftは、あなたのプロジェクトが"Any CPU"と互換性があると述べているのに、プロジェクトまたは.dllアセンブリにx86またはx64の依存関係がある場合に警告しようとしているだけなのです。x86 の依存関係があるため、技術的には、プロジェクトは "任意の CPU" と互換性がありません。この警告を消すには、実際にプロジェクトを "Any CPU" から "x86" に変更する必要があります。これは非常に簡単で、以下にその手順を示します。

  1. ビルド|コンフィギュレーションマネージャー]メニュー項目を開きます。
  2. リストでプロジェクトを見つけ、プラットフォームの下に"Any CPU"と表示されます。
  3. ドロップダウンから"Any CPU"を選択し、次に <New..>
  4. そのダイアログから、"New Platform" ドロップダウンから x86 を選択し、"Copy settings from" ドロップダウンで "Any CPU" が選択されていることを確認します。
  5. OKを押す
  6. DebugとReleaseの両方の構成でx86を選択することになります。

これにより、警告が消え、アセンブリまたはプロジェクトが "あらゆる CPU" と互換性がなく、x86 固有になったことが示されます。これは、64ビットのプロジェクトをビルドする際に、x64の依存関係を持つ場合にも適用されます。

もう1つ、プロジェクトは、純粋な.NETプロジェクトであれば、通常、"Any CPU"互換にすることが可能です。この問題は、特定のプロセッサ・アーキテクチャをターゲットとする依存関係(サードパーティのDLLまたは独自のC++マネージド・プロジェクト)を導入する場合にのみ発生します。