Отображение списка элементов, разделенных запятыми
При работе со списками элементов в 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
Если вы хотите изменить поведение по умолчанию, можете задать свой разделитель. Для этого используется следующий синтаксис:
@(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="http://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>