When you work with item lists in Microsoft Build Engine (MSBuild), it is sometimes useful to display the contents of those item lists in a way that is easy to read. Or, you might have a task that takes a list of items separated with a special separator string. In both of these cases, you can specify a separator string for an item list.
Separate items in a list with commas
By default, MSBuild uses semicolons to separate items in a list. For example, consider a Message
element with the following value:
<Message Text="This is my list of TXT files: @(TXTFile)"/>
When the @(TXTFile)
item list contains the items App1.txt, App2.txt, and App3.txt, the message is:
This is my list of TXT files: App1.txt;App2.txt;App3.txt
If you want to change the default behavior, you can specify your own separator. The syntax for specifying an item list separator is:
@(ItemListName, '<separator>')
The separator can be either a single character or a string and must be enclosed in single quotes.
To insert a comma and a space between items
Use item notation similar to the following:
@(TXTFile, ', ')
Example
In this example, Exec task runs the findstr tool to find specified text strings in the file, Phrases.txt. In the findstr command, literal search strings are indicated by the /c: switch, so the item separator, /c:
is inserted between items in the @(Phrase)
item list.
For this example, the equivalent command-line command is:
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>