迁移至TFS 2018:TfvcTemplate12中如何引用BuildNumber?
我之前在TFS 2018迁移项目里遇到过一模一样的问题,当时也是把旧XAML模板转成TfvcTemplate12后,自定义任务找不到BuildNumber参数。本质原因是TfvcTemplate12里的BuildNumber变量作用域和旧版TFS 2012模板不一样。
在TFS 2012的默认模板里,BuildNumber是直接暴露的顶级变量,但TfvcTemplate12(适配2015+版本的XAML模板)中,BuildNumber是BuildDetail对象的一个属性,直接用$(BuildNumber)会导致任务找不到这个参数,所以才会抛出The "WindowsServicePublishTask" task was not given a value for the required parameter "BuildNumber"的错误。
具体修复步骤
把你的WindowsServicePublishTask里的BuildNumber参数修改成引用BuildDetail对象的属性:
<WindowsServicePublishTask Publish="$(DeployFileService)" ServiceDisplayName="$(ServiceDisplayName)" Destinations="$(ServiceDestinations)" SourcePath="$(OutDir)" BuildNumber="$(BuildDetail.BuildNumber)" CreateDropFolder="$(CreateDropFolder)" />
额外验证建议
如果改完还是有问题,可以在你的XAML模板里临时添加一个WriteBuildMessage任务,输出$(BuildDetail.BuildNumber)的值,确认这个变量是否能正常获取:
<WriteBuildMessage Message="当前构建号:$(BuildDetail.BuildNumber)" Importance="High" />
运行构建后,查看日志里的输出,就能确认BuildNumber是否被正确传递了。
另外要注意:如果你的WindowsServicePublishTask是自定义的任务,还要确保它的参数定义是接受字符串类型的,没有额外的变量绑定限制,不过从错误信息来看,主要还是变量引用的问题。
内容的提问来源于stack exchange,提问作者Nick

