在MSbuild目标中设置全局属性

时间:2014-02-14 18:36:27

标签: properties msbuild target

我有一个MSBuild项目,我需要执行不同的准备操作,从列表中构建一些解决方案,执行一些最终操作。 如果解决方案失败 - 发送一封关于此的电子邮件(写一条消息)。 如果至少有一个解决方案失败 - 整个过程被视为失败,我会发送一封电子邮件(写一条消息)。 为了实现这一点,我在SolutionsToBuild项目组上使用目标批处理。 我检查每个编译的结果并将其存储在CurrentSolutionBuildResult中。 然后我的想法是拥有一个全局属性BuildSucceded,默认值设置为true。 如果解决方案在目标BuildAllSolutions中失败 - 我将此属性设置为false,因此在目标MainTarget的末尾,我可以检查它并编写构建失败或构建成功的消息。 不幸的是,在主要目标结束时,我收到了消息:

构建完所有解决方案后--BuildSucceded是:'true'   建立成功!

虽然我希望将此属性设置为false,因为它在目标BuildAllSolutions的每次迭代中都已完成:

为C:\ SampleSolution \ SampleSolution3.sln构建失败!    目标BuildAllSolutions中的BuildSucceded是:'false'

在这个网站上搜索后我找到了原因: MSBuild Property Scope 但仍然不知道如何解决这个问题(将整个过程标记为失败或成功)因为我不能使用DependsOnTargets解决方法(我希望BuildAllSolutions目标不是在开始时执行,而是在执行其他一些操作之后)。 下面是代码,也许有人可以建议我如何实现我需要的...... 感谢

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"  ToolsVersion="4.0" DefaultTargets="MainTarget">
<PropertyGroup>
  <BuildSucceded>true</BuildSucceded>
</PropertyGroup>

<ItemGroup>
  <SolutionsToBuild Include="C:\SampleSolution\SampleSolution1.sln" />
  <SolutionsToBuild Include="C:\SampleSolution\SampleSolution2.sln" />
  <SolutionsToBuild Include="C:\SampleSolution\SampleSolution3.sln" />
</ItemGroup>

 <Target Name="BuildAllSolutions" Outputs="%(SolutionsToBuild.Identity)">
   <Message Text="Building solution '%(SolutionsToBuild.Identity) " />

  <MSBuild Projects="%(SolutionsToBuild.Identity) " Properties="Configuration=Debug" ContinueOnError="ErrorAndContinue"/>

   <PropertyGroup>
     <CurrentSolutionBuildResult>$(MSBuildLastTaskResult)</CurrentSolutionBuildResult>
     <BuildSucceded Condition="'$(CurrentSolutionBuildResult)' == 'false' " >false</BuildSucceded>
   </PropertyGroup>

   <Message Text="Build for %(SolutionsToBuild.Identity) failed!" Condition="'$(CurrentSolutionBuildResult)' == 'false'"/>
   <Message Text="Build for %(SolutionsToBuild.Identity) succeded!" Condition="'$(CurrentSolutionBuildResult)' != 'false'"/>

   <Message Text=" BuildSucceded in target BuildAllSolutions is:'$(BuildSucceded)'"/>


 </Target>


  <Target Name="MainTarget" >

  <Message Text="Different start operations in MainTarget" />

  <Message Text=" Before building all the solutions -BuildSucceded is:'$(BuildSucceded)'"/>   

  <CallTarget Targets="BuildAllSolutions"  ContinueOnError="ErrorAndContinue" />

   <Message Text="Different end operations in MainTarget" />

  <Message Text=" After building all the solutions -BuildSucceded is:'$(BuildSucceded)'"/>
  <Message Text=" Build successful!" Condition=" '$(BuildSucceded)' != 'false' "/>
  <Message Text=" Build failed!" Condition=" '$(BuildSucceded)' == 'false' "/>


  </Target>

</Project>

0 个答案:

没有答案