Visual Studio(2012年,2015年)重建项目,虽然没有任何变化

时间:2013-11-21 20:58:55

标签: visual-studio visual-studio-2012 visual-studio-2015 msbuild

我在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'行开始。

2 个答案:

答案 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)

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