/ v:diag停止从MSBuild工作的powershell命令

时间:2016-08-25 11:37:25

标签: powershell msbuild azure-devops

当我启用诊断日志记录时,以下命令错误地在正在设置的环境变量中包含MSBuild TaskId,我需要更改什么才能阻止这种情况发生?

<Exec Command="powershell -Command Write-Host ##vso[task.setvariable variable=AutoBuildNumber;]$(BuildNumber)" />

如果我的内部版本号为999,则设置999时,“AutoBuildNumber”应设置为/v:diag,环境变量为999 (TaskId:6)

2 个答案:

答案 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(" "));
}