5

如何在 msbuild 中创建一个属性,以便可以在 CallTarget 指令中使用它?

本质上,我试图调用一个目标“子例程”,其中属性充当参数。

我尝试制作一个尝试创建属性的玩具 csproj 文件,然后调用一个目标来回显它。它回显为空。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Test">
    <CreateProperty Value="AAA">
        <Output TaskParameter="Value" PropertyName="Foo" />
    </CreateProperty>
    <CallTarget Targets="Test2" />
  </Target>
  <Target Name="Test2">
    <Message Text="Target Test2: Foo=$(Foo)" />
  </Target>
</Project>

运行msbuild TestProj.csproj /t:Test输出:

Test:
  Target Test: Foo=AAA
Test2:
  Target Test2: Foo=

我想问题是我正在以一种命令式的方式考虑 msbuild(这显然是一个常见的错误),所以我希望有人能够纠正对 msbuild 如何工作的一个非常基本的误解。

4

2 回答 2

2

您可以使用目标属性 DependsOnTarget 来获取从任务传递到任务的属性。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Test">
    <CreateProperty Value="AAA">
        <Output TaskParameter="Value" PropertyName="Foo" />
    </CreateProperty>
  </Target>
  <Target Name="Test2" DependsOnTargets="Test">
    <Message Text="Target Test2: Foo=$(Foo)" />
  </Target>
</Project>

只需调用第二个目标。

于 2012-05-14T12:17:20.710 回答
0
于 2012-05-14T11:28:26.737 回答