Практическое руководство. Отображение набора элементов, разделенных запятыми
Обновлен: Ноябрь 2007
Во время работы со списками элементов в Microsoft Build Engine (MSBuild) иногда бывает полезно представить содержимое этих списков в виде, наиболее удобном для чтения. Возможно также, что задача заключается в получении списка элементов, отделенных друг от друга специальной строкой разделителей. В обоих этих случаях можно указать строку разделителей для списка элементов.
Отделение элементов в списке с помощью точки с запятой
По умолчанию в MSBuild в качестве разделителей элементов в списке используются точки с запятой. Например, рассмотрим элемент Message со следующим значением:
<Message Text="This is my list of TXT files: @(TXTFile)"/>
Если в списке @(TXTFile) содержатся элементы App1.txt, App2.txt и App3.txt, сообщение выглядит следующим образом:
This is my list of TXT files: App1.txt;App2.txt;App3.txt
Отделение элементов с помощью точки с запятой
Используйте представление элемента следующего вида:
@(TXTFile)
Задание пользовательского разделителя
Используемый по умолчанию разделитель можно изменить, указав свой разделитель. Чтобы указать разделитель списка элементов, используйте следующий синтаксис:
@(ItemListName, '<separator>')
Разделитель может представлять собой либо отдельный символ, либо строку, и его необходимо заключить в одинарные кавычки.
Вставка запятой и пробела между элементами
Используйте представление элемента следующего вида:
@(TXTFile, ', ')
Пример
В данном примере задача Exec запускает средство findstr для поиска указанных текстовых строк в файле Phrases.txt. В команде findstr текстовые строки поиска обозначены ключом /c:, поэтому между элементами в списке @(Phrase) вставляется разделитель элементов /c:.
В данном примере соответствующая команда командной строки будет выглядеть следующим образом:
findstr /i /c:hello /c:world /c:msbuild phrases.txt
<Project DefaultTargets = "Find"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003" >
<ItemGroup>
<Phrase Include="hello"/>
<Phrase Include="world"/>
<Phrase Include="msbuild"/>
</ItemGroup>
<Target Name = "Find">
<!-- Find some strings in a file -->
<Exec Command="findstr /i /c:@(Phrase, ' /c:') phrases.txt"/>
</Target>
</Project>