Anzeigen einer durch Trennzeichen getrennten Elementliste

Beim Arbeiten mit dem Elementlisten in der Microsoft-Build-Engine (MSBuild) ist es manchmal hilfreich, den Inhalt dieser Elementlisten in einer leicht lesbaren Ansicht anzuzeigen. Oder Sie haben eine Aufgabe, die eine Liste von durch ein bestimmtes Trennzeichen getrennten Elementen akzeptiert. In beiden Fällen haben Sie die Möglichkeit, eine Trennzeichenabfolge für eine Elementliste anzugeben.

Trennen von Elementen in einer Liste mit Kommas

MSBuild verwendet standardmäßig Semikolons zum Trennen von Elementen in einer Liste. Sehen Sie sich beispielsweise das Message-Element mit dem folgenden Wert an:

<Message Text="This is my list of TXT files: @(TXTFile)"/>

Wenn die @(TXTFile)-Elementliste die Elemente App1.txt, App2.txt und App3.txt enthält, lautet die Meldung:

This is my list of TXT files: App1.txt;App2.txt;App3.txt

Wenn Sie das Standardverhalten ändern möchten, können Sie ein eigenes Trennzeichen angeben. Die Syntax eines Trennzeichens für Elementlisten ist:

@(ItemListName, '<separator>')

Das Trennzeichen kann ein einzelnes Zeichen oder eine Zeichenfolge sein und muss in einfache Anführungszeichen eingeschlossen werden.

So fügen Sie ein Komma und ein Leerzeichen zwischen Elementen ein

  • Verwenden Sie in etwa diese Elementnotation:

    @(TXTFile, ', ')

Beispiel

In diesem Beispiel führt die Aufgabe Exec das Tool „findstr“ aus, um die angegebenen Textzeichenfolgen in der Datei Phrases.txt zu suchen. Im Befehl „findstr“ werden buchstabengetreue Suchzeichenfolgen mit dem Schalter /c: gekennzeichnet. Das Elementtrennzeichen /c: wird also zwischen Elementen in der @(Phrase)-Elementliste eingefügt.

In diesem Beispiel lautet die entsprechende Befehlszeile:

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>