在Tar​​get中定义并使用“变量”

时间:2014-08-15 10:38:19

标签: msbuild

Target中,我需要多次使用%(Foo.Filename)%(Foo.Extension)

有没有办法定义可以用来代替%(Foo.Filename)%(Foo.Extension)的“变量”(或类似的东西)?最好在Target

(为了完整起见:%(Foo.Identity)是不同的。)

1 个答案:

答案 0 :(得分:2)

取决于%在该目标中的使用方式,因为它不仅仅是引用元数据的简写,就好像它是一个类属性,而是一个批处理项目组的方法。没有一些边缘情况,例如项目组1,creating a property during execution将无法正常工作,因为它将在循环中覆盖自身;最常见的方式是target batchingtransforms或自定义metadata

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Foo Include="*.cs" />
  </ItemGroup>

  <Target Name="Foo">
    <ItemGroup>
      <Foo>
        <Lorem>Ipsum.%(Filename)%(Extension)</Lorem>
      </Foo>
    </ItemGroup>
    <Message Text="%(Foo.Lorem)" />
  </Target>

  <Target Name="Bar">
    <ItemGroup>
      <Lorem Include="Ipsum.%(Foo.Filename)%(Extension)" />
    </ItemGroup>
    <Message Text="@(Lorem)" />
    <Message Text="@(Foo -> 'Ipsum.%(Filename)%(Extension)')" />
  </Target>

  <Target Name="Baz" Inputs="@(Foo)" Outputs="Ipsum.%(Filename)%(Extension)">
    <PropertyGroup>
      <Lorem>Ipsum.%(Foo.Filename)%(Extension)</Lorem>
    </PropertyGroup>
    <Message Text="$(Lorem)" />
  </Target>
</Project>