Within MSBild solution you can use at the least three approaches.
- Execute copy command (simply to understand and support, may affects
build performance in case of much calls perfomed);
- Use ReadLinesFromFile/WriteLinesToFile msbuild tasks (simply enough, but resulting file will lose formatting)
- Use .NET File.ReadAllText/WriteLinesToFile (good result, but may be complicated in some cases)
Executing copy command
To merge with copy command you should add something like this into your target:
<Exec Command="COPY /b file1.min.js + file2.min.js files-merged.min.js" />
In most cases it should be enough.
Using ReadLinesFromFile/WriteLinesToFile msbuild tasks
<ItemGroup>
<SourceFiles Include="file1.min.js;file2.min.js" />
</ItemGroup>
<ReadLinesFromFile File="%(SourceFiles.Identity)">
<Output TaskParameter="Lines" ItemName="FileLines" />
</ReadLinesFromFile>
<WriteLinesToFile File="files-merged.min.js" Lines="@(FileLines)" Overwrite="true" />
This example illustrates how to use native msbuild facilities to merge both files. Unfortunately, in that case we're loosing file formatting.
Using .NET File.ReadAllText() and msbuild WriteLinesToFile
<ItemGroup>
<SourceFiles Include="arrays.cmd;cp.cmd" />
<FileLines Include="$([System.IO.File]::ReadAllText(%(SourceFiles.Identity)))" />
</ItemGroup>
<WriteLinesToFile File="test.out" Lines="@(FileLines)" Overwrite="true" />
This approach fast and accurate, but uses some kind of .NET injection.