13

我在 VS 2012(更新 4)中构建了一个相当大的解决方案(大约 50 个项目,所有 C#)。我注意到,在从 VS 中完成完全重建后,直接进行构建(按 F6)会导致一个项目重建,尽管我没有触及任何东西。

第二次调用 build 正确检测到所有项目都是最新的。

将 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文件的复制

转到包含完成执行任务“复制”文本的原始行。

你现在会看到这样的一行:

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 回答
2

好的,我终于可以自己解决这个问题了。我显然忽略了一个未设置为项目依赖项的依赖项。这是必要的,因为并非解决方案中的所有项目都通过项目引用链接,而是通过普通的二进制引用链接(因为项目的子集也可以在大部分开发发生的部分解决方案中打开,以便更快地加载等)。

于 2013-11-26T09:31:53.453 回答