【发布时间】:2018-10-05 01:21:40
【问题描述】:
这与 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 在这里是正确的,但我知道它不正确。
【问题讨论】:
-
您是否在您的
myanalyzer项目中将任何资源设置为Copy always?如果是,myanalyzer.dll将被跟踪为不是最新的。 zhylich.blogspot.jp/2016/03/… -
就该解决方案而言,MyAnalyzer.dll 是一个静态文件,即。它没有被重建为 MyProject 的依赖项。
-
您是否在将规则更改为 MyAnalyzer 后尝试清理您的项目?您的项目似乎总是使用旧的 MyAnalyzer 但输入更新,这导致每次构建。
-
这确实可以解决问题,因为它会强制进行完整构建。不过,关键是要避免这样做。
标签: visual-studio msbuild microsoft.codeanalysis