【问题标题】:Reason why a VS 2008 project is being rebuilt each time每次都重建 VS 2008 项目的原因
【发布时间】:2010-12-01 23:30:11
【问题描述】:

有没有办法找出为什么项目每次都在重建在 VS 2008 中发出 Build Selection 操作的原因?

我什至尝试从 Build\Configuration Manager 中删除所有依赖项(取消选中所有程序集的构建列,但有问题的那个)。

我得到相同的结果:每次都重新构建程序集。

不得不提的是,所有的依赖都建在同一个目录下(有一个通用的Output Directory)。

实际上,我不太清楚决定是否应该重建项目的 VS/MSBuild 算法是什么。它是否检查是否有依赖项(文件/程序集)的 Last Access NTFS 时间戳比相关程序集上的时间戳更新?也许我可以尝试以这种方式搜索“违规”文件。

【问题讨论】:

  • 你不会在构建和链接之间混用吗?所有项目都重新链接,但不是每次都重新构建。
  • 不,它确实是每次都构建的。我可以看到来自编译器的警告,而对于其他项目,我收到这样的消息(对于 CL 项目):“构建开始:项目:CL,配置:调试无许可证任何 CPU ------ CL -> D:\Code\magnet5Dev\MagNet\Build\Debug\CL.dll "

标签: visual-studio-2008 msbuild build-process build


【解决方案1】:

这可能是由 MSVC 2008 错误处理(最近添加的)预构建规则引起的。执行清理,关闭 MSVC,删除 .pch 和 .ncb 文件,重新打开 MSVC 并构建。这应该可以修复不必要的编译。

【讨论】:

    【解决方案2】:

    我还没有找到问题的根本原因,但已经找到了摆脱影响的方法:

    GetLatestVersion(带有“覆盖现有”选项)。

    现在一切正常。

    不幸的是,在我用 Workspace 版本覆盖了本地项目文件之后,我发现了另一件事:Tools-Options-Projects 和 Solution-Build 和 Run-MSBuild 项目构建输出详细程度中有一个选项。

    此选项默认设置为Minimal。如果设置为 Detailed 或 Diagnostic 将在编译项目时在 Output Window 中记录许多有趣的消息。它可能给了我关于为什么每次都编译项目的指针。

    【讨论】:

      【解决方案3】:

      例如,如果您使用更新的 AssemblyFileVersion 修改 AssemblyInfo.cs(就像我对 Cruise Control .Net 所做的那样),我发现它会强制重建。

      【讨论】:

      • 我们这里有一个 AssemblyVersion.cs 文件,该文件链接到解决方案中的每个项目。它不会更改,也不会在预构建事件中复制,因此不应触发重新编译。谢谢你的回答。
      • 是的,我也有与单个 AssemblyInfo.cs 相同的配置。在构建框上,我确实更改了这个文件,因此它似乎强制重建
      • 嗯,在构建框上它总是会重建,因为在构建之间没有剩余的程序集,我认为这样是可取的。但是在 DEV 盒子上,即使不需要等待构建也确实很烦人。
      【解决方案4】:

      您是否定义了更新某些输入文件的 Prebuild 操作?此外,始终触发的自定义构建步骤可能是原因。

      您有什么样的项目类型?

      【讨论】:

      • 相关项目没有预构建事件。但我确实有一些依赖项的预构建事件。项目类型为“类库”。
      【解决方案5】:

      您的应用程序中的不同模块/项目之间是否存在循环依赖关系?

      【讨论】:

      • 不,没有循环依赖,因为编译器不支持。但是我确实有对 WCF 服务的服务引用,该服务也引用了相同的父 dll(仅引用来自 DLL 目录的已编译程序集,而不是项目引用)。尽管如此,相同的引用在另一个编译得很好的分支中。问题可能与此有关,因为问题已经出现了。在添加服务引用的同时。
      • 实际上,现在我仔细检查了,来自 WCF 服务的引用直接指向解决方案项目(不是编译的 dll)。但是反向引用仍然是一种服务引用,它是一种“离线”引用。它不会自动更新。所以我怀疑这不是问题。同样,来自另一个分支的项目,也有这个引用,没有暴露问题。
      【解决方案6】:

      我不能 100% 确定,但似乎总是会重建带有任何警告的项目。

      【讨论】:

      • 嗯,这很奇怪,因为不同分支上的同一个项目(差别不大,因为它们每月合并一次),只有在发生更改时才会重建。确实,它们都有很多警告。
      • 不,这不是真的。构建过程不依赖于先前发现的警告。
      猜你喜欢
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 2011-05-18
      • 2010-11-09
      • 2013-05-19
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多