Properties 在MSbuild目标内设置全局属性

Properties 在MSbuild目标内设置全局属性,properties,msbuild,target,Properties,Msbuild,Target,我有一个MSBuild项目,在这个项目中,我需要执行不同的准备操作,从列表中生成一些解决方案,执行一些最终操作。 如果解决方案失败–发送一封电子邮件(写一条消息)说明这一点。 如果至少有一个解决方案失败——整个过程被视为失败,我会就此发送一封电子邮件(写一条消息)。 为了实现这一点,我在SolutionsToBuild项目组上使用目标批处理。 我检查每个编译的结果并将其存储在CurrentSolutionBuildResult中。 然后我的想法是让一个全局属性buildsucceed,默认值设置

我有一个MSBuild项目,在这个项目中,我需要执行不同的准备操作,从列表中生成一些解决方案,执行一些最终操作。 如果解决方案失败–发送一封电子邮件(写一条消息)说明这一点。 如果至少有一个解决方案失败——整个过程被视为失败,我会就此发送一封电子邮件(写一条消息)。 为了实现这一点,我在SolutionsToBuild项目组上使用目标批处理。 我检查每个编译的结果并将其存储在CurrentSolutionBuildResult中。 然后我的想法是让一个全局属性buildsucceed,默认值设置为true。 如果目标BuildAllSolutions中的解决方案失败–我将此属性设置为false,以便在目标MainTarget结束时,我可以检查该属性并用build failure或build success写入消息。 不幸的是,在主要目标结束时,我得到了一个信息:

构建所有解决方案后-buildsucceed为:'true' 建设成功

虽然我希望将此属性设置为false,因为它是在针对target BuildAllSolutions的每次迭代中完成的:

为C:\SampleSolution\SampleSolution3.sln生成失败! 目标BuildAllSolutions中的BuildSucceed为“false”

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


真的
$(MSBuildLastTaskResult)
假的
<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>