I use the old free NCover with the Exec task:
CCNET.config:
<exec>
<executable>C:\program files\Ncover\NCover.Console.exe</
executable>
<buildArgs>"C:\program files\NUnit 2.4.6\bin\nunit-
console.exe" "D:\AutomatedBuilds\ProjectName\bin\Debug
\ProjectName.dll" //reg //x D:\AutomatedBuilds\ProjectName\bin\Debug
\NCoverOutput.xml</buildArgs>
<baseDirectory>D:\AutomatedBuilds\ProjectName\bin\Debug\</
baseDirectory>
</exec>
<!-- Now create a usable NCover report -->
<exec>
<executable>C:\program files\NcoverExplorer
\NCoverExplorer.Console.exe</executable>
<buildArgs>D:\AutomatedBuilds\ProjectName\bin\Debug
\NCoverOutput.xml /x:D:\AutomatedBuilds\ProjectName\bin\Debug
\CoverageReport.xml /r:ModuleClassFunctionSummary /p:ProjectName</
buildArgs>
<baseDirectory>D:\AutomatedBuilds\ProjectName\bin\Debug\</
baseDirectory>
</exec>
<!-- Merge the resultant files into the build report -->
<merge>
<files>
<file>D:\AutomatedBuilds\ProjectName\bin\Debug
\TestResult.xml</file>
<file>D:\AutomatedBuilds\ProjectName\bin\Debug
\CoverageReport.xml</file>
</files>
</merge>
My dashboard config looks like:
<buildReportBuildPlugin>
<xslFileNames>
<xslFile>xsl\header.xsl</xslFile>
<xslFile>xsl\modifications.xsl</xslFile>
<xslFile>xsl\compile.xsl</xslFile>
<!--xslFile>xsl\compile-msbuild.xsl</xslFile-->
<xslFile>xsl\msbuild2ccnet.xsl</xslFile>
<xslFile>xsl\unittests.xsl</xslFile>
<xslFile>xsl\MsTestSummary.xsl</xslFile>
<xslFile>xsl\fxcop-summary_1_36.xsl</xslFile>
<xslFile>xsl\FxCopReport_1_36.xsl</xslFile>
<xslFile>xsl\NCoverSummary.xsl</xslFile>
<xslFile>xsl\SimianSummary.xsl</xslFile>
<xslFile>xsl\fitnesse.xsl</xslFile>
<xslFile>xsl\CoverageReport.xsl</xslFile>
<xslFile>xsl\sourcemonitor-summary.xsl</xslFile>
</xslFileNames>
</buildReportBuildPlugin>