TFS2018 TFVC增量gated checkin构建触发全量编译,如何配置仅编译变更?
TFS 2018 TFVC gated checkin 仅编译变更项目配置方案
先捋顺增量构建的基础条件
MSBuild的增量构建依赖输入输出文件的时间戳对比,得确保这几点:- 所有项目的
OutputPath配置统一且固定,别让输出路径每次构建都变,不然时间戳对比会失效 - 检查项目文件里有没有
DisableIncrementalBuild="true"这类配置,有的话直接删掉 - 保证构建代理的工作目录没被其他进程篡改文件时间戳,尽量维持目录干净
- 所有项目的
用TFVC变更检测+动态项目列表替代全方案构建
别直接构建整个'Components'解决方案,换个思路:- 在构建定义里加一个PowerShell脚本任务,放在MSBuild任务前面。脚本做这几件事:
- 拿到当前gated checkin的变更集,提取所有改动的
.csproj/.vbproj文件路径 - 用MSBuild的
GetProjectReferences目标,递归找出这些变更项目的所有依赖项目 - 把这些项目路径拼成逗号分隔的列表,存到构建变量里(比如命名为
BuildProjects)
- 拿到当前gated checkin的变更集,提取所有改动的
- 修改MSBuild任务的项目参数,用变量
$(BuildProjects)代替整个解决方案路径
- 在构建定义里加一个PowerShell脚本任务,放在MSBuild任务前面。脚本做这几件事:
调整工作区和获取源的设置
- 工作区映射选择服务器工作区,服务器工作区的变更检测比本地工作区更精准
- "获取源"阶段不要勾选"获取所有内容",选择"获取变更的内容";同时别开启"清理本地工作区",保证工作目录是增量复用的
给MSBuild添加增量构建强制参数
在MSBuild任务的命令行参数里加上:
/p:BuildProjectReferences=true /p:IncrementalBuild=true
强制开启增量构建和依赖项目构建逻辑,避免MSBuild默认走全量编译
内容的提问来源于stack exchange,提问作者Andrew Northcote
相关产品推荐
相关产品推荐

