Properties 在MSbuild目标内设置全局属性
我有一个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目标不会在开始时执行,而是在执行一些其他操作之后执行)。 下面是代码,也许有人可以建议我如何实现我需要的… 谢谢Properties 在MSbuild目标内设置全局属性,properties,msbuild,target,Properties,Msbuild,Target,我有一个MSBuild项目,在这个项目中,我需要执行不同的准备操作,从列表中生成一些解决方案,执行一些最终操作。 如果解决方案失败–发送一封电子邮件(写一条消息)说明这一点。 如果至少有一个解决方案失败——整个过程被视为失败,我会就此发送一封电子邮件(写一条消息)。 为了实现这一点,我在SolutionsToBuild项目组上使用目标批处理。 我检查每个编译的结果并将其存储在CurrentSolutionBuildResult中。 然后我的想法是让一个全局属性buildsucceed,默认值设置
真的
$(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>