Microsoft Tfs构建变量丢失

时间:2014-04-23 12:04:00

标签: tfs build msbuild tfsbuild

我正在使用下一个目标运行构建:

  <Target Name="BeforeCompile">
    <Message Text="Build no: $(BuildNumber)" />
  </Target>

然后在我之间运行build(使用nmake)。之后我想部署固件:

  <Target Name="AfterCompile">
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="CustomDeployMagicFirmware" Properties="Id=1" />
  </Target>

  <Target Name="CustomDeployMagicFirmware">
    <Message Text="...Deploying bootloader files to build machine - folder: $(BuildNumber)" />
    <Exec Command='xcopy "$(SolutionRoot)\Repository\bootloader\*.axf" \\machine\bootloader\$(BuildNumber) /y /q'/>
    <Exec Command='xcopy "$(SolutionRoot)\Repository\bootloader\*.hex" \\machine\bootloader\$(BuildNumber) /y /q'/ -->
  </Target>

问题是在目标“BeforeCompile”中我得到了$(BuildNumber)的正确消息输出。但后来我的消息测试输出如下:
...部署bootloader文件以构建机器 - 文件夹:
看起来变量$(BuildNumber)不再设置。另外命令xcopy将文件复制到文件夹引导程序而不是文件夹引导程序\ $(BuildNumber)。

我做错了什么?哪些事情可以影响变量内容?

2 个答案:

答案 0 :(得分:0)

错误在此行

<MSBuild Projects="$(MSBuildProjectFile)" Targets="CustomDeployMagicFirmware" Properties="Id=1" />

MSBuild任务生成一个新的MSBuild.exe进程,并且您没有将属性$(BuildNumber)传递给新进程。改变它如下,这将工作

<MSBuild Projects="$(MSBuildProjectFile)" Targets="CustomDeployMagicFirmware" Properties="Id=1;BuildNumber=$(BuildNumber)" />

答案 1 :(得分:0)

使用<CallTarget>代替<MSBuild>来调用您的CustomDeployMagicFirmware目标。