如何在TFS 2017的MSBuild构建步骤中自定义构建指定解决方案列表
自定义TFS 2017 MSBuild步骤构建指定多个解决方案
我来帮你搞定这个需求!在TFS 2017的MSBuild构建步骤里自定义要构建的多个解决方案其实不难,这里有几种实用的方法,你可以根据自己的场景灵活选择:
方法1:直接在MSBuild步骤中指定多个解决方案
这是最直接的方式,适合固定方案组合的场景:
- 打开你的TFS构建定义,找到MSBuild构建步骤
- 在解决方案输入框中,用分号分隔多个解决方案的相对路径,比如:
src/ProjectA/SolutionA.sln;src/ProjectB/SolutionB.sln;tests/TestSolution.sln - 路径是相对于源代码根目录的相对路径,确保拼写准确,TFS会按你输入的顺序依次构建这些方案
方法2:使用构建变量动态选择方案
如果需要经常切换不同的方案组合,用变量会更灵活:
- 切换到构建定义的变量标签页,新建一个变量(比如命名为
SelectedSolutions),默认值设置为你常用的方案组合,比如:SolutionA.sln;SolutionB.sln - 回到MSBuild步骤,在解决方案字段中引用这个变量:
$(SelectedSolutions) - 每次排队构建时,你可以在排队页面修改
SelectedSolutions的值,临时切换要构建的方案列表
方法3:用脚本动态生成方案列表(适合复杂场景)
如果需要根据分支、环境等条件自动选择方案,可以用PowerShell脚本生成动态列表:
- 在MSBuild步骤之前添加一个PowerShell构建步骤
- 编写脚本逻辑生成要构建的解决方案列表,然后将其存入一个构建变量,示例脚本:
# 初始化基础方案列表 $targetSolutions = @("src/Core/Core.sln", "src/API/API.sln") # 根据分支动态添加方案 if ($env:BUILD_SOURCEBRANCHNAME -eq "release") { $targetSolutions += "src/UI/UI.sln" $targetSolutions += "tests/FullTestSuite.sln" } else { $targetSolutions += "tests/UnitTest.sln" } # 将列表转为分号分隔的字符串,存入构建变量 $solutionsStr = $targetSolutions -join ";" Write-Host "##vso[task.setvariable variable=DynamicSolutions]$solutionsStr" - 在MSBuild步骤的解决方案字段中引用这个动态生成的变量:
$(DynamicSolutions)
一些注意事项
- 注意解决方案的依赖顺序:如果方案之间存在依赖关系,把被依赖的方案放在前面,确保构建顺序正确
- 可以添加MSBuild参数
/m启用并行构建,提升构建速度(比如在MSBuild步骤的MSBuild参数中输入/m),但如果方案间有强依赖的话建议谨慎使用 - 测试路径正确性:可以先手动在本地按相对路径验证解决方案是否能正常打开,避免构建时出现路径错误
内容的提问来源于stack exchange,提问作者Manzoor_Khazi
相关产品推荐
相关产品推荐

