在msbuild中动态创建属性以在calltarget子目标中使用

时间:2012-05-14 11:07:41

标签: msbuild

如何在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的工作原理。

2 个答案:

答案 0 :(得分:1)

您可以使用目标属性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>

只需拨打第二个目标。

答案 1 :(得分:0)

神圣的废话。这显然是msbuild中的一个错误?

Overwrite properties with MSBuild

http://weblogs.asp.net/bhouse/archive/2006/03/20/440648.aspx

编辑:或者这是一个功能? https://stackoverflow.com/a/7539455