3

1 つの小さな変更が原因で、Visual Studio が巨大なプロジェクト全体を再構築することを決定することがあります。何が問題なのかを確認するために、ビルド ログを Diagnostic に切り替えました。

< Bunch of spam >
Outputs for C:\<snip>\PRECOMPILEDHEADERS.CPP:
    C:\<snip>\PRECOMPILEDHEADERS.OBJ
All outputs are up-to-date.
Forcing rebuild of all source files due to a change in the command line

...そして、プリコンパイル済みヘッダーを再構築し、次に他のすべてを再構築します。

これは、プロジェクト内の単一の .cpp または .h ファイルを変更したときに発生します。プロジェクト設定で何も変更していません。また、同じ変更が常に発生するわけではありません。それはランダムです。

ここで何が起こっているかについてのアイデアはありますか?詳細情報はどこで入手できますか? http://blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspxの説明を使用してデバッグを有効にしようとしましたが、それ以上の情報は得られませんでした. この「コマンドラインの変更により、すべてのソースファイルの再構築を強制する」がどこから来ているのかわかりません。工場出荷時の MSBuild ファイルには含まれていません。

その他の情報: これは、C#、ネイティブ C++、およびその他の C++/CLI dll を含む、他の多くのプロジェクトをリンクする C++/CLI dll プロジェクトです。問題を引き起こす傾向があるため、依存関係からすべての C# プロジェクトを削除しようとしましたが、それは変わりませんでした。その特定の文字列をグーグル検索しましたが、私の状況は、それを報告している他の人の状況と一致しません. (1 つは Intel C++ を使用しており、もう 1 つはコマンド ラインから MSBuild を使用して大文字と小文字を変更していました。Visual Studio 自体からビルド ソリューションを使用しています)。

私が試した一般的な修正を説明するために編集します。

プロジェクトのみをビルドしてみました。同じことをします。

存在しない .h ファイルは含めません。

bin/object フォルダーを削除し、最初から再構築しました。これにより、通常、いくつかのビルドで問題が解消されますが、その後すぐに戻ってきます。

編集#2:

ログの前半で疑わしいものが見つかりました:

3>Using "ResolveNonMSBuildProjectOutput" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
3>Task "ResolveNonMSBuildProjectOutput"
3>  Resolving project reference "..\..\..\..\CommonCore\VS2010\Project1\Project1.vcxproj".
3>  Project reference "..\..\..\..\CommonCore\VS2010\Project1\Project1.vcxproj" has not been resolved.

これは私のプロジェクトのいくつかで繰り返されます...私はそれを追跡し、プロジェクト参照のヒントパスに問題があるかどうかを確認します.

4

3 に答える 3

3

わかりました、それは古いスレッドですが、私は最近同じ問題に遭遇しました。私の解決策は、プリコンパイル済みヘッダーを無効にすることでした。1つのソースファイルを変更するだけでは、「再構築」が行われなくなりました。

于 2012-11-27T10:29:03.027 に答える
1

私は3つのことをしましたが、問題は解決したようです。私はそれを少し絞り込もうとしていますが、先に進んで投稿することにしました:

  • すべての参照とプロジェクト参照を削除して再度追加しました
  • 残りのソリューションと一致するように .NET フレームワーク ターゲットを 3.5 に設定していなかったプロジェクトの 1 つを修正しました (とにかくプロジェクトが .NET を使用しなかったため、私はそれを回避していました)。
  • システムのものを含むすべての参照に対して、「ローカル サテライト アセンブリのコピー」を false に設定します。

このものの一部またはすべてがブードゥー教である可能性があることに注意してください...

于 2011-09-26T21:34:21.283 に答える