Поделиться через


Отображение списка элементов, разделенных запятыми

При работе со списками элементов в 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>