13

VS 2012 (更新 4) で構築しているかなり大きなソリューション (約 50 プロジェクト、すべて C#) があります。VS 内から完全な再構築を行った後、すぐにビルド (F6 を押す) を実行すると、何も触れていませんが、1 つのプロジェクトが再構築されることに気付きました。

build を 2 回目に呼び出すと、すべてのプロジェクトが最新であることが正しく検出されます。

msbuild の出力を診断に設定し、最初のビルド呼び出しの出力を調べると、次のようになります。

NuGet package restore started.
Restoring NuGet packages for solution XXX.
[... some boring lines on NuGet Package restore]
All packages are already installed and there is nothing to restore.
NuGet package restore finished.
Project 'YYY' is not up to date. Last build was with unsaved files.
------ Build started: Project: YYY, Configuration: Debug Any CPU ------
Build started 21-11-2013 21:20:54.

Project 'YYY' is not up to date. Last build was with unsaved files.保存されていないファイルがないというメッセージに特に興味をそそられます。興味深いことに、このメッセージを検索するとき、Google と Bing の両方がヒットしません。

これを引き起こす原因についての手がかりはありますか?ビルド プロセスのこの部分をデバッグするにはどうすればよいですか? ビルド プロセスのこの部分は、MsBuild が呼び出される前でもあると思います (少なくとも新しい NuGet パッケージの復元機能は、MsBuild が呼び出される前に行われます。MsBuild は「ビルド開始」行から開始されると思います。

4

2 に答える 2

4

これは、プロジェクトに循環参照があるためである可能性があります。これを確認するには、MSBuild プロジェクトのビルド出力の詳細度を診断に設定します。

ソリューションをビルドし、ビルド出力ペインで次を検索します。

Done executing task "Copy"

この行のすぐ上に、次のような行が表示されます。

Did not copy from file
Copying file from 

次のような行が表示されます。

3>  Copying file from "C:\Projects\test\Business.Core.Mto\bin\Debug\Business.Core.Mto.dll" to "bin\Debug\Business.Core.Mto.dll". (TaskId:68)

非dllファイルのコピーは無視できます

Done 実行タスク「Copy」テキストを含む元の行に移動します。

次のような行が表示されます。

3>Done building target "_CopyFilesMarkedCopyLocal" in project "Business.Core.Utils.csproj".: (TargetId:138)

Visual Studio で、このプロジェクト内の参照を開きます。すべての参照を削除して、再度追加します。次のメッセージが表示される場合があります。

A reference to business.core.mto could not be added. Adding this project as a reference would cause a circular dependency

ソリューションがビルドされる可能性があります。

プロジェクトを移動してリファクタリングするときに、参照が孤立して不要になった可能性があります。

于 2014-07-29T17:31:39.057 に答える