Как установить свойства для элементов в ItemGroup на основе имени добавляемого элемента? - PullRequest
0 голосов
/ 07 января 2020

Скажем, в моем файле msbuild есть следующее ItemGroup:

<ItemGroup>
  <!-- build all the .proto files -->
  <MyGroup Include="**/*.txt" MyProperty="[something here to extract metadata for each item]" />
</ItemGroup>

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

1 Ответ

0 голосов
/ 09 января 2020

Вы можете использовать известные метаданные элемента внутри элемента.

<Project>
  <ItemGroup>
     <TextFiles Include="**/*.txt"
         MyProperty="Included file %(Filename)(Extension: %(Extension)) in directory %(RelativeDir)" />
  </ItemGroup>
  <Target Name="ListTextFiles">
    <Message Importance="high" Text="@(TextFiles->'%(Identity): %(MyProperty)', '%0A')" />
  </Target>
</Project>

со структурой файла

fileA.txt
SomeSubfolder\fileB.txt
SomeSubfolder\fileC.txt

отпечатки:

>dotnet msbuild -t:ListTextFiles -nologo
  fileA.txt: Included file fileA(Extension: .txt) in directory
  SomeSubfolder\fileB.txt: Included file fileB(Extension: .txt) in directory SomeSubfolder\
  SomeSubfolder\fileC.txt: Included file fileC(Extension: .txt) in directory SomeSubfolder\
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...