这与 Visual Studio 2017 社区有关。我们的大多数构建过程更喜欢 VS2015 工具,但也已更新为在 VS2017 工具下构建。
- 假设我们有一个项目 MyProject.csproj,它引用了代码分析器二进制文件 MyAnalyzer.dll。
- MyProject 在我们的解决方案中是一个被大量引用的库(树中有大约 100 个项目),并且它很少更改。
- 因此,是时候向 MyAnalyzer 添加新规则了。我们将新版本放在 repo 中,覆盖旧版本。
- 突然之间,MyProject 和依赖它的一切都在每次都被重建!
Visual Studio 提供的诊断消息很有帮助:
项目“MyProject”不是最新的。输入文件 '..\codeanalysis\bin\myanalyzer.dll' 在输出文件 '' 之后被修改。
每次自行构建 MyProject 都会表现出这种行为。但是在强制重建 MyProject 并让其余项目自行解决之后,问题就消失了。
当然,直到我们下次更新 MyAnalyzer。
- 在确定是否需要构建时,Visual Studio 会考虑项目代码分析器库的修改时间。
- 项目的构建将提前退出,因为检测到不需要构建。输出文件当然不会更新其时间戳。
- 因此,Visual Studio每次都会构建项目,除了依赖它的所有内容之外,MSBuild 只会说“不,无事可做”大约一百次。
- 对于 100 个项目的解决方案,这可能会导致常规构建需要将近一分钟,而它应该只需要花费几秒钟来构建实际发生变化的东西。
MSBuild 很清楚没有任何改变。有没有办法告诉 Visual Studio?我知道从技术上讲VS 在这里是正确的,但我知道它不正确。