4

2 つの C++ (CLR) プロジェクトを使用したソリューションがあります。1 つのプロジェクトが他のプロジェクトを参照するため、プロジェクトの依存関係とビルド順序はそれを正しく反映しています。どちらのプロジェクトも同じ出力フォルダーを対象としています。依存プロジェクトには、で構成された依存関係がありますCopy Local: false

依存関係を単独で「再構築」すると、問題なくビルドされ、そのターゲットは出力ディレクトリにあります。

ソリューション(または依存プロジェクト)を「再構築」すると、次のようになります。

error LNK1181: cannot open input file '<outdir>\Dependency.lib'

案の定、依存関係の出力は出力ディレクトリからなくなりました。ビルド ログを見ると、依存関係は正しく (再) ビルドされているように見えますが、依存プロジェクトのビルドが開始されるとすぐに、それらの出力が削除されたようです。なぜそれが起こるのでしょうか?

さらに、ソリューションを「クリーン」してからすぐにソリューションを「ビルド」しても、エラーは発生しません。

「再構築」は、事実上、クリーン+ビルドであるはずではありませんか?

4

2 に答える 2

1

Visual Studioでの再構築は、プロジェクトを1つずつクリーンアップしてビルドするため、おそらく最終的には次のようになります。

  • プロジェクトAがクリーンアップされます。
  • プロジェクトAがコンパイルされます。
  • プロジェクトBがクリーンアップされ、同じ出力ディレクトリのためにプロジェクトAから出力の一部が削除されます。
  • プロジェクトBは、依存関係がないためにビルドに失敗します。

ここでより多くの議論。

于 2012-08-28T16:03:45.920 に答える
1

2番目のプロジェクトは、再構築を実行するときに、出力ディレクトリから何かを削除します。クリーニングでは、正真正銘のプロジェクト出力であるファイルと他のファイルは区別されません。プロジェクトのビルドの間に出力フォルダーのクリーニングがないため、[すべてをクリーンアップ]の後に[すべてビルド]を実行しても問題は発生しません。つまり、Visual Studioは、同じフォルダーに出力する複数のプロジェクトをサポートしていません。それらをデフォルトの場所に出力してから、意図した/設計されたとおりにVisualStudioに依存関係をコピーさせます。

于 2012-08-28T16:07:01.320 に答える