This came across the internal MSBuild discussion alias this week:
How can I concatenate a bunch of individual files into a single file during my build process? It looks like the ReadLinesFromFile and WriteLinesToFile tasks will do what I want, but I can't figure out what kind of batching operators to use.
Dan provided an elegant answer. The first step is to create an ItemGroup with the files you want to concatenate:
Then create a target to do the concatenation:
<Output TaskParameter="Lines" ItemName="lines"/>
<WriteLinesToFile File="test.out" Lines="@(Lines)" Overwrite="false" />
The first task, ReadLinesFromFiles, goes through each file in the InFiles list and adds their lines to a new list called Lines. To ensure that each file is done in a loop (batched), the .Identity item metadata is tacked on. The lines that are read in are added to a new property called Lines, which is created by using the Output element. Then WriteLinesToFile takes the generated list and spits them out to a file.
[ Author: Neil Enns ]