【问题标题】:Visual Studio 2015 unnecessary rebuildsVisual Studio 2015 不必要的重建
【发布时间】:2017-03-06 17:48:35
【问题描述】:

我有一个包含多个 C# 项目的 Visual Studio 解决方案,当完全没有对它们进行任何更改时,它会继续不必要地重建解决方案的一些项目。

按照一些相关帖子中的建议将构建输出设置为“诊断”级别后,我收到了一堆以下格式的消息: 项目“company.xxx”不是最新的。输入文件 'c:...\company.yyy.dll' 在输出文件 'c:...\company.yyy.pdb' 之后被修改。

Company.xxx 引用 company.yyy 项目,其中 Copy Local = true。

有什么想法吗?

【问题讨论】:

  • DLL 和 PDB 文件应该具有相同的时间戳,并且它们总是在构建项目时这样做。之后您需要找出是什么恶意软件正在修改 DLL。或者,也许会阻止新的 PDB 被复制到目标目录。
  • @Konstantinos Papakonstantinou,这个问题呢?请告诉我有关此问题的最新信息吗?

标签: visual-studio-2015 msbuild


【解决方案1】:

这与增量构建有关。您可以参考以下信息作为简单的理解,更详细的信息可以参考Incremental Builds

一个目标元素可以同时具有一个 Inputs 属性,该属性指示目标 > 期望作为输入的项目,以及一个 Outputs 属性,该属性指示它作为输出生成的项目 MSBuild 尝试在这些属性的值。如果存在 1 对 1 映射,MSBuild 会将每个输入项的时间戳与其对应的输出项的时间戳进行比较。将没有一对一映射的输出文件与所有输入文件进行比较。如果一个项目的输出文件与其输入文件的年龄相同或更早,则该项目被认为是最新的。

如果所有输出项都是最新的,则 MSBuild 会跳过目标。这个 目标的增量构建可以显着改进构建 速度。如果只有一些文件是最新的,MSBuild 会执行目标 但会跳过最新的项目,从而带来所有项目 最新。这称为部分增量构建。

根据输出日志“Project 'company.xxx' 不是最新的。输入文件 'c:...\company.yyy.dll' 修改后输出文件 'c:...\company.yyy.pdb'”,重新修改前需要修改项目 company.yyy构建解决方案,修改后company.yyy.dll需要在Incremental Builds的基础上重新构建。另外,Company.xxx 引用的是 company.yyy 项目,所以 company.yyy.dll 将作为 company.xxx 项目的输入文件,输入文件已修改,项目 company.xxx 将重新构建。

company.xxx 将由于对引用项目 company.yyy 的修改而重新构建,但绝对没有直接对 company.xxx 项目进行任何更改。

【讨论】:

  • 所以,我想这应该是它的工作方式。有什么办法可以避免重建引用修改项目的项目?
  • @Konstantinos Papakonstantinou,据我所知,我们无法避免在修改其参考项目后重建项目。这是 Visual Studio 的默认行为,以确保编译所有更改。如果以上答案解决了您的问题,您可以将其标记为有利于其他有相同问题的社区的答案,如果没有,请告诉我有关此问题的最新信息,我们将继续跟踪。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
相关资源
最近更新 更多