web-dev-qa-db-ja.com

x64ビルド:エラーMSB8013:このプロジェクトには、Debug | Win32の構成とプラットフォームの組み合わせが含まれていません

多くのソリューション(CI用、開発用)と数百のプロジェクトを含む複雑なビルドで純粋なx64ビルドを実行しようとしていますが、「エラーMSB8013:このプロジェクトには構成とプラットフォームの組み合わせが含まれていませんof Debug | Win32 "

私はそれを単純な構成に減らしました:

  • ソリューションAにはプロジェクトXとプロジェクトYが含まれています。プロジェクトXにはプロジェクトYへのプロジェクト参照があります。
  • ソリューションBには、プロジェクトXも含まれています。

Win32プラットフォームを含むプロジェクトまたはソリューションはありません-削除されました。

ソリューションBを(x64として)ビルドすると、次のようになります。

エラーMSB8013:このプロジェクトには、Debug | Win32の構成とプラットフォームの組み合わせが含まれていません

エラーメッセージには、追加情報が含まれている場合があります。

このエラーは、他のプロジェクトがこのプロジェクトへのプロジェクト間の参照を追跡しようとしている場合、このプロジェクトがアンロードされているかソリューションに含まれていない場合、および参照プロジェクトが同じまたは同等のものを使用してビルドされていない場合にも表示されることがあります構成またはプラットフォーム。

問題は、参照プロジェクトdoes「同じまたは同等の構成またはプラットフォームを使用してビルドする」です。

Msbuild診断を見ると、プロジェクトXにはプロジェクト参照が含まれているため、プロジェクトYがビルドされています。ただし、構成とプラットフォームのプロパティは、プロジェクトYがビルドされる直前に削除されます。

1>Task "MSBuild" (TaskId:28)
1>  Removing Properties: (TaskId:28)
1>    Configuration (TaskId:28)
1>    Platform (TaskId:28)

その結果、Microsoft.Cpp.Default.propsが起動し、これらをDebug | Win32に設定します。

1>Task "Message" (TaskId:11)
1>  Configuration=Debug (TaskId:11)
1>Done executing task "Message". (TaskId:11)
1>Task "Message" (TaskId:12)
1>  Platform=Win32 (TaskId:12)
1>Done executing task "Message". (TaskId:12)

これを防ぎ、msbuildに選択した構成とプラットフォームを渡すにはどうすればよいですか?

(NuGetを使用してパッケージの依存関係を管理する究極のソリューションを理解していますが、短期的には実現可能ではありません)

11
user1825216

参照されているすべてのプロジェクトをソリューションに含めることで、同様の問題を解決できます。この場合、プロジェクトYをソリューションBに含めます。

5
Zord

1つの修正は、.vcxprojファイルを手動で編集して、デフォルトのプラットフォームを定義することです。

  1. Vcxprojファイルをテキストエディタで開きます
  2. この行を「Globals」PropertyGroupに追加します:

    <Platform Condition = "'$(Platform)' == ''"> x64 </ Platform>

2
user1825216

あなたがこれを通して何を達成しようとしているのかを理解するのは難しいと思います。あなたはいつもXとYを作りたいですか? Yを参照しないソリューションでも?私にはかなり非論理的だろう。しかし、私はあなたが望むものに基づいて、この問題を修正/抑制するためのいくつかの解決策を提供することができます。

AでX&Yを構築し、BでXを構築する場合

ソリューションAで、プロジェクトXのプロジェクトYを参照する代わりに、他のプロジェクトをビルドの依存関係として設定します。他のプロジェクトを参照している限り、設定することはできません(私は常に参照を削除します) .vcxprojでは、プロジェクトの下部にあります)が、内部プロジェクト参照を削除すると、それへのソリューション参照を取得でき、正常に機能するはずです。

MSBuildを使用してソリューションAをビルドすると、XとYがビルドされ、MSBuildを使用してソリューションBがビルドされます。

Else

いずれかのソリューションでX&Yを構築する場合

申し訳ありませんが、現時点ではMSBuild内では実際には不可能です。プロジェクトYをソリューションに追加して参照することをお勧めしますが、それでは、なぜそうするのでしょうか。両方が含まれているプロジェクトがすでにあり、異なる出力が必要な場合は、簡単に異なる構成を作成できます。

担当者が不足しているためコメントを追加できませんでしたが、user1825216の回答と同じように、コマンドラインからMSBuildを実行しているため、変更する代わりにビルドコマンドに-p:Platform=x64を追加することでこのエラーを解決しました。 .vcxproj。

0
oats

_Microsoft.CppBuild.targets_ファイルのバグのようです。一部のマシンでは、そのようなファイルが2つあります。1つは〜120KBサイズのC:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targetsで、もう1つは77KBサイズのC:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targetsです。 2つ目はバグがあり、$(Configuration)| $(Platform)の値が間違っているため、前述のエラーが発生します。私のプロジェクトのVCTargetsPathが間違った(77KB)Microsoft.CppBuild.targetsディレクトリを指しているため、この問題はおそらく このトピック に直接関係しています(私はVS2015を使用しているので、V140ディレクトリのものを使用する必要があります)。 2つの回避策を見つけました:1)バグのあるファイルを置き換えるか、2)_HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\14.0\14.0\VCTargetsPath10_レジストリを変更して正しいファイルを指すようにします。

0
Bogdan