1

这是我的目标文件

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="BuildApp" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
<PropertyGroup>
  <TestInitResult>false</TestInitResult>
</PropertyGroup>

<Target Name="BuildApp">
  <CallTarget Targets="TestInit" ContinueOnError="true"/>

  <Message Importance="high" Text="2 Value of flag: $(TestInitResult)"/>
  <CallTarget Targets="target2" />
  <CallTarget Targets="RunBuild" Condition="'$(TestInitResult)'=='true'"/>
</Target>

<Target Name="TestInit">
  <PropertyGroup>
    <TestInitResult>true</TestInitResult>
  </PropertyGroup>
  <Message Importance="high" Text="1 Value of flag: $(TestInitResult)"/>
</Target>


<Target Name="target2">
  <Message Importance="high" Text="Inside run target2"/>
</Target>

<Target Name="RunBuild">
    <Message Importance="high" Text="Inside run build"/>
</Target>

</Project>

msbuild 的输出:

D:\CQF>msbuild build.targets
Microsoft (R) Build Engine version 12.0.30501.0
[Microsoft .NET Framework, version 4.0.30319.34209]
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 7/31/2015 4:38:49 AM.
Project "D:\CQF\build.targets" on node 1 (default targets).
TestInit:
  1 Value of flag: true
BuildApp:
  2 Value of flag: false
target2:
  Inside run target2
Done Building Project "D:\CQF\build.targets" (default targets).


Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.06

目标“TestInit”中设置的TestInitResult的值在返回时在目标“BuildApp”中不可见。

请让我知道如何使 TestInitResult 在父目标中可见。或者是否有更好的方法来实现所需的结果。

我想要实现的是,首先 TestInit 目标应该运行,然后 target2 应该运行,并且目标 RunBuild 只有在 TestInit 成功时才应该运行。如果 TestInit 失败,只运行 target2,跳过 RunBuild。

谢谢你。

4

0 回答 0