我在VS 2012(更新4)中构建了一个相当大的解决方案(大约50个项目,所有C#)。我注意到在完成VS内部的完全重建之后,直接跟随构建(按F6)会导致一个项目重建,尽管我没有触及任何内容。
第二次构建调用会正确检测到所有项目都是最新的。
将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.
我没有未保存的文件。有趣的是,谷歌和必应在搜索此消息时都没有给出一个点击。
有什么可能导致这种情况的线索?我怎样才能调试构建过程的这一部分?我相信构建过程的这一部分甚至在调用MsBuild之前(至少新的NuGet包恢复功能在调用MsBuild之前出现,我相信MsBuild从'Build started'行开始。
答案 0 :(得分: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
现在可以构建解决方案。
当移动项目并进行重构时,可能已经成为孤立的,并且不再需要。
答案 1 :(得分:2)