Quick Version:
Note all the examples at:
http://www.cruisecontrolnet.org/projects/ccnet/wiki/File_Merge_Task
are "*.xml" files.
<merge>
<files>
<file>Nunit*.xml</file>
<file>FXCop.xml</file>
<file>resources\**\*.xml</file>
<file>E:\CruiseControl\BuildRoot\ProjectX\**\coderesults.xml</file>
<file>E:\CruiseControl\BuildRoot\Project*\**\Business*.xml</file>
</files>
</merge>
You need to merge .xml, not .htm(l).
Longer Version:
The merge task merges ~xml.
Whenever there is a build, there is a "MyBuildResults.xml" file, which I call the "super-xml".
If you have a tool (like NUnit(console).exe for example), that tool will push out a file, "NUnitTestResults.xml".
The CruiseControl.NET merge task will then take "NUnitTestResults.xml" (operative thing, it is XML) and "merge" that into the MyBuildResults.xml (again, XML).
That kind of makes sense. You can merge XML into other XML. How could you take any file and merge it into any file, including an .html file. If you merge HTML, what comes first? Last? Middle?
Now, once your have a final "MyBuildResults.xml", there are .XSL files that will transform that into .html that shows up in the CruiseControl.NET project webpage.
You'll notice a bunch of links (to the left) of the CruiseControl.NET webpage...one of them being "NUnit Test Results". But out of the box, if you click it, nothing displays.
That's because no NUnitTestResults.xml has been "merge up into" the super-build-xml file.
If you find the .xsl files that CruiseControl.NET installs for you (or you installed after the fact), take a look at those, that will show you how that .xsl transforms the XML of the "super-build-xml".