Тонкость MSBuild с метаданными элемента? - PullRequest
1 голос
/ 27 марта 2012

Рассмотрим тип элемента FooItem в проекте MSBuild.

В задаче мы можем сделать ссылки на элементы и их метаданные, такие как:

%(FooItem.BarMetadata)

или

@(FooItem->'Metadata("BarMetadata")')

или

@(FooItem->'%(BarMetadata)')

Есть ли разница между этими тремя подходами, которые кажутся мне идентичными? Очевидно, что синтаксис преобразования (->) в целом более мощный, но я ясно дал простой пример, эквивалентный использованию оператора %, из того, что я могу сказать.

Кроме того, есть ли какое-либо влияние на пакетирование задач здесь (при условии, что эти выражения находятся внутри элемента задачи)? В общем, мне интересно, есть ли способ предотвратить пакетную обработку задач по метаданным, но при этом ссылаться на некоторые метаданные в задаче.

1 Ответ

3 голосов
/ 27 марта 2012

не идентично.Синтаксис преобразования добавляет входные данные в массив Items, разделенный точкой с запятой.Запись % добавляет входные данные к ItemGroup Element.

. Рассмотрим следующую цель:

<Target Name="TestMetadata">

  <ItemGroup>
    <Files Include="File1.doc">
      <Description>Word Document</Description>
    </Files>
    <Files Include="File2.xls">
      <Description>Excel Document</Description>
    </Files>
    <Files Include="File3.pps">
      <Description>PowerPoint Presentation</Description>
    </Files>
  </ItemGroup>

  <Message Text="Transform: @(Files->'%(FullPath) is %(Description)')" />
  <Message Text="Direct: %(Files.FullPath) is %(Files.Description)" />

</Target>

Как показывают выходные данные, эти записи дают различный вывод:

TestMetadata:   
 Transform: C:\MSBuild\File1.doc is Word Document;C:\MSBuild\File2.xls is Excel Document;C:\\MSBuild\File3.pps is PowerPoint Presentation
Direct: C:\MSBuild\File1.doc is Word Document   
Direct: C:\MSBuild\File2.xls is Excel Document   
Direct: C:\MSBuild\File3.pps is PowerPoint Presentation
...