当我启用诊断日志记录时,以下命令错误地在正在设置的环境变量中包含MSBuild TaskId,我需要更改什么才能阻止这种情况发生?
<Exec Command="powershell -Command Write-Host ##vso[task.setvariable variable=AutoBuildNumber;]$(BuildNumber)" />
如果我的内部版本号为999,则设置999
时,“AutoBuildNumber”应设置为/v:diag
,环境变量为999 (TaskId:6)
答案 0 :(得分:1)
您可以使用MsBuild消息任务输出日志文本,然后在其后面添加换行符。这提供了没有TaskId的输出,尽管它确实在诊断日志记录中出现了两次,但我认为没有问题。例如:
<Target Name="ShowBuildNumber">
<PropertyGroup>
<BuildNumber>12</BuildNumber>
</PropertyGroup>
<Message Text="##vso[task.setvariable variable=AutoBuildNumber;]$(BuildNumber)%0a" />
</Target>
msbuild <projectfile> /t:ShowBuildNumber /v:diag
的输出:
Using "Message" task from assembly "Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "Message" (TaskId:2)
Task Parameter:Text=##vso[task.setvariable variable=AutoBuildNumber;]12
(TaskId:2)
##vso[task.setvariable variable=AutoBuildNumber;]12
(TaskId:2)
Done executing task "Message". (TaskId:2)
答案 1 :(得分:0)
根据我的测试,当设置环境变量(## vso [task.setvariable variable = AutoBuildNumber;] $(BuildNumber))时,值会被更改,BuildNumber值是正确的。
因此,您可以通过PowerShell脚本删除额外的字符串。例如(将{}添加到if块):
$MyBuildNum=$env:AutoBuildNumber
if($ MyBuildNum)
if($MyBuildNum.Contains("TaskId"))
{
$MyBuildNum=$MyBuildNum.Substring(0,$MyBuildNum.IndexOf(" "));
}