<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-21622397</id><updated>2012-02-12T04:03:11.252Z</updated><title type='text'>Kiwidude's Geek Spot</title><subtitle type='html'>Ramblings about NCoverExplorer, .Net development and other geek toys</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-21622397.post-3807450287284844053</id><published>2010-04-28T11:40:00.001+01:00</published><updated>2010-04-30T01:41:22.776+01:00</updated><title type='text'>This blog has moved</title><content type='html'>&lt;br /&gt;       This blog is now located at http://kiwidudeuk.blogspot.com/.&lt;br /&gt;       You will be automatically redirected in 30 seconds, or you may click &lt;a href='http://kiwidudeuk.blogspot.com/'&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;       For feed subscribers, please update your feed subscriptions to&lt;br /&gt;       http://kiwidudeuk.blogspot.com/feeds/posts/default.&lt;br /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-3807450287284844053?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://kiwidudeuk.blogspot.com/' title='This blog has moved'/><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/3807450287284844053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=3807450287284844053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/3807450287284844053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/3807450287284844053'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2010/04/this-blog-has-moved.html' title='This blog has moved'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-327622590388304954</id><published>2007-09-19T22:19:00.000+01:00</published><updated>2007-09-20T01:20:06.508+01:00</updated><title type='text'>NCover v2.0.1 (with NCoverExplorer v2.0)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer128-704363.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer128-704360.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Woah, &lt;a href="http://www.ncover.com/index.php"&gt;what's this?&lt;/a&gt; You wait six months for the next NCoverExplorer bus to arrive and then two come along at once? Even better, there is a bright and shiny new NCover 2.0.1 to go with it...&lt;br /&gt;&lt;br /&gt;Peter Waldschmidt nicely &lt;a href="http://www.ncover.com/blog/2007/09/17/uncovering-the-new-ncover/"&gt;summarises&lt;/a&gt; in the new &lt;a href="http://www.ncover.com/blog/"&gt;NCover blog&lt;/a&gt; his thoughts and rationale behind the decision to transition to a commercialised product. We've been talking about the combined possibilities for a little while now until the timing came right for Peter to make it all happen and start the &lt;a href="http://www.gnoso.com/"&gt;Gnoso team&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For my part, I'm excited at what this means for the future of both products. Peter and his team have a long list of ideas and enhancements to really drive NCover forward and enhance it's existing reputation as the leading tool for .NET code coverage analysis. This opens up even more possibilities for new features for the NCoverExplorer tools to further improve their ability to deliver quality information to developers. Most importantly, the new business model Peter has put in place offers the necessary resources to make it happen.&lt;br /&gt;&lt;br /&gt;You can already see the benefits of this in NCover 2.0.1 which we think is a giant step forward from the betas in 1.x. The highlights listed in "&lt;a href="http://www.ncover.com/documentation/whatsnew"&gt;What's New&lt;/a&gt;" include a bunch of cool new features like interactive HTML reports, branch coverage and regular-expression based exclusions. I've provided my fair share of support in the NCover forums over time and the important "pain points" from 1.x or missing features like x64 support, IIS and service profiling have been focused on for NCover 2.0. Tremendous effort has gone into an ever growing automated suite of integration and regression tests across a range of OS/.NET versions to keep pushing the bar higher as the product moves forward. With dedicated support now available to address any issues as they arise I'm optimistic the product will continue to evolve very quickly.&lt;br /&gt;&lt;br /&gt;So what does this all mean for NCoverExplorer? Well, &lt;a href="http://www.kiwidude.com/blog/2007/09/ncoverexplorer-v140.html"&gt;NCoverExplorer 1.4&lt;/a&gt; will continue to be freely available but will not be further enhanced. Instead my time and effort in conjunction with the Gnoso team has moved onto NCoverExplorer 2.0 which is now bundled with and more tightly integrated into NCover 2.0.1. The last few months have been spent pulling this together and it's a great feeling to get into the product some long awaited and often requested features in this version alone, such as...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;support for all the new NCover 2.0 features (of course!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;multiple "project" support for settings per application you profile&lt;br /&gt;&lt;/li&gt;&lt;li&gt;auto-selecting your project settings when coverage xml files are loaded&lt;br /&gt;&lt;/li&gt;&lt;li&gt;more reports and enrichment of existing ones&lt;/li&gt;&lt;li&gt;more coverage exclusion types&lt;/li&gt;&lt;li&gt;a new and improved NCover dialog&lt;/li&gt;&lt;li&gt;a graphical source code navigation bar&lt;/li&gt;&lt;li&gt;an updated and more customisable GUI&lt;/li&gt;&lt;li&gt;enhanced NAnt/MSBuild tasks&lt;/li&gt;&lt;li&gt;numerous minor tweaks to enhance ease of use&lt;/li&gt;&lt;/ul&gt;I will blog about many of these features in more detail over the coming few weeks...&lt;br /&gt;&lt;br /&gt;Not to be forgotten is some all important &lt;a href="http://www.ncover.com/documentation"&gt;documentation&lt;/a&gt; available at long last. Configuring the NCover / NCoverExplorer tools into your build process has always involved a potential number of moving parts. The tool suite includes two console apps and a GUI application, two NAnt tasks, two MSBuild tasks, multiple stylesheets - we will continue to enhance the docs and examples to make this all easier for you.&lt;br /&gt;&lt;br /&gt;So, where to from here? Well, by all means please &lt;a href="http://www.ncover.com/download"&gt;download the trial version&lt;/a&gt; of NCover 2.0.1 and send us your feedback. Obviously the new &lt;a href="http://www.ncover.com/forum/"&gt;support forums&lt;/a&gt; are the ideal place for your questions, feature requests and anything you want to see improved further.&lt;br /&gt;&lt;br /&gt;Enjoy! Oh yeah, and don't forget to encourage your coworkers / boss / accountant / significant other / postman etc. to &lt;a href="http://www.ncover.com/quote"&gt;purchase&lt;/a&gt; NCover 2.0 licenses if you don't already &lt;a href="http://www.ncover.com/blog/2007/09/17/uncovering-the-new-ncover/"&gt;qualify for a free one&lt;/a&gt;... you know you want to...&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-327622590388304954?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/327622590388304954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=327622590388304954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/327622590388304954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/327622590388304954'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2007/09/ncover-v201.html' title='NCover v2.0.1 (with NCoverExplorer v2.0)'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-1297831483593691491</id><published>2007-09-16T19:12:00.000+01:00</published><updated>2007-09-16T20:50:36.606+01:00</updated><title type='text'>NCoverExplorer... v1.4.0</title><content type='html'>I've had this "quietly available" on the download page for a few weeks to gain feedback on any issues and with no known issues outstanding it seems appropriate to more publicly announce it.&lt;br /&gt;&lt;br /&gt;A big change in NCoverExplorer 1.4.0 is that it is no longer published under the GPL license. I made this change for a number of reasons; amongst which was the concern that a number of companies have of deploying GPL based tools into their development process. This roadblock has been removed and should no longer prevent your companies from using this toolset.&lt;br /&gt;&lt;br /&gt;My original choice of GPL was based on using the ICSharpCode 1.x texteditor control. I have now dropped that component in favour of using the superior (but commercial) Actipro SyntaxEditor control instead. The improvements are not only in stability and features but also visual as you can see below in the code highlighting screenshot. A splitter window is available as also shown.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.4.0_Splitter-794231.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.4.0_Splitter-794231.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So why should you upgrade to NCoverExplorer 1.4? &lt;br /&gt;&lt;br /&gt;This release is less about adding new features (although there are some to be found) and more about stabilisation for the future. The core model code has been rewritten and better tested. There have been countless code coverage corner cases (say that five times in a row!) arise that should be better catered for. Better performance for .NET 2.0 users, lower resource usage, better error handling and some minor gui quirks addressed.&lt;br /&gt;&lt;br /&gt;Some of the "internal" changes have spilled over externally. For instance the configuration file format used by NCoverExplorer.Console with /c has changed to support new features, although I have retained legacy compatibility for those who choose not to upgrade their build scripts immediately.&lt;br /&gt;&lt;br /&gt;What about the new features? Well, the ones I did squeeze in were...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support for the //pm (profiling a process by name) argument in NCover 1.5.8;&lt;/li&gt;&lt;li&gt;Copy command in the source code text area via right-click;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Print preview command in the File menu;&lt;/li&gt;&lt;li&gt;/fc argument for NCoverExplorer.Console to fail a build if the combined total coverage of all assemblies does not meet the minimum specified. This was the original behaviour of the /f command before it was changed to fail if any individual assembly does not meet the minimum;&lt;/li&gt;&lt;li&gt;Coverage exclusions now support the '?' wildcard and multiple '*' wildcards within the expression.&lt;/li&gt;&lt;li&gt;Report xml contains a "totalSeqPoints" attribute as requested for developers writing alternate xsl reports that need to calculate the excluded code at each level;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Update the NAnt/MSBuild task dlls to support the latest changes;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Redesigned the options dialog as shown below;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.4.0_Options-788911.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.4.0_Options-788911.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;Downloads&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;Release Notes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-1297831483593691491?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/1297831483593691491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=1297831483593691491' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/1297831483593691491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/1297831483593691491'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2007/09/ncoverexplorer-v140.html' title='NCoverExplorer... v1.4.0'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-4418435942024245660</id><published>2007-06-22T20:12:00.001+01:00</published><updated>2007-06-22T20:44:19.746+01:00</updated><title type='text'>CruiseControl.Net... Release 1.3.0 With Integration Queues</title><content type='html'>Some of you may remember &lt;a href="http://www.kiwidude.com/blog/2006/10/cruisecontrolnet-serialised-build_29.html"&gt;this post&lt;/a&gt; from last October about a patch I made for serialising builds in &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET"&gt;CruiseControl.Net&lt;/a&gt;. Owen Rogers was kind enough to give me the "keys to the kingdom" to get this integrated into the main CC.Net branch and as of today it is now officially released in &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/CCNet+1.3+Release+Notes"&gt;CC.Net 1.3.0&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Having had several pair sessions watching Owen "fly" with Resharper was a great experience - many thanks Owen for the effort in getting the final release out as it can't be easy with new baby and work pressures!&lt;br /&gt;&lt;br /&gt;As I said from the very beginning this particular iteration doesn't solve everyone's problems of complex build dependencies, nor was any attempt made to do so. However applying the 80/20 rule it appeared many people were like us with the simpler "this project should never build at the same time as this project" requirement. This implementation should do that just fine with a few bells and whistles such as viewing queue contents, controlling the build order and cancelling pending builds...&lt;br /&gt;&lt;br /&gt;We have been using the nightly builds of 1.3 for quite a number of months now and it has proven solid from our experiences with it. There are of course further enhancements that can be made, but in discussion with Owen we froze it as is for people to get started with it and feedback their own thoughts. For instance one addition I would like to see is to identify in the CCTray queue which items are continuous triggers (checking for modifications) versus which are actual builds that will take place. Perhaps a simple "F" stamped into the icon corner for forced builds with additional information being passed in the xml request from the server about the integration request.&lt;br /&gt;&lt;br /&gt;Documentation for how to use the integration queue feature is &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Integration+Queues"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/CruiseControl.Net" rel="tag"&gt;CruiseControl.Net&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-4418435942024245660?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/4418435942024245660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=4418435942024245660' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/4418435942024245660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/4418435942024245660'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2007/06/cruisecontrolnet-release-130-with.html' title='CruiseControl.Net... Release 1.3.0 With Integration Queues'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-4681798304489626941</id><published>2007-04-19T18:34:00.000+01:00</published><updated>2007-09-16T21:06:48.050+01:00</updated><title type='text'>NCover Problems / Fixes - Part 2</title><content type='html'>In &lt;a href="http://www.kiwidude.com/blog/2007/04/ncover-problems-fixes-part-1.html"&gt;Part 1&lt;/a&gt; of my "everything you wanted to know about NCover but were afraid to ask" series I covered the basics of how NCover works and profiler registration issues. Let's hit another of the most common problems:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Empty Coverage.xml File&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is quite an interesting one, as there are a number of possible causes. You perform your coverage run and don't see any errors in the console output. Yet when you open your coverage.xml file you see something like this from NCover 1.5.7.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"  style="font-size:85%;"&gt;xml&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span class="attr"  style="font-size:85%;"&gt;version&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;="1.0"&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span class="attr"  style="font-size:85%;"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;="utf-8"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;?&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"  style="font-size:85%;"&gt;xml-stylesheet&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span class="attr"  style="font-size:85%;"&gt;href&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;="coverage.xsl"&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span class="attr"  style="font-size:85%;"&gt;type&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;="text/xsl"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;?&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="rem"  style="font-size:85%;"&gt;&amp;lt;!-- saved from url=(0022)http://www.ncover.org/ --&amp;gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"  style="font-size:85%;"&gt;coverage&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span class="attr"  style="font-size:85%;"&gt;profilerVersion&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;="1.5.7 Beta"&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span class="attr"  style="font-size:85%;"&gt;driverVersion&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;="1.5.7.0"&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span class="attr"  style="font-size:85%;"&gt;&lt;br /&gt;startTime&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;="2007-04-19T18:38:47+01:00"&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span class="attr"  style="font-size:85%;"&gt;measureTime&lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;="2007-04-19T18:38:47.921875+01:00"&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;If using an earlier version of NCover the xml will be even less as there will be no attributes on the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;coverage&amp;gt;&lt;/span&gt;&lt;/span&gt; node. So what has gone wrong?&lt;br /&gt;&lt;br /&gt;Fundamentally it comes down to one thing - &lt;span style="font-style: italic;"&gt;there were no debug symbol files found for assemblies that NCover thought it should be profiling&lt;/span&gt;. There are multiple reasons as to why this might be.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Debug Symbol Files&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ok, so not everyone knows what a &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.pdb&lt;/span&gt;&lt;/span&gt; file is and what purpose it serves. A program database (PDB) file holds debugging and project state information (Source: &lt;a href="http://msdn2.microsoft.com/en-us/library/yd4f8bd1%28vs.71%29.aspx"&gt;MSDN&lt;/a&gt;), such as line numbers, source code file information and sequence points. This is what NCover needs to produce in the coverage.xml file the line, column and filename information for each sequence point profiled in each method.&lt;br /&gt;&lt;br /&gt;If you are compiling a windows or console application with a "Debug" configuration in VS.Net then by default a &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.pdb&lt;/span&gt;&lt;/span&gt; file will be produced for each of your assemblies. You can control this in the project properties dialog. Note that by default for "Release" builds no pdb file is produced - another common thing people forget.&lt;br /&gt;&lt;br /&gt;For those of not using VS.Net, you can also produce these files using the command line compilers using the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/debug&lt;/span&gt;&lt;/span&gt; option.&lt;br /&gt;&lt;br /&gt;When NCover runs, it looks in the &lt;span style="font-style: italic;"&gt;current directory of the loaded assembly&lt;/span&gt; for a matching debug file. If it doesn't find the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.pdb&lt;/span&gt;&lt;/span&gt; for an assembly, you will see a "&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Failed to load debug symbols&lt;/span&gt;&lt;/span&gt;" message in the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;coverage.log&lt;/span&gt;&lt;/span&gt; file (more on the log in a future post). NCover then adds that assembly to it's internal list of ones to "skip" and will not bother attempting to profile it.&lt;br /&gt;&lt;br /&gt;You can use this to your advantage. The less assemblies being profiled, the smaller the resulting coverage.xml file and the faster it will run. So rather than using the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;//a&lt;/span&gt;&lt;/span&gt; argument for NCover to specify assemblies (see below) you could simply delete the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;.pdb&lt;/span&gt; files from your testing bin folder prior to the coverage run for assemblies you do not want profiled.&lt;br /&gt;&lt;br /&gt;Having ensured that you are correctly generating &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.pdb&lt;/span&gt;&lt;/span&gt; files in your output folder with the assemblies, what circumstances can lead to NCover saying it cannot find them?&lt;br /&gt;&lt;br /&gt;- Your assembly was installed in the Global Assembly Cache (GAC)&lt;br /&gt;- You are shadow copying assemblies such as when running nunit.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Profiling GAC Assemblies&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When an assembly is installed into the GAC using &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;gacutil&lt;/span&gt;&lt;/span&gt; it is physically copied to a physical folder location in:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;%windir%\Assemblies\GAC\&amp;lt;simple name&amp;gt;\&amp;lt;version&amp;gt;_&amp;lt;culture or blank&amp;gt;_&amp;lt;public key token&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;However what isn't so immediately obvious is that the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;.pdb&lt;/span&gt; file &lt;span style="font-weight: bold;"&gt;is not&lt;/span&gt; installed into that same folder by default. So when NCover runs and your assembly is loaded from the GAC, then NCover will not find the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.pdb&lt;/span&gt;&lt;/span&gt; and will skip profiling for it. For the same reason you will have problems trying to use a debugger with that assembly as well.&lt;br /&gt;&lt;br /&gt;So how can you get around this? Obviously uninstalling from the GAC is one option and certainly the easiest. I appreciate this isn't always the most convenient though.&lt;br /&gt;&lt;br /&gt;Plan B is to move the mountain to Mohammed - and copy the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.pdb&lt;/span&gt;&lt;/span&gt; files into the physical GAC folder. Unfortunately Microsoft didnt make that very easy for us but in typical fashion a number of people out there found a way. You can figure out the location using the pattern above - using the command line of course. Patrick Cauldwell has a blog entry and script for automating it with Powershell (Monad) &lt;a href="http://www.cauldwell.net/patrick/blog/PuttingPDBFilesInTheGACWithMsh.aspx"&gt;here&lt;/a&gt;. Also Scott Colestock has a NAnt task for doing this &lt;a href="http://www.traceofthought.net/PermaLink,guid,f4d20493-70a2-46de-9642-a738dea1ccc0.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NUnit Shadow Copying&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;This scenario is one I only figured out today in response to an issue posted on the NCover forums &lt;a href="http://ncover.org/SITE/forums/thread/1099.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;By default NUnit will shadow copy your assemblies to a shadow cache folder for running it's unit tests - no shock/horror hopefully in that statement. What isn't so obvious however is the behaviour if you compile your assemblies and .pdb files on one machine and then test them on another.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;It appears that .NET does not copy the .pdb files to the shadow cache when they were compiled on another machine - only the assemblies&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So your unit tests still happily pass - but you get no coverage information. Yikes!&lt;br /&gt;&lt;br /&gt;Why does it happily copy them on the same machine but not on a different one? I haven't had time to figure that out yet. My guess is some sort of security/signing type of issue but that is just pure speculation. If you know please tell me - I've put a thread on the nunit forums &lt;a href="https://sourceforge.net/forum/message.php?msg_id=4269622"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What is the workaround? Either profile your assemblies on the same machine you compiled them on, or run nunit-console with the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/noshadow&lt;/span&gt;&lt;/span&gt; argument. Works a treat.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Choosing Assemblies To Profile&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;NCover will by default profile all assemblies loaded into memory for which it finds &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.pdb&lt;/span&gt;&lt;/span&gt; files. If that path includes a lot of debug files for other assemblies that you aren't interested in getting coverage information for, then this will both harm your profiling performance and give you massive coverage files.&lt;br /&gt;&lt;br /&gt;You may also intentionally want to exclude layers of your application - perhaps the presentation or unit test assemblies are deemed irrelevant to your coverage results. I exclude test assemblies from our projects as I feel they unfairly distort the overall coverage percentage. I appreciate others like to have them so they can spot how much of their unit test code was not run.&lt;br /&gt;&lt;br /&gt;I mentioned above that a "quick and dirty" trick is to delete the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.pdb&lt;/span&gt;&lt;/span&gt; files for assemblies you do not want coverage for. A more gentlemanly approach is to use the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;//a&lt;/span&gt; argument with NCover. However there are a couple of tricks to it.&lt;br /&gt;&lt;br /&gt;Firstly, note that this is the AssemblyName, not the physical assembly file name!&lt;span style="font-style: italic;"&gt;&lt;/span&gt; No path information, no .dll suffixes etc. A common mistake is to do something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;ncover.console.exe nunit-console.exe foo.tests.dll &lt;span style="font-weight: bold;"&gt;//a foo.dll&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you do this, then you will get an empty coverage file - as NCover did not find a matching AssemblyName. Almost certainly the correct command line for the above is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;ncover.console.exe nunit-console.exe foo.tests.dll &lt;span style="font-weight: bold;"&gt;//a foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you have multiple assemblies you want to report on, then they are separated by semi-colons.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;ncover.console.exe nunit-console.exe foo.tests.dll &lt;span style="font-weight: bold;"&gt;//a foo;bar&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Building this list up in a script dynamically can be a minor hassle - thankfully my NAnt and MSBuild tasks for NCover will take care of this for you. In fact, they allow you to use a physical file matching pattern to specify the assemblies to be profiled - the tasks then internally strip all the extraneous information and pass just what NCover expects.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-4681798304489626941?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/4681798304489626941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/4681798304489626941'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2007/04/ncover-problems-fixes-part-2.html' title='NCover Problems / Fixes - Part 2'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-4071705996863148825</id><published>2007-04-18T20:21:00.000+01:00</published><updated>2007-09-16T21:08:02.333+01:00</updated><title type='text'>NCover Problems / Fixes - Part 1</title><content type='html'>From time to time I try to chip in with support on the &lt;a href="http://www2.blogger.com/post-create.g?blogID=21622397" org="" site="" forums="" aspx=""&gt;NCover forums&lt;/a&gt;, not only with NCoverExplorer issues but NCover as well since they are so dependent. There are a bunch of issues which come up repeatedly, particularly for people new to using NCover.&lt;br /&gt;&lt;br /&gt;In a perfect world (future release?) NCover itself could offer some more helpful error messages, but where is the fun in that? For now at least it is more a case of deciphering the clues from the console output and coverage.log files.&lt;br /&gt;&lt;br /&gt;Hopefully this series of posts may help a few people and reduce the times I end up repeating myself on the forums, so win-win if it works for you. My examples will use NCover 1.5.7. You should also take a look at the NCover FAQ which is included in your installation. I've got a copy &lt;a href="http://www.kiwidude.com/dotnet/NCoverFAQ.html"&gt;here too&lt;/a&gt; if that helps...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Profiled process terminated. Profiler connection not established.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Easily the most common problem people stumble on. As shown below your application starts (in this case unit tests), but after a delay of 60 seconds or so you get this message.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&gt;&lt;span style="font-weight: bold;"&gt;E:\apps\NCover\ncover.console.exe E:\apps\nunit\nunit-console.exe MyTests.dll&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;NCover.Console v1.5.7 - Code Coverage Analysis for .NET - http://ncover.org&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Copyright (c) 2004-2006 Peter Waldschmidt&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Command: E:\apps\nunit\nunit-console.exe&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Command Args: "MyTests.dll"&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Working Directory:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Assemblies:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Coverage Xml: Coverage.Xml&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Coverage Log: Coverage.Log&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Waiting for profiled application to connect...&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;NUnit version 2.2.8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;Copyright (C) 2002-2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;Copyright (C) 2000-2003 Philip Craig.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;All Rights Reserved.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;OS Version: Microsoft Windows NT 5.1.2600 Service Pack 2    .NET Version: 2.0.50727.42&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;Tests run: 1, Failures: 0, Not run: 0, Time: 0.016 seconds&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;Connected&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);font-family:courier new;" &gt;Profiled process terminated. Profiler connection not established.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most likely this is due to one of two reasons I know of:&lt;br /&gt;&lt;br /&gt;(1) You are profiling a windows service or IIS - this feature has been reported as currently broken.&lt;br /&gt;&lt;br /&gt;(2) You are profiling an executable - but Coverlib.dll was not COM registered&lt;br /&gt;&lt;br /&gt;Unfortunately the windows service/IIS testing fell down the cracks for 1.5.7 for those of you trying to use this feature. You can monitor some of the threads on it &lt;a href="http://ncover.org/SITE/forums/thread/1110.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://ncover.org/SITE/forums/thread/1097.aspx"&gt;here&lt;/a&gt;. Personally for my applications I remove the need to profile services at all. By making the windows service a super lightweight wrapper and moving all the implementation out into classes that are more easily tested there is no need to unit test what remains.&lt;br /&gt;&lt;br /&gt;I appreciate however there are scenarios for people where they do want coverage of services for integration testing etc - all I can say for now is that Peter is on the case. Let's now focus on the more common scenario for people trying to profile executables and offer some background info.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NCover Basics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So what's that registration bit about then - surely NCover is a .NET application? Sure, some of it is - but the really clever bit of NCover is the C++ implementation of &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;ICorProfiler&lt;/span&gt;&lt;/span&gt; in &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Coverlib.dll&lt;/span&gt;&lt;/span&gt;, which is a callback class for use with the .NET Profiler API. The requirements of the API are that the callback class has to be COM registered and it cannot be written in managed code. By using some environment variables set within NCover before launching your process, the .NET profiler is able to be "switched on" to make the API callbacks while your process is running.&lt;br /&gt;&lt;br /&gt;This is the heart of NCover - it monitors the loading of AppDomains and modules, intercepts the JIT execution of methods and injects it's own instructions to monitor the execution counts. This data is then pumped back to the "managed code" part of NCover, which munges the data together to produce the coverage.xml output you know and love for NCoverExplorer to manipulate.&lt;br /&gt;&lt;br /&gt;So the "profiler connection not established" message indicates that there was some sort of problem with communication between NCover and the .NET profiler. As illustrated with the windows service problem above this message doesn't &lt;span style="font-weight: bold;"&gt;always&lt;/span&gt; mean that it was caused by a registry problem, but many times it is and it's worth double-checking first.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NCover Installation / XCopy Deployment&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;If you installed NCover using the MSI installer, then it will have automatically COM registered &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;CoverLib.dll&lt;/span&gt;&lt;/span&gt; for you in "&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;C:\Program Files\NCover\&lt;/span&gt;&lt;/span&gt;". If however, you are like many people intending to run NCover using an xcopy style deployment mechanism as with other tools such as NUnit, then you &lt;span style="font-weight: bold;"&gt;must &lt;/span&gt;remember about this requirement.&lt;br /&gt;&lt;br /&gt;So let's say you do want to relocate NCover to a tools subfolder in a source controlled directory - what's the idiot-proof way to do it?&lt;br /&gt;&lt;br /&gt;Firstly, make sure you copy &lt;span style="font-weight: bold;"&gt;all&lt;/span&gt; the NCover files from the installation folder above. Make sure you don't skip the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Microsoft.VC80.CRT.manifest&lt;/span&gt;&lt;/span&gt;, &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;MSVCP80.dll&lt;/span&gt;&lt;/span&gt; or &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;MSVCR80.dll&lt;/span&gt;&lt;/span&gt; files. If you do skip them, then an attempt to register &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Coverlib.dll&lt;/span&gt;&lt;/span&gt; will fail on machines without these .dlls already in a path somewhere. You may find it works on your development machine with VS.Net installed, but then fails on your build server.&lt;br /&gt;&lt;br /&gt;Secondly, make sure you run the NCover uninstall which will clean up the registry as well as the installed files. So now your machine should be back in "pristine" condition.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Options For Registering NCover&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;So having identified that when running NCover.Console.exe you need to ensure that &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Coverlib.dll&lt;/span&gt;&lt;/span&gt; is registered - what are your options?&lt;br /&gt;&lt;br /&gt;1. If you stuck with the default NCover installation, have no need for locating it elsewhere and need only one version of NCover for all your applications. Congratulations - you shouldnt have seen the problem above! If you did, you should manually re-register it using &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;regsvr32&lt;/span&gt;&lt;/span&gt; or try running the installer again.&lt;br /&gt;&lt;br /&gt;2. The NAnt/MSBuild tasks I provide automatically register and unregister &lt;span style=";font-family:courier new;font-size:85%;"  &gt;Coverlib.dll&lt;/span&gt; on the fly under &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;HKCU&lt;/span&gt;&lt;/span&gt;. So if using those you are already sorted.&lt;br /&gt;&lt;br /&gt;3. If using the command line, NCover 1.5.7 now offers a &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;//reg&lt;/span&gt;&lt;/span&gt; option. This will do the same as the tasks above of registering and unregistering on the fly.&lt;br /&gt;&lt;br /&gt;4. You could invoke &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;regsvr32&lt;/span&gt;&lt;/span&gt; on it as part of your script. I suggest you unregister it as well afterwards in case you have multiple NCover versions on your machine to prevent any later confusion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NCover With TestDriven.NET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I got myself caught out with this little gotcha recently and I'm sure I won't be the last!&lt;br /&gt;&lt;br /&gt;As you likely know the excellent &lt;a href="http://testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; add-in by Jamie Cansdale includes a copy of (currently) NCover 1.3.3 and NCover 1.5.7 bundled with it. What you probably don't know is under which scenarios it runs which version of NCover and where this can go wrong.&lt;br /&gt;&lt;br /&gt;The first thing TestDriven.Net does is check the registry to see if you have installed NCover yourself using the MSI installer. If there isn't then it knows to use one of the versions it has installed. If you have .NET 2.0 installed on your machine it will use the 1.5.x version, otherwise it will use NCover 1.3.3.&lt;br /&gt;&lt;br /&gt;If however you do have NCover installed from the MSI, then TestDriven.NET assumes that you want to use that version. Jamie's rationale for this is simple - if you ended up with later versions of NCover on your machine than that supplied with TestDriven.NET then it should use that over it's own.&lt;br /&gt;&lt;br /&gt;Where this can go wrong as it did for me is if for some reason you have unregistered NCover in that folder. TestDriven.NET makes the reasonable assumption that if you installed it and left it there then you have it registered there too. However as I dabble with testing and supporting multiple NCover versions all over my drives I had manually unregistered it without remembering to uninstall it. That mistake will then lead to error messages from TestDriven.NET about "&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Unable to create a coverage report&lt;/span&gt;&lt;/span&gt;". Either fully uninstall that NCover installation or register &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;CoverLib.dll&lt;/span&gt;&lt;/span&gt; again in that folder to fix this. My thanks to Jamie for his excellent support!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TypeMock And NCover NAnt/MSBuild Tasks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.typemock.com/"&gt;TypeMock&lt;/a&gt; is a very powerful mock objects framework which no doubt some of you are using. Assuming you have purchased the commercial version then you will likely want to be running your tests with code coverage using NCover.&lt;br /&gt;&lt;br /&gt;The one gotcha with this is that a requirement of the .NET profiling API is that there can only be one profiler callback registered on a machine when it runs. TypeMock takes care of this by managing the registry itself. However if you use my NAnt/MSBuild tasks then by default they want to "undo" the work of TypeMock by registering NCover, causing a problem.&lt;br /&gt;&lt;br /&gt;The solution is available from the 1.3.6.11 build of my tasks in NCoverExplorer.Extras, the latest of which is available &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;here&lt;/a&gt;. By adding a &lt;span style=";font-family:courier new;font-size:85%;"  &gt;registerProfiler="false" &lt;/span&gt;attribute to your NAnt task or equivalent for MSBuild the default behaviour of the tasks to register in HKCU is turned off and control is able to be maintained by TypeMock.&lt;br /&gt;&lt;br /&gt;That's enough for today. &lt;a href="http://www.kiwidude.com/blog/2007/04/ncover-problems-fixes-part-2.html"&gt;Part 2&lt;/a&gt; will cover the mysterious blank coverage.xml file. Feedback/corrections welcomed - if you have an NCover problem your best bet is to head to the &lt;a href="http://www2.blogger.com/post-create.g?blogID=21622397" org="" site="" forums="" aspx=""&gt;NCover forums&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-4071705996863148825?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/4071705996863148825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=4071705996863148825' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/4071705996863148825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/4071705996863148825'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2007/04/ncover-problems-fixes-part-1.html' title='NCover Problems / Fixes - Part 1'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-8931441222868609593</id><published>2007-04-06T01:30:00.000+01:00</published><updated>2007-04-06T01:49:11.142+01:00</updated><title type='text'>NCoverExplorer... v1.3.6</title><content type='html'>Some of you may already have noticed the long awaited release of &lt;a href="http://ncover.org/SITE/blogs/ncover_blog/archive/2007/04/04/1056.aspx"&gt;NCover 1.5.7&lt;/a&gt; yesterday - hoorah! That now being out of the way and in conjunction with some easing of my day job pressure, has made it a good time for me to finally rollout an NCoverExplorer update.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Note&lt;/span&gt; - if you have downloaded NCoverExplorer or &lt;a href="http://testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; over the last week or so you may want to do so again. I have been sneaking in fixes for issues right up until this blog posting. Check the &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;downloads page&lt;/a&gt; to make sure you have the very latest build number.&lt;br /&gt;&lt;br /&gt;This is predominantly a bug-fix release, addressing a range of issues that have accumulated over the last six months. Of utmost importance was &lt;span style="font-weight:bold;"&gt;improving the coverage result accuracy&lt;/span&gt; from either the merging of multiple coverage.xml files or multiple AppDomains within a single file. Some of you have experienced issues with the "optimisations" of removing noop sequence points that NCover 1.5.4, 1.5.5 and 1.5.7 apply in different ways. This resulted in duplicated nodes in the treeview, or lower than expected coverage with brackets being shown as not hit etc. My thanks to everyone who contributed to the testing of this with their coverage files/repro projects and patience while I got the kinks out. &lt;br /&gt;&lt;br /&gt;On the new feature front, the biggest is a "Find Type" dialog (ctrl+F) allowing you to navigate to types by entering their name (supports * for a wildcard).&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.6_FindTypes.png" border="0" alt="" /&gt;&lt;br /&gt;A change to previous behaviour is to the &lt;span style="font-weight:bold;"&gt;fail on minimum coverage&lt;/span&gt; option for NCoverExplorer.Console. Based on feedback this has now been changed so that &lt;span style="font-weight:bold;"&gt;any&lt;/span&gt; assembly not reaching the threshold will cause the build to fail, rather than &lt;span style="font-weight:bold;"&gt;total&lt;/span&gt; coverage.&lt;br /&gt;&lt;br /&gt;All the other tweaks and fixes can be found in the &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;release notes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have updated the NCoverExplorer Extras download containing the NAnt and MSBuild tasks. The &lt;span style="font-weight:bold;"&gt;&amp;lt;ncover&amp;gt;&lt;/span&gt; task now uses a reference counting style approach to the registration of coverlib.dll, which should get around issues reported on build servers of simultaneous build issues if you got unlucky with the timings. &lt;br /&gt;&lt;br /&gt;The task now includes a &lt;span style="font-style:italic;"&gt;registerProfiler&lt;/span&gt; optional attribute for those of you using TypeMock - you can set this to "false" to ensure the NCover task does not try to register CoverLib.dll itself. &lt;br /&gt;&lt;br /&gt;There is an enhancement to the &lt;span style="font-weight:bold;"&gt;&amp;lt;nunitproject&amp;gt;&lt;/span&gt; task to support the &lt;span style="font-style:italic;"&gt;appbase&lt;/span&gt; property for people using multiple testing folders (thanks to Garth Williams).&lt;br /&gt;&lt;br /&gt;Another addition is a new &lt;span style="font-weight:bold;"&gt;&amp;lt;ndoc2&amp;gt;&lt;/span&gt; NAnt task in there for anyone using &lt;a href="http://www.kynosarges.de/NDoc.html"&gt;NDoc2 Alpha&lt;/a&gt; as I blogged about in &lt;a href="http://www.kiwidude.com/blog/2007/01/building-castles-on-quicksand.html"&gt;this post&lt;/a&gt;. Documentation is available via the links on this page but anyone familiar with the &amp;lt;ndoc&amp;gt; task should be happy. I've used it for generating CHM documentation without any problems.&lt;br /&gt;&lt;br /&gt;For any issues with the release or further enhancement suggestions, please post to the &lt;a href="http://ncover.org/SITE/forums/default.aspx?GroupID=8"&gt;NCoverExplorer forums&lt;/a&gt; or send me an e-mail (Help -&gt; Send Feedback).&lt;br /&gt;&lt;br /&gt;A quick further mention on NCover 1.5.7. This is a &lt;span style="font-weight:bold;"&gt;mandatory upgrade&lt;/span&gt; for every NCover user as far as I am concerned. Peter Waldschmidt's major rewrite of the profiler core and the addition of an integration test suite sets up a great platform for future releases. I've been fortunate to be able to chip in here and there on this release, although arguably more nuisance than help at times to Peter I'm sure! &lt;br /&gt;&lt;br /&gt;I am highly optimistic however that this is the most solid NCover beta to date and was worth the wait to get it right. Top stuff Peter and many thanks for all the effort!&lt;br /&gt;&lt;br /&gt;Last but certainly not least, &lt;a href="http://weblogs.asp.net/nunitaddin/"&gt;Jamie Cansdale&lt;/a&gt; has made available a new build of his excellent &lt;a href="http://testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; add-in. Amongst other goodies this now includes the latest build of NCoverExplorer, NCover 1.5.7 and Visual Studio Express SKU support. Right-clicky clicky goodness...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;Downloads&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;Release Notes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ndoc" rel="tag"&gt;ndoc&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-8931441222868609593?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/8931441222868609593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=8931441222868609593' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/8931441222868609593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/8931441222868609593'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2007/04/ncoverexplorer-v136.html' title='NCoverExplorer... v1.3.6'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-8944407473372571043</id><published>2007-02-05T00:14:00.000Z</published><updated>2007-04-01T14:03:06.541+01:00</updated><title type='text'>VS2005 - When SGEN Doesn't Work...</title><content type='html'>One of the features I was looking forward to making use of in .NET 2.0 was that of pre-generating the xml serialization assemblies, such as described in &lt;a href="http://www.theserverside.net/tt/blogs/showblog.tss?id=CustomXmlSerializers"&gt;this post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Using the sgen.exe tool is fairly straightforward, and there is an &amp;lt;SGen&amp;gt; MSBuild task for this purpose as well. However there is also one other option which not many people seem to have discussed the problem with that I could find.&lt;br /&gt;&lt;br /&gt;If you look on the Build tab for your C# project you will see a "Generate serialization assembly" option with a badly aligned-combo box and a mysterious default option of "Auto" that is not described in the MSDN help - more attention to detail by Microsoft in VS2005.&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://www.kiwidude.com/blog/uploaded_images/GenSerAssembly-795909.png" border="0" alt="" /&gt;&lt;br /&gt;Switching this combo to "On" and compiling a bunch of different projects I found each time that no xml serializer assembly was being produced. This had me rather irritated, and I know of others who had the same problem but no mention of why.&lt;br /&gt;&lt;br /&gt;By looking at the MSBuild output with verbose detail you see a first hint as to what is going on:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Assembly 'C:\Foo\obj\Debug\Foo.dll' does not contain any types that can be serialized using XmlSerializer. Please use /verbose switch for more information.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How come? I can run sgen.exe from the command line on the same assembly and that works just fine producing output. Ok, lets take the command from the MSBuild output for sgen.exe and add /verbose to it...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Assembly 'C:\Foo\obj\Debug\Foo.dll' does not contain any types that can be serialized using XmlSerializer. Please use /verbose switch for more information.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;WTF? I did add /verbose - fat lot of good it did me. What else is on that sgen.exe command line...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;...sgen.exe /assembly:C:\Foo\obj\Debug\Foo.dll /proxytypes /reference:...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aha - that /proxytypes option looks a bit interesting. The description in the MSDN documentation is "Generates serialization code only for the XML Web service proxy types."&lt;br /&gt;&lt;br /&gt;An explanation at last - the property page option is effectively useless unless you are using web services. If you have other uses of xml serialization like many of us do then you have to resort to post-build tasks or scripting sgen.exe externally. All Microsoft had to do was change the combobox options to something like "Off", "ProxyTypes", "All" and this feature would have been far more useful.&lt;br /&gt;&lt;br /&gt;Incidentally I also found if you remove the /proxytypes option the /verbose option starts working - quality.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:rgb(192,0,0)"&gt;[Update: 17th March 2006]&lt;br /&gt;I should have posted the actual workaround I implemented, which I will now for at least my own purposes of reusing it. By adding the below extract into your .csproj file this will ensure that every time you compile the xml serialization assembly is regenerated &lt;span style="font-weight:bold;"&gt;for non web proxy classes&lt;/span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;  &lt;span class="rem"&gt;&amp;lt;!-- Grant - this bodge is necessary as Microsoft screwed up the xml serializer&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    generation by limiting it to only web proxy classes.&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    The one line change from the equivalent&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    target in Microsoft.Common.targets is to set UseProxyTypes to false.&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    --&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="GenerateSerializationAssembliesForAllTypes"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;DependsOnTargets&lt;/span&gt;&lt;span class="kwrd"&gt;="AssignTargetPaths;Compile;ResolveKeySource"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;Inputs&lt;/span&gt;&lt;span class="kwrd"&gt;="$(MSBuildAllProjects);@(IntermediateAssembly)"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;Outputs&lt;/span&gt;&lt;span class="kwrd"&gt;="$(OutputPath)$(_SGenDllName)"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SGen&lt;/span&gt; &lt;span class="attr"&gt;BuildAssemblyName&lt;/span&gt;&lt;span class="kwrd"&gt;="$(TargetFileName)"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;BuildAssemblyPath&lt;/span&gt;&lt;span class="kwrd"&gt;="$(OutputPath)"&lt;/span&gt; &lt;span class="attr"&gt;References&lt;/span&gt;&lt;span class="kwrd"&gt;="@(ReferencePath)"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;ShouldGenerateSerializer&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="attr"&gt;UseProxyTypes&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;KeyContainer&lt;/span&gt;&lt;span class="kwrd"&gt;="$(KeyContainerName)"&lt;/span&gt; &lt;span class="attr"&gt;KeyFile&lt;/span&gt;&lt;span class="kwrd"&gt;="$(KeyOriginatorFile)"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;DelaySign&lt;/span&gt;&lt;span class="kwrd"&gt;="$(DelaySign)"&lt;/span&gt; &lt;span class="attr"&gt;ToolPath&lt;/span&gt;&lt;span class="kwrd"&gt;="$(SGenToolPath)"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Output&lt;/span&gt; &lt;span class="attr"&gt;TaskParameter&lt;/span&gt;&lt;span class="kwrd"&gt;="SerializationAssembly"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;ItemName&lt;/span&gt;&lt;span class="kwrd"&gt;="SerializationAssembly"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SGen&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;&amp;lt;!-- &amp;lt;Target Name="BeforeBuild"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    &amp;lt;/Target&amp;gt; --&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="AfterBuild"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;DependsOnTargets&lt;/span&gt;&lt;span class="kwrd"&gt;="GenerateSerializationAssembliesForAllTypes"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/visualstudio.net"&gt;visualstudio.net&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-8944407473372571043?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/8944407473372571043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=8944407473372571043' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/8944407473372571043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/8944407473372571043'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2007/02/vs2005-when-sgen-doesnt-work.html' title='VS2005 - When SGEN Doesn&apos;t Work...'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-8364312516364234646</id><published>2007-01-18T20:52:00.000Z</published><updated>2007-01-19T13:11:18.669Z</updated><title type='text'>Building Castles On Quicksand</title><content type='html'>The projects I am involved in for my "day job" are moving to .NET 2.0 so lately it has been head down converting a huge array of wizards, templates, add-ins and of course the code itself. I also rewrote the core of NCoverExplorer over Christmas as part of a future 1.3.6 release but have had no further time for CC.Net, NCover or various other tools I had been tinkering with contributions for. Once things quieten down a bit at work I will be able to crank things up again.&lt;br /&gt;&lt;br /&gt;Moving to .NET 2.0 at work has resulted in various amounts of pain thanks to bugs in the .Net framework, the IDE, the designers and the extensibility library. I've mentioned before I am not a fan of VS.Net 2005 and using it in anger these last few weeks has done nothing but lower my opinion. How some of these bugs or design decisions got through "quality control" is beyond belief. Actually I do have a theory on that but I will save that rant for another day.&lt;br /&gt;&lt;br /&gt;The reason for this post however is to blog about my experiences with &lt;a href="http://blogs.msdn.com/sandcastle/"&gt;Sandcastle&lt;/a&gt; and generating help documentation for VS.Net 2005. &lt;br /&gt;&lt;br /&gt;We have been using &lt;a href="http://ndoc.sourceforge.net/"&gt;NDoc&lt;/a&gt; of course for our .NET 1.1 based documentation for VS.Net 2003. Unfortunately as was much documented and debated a while ago, Kevin Downs &lt;a href="http://www.charliedigital.com/PermaLink,guid,95b2ab68-ba92-413a-b758-2783cde5df9c.aspx"&gt;pulled the plug&lt;/a&gt; on this product. Part of the rationale given is Microsoft's announcement of Sandcastle, now up to it's third CTP release (Dec 2006) so I figured it might be mature enough to at least try it on for size.&lt;br /&gt;&lt;br /&gt;Wrong, Wrong, Wrong.&lt;br /&gt;&lt;br /&gt;If you haven't tried it and have been wondering on the sidelines like me - let me save yourselves hours of pain and frustration by suggesting you continue to wait. It is labelled as CTP but it is closer to the prototype end of the scale than the release candidate one - nowhere near ready for community usage, at least for our requirements.&lt;br /&gt;&lt;br /&gt;So what got me so underwhelmed about it?&lt;br /&gt;&lt;br /&gt;Well for starters the fact that Microsoft haven't yet included any form of command line or GUI means straight away you are into the world of evaluating and choosing other tools to actually make it work. Yes, I know you can argue choice is a good thing and I don't mean to denegrate in any way the effort people out there have put in to try to make up for this shortcoming by Microsoft. However sometimes you just want only one new moving part to add to your build process.&lt;br /&gt;&lt;br /&gt;Next you need to install the &lt;a href="http://msdn.microsoft.com/vstudio/extend/"&gt;VS.Net 2005 SDK&lt;/a&gt; to get the right Help2 compiler - it is no longer available as a separate small download like it was for VS.Net 2003 with VSHIK.&lt;br /&gt;&lt;br /&gt;Then there is the list of "&lt;a href="http://blogs.msdn.com/sandcastle/archive/2006/12/10/announcing-december-sandcastle-ctp.aspx"&gt;known issues&lt;/a&gt;" - mostly problems with the templates which mean your output is going to be kakked so you need to replace them. So that's usually four separate "things" to be downloaded, installed, configured and documented for your build server before you even try to configure a documentation project - straight away you are aware this is not going to be trivial.&lt;br /&gt;&lt;br /&gt;So how do you automate Sandcastle? Well, there is a &lt;a href="http://www.sandcastledocs.com/Wiki%20Pages/Home.aspx"&gt;wiki&lt;/a&gt; which indicates at least some of the options contributed by the community - a &lt;a href="http://www.codeproject.com/useritems/SandcastleCreateBat.asp"&gt;batch script&lt;/a&gt; , an &lt;a href="http://www.codeplex.com/MSBuildSandcastle"&gt;MSBuild&lt;/a&gt; script and several GUI options, the most popular being an NDoc lookalike called &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=SHFB"&gt;Sandcastle Help File Builder&lt;/a&gt; (SHFB). There are VS.Net add-ins as well although I'm after a tool that works as part of our automated build process - not locking up the IDE for hours thanks.&lt;br /&gt;&lt;br /&gt;A dozen-step batch script didn't sound too promising to me, so I tried the MSBuild script by &lt;a href="http://blog.ljusberg.com/"&gt;Anders Ljusberg&lt;/a&gt; first. Simple to deploy, a few tweaks for paths here and there, ran it and *boom* - first technical issue.&lt;br /&gt;&lt;br /&gt;By default Sandcastle wants to connect to a web service on the internet - I believe to generate links to Microsoft content. Well that's just great if you live in the magical fluffy world where proxy servers don't exist, or if they do they take IE settings. Unfortunately where I work we have popup dialogs for authentication - which isn't catered for in any way I know of by the standard &amp;lt;system.net&amp;gt; configuration override trick. The "Start" page in Visual Studio.Net 2005 suffers from the same problem.&lt;br /&gt;&lt;br /&gt;I couldn't see an obvious way to turn off that type of online linking using the MSBuild script (perhaps someone can tell me how) so that knocked it out of the equation for now. Incidentally I ran the script on my home PC which has no proxy server and hit a different issue, so it's clearly not the only problem you may face with using it.&lt;br /&gt;&lt;br /&gt;Next I moved on to SHFB which does have an option in the GUI to set the external linking to "none". This looked far more promising having both a console and GUI version in NDoc style, some help etc - kudos to Eric Woodruff for his efforts. The price you pay over the MSBuild approach is less flexibility in terms of dynamically assigning assembly lists, version numbers etc since it works off configuration files. No major problem though as it is easy enough to knock up a NAnt or MSBuild task to generate the configuration file dynamically. First priority though is getting the output generated.&lt;br /&gt;&lt;br /&gt;And that's where problem #2 came up - performance or rather appalling lack thereof. Generating a .CHM file for our 40 assembly application which used to take an hour under NDoc came in at &lt;span style="font-weight:bold;"&gt;5 hours&lt;/span&gt; with Sandcastle. WTF? Ok, so leaving it running overnight is going to be the Sandcastle way of doing things. BTW, according to SHFB it took 4 minutes 55 seconds - rather wishful thinking!&lt;br /&gt;&lt;br /&gt;There were a few problems with the output so I tweaked some settings (like saying I don't want namespace summaries as I dont want big red warnings everywhere) and ran it for VS.Net 2005 output on just three assemblies. Out popped the help - but still the big red warnings! Double checked my GUI configuration - show warnings are set to false. Hmmmm... Equally bad is that there is a horrid empty blue bar near the top of each page - I think it is expecting some sort of input to go in there but can't cope with it not being present.&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://www.kiwidude.com/blog/uploaded_images/SHFB_Namespaces-732194.png" border="0" alt="" /&gt;&lt;br /&gt;So after all the research, downloads, configuration, bugs, trial and error I end up with something that takes hours to render and looks crap. Not quite the result I was after - yes I could try to fix the bugs but that's not what I set out to do. I just need to generate some documentation.&lt;br /&gt;&lt;br /&gt;So what to do in the mean-time? I had tried the &lt;a href="http://sourceforge.net/projects/ndoc05/"&gt;NDoc2005&lt;/a&gt; project on SourceForge but found it completely unusable with bugs and the developers have clearly lost interest.&lt;br /&gt;&lt;br /&gt;I then stumbled across something known as &lt;a href="http://www.kynosarges.de/NDoc.html"&gt;NDoc Alpha&lt;/a&gt; which appears to be the last work in progress build of the original NDoc developer Kevin Downs. It all sounds very promising on the web page in terms of support for generics and performance boosts.&lt;br /&gt;&lt;br /&gt;I downloaded it and gave it a whirl for a .CHM file,and *boom* - 'access is denied' messages. NDoc Alpha copies your assemblies to a shadow folder so as not to lock the originals. The downside is if those assemblies have the read-only flag set it tries to do a delete from the shadow folder to clean up but doesn't check for the flag first. Now that is a pain - I wanted to build from my ClearCase view release folder which has those attributes set. Thankfully there is an option "UseAssemblyShadowCache" which when set to false disables this feature and hence works around the bug - nice.&lt;br /&gt;&lt;br /&gt;Once I hacked that I was able to set NDoc Alpha off in motion again... and *boom* hit a series of big nasty exceptions which stopped documentation being generated. After much fiddling I figured out it was an xml tag that had the wrong attribute that VS.Net does not validate as an error. FYI it was &amp;lt;exception name="..."&amp;gt; instead of &amp;lt;exception cref="..."&amp;gt;. In later iterations I also found it erroring where the tag had no attribute at all - i.e. &amp;lt;exception&amp;gt;. It appears that the new CHM documentor in this build of NDoc is far stricter than previous NDoc versions - not a bad thing, just it would be nice to have a more useful error message to figure out what is wrong with the tags.&lt;br /&gt;&lt;br /&gt;Incidentally I had discovered that NDoc is spitting out Trace messages as it processes elements - that makes life a bit easier to find out what class it was processing when it failed. Fire up your favourite debug trace viewer such as from SysInternals and you hopefully get a hint as to either the method that failed or at least what once had processed successfully in the class.&lt;br /&gt;&lt;br /&gt;Finally with all the error messages cleared NDoc Alpha had a clear runway. Boy is it quick! It took a mere 15 minutes to build the documentation from scratch and generate the .CHM file and a similar amount for the VS.Net 2005 version. Now that's just a complete no-brainer compared to Sandcastle. Sorry guys, you have a long, long way to go.&lt;br /&gt;&lt;br /&gt;All that remains now is knocking up a new &amp;lt;ndoc2&amp;gt; NAnt/MSBuild task so I can generate the configuration file on the fly. Shouldn't be a major deal, and I will include the &amp;lt;ndoc2&amp;gt; task I write in NCoverExplorer.Extras.zip when I'm done for anyone interested.&lt;br /&gt;&lt;br /&gt;The not inconsiderable negative of NDoc Alpha is that it is an end of line product - no source code is available to fix the bugs or anyone to offer support. It looks like Kevin has the last laugh on this for a while longer - his product is indeed still light years ahead of Sandcastle but the community are not going to be able to advance it further. That's frankly a damn shame as this is undoubtedly the best version of NDoc yet - after all the years of effort to let the source code waste away in the cupboard rather than live on in the community by others is a major downer... forgive the pun.&lt;br /&gt;&lt;br /&gt;In the mid-long term then undoubtedly provided Microsoft deliver on the hype then they will be the product of choice - particularly for people not looking to use a commercial offering. For now though Sandcastle is a major thumbs down for me.&lt;br /&gt;&lt;br /&gt;&lt;img style="float:right; margin:0 0 10px 10px;" src="http://www.kiwidude.com/blog/uploaded_images/Help_Filter-767954.png" border="0" alt="" /&gt;BTW - does anyone actually like the new "language filter" that is a part of the VS.Net 2005 help? You only work in one language but have to do half a dozen clicks to just see the C# examples by unselecting everything else first? Then if you get a page which doesn't have the language you are after, you go through another clickfest to see if there was an example in another language instead? If only Microsoft would make it a persisted option - setting a default language with an ordered list of alternatives if none of your defaults exist, how hard is that?&lt;br /&gt;&lt;br /&gt;If anyone reading this feels I'm being too harsh or you wish to correct me please feel free to slap me round in the comments. My disclaimer is I'm under pressure to get stuff out the door so my "dive in and fix it" threshold is much lower than normal - using the current versions of Sandcastle and the related tools is not for people in a hurry from my experience.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/sandcastle" rel="tag"&gt;sandcastle&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ndoc" rel="tag"&gt;ndoc&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-8364312516364234646?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/8364312516364234646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=8364312516364234646' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/8364312516364234646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/8364312516364234646'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2007/01/building-castles-on-quicksand.html' title='Building Castles On Quicksand'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-6606486500486849021</id><published>2006-11-15T00:02:00.000Z</published><updated>2007-01-19T10:51:42.441Z</updated><title type='text'>Creating NUnit Projects Dynamically</title><content type='html'>I referred in my &lt;a href="http://www.kiwidude.com/blog/2006/10/ncoverexplorer-merging-ncover-reports.html"&gt;Merging NCover Reports&lt;/a&gt; blog entry to a NAnt task I created a long while ago to resolve the issue of running multiple unit test assemblies in a single coverage run while using &lt;a href="http://nunit.org/"&gt;NUnit&lt;/a&gt;. By creating a .nunit project on the fly based on a wildcard pattern for test assemblies we avoid the hassles of manually maintaining it as the solution projects grow. For TestDriven.Net addicts who rarely run the NUnit GUI like myself this gives the best of both worlds.&lt;br /&gt;&lt;br /&gt;Since a couple of people asked me to make it available I have now added both this and an MSBuild version to the respective NCoverExplorer.NAntTasks.dll and NCoverExplorer.MSBuildTasks.dll assemblies.&lt;br /&gt;&lt;br /&gt;Download the latest &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorer.Extras.zip"&gt;NCoverExplorer.Extras.zip&lt;/a&gt; file to get the compiled assemblies, source code and documentation with examples. For a quick and dirty preview, the NAnt task looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;&amp;lt;nunitproject&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;project&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="${outputdir}\MyApp.nunit"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;appConfig&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="${outputdir}\MyApp.exe.config"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;     &amp;lt;fileset &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;basedir&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="${outputdir}"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;         &amp;lt;include &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="MyApp.*.Tests.dll"&lt;/span&gt; &lt;span style="color: rgb(153, 51, 153);"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 51, 153);font-family:courier new;" &gt;     &amp;lt;/fileset&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);font-family:courier new;" &gt;&amp;lt;/nunitproject&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;You can now change your NAnt task executing NUnit so that it is passed the name of the .nunit project file rather than the testing assembly inside some loop. This will give you a single xml file summarising the test runs. If you similarly do the same for running NCover you get a single coverage.xml file for your project.&lt;br /&gt;&lt;br /&gt;I should add that this has only been used with the NUnit 2.2.x project versions - having not had a chance to look at the NUnit 2.4 betas myself as yet perhaps someone can let me know if they significantly changed the .nunit project file format?&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverExplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/nunit" rel="tag"&gt;nunit&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/nant" rel="tag"&gt;nant&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/msbuild" rel="tag"&gt;msbuild&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-6606486500486849021?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/6606486500486849021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=6606486500486849021' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/6606486500486849021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/6606486500486849021'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/11/creating-nunit-projects-dynamically.html' title='Creating NUnit Projects Dynamically'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115852037907484104</id><published>2006-10-30T20:31:00.000Z</published><updated>2007-04-03T21:17:36.052+01:00</updated><title type='text'>NCoverExplorer... v1.3.5</title><content type='html'>The latest build (1.3.5.1921) is now available for download from this site, which includes updates to both NCoverExplorer and the NCoverExplorer.Extras.zip file (for the stylesheets and NAnt/MSBuild tasks). I have held off officially releasing for a while so as to offer the usual "combined installation" option with the &lt;a href="http://weblogs.asp.net/nunitaddin/archive/2006/10/30/TestDriven.NET-2.0.aspx"&gt;TestDriven.Net 2.0 RTM&lt;/a&gt; which &lt;a href="http://weblogs.asp.net/nunitaddin/"&gt;Jamie Cansdale&lt;/a&gt; has just released - congratulations Jamie!&lt;br /&gt;&lt;br /&gt;The leading new feature in this release &lt;a href="http://www.kiwidude.com/blog/2006/08/ncoverexplorer-v135-beta.html"&gt;as I blogged about a number of weeks ago&lt;/a&gt; is enhanced integration with &lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt; for &lt;span style="font-weight:bold;"&gt;generating NAnt scripts, MSBuild scripts and command lines&lt;/span&gt;. These should support the whole gamut of permutations of NCover versions (1.3.3 and 1.5.x), with or without my custom NAnt/MSBuild tasks. Of course you can also choose to just &lt;span style="font-weight:bold;"&gt;run NCover directly&lt;/span&gt; from the same screen, with the results being displayed immediately within NCoverExplorer. For people not using TestDriven.Net or needing to report coverage without using the VS.Net IDE this should hopefully prove a useful option.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.5_NCoverRunner-788877.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.5_NCoverRunner-754489.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Function coverage&lt;/span&gt; is another significant enhancement. For a while now NCoverExplorer has had "function coverage" as just showing the #visits incurred by each method. This has now been expanded to include a wider range of options to show percentages of methods covered on a class and/or number of methods unvisited. &lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.5_FunctionCoverageMenu-780046.png" border="0" alt="" /&gt;&lt;br /&gt;There is also &lt;span style="font-weight:bold;"&gt;a new coverage report&lt;/span&gt; "Module/Class Function Summary" which can be used within NCoverExplorer or CruiseControl.Net (please upgrade your CC.Net stylesheets).&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.5_FunctionCoverageReport-740584.png" border="0" alt="" /&gt;&lt;br /&gt;A &lt;span style="font-weight:bold;"&gt;new filter option&lt;/span&gt; of "Hide All Above Threshold" has been added to supplement the existing options of hiding unvisited or 100% covered nodes. For those of you who set a threshold for coverage below 100% this option should allow you to focus quickly on just the elements of the codebase that require your attention. Filtering and sorting options are now automatically reapplied when refreshing/reloading files in a session.&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.5_FilterThreshold-792788.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sorting and filtering applies to reports&lt;/span&gt; either from within NCoverExplorer or optionally from the command line. NCover.Console.exe adds new /sort: and /filter: arguments. Both these and the /report: arguments will now take either numeric values or the enumeration text, as do the NAnt/MSBuild tasks. Type &lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;ncover.console /?&lt;/span&gt;&lt;/span&gt; to see the full set of options.&lt;br /&gt;&lt;br /&gt;e.g.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;&amp;#160;&amp;#160;ncover.console /h /report:ModuleClassFunctionSummary coverage.xml&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;or&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;&amp;#160;&amp;#160;ncover.console /h /report:5 coverage.xml&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A significant amount of refactoring has been done to the &lt;a href="http://www.kiwidude.com/blog/2006/07/nant-and-msbuild-tasks-for-ncover.html"&gt;NAnt and MSBuild tasks&lt;/a&gt; for NCover/NCoverExplorer to fix some bugs with various NCover versions. As part of this exercise I ended up renaming the assemblies and namespaces. My apologies to those of you who have to update your scripts but it made the documentation generation and maintenance easier for me. Speaking of which, at long last some documentation for these tasks is published outside of the source code. It is available both within the NCoverExplorer.Extras.zip and found &lt;a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.MSBuildTasks/index.html"&gt;here for MSBuild&lt;/a&gt; and &lt;a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.NAntTasks/index.html"&gt;here for NAnt&lt;/a&gt;. You will also find these links on the NCoverExplorer Help menu.&lt;br /&gt;&lt;br /&gt;On top of all that there have been the usual swarm of important bug fixes (such as a fix for memory leaks) and minor tweaks - please read the &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;Release Notes&lt;/a&gt; for more details. As with every release I encourage you to upgrade so as to trade in your old known bugs for some shiny new ones.&lt;br /&gt;&lt;br /&gt;While NCover 1.5.5 was released a little while ago there are unfortunately some "showstopping" issues with it &lt;a href="http://ncover.org/SITE/blogs/ncover_blog/archive/2006/09/02/556.aspx"&gt;not only with .Net 1.0/1.1&lt;/a&gt; but also when used with NCoverExplorer. I posted the details about the problem &lt;a href="http://ncover.org/SITE/forums/604/ShowThread.aspx#604"&gt;here on the NCover forum&lt;/a&gt;. The issues will impact the integrity of your coverage results but there is absolutely nothing I can do to workaround the issues - garbage in, garbage out I'm afraid. Until NCover 1.5.6 is released your best bet may be to stick with NCover 1.3.3 or NCover 1.5.4 or else you may possibly end up with results like this:&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCover_1.5.5_Duplicates-763455.png" alt="" border="0" /&gt;&lt;br /&gt;For any issues with the release or further enhancement suggestions, please post to the &lt;a href="http://ncover.org/SITE/forums/default.aspx?GroupID=8"&gt;NCoverExplorer forums&lt;/a&gt; or send me an e-mail (Help -&gt; Send Feedback).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.testdriven.net/"&gt;Download TestDriven.Net 2.0 combined install&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download the latest NCoverExplorer versions from &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;Release Notes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerFAQ.html"&gt;FAQ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.MSBuildTasks/index.html"&gt;MSBuild Task Documentation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.NAntTasks/index.html"&gt;NAnt Task Documentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/NCoverExplorer" rel="tag"&gt;NCoverExplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/NCover" rel="tag"&gt;NCover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115852037907484104?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115852037907484104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115852037907484104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115852037907484104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115852037907484104'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/10/ncoverexplorer-v135.html' title='NCoverExplorer... v1.3.5'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-116214076361466685</id><published>2006-10-29T21:20:00.000Z</published><updated>2007-06-22T20:11:14.194+01:00</updated><title type='text'>CruiseControl.Net... Serialised Build Queues</title><content type='html'>As a little break from NCoverExplorer development I started dabbling last weekend with the CruiseControl.Net source code. A disclaimer up front - this is all at the experimental stage and subject to further approval by the CC.Net project admins but it looks promising so far...&lt;br /&gt;&lt;br /&gt;The main problem I am trying to resolve is the situation where you want to prevent two projects from running at the same time. Why would you want to do that? Perhaps you have resource constraints like a file system directory or a database the unit tests run against. For instance we have separate projects for continuous and daily builds - without a locking mechanism we likely get a failed build if they both run at the same time (one may do a "clean" while the other is trying to "build" etc).&lt;br /&gt;&lt;br /&gt;A useful &lt;a href="http://groups.google.co.uk/group/ccnet-user/browse_thread/thread/1833f27b978c0701?hl=en%3Fhl%3Den"&gt;plugin&lt;/a&gt; was developed recently by Richard Hensley available from &lt;a href="http://ccnetplugins.sourceforge.net/"&gt;here&lt;/a&gt; to implement a locking mechanism which does help solve this. However it has a few limitations due to being a plugin which are best overcome by changing the CruiseControl.Net source code (in my opinion anyways). Various other implementations I have seen or even developed myself using mutexes or lock files all have similar issues.&lt;br /&gt;&lt;br /&gt;What sort of limitations? As a build manager and developer I want visibility of the build queues, the ability to cancel pending items on the queue and to more granularly control the order that things get built.&lt;br /&gt;&lt;br /&gt;My first stab of this is still a work in progress but looks like this...&lt;br /&gt;&lt;br /&gt;1. You can optionally add a "queueName" attribute to each &amp;lt;project&amp;gt; node to force projects into a serialised integration queue. If you don't specify a queue the project will have it's own queue of the project name - effectively the same behaviour you have now.&lt;br /&gt;&lt;br /&gt;2. You can also optionally add a "queuePriority" attribute to control the order of pending integrations on the queue. A priority of zero (default) just means build in the order placed on the queue.&lt;br /&gt;&lt;br /&gt;3. A new optional panel in CCTray (see the demo gif below) to display the state of your queues across all polled servers. From CCTray you can right-click to cancel pending integrations provided they have not yet started.&lt;br /&gt;&lt;br /&gt;4. A new web page plugin to allow web-based viewing of the queues and cancel pending integrations. Still to be developed.&lt;br /&gt;&lt;br /&gt;Here's a little taster of what it looks like at the moment...&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center;" src="http://www.kiwidude.com/dotnet/CC.Net/CCTray_Demo.gif" alt="" border="0" /&gt;&lt;br /&gt;Comments, suggestions and feedback welcomed... there is a &lt;a href="http://groups.google.co.uk/group/ccnet-devel/browse_thread/thread/d0a21fc86e6e4d6e?hl=en"&gt;thread&lt;/a&gt; for this on the &lt;a href="http://groups.google.co.uk/group/ccnet-devel?hl=en"&gt;ccnet-devel&lt;/a&gt; Google newsgroup.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;[Update: 22nd-Jun-07  This patch has been integrated into the &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET"&gt;CruiseControl.Net&lt;/a&gt; 1.3.0 release now publicly available]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/CruiseControl.Net" rel="tag"&gt;CruiseControl.Net&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-116214076361466685?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/116214076361466685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=116214076361466685' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/116214076361466685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/116214076361466685'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/10/cruisecontrolnet-serialised-build_29.html' title='CruiseControl.Net... Serialised Build Queues'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-116068511412172666</id><published>2006-10-12T21:06:00.000+01:00</published><updated>2006-11-15T00:40:16.320Z</updated><title type='text'>NCoverExplorer... Merging NCover Reports</title><content type='html'>There have been a couple of posts recently by &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/10/07/Week-1-Questions_3A00_--How-do-you-organize-your-NUnit-test-code_3F00_.aspx"&gt;Jeremy Miller&lt;/a&gt; and &lt;a href="http://www.haacked.com/archive/2006/10/10/Structuring_Unit_Test_Code.aspx"&gt;Haacked.com&lt;/a&gt; debating how best to structure unit test code. One of the arguments mentioned by a number of people against multiple unit test assemblies is the difficulty of merging multiple NCover coverage files on the build server.&lt;br /&gt;&lt;br /&gt;To the people who posted comments along the lines of "it's just not possible"... well in actual fact it is, and here are a couple of ways to do it.&lt;br /&gt;&lt;br /&gt;The first option for NUnit users is to use a .nunit project file listing your test assemblies. This requires only a single execution of NUnit and means that only one coverage file is produced in the first place, avoiding the problem altogether. I have a custom NAnt task that I wrote for dynamically creating the .nunit project file based on a file pattern just to avoid any maintenance - if anyone else is interested let me know and I will make it available.&lt;br /&gt;&lt;br /&gt;The second option is to use NCoverExplorer. The console executable version is designed to be used on the build server. Included amongst it's abilities since v1.3.4 is the ability to merge raw NCover coverage files and save the result along with xml/html reports if required. In addition you can optionally apply coverage exclusions etc at the same time.&lt;br /&gt;&lt;br /&gt;This can be run either directly from the command line or using the NAnt/MSBuild tasks available in the NCoverExplorer.Extras zip file.&lt;br /&gt;&lt;br /&gt;So... to merge a bunch of suitably named coverage.xml files from a test coverage run into a single file using the command line it can be as simple as:&lt;br /&gt;&lt;br /&gt;  &lt;span style=";font-family:courier new;font-size:85%;"  &gt;ncoverexplorer.console.exe *.coverage.xml /s:merged.coverage.xml&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;If you want to produce an actual report instead, just add the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;/r&lt;/span&gt; argument indicating the report type, and any combination of &lt;span style=";font-family:courier new;font-size:85%;"  &gt;/x&lt;/span&gt; or &lt;span style=";font-family:courier new;font-size:85%;"  &gt;/h&lt;/span&gt; to produce xml or html output as appropriate. Of course the xml output is designed to be merged into your CC.Net build file and transformed using the CC.Net stylesheets also in that Extras zip file. Use &lt;span style=";font-family:courier new;font-size:85%;"  &gt;/?&lt;/span&gt; to see the full command line options.&lt;br /&gt;&lt;br /&gt;The same operations can also be performed using the NAnt or MSBuild tasks, documentation for which is found &lt;a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.NAntTasks/index.html"&gt;here for NAnt &lt;/a&gt;and &lt;a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.MSBuildTasks/index.html"&gt;here for MSBuild&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;[Update Nov 14th 2006: I have made available the NAnt and MSBuild tasks to dynamically create nunit project files as detailed &lt;/span&gt;&lt;a href="http://www.kiwidude.com/blog/2006/11/creating-nunit-projects-dynamically.html"&gt;here&lt;/a&gt;.&lt;span style="color: rgb(255, 0, 0);"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/NCoverExplorer" rel="tag"&gt;NCoverExplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/NCover" rel="tag"&gt;NCover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-116068511412172666?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/116068511412172666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=116068511412172666' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/116068511412172666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/116068511412172666'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/10/ncoverexplorer-merging-ncover-reports.html' title='NCoverExplorer... Merging NCover Reports'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-116021685623275815</id><published>2006-10-07T11:21:00.000+01:00</published><updated>2006-11-10T23:22:27.300Z</updated><title type='text'>BinarySerializer and Strings in .Net 1.1</title><content type='html'>I've just verified that this problem does appear to have been rectified in .Net 2.0 so undoubtedly it is "old news" to many people but this one had us guessing for a while at work this week...&lt;br /&gt;&lt;br /&gt;When using the .Net Remoting over tcp/binary with a "large" collection of objects (6,000) we found that our application was going into meltdown and taking over 6 minutes to return the results - yikes! &lt;br /&gt;&lt;br /&gt;The actual population time of the custom collection from the DataReader was negligible - it was when it hit the "return" statement to leave the application server domain that the CPU utilisation shot up to 100% and the lag began. The objects being serialized had around 40 fields containing a few Int32 and DateTime data types with the bulk being strings.&lt;br /&gt;&lt;br /&gt;As a colleague very funnily cracked at the time - asking the users to go Tools -&gt; Options -&gt; Tiers -&gt; 2 Tiers was probably not going to be acceptable... ;-)&lt;br /&gt;&lt;br /&gt;After much shagging around with a profiler and Reflector I eventually figured out that it was to do with the way the BinarySerializer works. It maintains an internal object table so as to ensure it only serializes each object in the graph once and avoid cyclic references no doubt. The problem is that it uses the hashcode of each object as a starting point for where to store it in that internal object table. If it finds the same object instance at that hash position it can return it, otherwise it adds another hash and tries again in the next "bucket" and so on until it finds a match (or a free space to put this object).&lt;br /&gt;&lt;br /&gt;However when you have &lt;span style="font-weight:bold;"&gt;an object graph with lots of System.String field instances that all have the same value&lt;/span&gt; this design decision fell to bits. Such is the case when populating your objects using DataReader.GetString() which gives you a new string instance each time. As the hashcode for a string is based on it's contents you now get an exponential increase in hashing collisions the more rows you have in your result set.&lt;br /&gt;&lt;br /&gt;As it turns out this is a known problem for which there is the dreaded &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;890929"&gt;hotfix&lt;/a&gt; dated from Dec 2004. I say "dreaded" as like most large companies out there we have absolutely no show of getting a hotfix deployed due to the logistics involved. When will Microsoft EVER get their act together over their .Net service pack strategy (i.e. more than once every 3 years would be a start!).&lt;br /&gt;&lt;br /&gt;Our workaround? Well, as I have hinted at above what breaks the serializer is &lt;span style="font-weight:bold;"&gt;instances&lt;/span&gt; of strings having the same value. So why not have a cache of the string instances that you retrieve through when using DataReader.GetString()? That way the same value "xyz" is serialized only once instead of once per row - smaller object graph, faster serialization performance.&lt;br /&gt;&lt;br /&gt;Sure enough after the change our total round trip performance dropped to under a couple of seconds for those 6,000 records (the serialization itself in under 0.2 seconds). Nothing like that great feeling on a Friday afternoon of having spanked a problem like this... That we hadn't really hit the problem previously was just luck - either screens had not many string columns in the objects; the string values were mostly unique; or the resultsets were not very large.&lt;br /&gt;&lt;br /&gt;Another solution would have been to use ISerializable and take control ourselves, for which there are some good articles on CodeProject like &lt;a href="http://www.codeproject.com/dotnet/FastSerializer.asp"&gt;this one&lt;/a&gt;. However the cost is it introduces another maintenance point in each of your entity classes. For large development teams in the early phases of a project with a continually evolving data model like my current one that's bound to go subtly wrong at some point. We may yet need to resort to that - but I would prefer to hold off until we know we need that extra few drops of performance!&lt;br /&gt;&lt;br /&gt;As I said at the top this problem seems to have been rectified in .Net 2.0 from my quick testing this morning - had we been using that at work it would have avoided many hours of frustration this week. Then again as per my &lt;a href="http://www.kiwidude.com/blog/2006/09/net-20-treeview-performance-problem.html"&gt;.Net 2.0 TreeView performance problem&lt;/a&gt; post we would likely have had some other problems to deal with. I guess this is why we get paid the big bucks right?&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/remoting" rel="tag"&gt;remoting&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/performance" rel="tag"&gt;performance&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-116021685623275815?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/116021685623275815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=116021685623275815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/116021685623275815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/116021685623275815'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/10/binaryserializer-and-strings-in-net-11.html' title='BinarySerializer and Strings in .Net 1.1'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-116007773824763113</id><published>2006-10-05T21:40:00.000+01:00</published><updated>2007-09-22T08:45:36.020+01:00</updated><title type='text'>CCStatistics for CruiseControl.Net 1.1</title><content type='html'>A few days ago &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET"&gt;CruiseControl.Net 1.1&lt;/a&gt; was officially released. Thanks to all those responsible - it has become an entrenched daily tool for many of us. I've upgraded a couple of build servers so far - well worth doing for the performance improvements and statistics features alone. This also gave cause for me to knock up a supporting tool called "&lt;span style="font-weight: bold;"&gt;CCStatistics&lt;/span&gt;" - more on this below.&lt;br /&gt;&lt;br /&gt;When upgrading there are a few things you need to change in your CC.Net project files that are not all listed in the release notes...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Remove any &lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;publishExceptions&amp;gt;&lt;/span&gt; elements.&lt;/li&gt;&lt;li&gt;Change the format of your &lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;weburl&amp;gt;&lt;/span&gt; links to jump to the latest report in CCTray. They should now be in the format below, unlike the query-string approach used previously:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;http://localhost/ccnet/server/local/project/MYPROJECTNAME/ViewLatestBuildReport.aspx&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you want to use the new statistics functionality you need to add a &lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;statistics /&amp;gt;&lt;/span&gt; node to your &lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;publishers&amp;gt;&lt;/span&gt; section. Without it when you click on the "View Statistics" page you get a nasty exception being thrown.&lt;/li&gt;&lt;/ol&gt;Speaking of statistics, if you hadn't guessed already this is one of the more interesting additions for me. In my opinion it is a "0.9" version in terms of readiness for release - there are a number of bugs I found I have added to Jira and the &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Statistics+Publisher"&gt;documentation&lt;/a&gt; is incomplete or misleading in a couple of instances at the time I write this.&lt;br /&gt;&lt;br /&gt;That said it has the potential to be a stonkingly good feature. Who doesn't want to see the most common reasons their build fails (when you have ClearCase performance issues like we do) or see their unit tests count, code coverage etc over time all on a single web page? No more endless drilling down into build log hyperlinks...&lt;br /&gt;&lt;br /&gt;To use this feature you add a &lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;statistics&amp;gt;&lt;/span&gt; node to your &lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;publishers&amp;gt;&lt;/span&gt; section in the project file. I recommend you put this at the end of your publishers (after any &lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;merge&amp;gt;&lt;/span&gt; element) so that way you can get additional custom statistics from files merged into the build log. When CC.Net runs the project it will then generate in your artifacts folder:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;report.xml (not statistics.xml as the documentation says). Contains all the statistics for builds to date.&lt;/li&gt;&lt;li&gt;reports.bmp (which is actually a png - &lt;a href="http://jira.public.thoughtworks.org/browse/CCNET-757"&gt;JIRA&lt;/a&gt;). A graphic illustrating the "TestCount" statistic across the build log cycle.&lt;/li&gt;&lt;li&gt;statistics.csv (&lt;a href="http://jira.public.thoughtworks.org/browse/CCNET-756"&gt;JIRA&lt;/a&gt;). Intended to be an exportable alternative to report.xml - but it has garbage output in it currently due to a few bugs.&lt;/li&gt;&lt;/ul&gt;When you click on the "View Statistics" link from a build project page you will see the standard statistics on a page like the following:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/CCNet_BuildReport-727116.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/CCNet_BuildReport-713243.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The report is fairly basic in appearance but that should be easily changed by editing the statistics.xsl file. That is next on my list and once done I will contribute it for anyone interested (or feel free to beat me to it!). Strangely the reports.bmp file is not referenced in this stylesheet by default - so the graph produced is not actually being used yet as far as I can tell.&lt;br /&gt;&lt;br /&gt;A minor limitation in the current release is that you cannot "replace" statistics with your own ones without editing the xsl. Not the end of the world but again I've posted a feature request on &lt;a href="http://jira.public.thoughtworks.org/browse/CCNET-758"&gt;JIRA&lt;/a&gt; on ideas to make that more flexible. You can however add new statistics as mentioned &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Statistics+Publisher"&gt;here&lt;/a&gt;. So for instance if we want to add the code coverage totals for the build as a result of running NCoverExplorer we can do this:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;statistics&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;statisticList&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;&amp;lt;firstMatch&lt;/span&gt; &lt;span style="color: rgb(204, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;="Coverage"&lt;/span&gt; &lt;span style="color: rgb(204, 0, 0);"&gt;xpath&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;="//coverageReport/project/@coverage"&lt;/span&gt; &lt;span style="color: rgb(102, 51, 102);"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;/statisticList&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 51, 102);font-family:courier new;" &gt;&amp;lt;/statistics&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will result in an additional column being added to the statistics page on the right-hand side. You could of course add other NCoverExplorer statistics as well such as lines of code etc.&lt;br /&gt;&lt;br /&gt;There is a catch to all this - statistics will only be generated for future builds, not for your legacy ones. That is where my &lt;span style="font-weight: bold;"&gt;CCStatistics&lt;/span&gt; tool comes in. This will parse &lt;span style="font-weight: bold;"&gt;all&lt;/span&gt; your build log files for a project and produce an updated reports.xml, reports.bmp and statistics.csv file as though you had been running CruiseControl.Net 1.1 "forever".&lt;br /&gt;&lt;br /&gt;There is another benefit to this tool I can see. Undoubtedly you will over time decide on additional statistics you would like to measure. Provided they are sourced from data that existed in historical build logs, you can regenerate all your statistics to date with the new data included to give you a much better picture of the progress of your project. If the data isn't present (say you just started merging NCoverExplorer code coverage) then the values will be blank.&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center;" src="http://www.kiwidude.com/blog/uploaded_images/CCNet_CCStatistics-795558.png" alt="" border="0" /&gt;&lt;br /&gt;It should be pretty trivial to use - &lt;span style="font-weight: bold;"&gt;drop the executable into your CruiseControl.Net\server folder&lt;/span&gt;, click on the Load button to list your CC.Net projects, choose which to recalculate statistics for and away it goes...&lt;br /&gt;&lt;br /&gt;I've made all the source code available - perhaps the CruiseControl.Net developers might be interested in adding it to their solution and maintaining it? There is also a compiled executable against CC.Net build 1.1.0.2498 (aka CC.Net release 1.1.1). To use the source code just unzip into the same &lt;span style="font-family:courier new;"&gt;\project&lt;/span&gt; source code folder as the other CC.Net projects and add to ccnet.sln.&lt;br /&gt;&lt;br /&gt;This was a very quick hack from a few hours work and has the usual "it works on my machine" proviso. There is no care or attention over internationalization and I have only ever used the 1.x versions of CruiseControl.Net. So use at your own "risk" - although as the only file access it does is reading logs and writing the couple of statistics files I don't think there's much to go badly wrong. The code itself has a few "hacks" so as to work without touching the original CC.Net source code - these may be cleaned up at a later date if the dependent objects are enhanced. Note also that this code results in the same "useless" .csv file - that bug is in CC.Net source and even if I did work around it obviously your future builds would still have incorrect lines being published.&lt;br /&gt;&lt;br /&gt;If you notice any problems or have suggestions feel free to let me know. &lt;span style="font-weight: bold;"&gt;Note that it will backup your previous statistics files with a .old prefix so if you notice a problem after running it once you can revert.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Also thanks to &lt;a href="http://weblogs.asp.net/nunitaddin/"&gt;Jamie Cansdale&lt;/a&gt; for his help today with a sticky issue I had (the NetReflector component only "works" if the assembly containing the type it is trying to instantiate is loaded in memory - just referencing the .dll containing it is not enough).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/CC.Net/CCStatistics.zip"&gt;Download CCStatistics executable&lt;/a&gt; (Depends on CCNet 1.1.0.2498)&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/CC.Net/CCStatistics_src.zip"&gt;Download CCStatistics source code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 0, 0);"&gt;[Update 14-Oct-06: I've pushed up a new version which includes progress bars and timings. When processing a big directory of large files CCStatistics may become unresponsive - don't panic as it will finish eventually. I have also &lt;/span&gt;&lt;a href="http://www.kiwidude.com/dotnet/CC.Net/unittests_1.1.xsl"&gt;updated &lt;/a&gt;&lt;span style="color: rgb(192, 0, 0);"&gt;the unittests.xsl stylesheet to fix the still outstanding issue in &lt;/span&gt;&lt;a href="http://jira.public.thoughtworks.org/browse/CCNET-704"&gt;JIRA&lt;/a&gt;&lt;span style="color: rgb(192, 0, 0);"&gt; of test suite failures not showing up that I &lt;/span&gt;&lt;a href="http://www.kiwidude.com/blog/2006/04/missing-nunit-fixture-errors-in-ccnet.html"&gt;blogged about previously&lt;/a&gt;&lt;span style="color: rgb(192, 0, 0);"&gt;.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 0, 0);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;[Update 22-Sep-07: Damon Carr has significantly updated this tool to work with the latest CC.Net (1.3) which you can can&lt;/span&gt; &lt;a href="http://damon.agilefactor.com/2007_07_01_archive.html"&gt;download here&lt;/a&gt;&lt;span style="color: rgb(255, 102, 0);"&gt; as mentioned in the comments below. Thanks also to &lt;a href="http://www.drewnoakes.com/code/ccnet/"&gt;Drew Noakes&lt;/a&gt; for his previous work for compatibility with CC.Net 1.2. Having "served its purpose" at the time for my needs I did not have the time to maintain it myself but am glad that others have found it useful enough to do so. Well done guys...]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/CruiseControl.Net" rel="tag"&gt;CruiseControl.Net&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-116007773824763113?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/116007773824763113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=116007773824763113' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/116007773824763113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/116007773824763113'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/10/ccstatistics-for-cruisecontrolnet-11.html' title='CCStatistics for CruiseControl.Net 1.1'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115887608541619536</id><published>2006-09-21T23:09:00.000+01:00</published><updated>2006-11-10T23:22:27.158Z</updated><title type='text'>.Net 2.0 TreeView Performance Problem</title><content type='html'>No doubt some of you may have noticed some pretty poor performance in NCoverExplorer when running it under .Net 2.0. I've made some tweaks recently for the imminent NCoverExplorer 1.3.5 release which should improve things, but it still sucks big time in performance compared to .Net 1.1.&lt;br /&gt;&lt;br /&gt;I thought that all things .Net 2.0 were supposed to be brighter, shinier and faster I hear you say? Anyone who has had the misfortune to use the dog turd that is the VS.Net 2005 IDE will happily put that "generalisation" to rest (I'm saving that rant for another post). It appears that sadly the same "Microsoft Improvement Programme" has been applied to the TreeView control and it's giving me the heebies.&lt;br /&gt;&lt;br /&gt;The problem? I need to update the .Text of the nodes in the tree dynamically. I do this on a lazy loaded basis (mostly for speed reasons that worked under .Net 1.1). As many NCoverExplorer users will know, I offer a variety of "views" such as %, #unvisited nodes, function visits etc - all of which require updating the .Text property of the nodes as you expand them.&lt;br /&gt;&lt;br /&gt;In .Net 2.0, Microsoft changed the internal implementation of the TreeView control - but not for the better for my requirements.&lt;br /&gt;&lt;br /&gt;In .Net 1.1, calling .BeginUpdate/.EndUpdate around your updates to .Text did absolutely nothing in terms of performance gains. In .Net 2.0 however, you absolutely MUST wrap those same updates to .Text in this call, or else your performance really goes to hell and back (under the hood it generates literally millions of windows messages for a 10MB coverage file loaded). Sure enough this does improve performance considerably - but still nowhere near .Net 1.1 levels as you can see below.&lt;br /&gt;&lt;br /&gt;You can download a little test app I knocked up from &lt;a href="http://www.kiwidude.com/dotnet/TreeViewTest.zip"&gt;here&lt;/a&gt;. The results of loading around 15,000 nodes in a 1 x 25 x 25 x 25 hierarchy and expanding a node to see it's 25 children are shown. It's a standard TreeView with an override to OnBeforeExpand, which simply loops through the immediate child nodes only and updates the .Text with/without a BeginUpdate/EndUpdate wrapper.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Under .Net 1.1 (time to expand a node):&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;0.2 secs&lt;/span&gt; (using .BeginUpdate/.EndUpdate and updating .Text of the children)&lt;br /&gt;&lt;span style="color:#000099;"&gt;0.2 secs&lt;/span&gt; (just updating .Text with no .BeginUpdate/.EndUpdate wrapper)&lt;br /&gt;&lt;span style="color:#000099;"&gt;0.007 secs&lt;/span&gt; (just calling .BeginUpdate/.EndUpdate and not updating anything)&lt;br /&gt;&lt;br /&gt;Looks pretty good right? Now the bad news:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Under .Net 2.0&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#990000;"&gt;1.1 secs&lt;/span&gt; (using .BeginUpdate/.EndUpdate and updating .Text of the children)&lt;br /&gt;&lt;span style="color:#990000;"&gt;30.6 secs&lt;/span&gt; (just updating .Text with no .BeginUpdate/.EndUpdate wrapper)&lt;br /&gt;&lt;span style="color:#990000;"&gt;1.1 secs&lt;/span&gt; (just calling .BeginUpdate/.EndUpdate and not updating anything)&lt;br /&gt;&lt;br /&gt;So using .BeginUpdate/.EndUpdate (as you are now forced into under .Net 2.0 as you can see by the nightmare time of not using it) it is still around &lt;strong&gt;six times slower using .Net 2.0&lt;/strong&gt;. That's just crap.&lt;br /&gt;&lt;br /&gt;Interestingly with the third of those statistics above you can see that the problem is the .EndUpdate call, which in .Net 2.0 now does a whole lot of windows message blasting - regardless of whether there actually was anything updated as there wasn't in this case.&lt;br /&gt;&lt;br /&gt;It is also obviously related to the size of the tree. Below is a graph showing the results with progressively 5, 10, 15, 20, 25, 30 and 35 child nodes under each node. Remember I am only updating the immediate child nodes, not every node in the tree!&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://www.kiwidude.com/blog/uploaded_images/TreeViewPerformance-742006.png" border="0" alt="" /&gt;&lt;br /&gt;It's pretty obvious that the .Net 1.1 implementation both performs and scales a heck of a lot better than .Net 2.0. If there is a reason for this garbage I'd love to hear it...&lt;br /&gt;&lt;br /&gt;I'm open to suggestions from anyone else out there who has hit the same problem and figured out a solution. I started a &lt;a href="http://groups.google.com/group/microsoft.public.dotnet.framework.windowsforms/browse_frm/thread/fb411afa6fd303ac/#"&gt;thread on the Microsoft forums&lt;/a&gt; in desperation. I already lazy load so users should only incur the hit the first time they expand a node. However it's still pretty darn annoying to wait over a second every first node click to see just a couple of child nodes appear underneath!&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/.net" rel="tag"&gt;.net&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/controls" rel="tag"&gt;controls&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/performance" rel="tag"&gt;performance&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115887608541619536?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115887608541619536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115887608541619536' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115887608541619536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115887608541619536'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/09/net-20-treeview-performance-problem.html' title='.Net 2.0 TreeView Performance Problem'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115817558026869158</id><published>2006-09-13T23:32:00.000+01:00</published><updated>2006-11-10T23:22:26.481Z</updated><title type='text'>NCoverExplorer... In The News</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://software.ericsink.com/index.html"&gt;Eric Sink&lt;/a&gt; just posted &lt;a href="http://software.ericsink.com/articles/Code_Coverage.html"&gt;an interesting article&lt;/a&gt; on the usage of code coverage.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.computerzen.com/"&gt;Scott Hanselman&lt;/a&gt; published his &lt;a href="http://www.hanselman.com/blog/ScottHanselmans2006UltimateDeveloperAndPowerUsersToolListForWindows.aspx"&gt;latest developer tools list&lt;/a&gt; - rather chuffed to make it on there!&lt;/li&gt;&lt;li&gt;Jim Holmes and James Avery &lt;a href="http://frazzleddad.blogspot.com/2006/08/book-update-100-final-draft.html"&gt;near the end&lt;/a&gt; of their mammoth "Windows Developer Power Tools" book which I was delighted to contribute an article for earlier this year. Looking forward to the full read when it comes out around November...&lt;/li&gt;&lt;li&gt;&lt;a href="http://jayflowers.com/WordPress"&gt;Jay Flowers&lt;/a&gt; pushes out the first cut of &lt;a href="http://jayflowers.com/WordPress/?p=70"&gt;CIFactory with an NCoverExplorer / NCover&lt;/a&gt; module.&lt;/li&gt;&lt;li&gt;Diedrik Krols over at &lt;a href="http://www.realdn.net/msblog/"&gt;Real Developer Network&lt;/a&gt; published a couple of examples of using NAnt with the &amp;lt;exec&amp;gt; task to &lt;a href="http://www.realdn.net/msblog/PermaLink,guid,6fdee922-db25-465f-a0d6-0c8283df2c57.aspx"&gt;merge multiple NCover coverage files&lt;/a&gt; and produce &lt;a href="http://www.realdn.net/msblog/PermaLink,guid,d822c264-7f9e-42ba-9fc8-64487af8285a.aspx"&gt;NCoverExplorer results for CruiseControl.Net&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/NCoverExplorer" rel="tag"&gt;NCoverExplorer&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115817558026869158?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115817558026869158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115817558026869158' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115817558026869158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115817558026869158'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/09/ncoverexplorer-in-news.html' title='NCoverExplorer... In The News'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115611301669832883</id><published>2006-08-20T23:25:00.000+01:00</published><updated>2006-11-10T23:22:26.347Z</updated><title type='text'>NCoverExplorer... v1.3.5 Beta</title><content type='html'>This release is still a work in progress - you can read about all the new features in more detail on &lt;a href="http://ncover.org/SITE/forums/thread/490.aspx"&gt;this thread&lt;/a&gt; on the NCover website.&lt;br /&gt;&lt;br /&gt;The feature I want to highlight is the automation of NCover from NCoverExplorer:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Generate NAnt and MSBuild and NAnt scripts, with or without my custom &lt;ncover&gt; tasks&lt;/ncover&gt;&lt;/li&gt;&lt;li&gt;Generate command lines for automation via batch files&lt;/li&gt;&lt;li&gt;Option to register CoverLib.dll before running NCover&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Works against all major NCover versions (1.3.3, 1.5.x)&lt;/li&gt;&lt;li&gt;When run within the NCoverExplorer environment will display the console output and load the coverage results.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/dotnet/ncoverrunner.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverRunner-733978.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/ncoverrunner.gif"&gt;Click to see an animated example.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've spent quite a bit of time helping people out on the &lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt; forums, often with variations of the same old issues of the command line, registering coverlib.dll, incorrect parameters, paths with spaces etc. Hopefully this should help people out with the drudge of first time command line syntax or MSBuild/NAnt scripts.&lt;br /&gt;&lt;br /&gt;Not officially released yet as it needs some testing and feedback - hopefully will be a full NCover 1.3.5 release in a few weeks. Please use the &lt;a href="http://ncover.org/SITE/forums/thread/490.aspx"&gt;thread mentioned above&lt;/a&gt; for feedback on any issues you find, or for the download links.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115611301669832883?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115611301669832883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115611301669832883' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115611301669832883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115611301669832883'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/08/ncoverexplorer-v135-beta.html' title='NCoverExplorer... v1.3.5 Beta'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115437979180983164</id><published>2006-07-31T21:58:00.000+01:00</published><updated>2006-11-10T23:22:26.269Z</updated><title type='text'>NCoverExplorer... Help Forums</title><content type='html'>My thanks to &lt;a href="http://ncover.org/"&gt;Peter Waldschmidt&lt;/a&gt; for adding some NCoverExplorer forums to his NCover website. I had a &lt;a href="http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115235423737394587"&gt;comment&lt;/a&gt; today on my blog from Craig Andera who rightly raised the point that it would be nice for users to have some visibility on issues people have raised, when they get fixed etc.&lt;br /&gt;&lt;br /&gt;I use FogBugz for my internal bug tracking and feature requests (thanks to &lt;a href="http://testdriven.net/"&gt;Jamie Cansdale&lt;/a&gt;!) which is great for what it does. However it does have a limitation in that it is not publicly visible - so you guys can't tell if you are the 1st or the 50th person to have an issue or make a suggestion. With no real other public channel for communication other than my blog I agree it was long overdue for me to to do something about it.&lt;br /&gt;&lt;br /&gt;So - please feel free to make your NCoverExplorer suggestions, tell me what works or doesn't - or indeed by special exemption talk about the &lt;a href="http://www.scrum.com/reports/report.asp?match=1317"&gt;All Black supremacy in the Bledisloe Cup over Australia&lt;/a&gt; (again) is permissible... (Rugby World Cups are not however).&lt;br /&gt;&lt;br /&gt;In return I shall try to also post in there about what's on the horizon and of course continue to try to help those in need with NCoverExplorer (or indeed NCover) where I can as hopefully others will too...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ncover.org/SITE/forums/default.aspx?GroupID=8"&gt;NCoverExplorer Forums&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115437979180983164?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115437979180983164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115437979180983164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115437979180983164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115437979180983164'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/07/ncoverexplorer-help-forums.html' title='NCoverExplorer... Help Forums'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115354750747398906</id><published>2006-07-22T06:47:00.000+01:00</published><updated>2006-11-10T23:22:26.197Z</updated><title type='text'>VS.Net... Cancel A Failed Build</title><content type='html'>I only recently came across this &lt;a href="http://visualstudiohacks.com/customizeBuild"&gt;Visual Studio Hack&lt;/a&gt; by Michael Wood to fix one of the single most irritating problems with both Visual Studio 2003 and Visual Studio 2005.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;[Rant] &lt;/span&gt;How Microsoft continue to screw this up is beyond me - do they ever actually use their own products outside of their single assembly demos showing drag/dropping of connections onto forms? Why on earth when you have a referenced project failing to compile would you want to continue trying to compile everything underneath, ending up with screens of irrelevant errors and a Task List that is completely useless? &lt;span style="color: rgb(204, 0, 0);"&gt;[/Rant]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This macro is an absolute must have in your IDE... just add to the MyMacros -&gt; EnvironmentEvents module (you may already have the WithEvents declaration):&lt;br /&gt;&lt;pre&gt;&amp;lt;system.contextstaticattribute()&amp;gt; _&lt;br /&gt;Public WithEvents BuildEvents As EnvDTE.BuildEvents&lt;br /&gt;&lt;br /&gt;Private Sub BuildEvents_OnBuildProjConfigDone( _&lt;br /&gt; ByVal Project As String, ByVal ProjectConfig As String, _&lt;br /&gt; ByVal Platform As String, ByVal SolutionConfig As String, _&lt;br /&gt; ByVal Success As Boolean) _&lt;br /&gt; Handles BuildEvents.OnBuildProjConfigDone&lt;br /&gt;&lt;br /&gt; If Success = False Then&lt;br /&gt;   'The build failed...cancel any further builds.&lt;br /&gt;   DTE.ExecuteCommand("Build.Cancel")&lt;br /&gt; End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;/pre&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/visualstudio.net" rel="tag"&gt;visualstudio.net&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/macros" rel="tag"&gt;macros&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115354750747398906?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115354750747398906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115354750747398906' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115354750747398906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115354750747398906'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/07/vsnet-cancel-failed-build.html' title='VS.Net... Cancel A Failed Build'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115354578600570228</id><published>2006-07-22T06:18:00.000+01:00</published><updated>2006-11-10T23:22:26.132Z</updated><title type='text'>NCoverExplorer... Module Thresholds</title><content type='html'>I received an e-mail from a user trying out the new "per module coverage thresholds" functionality which highlighted some things not clear from my examples in the &lt;a href="http://www.kiwidude.com/blog/2006/07/ncoverexplorer-v134.html"&gt;original post&lt;/a&gt;. The example I gave for MSBuild (the same comments apply to NAnt or using a .config file) was this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);" &gt;NCoverExplorer ...&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(255, 0, 0);" &gt; ModuleThresholds&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;="&lt;/span&gt;MyAssembly1.dll=30;MyAssembly2.dll=80&lt;span style="color: rgb(51, 51, 255);" &gt;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The three things to note are that:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Currently the module name match is case sensitive. I have fixed this in the source code for a future NCoverExplorer release. For now, make sure the names match exactly with those you see in the report.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There is no path information deliberately in these module names. The comparison done under the covers by NCoverExplorer is against the NCover names without the paths.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;NCoverExplorer will fail a build (if using the fail minimum switch) if either the overall coverage or any of the individual module thresholds specified are not met.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;My thanks to Max Palmer for the feedback. I have also added to the &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerFAQ.html"&gt;FAQ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115354578600570228?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115354578600570228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115354578600570228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115354578600570228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115354578600570228'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/07/ncoverexplorer-module-thresholds.html' title='NCoverExplorer... Module Thresholds'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115302319594005974</id><published>2006-07-16T05:08:00.001+01:00</published><updated>2009-10-27T18:20:00.046Z</updated><title type='text'>NAnt and MSBuild Tasks for NCover</title><content type='html'>I received an e-mail this week from &lt;a href="http://jayflowers.com/"&gt;Jay Flowers&lt;/a&gt; asking if I would be interested in helping him put together &lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt; and &lt;a href="http://ncoverexplorer.org/"&gt;NCoverExplorer&lt;/a&gt; plugins for &lt;a href="http://www.mertner.com/confluence/display/CIF/CI+Factory+Home"&gt;CI Factory&lt;/a&gt;. The intent is to provide these as an alternative for the &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=4d56495b-0799-4ede-898f-7f07637d2dfc"&gt;CoverageEye&lt;/a&gt; package he already includes.&lt;br /&gt;&lt;br /&gt;I normally use the NAnt &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;exec&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt; task for running NCover on our build servers, which does the job fine once you have it setup. There is unfortunately a bit of pain involved in truly dynamic scripts ensuring paths with spaces are handled correctly, building delimited lists of assemblies etc. The NCover command line in combination with NUnit can be a frustrating learning curve, not to mention it has changed between versions so even looking for answers in web blog articles can be confusing when they are out of date or "simplified".&lt;br /&gt;&lt;br /&gt;To make this a little more painless for both Jay and anyone else interested I ended up creating &lt;a href="http://nant.sourceforge.net/"&gt;NAnt&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/msbuild/default.aspx"&gt;MSBuild&lt;/a&gt; tasks for NCover, supporting NCover 1.3.3 and 1.5.x to date.&lt;br /&gt;&lt;br /&gt;I have now included these tasks in my existing NCoverExplorer NAnt/MSBuild task assemblies located in &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorer.Extras.zip"&gt;NCoverExplorer.Extras.zip&lt;/a&gt;, along with all the source code and example .build/.proj files.&lt;br /&gt;&lt;br /&gt;&lt;strike&gt;&lt;span style="font-weight: bold;"&gt;Note:&lt;/span&gt; These tasks still require that NCover has it's CoverLib.dll COM registered correctly on your machine. You can always do this as part of your NAnt/MSBuild script prior to using these tasks if not using the default NCover MSI installation.&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;Here is an example of the NAnt &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;ncover&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt; task at it's simplest for NCover 1.3.3 - &lt;strike&gt;note the use of the &lt;span style="color: rgb(255, 0, 0);"&gt;version&lt;/span&gt; attribute. The &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;ncover&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt; task will default to NCover 1.5.4 command line syntax if this is not present.&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[Update 03 Sep 2006: As of build 1.3.5.1789 the &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;ncover&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt; tasks are self registering without needing local admin rights. The version attribute is also now redundant - it will be picked up from the NCover.Console.exe assembly if not specified]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;ncover&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;program&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;Tools\NCover\NCover.Console.exe&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;commandLineExe&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;Tools\NUnit\nunit-console.exe&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;commandLineArgs&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;MyApp.UnitTests.dll&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;strike&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;version&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;1.3.3&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;/strike&gt; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A more complex NAnt example using NCover 1.5.4 showing additional NUnit arguments, customised logging and xml filenames, a coverage exclusion attribute (in the root namespace) and specific non-test assemblies to report coverage on:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;ncover&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;program&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;Tools\NCover\NCover.Console.exe&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;commandLineExe&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;Tools\NUnit\nunit-console.exe&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;commandLineArgs&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;MyApp.UnitTests.dll /xml=MyApp.nunit.xml /labels /nologo&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;workingDirectory&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;${build.output.dir}&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;coverageFile&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;MyApp.ncover.xml&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;logLevel&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;Verbose&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;logFile&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;MyApp.ncover.log&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;excludeAttributes&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;CoverageExcludeAttribute&lt;span style="color: rgb(51, 51, 255);"&gt;"&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;assemblies&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;basedir&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;${build.output.dir}&lt;span style="color: rgb(51, 51, 255);"&gt;"&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;include&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;MyApp*.dll&lt;span style="color: rgb(51, 51, 255);"&gt;" /&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;exclude&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;MyApp.UnitTests.dll&lt;span style="color: rgb(51, 51, 255);"&gt;" /&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(51, 51, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;assemblies&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;ncover&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is a simple MSBuild &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;NCover&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt; task example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;UsingTask&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;TaskName&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;MSBuild.NCoverExplorer.Tasks.NCover&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;AssemblyFile&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;MSBuild.NCoverExplorer.Tasks.dll&lt;span style="color: rgb(51, 51, 255);"&gt;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;NCover&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;ToolPath&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;Tools\NCover\&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;CommandLineExe&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;Tools\NUnit\nunit-console.exe&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: rgb(255, 0, 0);"&gt;CommandLineArgs&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="&lt;/span&gt;MyApp.UnitTests.dll&lt;span style="color: rgb(51, 51, 255);"&gt;" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I did manage to confirm a few bugs/unfinished features in NCover 1.5.4 itself while giving this a test, so where possible I have either worked around or excluded these features until they are one day resolved. FYI, they involved the //q and //h command line arguments, which you should avoid using!&lt;br /&gt;&lt;br /&gt;Feel free to leave a comment or drop me an e-mail if you find these tasks useful (or find a bug of course!).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorer.Extras-1.4.0.5.zip"&gt;Download NCoverExplorer.Extras.zip (CC.Net/NAnt/MSBuild)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;[Update: I'm more than happy to answer questions for people adding these into their builds. However rather than using the blog comments can you please put your query in the NCover or NCoverExplorer &lt;a href="http://ncover.org/site/forums/"&gt;forums&lt;/a&gt; as I blogged about &lt;a href="http://www.kiwidude.com/blog/2006/07/ncoverexplorer-help-forums.html"&gt;here&lt;/a&gt;.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[Update 03 Sep 2006: NAnt and MSBuild tasks have been updated and improved. See &lt;a href="http://ncover.org/SITE/forums/thread/485.aspx"&gt;this thread&lt;/a&gt; for the changes listed in build 1.3.5.1789 or the 1.3.5 &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;release notes&lt;/a&gt;. Documentation can now be found &lt;a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.MSBuildTasks/index.html"&gt;here for MSBuild&lt;/a&gt; and &lt;a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.NAntTasks/index.html"&gt;here for NAnt&lt;/a&gt; (or in the zip file).]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[Update 07 Sep 2006: Bug-fix update for the NCover tasks where multiple arguments specified in the command line. Build 1.3.5.1797 now available at the above links.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;[Update 01 Oct 2006: Updates to the NCoverExplorer tasks to support a new regular expression feature for coverage exclusions and improved documentation. Build 1.3.5.1861 now available. NOTE you must also &lt;a href="http://ncover.org/SITE/forums/thread/485.aspx"&gt;upgrade your NCoverExplorer version to the latest 1.3.5 beta&lt;/a&gt;.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/nant" rel="tag"&gt;nant&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/msbuild" rel="tag"&gt;msbuild&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115302319594005974?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115302319594005974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115302319594005974' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115302319594005974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115302319594005974'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/07/nant-and-msbuild-tasks-for-ncover.html' title='NAnt and MSBuild Tasks for NCover'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115235423737394587</id><published>2006-07-12T08:56:00.000+01:00</published><updated>2007-04-03T21:18:19.388+01:00</updated><title type='text'>NCoverExplorer... v1.3.4</title><content type='html'>It's been a little while since the 1.3.3 release, but NCoverExplorer overload meant I had to take a break to keep some sanity. This release combines some important bugfixes with a small number of new features.&lt;br /&gt;&lt;br /&gt;Firstly the new features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On the toolbar of the NCoverExplorer GUI you will find four new buttons for &lt;span style="font-weight:bold;"&gt;navigating unvisited lines and classes&lt;/span&gt;. These have shortcut keys of 'N'/'P' (or forward/back mouse buttons) for the next/previous unvisited line in the current class. Use 'Ctrl+N'/'Ctrl+P' for next/previous unvisited class in this namespace (or Ctrl + forward/back mouse buttons). Thanks &lt;a href="http://weblogs.asp.net/nunitaddin/"&gt;Jamie&lt;/a&gt; for the mouse button suggestion, it rocks!&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.4_Navigation-735827.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.4_Navigation-731465.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can use &lt;span style="font-weight: bold;"&gt;NCoverExplorer.Console.exe to merge and save&lt;/span&gt; your NCover coverage.xml files. Coverage exclusions will be applied prior to the save of the consolidated xml file. Wildcards are supported for the coverage filenames, so for instance you can do this:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);font-family:courier new;" &gt;ncoverexplorer.console.exe *.ncover.xml /s:coverage.merged.xml&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;If using the NAnt or MSBuild tasks from the latest NCoverExplorer.Extras.zip, you can add a new attribute "&lt;span style="color: rgb(255, 0, 0);"&gt;mergeFileName&lt;/span&gt;" (NAnt) or "&lt;span style="color: rgb(255, 0, 0);"&gt;MergeFileName&lt;/span&gt;" (MSBuild) containing the filename for the results.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Module level coverage thresholds&lt;/span&gt; are now possible using NCoverExplorer.Console.exe, rather than just a single threshold for your project. This is for people wanting more granular control where specific assemblies are deemed unrealistic to attain the same coverage as your overall goal, without seeing "failure" forever on coverage reports.&lt;br /&gt;&lt;br /&gt;For NAnt, add this section within your &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;ncoverexplorer&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt; task:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-size:85%"&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);" &gt;ncoverexplorer ...&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(51, 51, 255);" &gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);" &gt;moduleThresholds&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);" &gt;moduleThreshold&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);" &gt;moduleName&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;="&lt;/span&gt;MyAssembly1.dll&lt;span style="color: rgb(51, 51, 255);" &gt;"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);" &gt;satisfactoryCoverage&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;="&lt;/span&gt;30&lt;span style="color: rgb(51, 51, 255);" &gt;" /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);" &gt;moduleThreshold&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);" &gt;moduleName&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;="&lt;/span&gt;MyAssembly2.dll&lt;span style="color: rgb(51, 51, 255);" &gt;"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);" &gt;satisfactoryCoverage&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;="&lt;/span&gt;80&lt;span style="color: rgb(51, 51, 255);" &gt;" /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;/&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);" &gt;moduleThresholds&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);" &gt;ncoverexplorer&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;For MSBuild, you can add this attribute to the &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;NCoverExplorer&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt; task:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);" &gt;NCoverExplorer ...&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(255, 0, 0);" &gt; ModuleThresholds&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);" &gt;="&lt;/span&gt;MyAssembly1.dll=30;MyAssembly2.dll=80&lt;span style="color: rgb(51, 51, 255);" &gt;" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;For complete examples refer to "example.build" and "example.proj" within the NCoverExplorer.Extras.zip file. If you do not want to use the NAnt/MSBuild tasks then you can use the command line with the /c option for a config file. The syntax is the same as for the NAnt &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;ncoverexplorer&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&gt;&lt;/span&gt; task above - see the ConsoleExample.config file in your NCoverExplorer folder.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There is a &lt;span style="font-weight: bold;"&gt;new code coverage report&lt;/span&gt;, which drills down to classes per namespace per module. This is my "favourite" report we use on our &lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.Net&lt;/a&gt; build servers. To generate this report the magic number is &lt;span style="font-weight:bold;"&gt;"4"&lt;/span&gt; for your report type attribute in the command line, NAnt and MSBuild tasks.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.4_ClassReport-788212.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.4_ClassReport-783455.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Updates to the &lt;span style="font-weight: bold;"&gt;CruiseControl.Net build summary stylesheet&lt;/span&gt;, so that it lists all of the assemblies, their coverage and whether they passed/failed as well as the overall project coverage. Note that this stylesheet now has a dependency on a transparent.gif file being placed in your CruiseControl.Net images folder. See the readme in NCoverExplorer.Extras.zip for details.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.4_BuildSummary-721378.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.4_BuildSummary-718234.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Added the ability to &lt;span style="font-weight: bold;"&gt;change source code paths&lt;/span&gt; for a loaded coverage file in the NCoverExplorer GUI. Sometimes you will be generating coverage files on another machine (such as a build server) that you want to browse - this feature allows you to override the embedded location to find the source code files in.&lt;/li&gt;&lt;/ul&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.4_ResolveMissing-741627.png" border="0" alt="" /&gt;&lt;br /&gt;In terms of bug fixes, the most important that &lt;a href="http://www.kiwidude.com/blog/2006/07/ncoverexplorer-merging-coverage-files.html"&gt;I blogged about recently&lt;/a&gt; is a solution for an issue when merging multiple coverage files. There are also fixes for memory leaks and various other minor GUI issues - see the &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;release notes&lt;/a&gt; for full details.&lt;br /&gt;&lt;br /&gt;As always, please drop me an e-mail through Help-&gt;Send Feedback if you have found any bugs or suggestions.&lt;br /&gt;&lt;br /&gt;One final point - no doubt most people reading this have heard about &lt;a href="http://weblogs.asp.net/nunitaddin/"&gt;Jamie Cansdale&lt;/a&gt; "&lt;a href="http://weblogs.asp.net/nunitaddin/archive/2006/07/10/EnterpriseAndProfessional.aspx"&gt;going commercial&lt;/a&gt;" with &lt;a href="http://testdriven.net/"&gt;TestDriven.Net&lt;/a&gt;. Jamie has been out there upgrading and supporting this great add-in for many years, for which many of us have enjoyed the benefits of "for free". Having had a small taste of what is involved in the last six months with NCoverExplorer you quickly gain an appreciation of just how much of your "life" supporting and enhancing these tools can consume! I wish him all the best in his opportunity to gain a return for those efforts - his continual innovation with TestDriven.Net continues to help fill the many gaps in the Microsoft "out of the box" tools to make for a far more productive development experience.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.testdriven.net/Default.aspx?tabid=27"&gt;Download TestDriven.Net 2.0 combined install&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download the latest NCoverExplorer versions from &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;Release Notes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerFAQ.html"&gt;FAQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/testdriven.net" rel="tag"&gt;testdriven.net&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/cruisecontrol.net" rel="tag"&gt;cruisecontrol.net&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115235423737394587?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115235423737394587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115235423737394587' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115235423737394587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115235423737394587'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/07/ncoverexplorer-v134.html' title='NCoverExplorer... v1.3.4'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-115184721150594254</id><published>2006-07-02T14:09:00.000+01:00</published><updated>2006-11-10T23:22:25.814Z</updated><title type='text'>NCoverExplorer... Merging Coverage Files</title><content type='html'>Several users have reported issues when merging coverage xml files - the merge is aborted with the following dialog:&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_MergeIssue-737943.png" alt="" border="0" /&gt;&lt;br /&gt;In response to &lt;a href="http://ncover.org/SITE/forums/thread/341.aspx"&gt;this post&lt;/a&gt; on the NCover forum I explained why this occurs, without being able to provide an immediate workaround still using the merge feature.&lt;br /&gt;&lt;br /&gt;I have just modified the way I process the xml files to workaround this problem and will include this fix in the NCoverExplorer 1.3.4 release which I will push out in the next week or two.&lt;br /&gt;&lt;br /&gt;While on the subject of merging - I have also enhanced the NCoverExplorer.Console.exe and the NAnt/MSBuild tasks to now allow the automated saving of the results of merging multiple coverage files.&lt;br /&gt;&lt;br /&gt;For anyone who can't wait for the official release please drop me an e-mail (use Help-&gt; Send Feedback in NCoverExplorer) and I will give you a link to the current build. Any early feedback to identify any issues with these features or the others I have added for 1.3.4 would be appreciated.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-115184721150594254?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/115184721150594254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=115184721150594254' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115184721150594254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/115184721150594254'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/07/ncoverexplorer-merging-coverage-files.html' title='NCoverExplorer... Merging Coverage Files'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-114616767040375222</id><published>2006-04-27T20:43:00.000+01:00</published><updated>2006-11-10T23:22:25.726Z</updated><title type='text'>Missing NUnit Fixture Errors In CC.Net</title><content type='html'>I've noticed a few times that when we have an error in our test fixture teardowns at work that the CruiseControl.Net build report page didn't say what the cause was.&lt;br /&gt;&lt;br /&gt;It correctly identifies an error return code from nunit-console, however it is not listed as a "error" on the build report or on the NUnit Details page since it isn't actually a specific test that failed. Rather confusing at the time...&lt;br /&gt;&lt;br /&gt;I've tweaked the unittests.xsl stylesheet for CruiseControl.Net to fix this problem, and now get the test-suite failure message listed on the front build report page. If you are interested you can download it from &lt;a href="http://www.kiwidude.com/dotnet/CC.Net/unittests.xsl"&gt;here&lt;/a&gt;. I've also submitted it to the CC.Net developers group so hopefully it may be included in a future release.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;[Update 14-Oct-06 - A new version of this stylesheet for CruiseControl.Net 1.1 is available from &lt;/span&gt;&lt;a style="color: rgb(204, 0, 0);" href="http://www.kiwidude.com/dotnet/CC.Net/unittests_1.1.xsl"&gt;here&lt;/a&gt;&lt;span style="color: rgb(204, 0, 0);"&gt; (rename it to unittests.xsl). There is no real difference I saw - the CC.Net developer refactored their stylesheet to clean it up so I just reapplied the changes over the top. It is also listed in &lt;a href="http://jira.public.thoughtworks.org/browse/CCNET-704"&gt;JIRA&lt;/a&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;a href="http://del.icio.us/kiwidude/cruisecontrol.net" rel="tag"&gt;cruisecontrol.net&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-114616767040375222?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/114616767040375222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=114616767040375222' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114616767040375222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114616767040375222'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/04/missing-nunit-fixture-errors-in-ccnet.html' title='Missing NUnit Fixture Errors In CC.Net'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-114444457937767635</id><published>2006-04-07T21:06:00.000+01:00</published><updated>2006-11-10T23:22:25.660Z</updated><title type='text'>Illegal Characters &amp; NCover Versions</title><content type='html'>Some people are reporting problems with NCoverExplorer which are caused by an older version of &lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt; - that is NCover version 1.4.6. The problem occurs when they try to drill down into the source code within the GUI.&lt;br /&gt;&lt;br /&gt;Please do &lt;span style="font-weight: bold;"&gt;NOT&lt;/span&gt; use NCover 1.4.6. The problem is within the coverage.xml file created - the filename attributes end up with extraneous characters appended (something like '&amp;amp;#x0;'). I may try to strip this out myself in a future NCoverExplorer version, however as Peter does not even list this version for download nowadays I would rather people were forced to use a more "supported" NCover download.&lt;br /&gt;&lt;br /&gt;So to clarify - &lt;span style="font-weight:bold;"&gt;which version of NCover should you use?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you do not have the .Net 2.0 framework installed on your machine then you should use &lt;span style="font-weight: bold;"&gt;NCover 1.3.3&lt;/span&gt;. This is exactly what we use at work every day without any problems.&lt;br /&gt;&lt;br /&gt;If you want to profile a .Net 2.0 application, then you must use one of the latest &lt;span style="font-weight: bold;"&gt;NCover 1.5.x&lt;/span&gt; betas. The very latest 1.5.4 beta does have some known issues (see the &lt;a href="http://ncover.org/SITE/forums/default.aspx"&gt;NCover forums&lt;/a&gt; - in particular &lt;a href="http://ncover.org/SITE/forums/thread/242.aspx"&gt;here&lt;/a&gt;, &lt;a href="http://ncover.org/SITE/forums/thread/247.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://ncover.org/SITE/forums/thread/221.aspx"&gt;here&lt;/a&gt;). Peter has had &lt;a href="http://ncover.org/SITE/blogs/ncover_blog/archive/2006/04/04/288.aspx"&gt;more important things&lt;/a&gt; to think about recently (congrats by the way mate!) but he has indicated the next release with some bug fixes will be coming out soon.&lt;br /&gt;&lt;br /&gt;If you want to profile a .Net 1.1 application but happen to have .Net 2.0 installed then you can use either version of NCover. I'm sure Peter would much rather people were using 1.5.x than 1.3.3 so once his next beta release comes out that would be my preference, particularly for the coverage exclusion attribute support.&lt;br /&gt;&lt;br /&gt;All supported NCover versions can be &lt;a href="http://ncover.org/SITE/files/default.aspx"&gt;downloaded from NCover.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One final point - I see additional confusion coming from the two NCover projects out there. The NCover we want you all to be using is from &lt;a href="http://ncover.org"&gt;NCover.org&lt;/a&gt; - unfortunately all too easily confused with another "inactive" project at &lt;a href="http://sourceforge.net/projects/ncover/"&gt;SourceForge&lt;/a&gt;. Irritating I'm sure for all concerned that the two projects have the same name - just remember &lt;span style="font-weight:bold;"&gt;NCover.org&lt;/span&gt; and you can't go wrong.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-114444457937767635?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/114444457937767635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=114444457937767635' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114444457937767635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114444457937767635'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/04/illegal-characters-ncover-versions.html' title='Illegal Characters &amp; NCover Versions'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-114400833847860871</id><published>2006-04-04T20:45:00.000+01:00</published><updated>2007-04-03T21:18:53.757+01:00</updated><title type='text'>NCoverExplorer... v1.3.3</title><content type='html'>Another stack of new features in the latest generation of NCoverExplorer. I've added summary html/xml reporting, filtering capabilities, basic code metrics and very significantly a console version for automated build usage.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Html reporting&lt;/span&gt; as I posted about &lt;a href="http://www.kiwidude.com/blog/2006/03/html-coverage-reporting.html"&gt;here&lt;/a&gt; has been requested by a number of users, including myself! For this release I have implemented summary reports since from the feedback I received they were of most interest. From either the GUI or the the console application you can now generate one of three reports:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Module Summary&lt;/li&gt;&lt;li&gt;Namespace Summary&lt;/li&gt;&lt;li&gt;Module and Namespace Summary&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;As you can see from this dialog you have a choice of output either directly to html or to xml (the latter having an associated stylesheet for rendering html).&lt;br /&gt;&lt;p&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_ReportsDialog-745118.png" border="0" /&gt;&lt;br /&gt;An example of the module summary report is shown here. Note the inclusion of some basic statistics at the top right. You can also see that our "satisfactory coverage threshold" is displayed at the top (90%) and that any graph bars exceeding this threshold (but not 100%) have the uncovered code shown in yellow. So a glance at the report for the red bars will tell you which modules or namespaces are possibly in need of investigation.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_ReportSummary-796404.png"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_ReportSummary-792918.png" border="0" /&gt;&lt;/a&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Statistics&lt;/span&gt; are also available within the NCoverExplorer GUI. Note that these are derived from the NCover coverage report, not the source code. The totals deliberately ignore any "excluded" code.&lt;/p&gt;&lt;p&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_Statistics-769872.png" border="0" /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Filtering &lt;/span&gt;offers a way of simplifying down the coverage tree without affecting the coverage totals (unlike "excluding" which recalculates the totals). There are two filters available - hiding all 100% covered nodes (for when you want to focus on the todo list), and hiding all 0%/unvisited nodes (for when unit testing isolated functionality).&lt;br /&gt;&lt;br /&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_FilterMenu-778652.png" border="0" /&gt;&lt;br /&gt;My thanks to &lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;Lutz Roeder&lt;/a&gt; for the public donation of his excellent CommandBar code. You can see the impact in this in the new look to the menus with images and the new &lt;strong&gt;Toolbar&lt;/strong&gt; shown below.&lt;/p&gt;&lt;p&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_Toolbar-789656.png" border="0" /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Including &lt;/span&gt;nodes that were marked as "excluded" is also now possible. You can think of this as an "undo" feature to override either manual exclusions or those defined in the options dialog. Including a node will also recalculate the related coverage statistics.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_Console-789446.png"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_Console-779412.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;NCoverExplorer.Console &lt;/span&gt;came about from two features on my list. One of these from Matt Hargett of &lt;a href="http://www.imeem.com/"&gt;imeem.com&lt;/a&gt; was to enable failing a build if coverage does not meet a particular threshold.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_ConsoleFail-768275.png"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_ConsoleFail-753558.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The second item was the ability to produce xml and html coverage summary reports in an automated fashion. As anyone who has used &lt;a href="http://ncover.org"&gt;NCover&lt;/a&gt; on large projects will testify, coverage.xml files can be very large. Rendering these using xsl while being an elegant and flexible solution is just way too slow, particularly when the coverage file is many megabytes. Merging the coverage.xml file(s) into your &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET"&gt;CruiseControl.Net&lt;/a&gt; buildlog.xml files also slows down the rendering of every single page for that build on the CCNet web server.&lt;br /&gt;&lt;br /&gt;My solution to this is based on the assumption that I do not want to see line level coverage information on the build server. I just want to see a summary of the project, modules and perhaps down to namespace level of coverage. By adding NCoverExplorer.Console.exe to the build pipeline we can transform the NCover results very quickly into a tiny summary xml file. With the appropriate stylesheets we can now render coverage summary reports in CCNet in a fraction of the time previously taken.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_CCNetReports-729240.png"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_CCNetReports-708854.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;All of the options available in the GUI in terms of exclusions, thresholds, project name, output as xml and/or html are available.&lt;br /&gt;&lt;br /&gt;I have also developed an additional stylesheet for use on the Build Report page of CCNet as shown below:&lt;br /&gt;&lt;br /&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_CCNetBuildReport-755060.png" border="0" /&gt; Since these are just stylesheets transforming the NCoverExplorer xml file they can be customised to your own tastes if required.&lt;br /&gt;&lt;br /&gt;The final piece of the puzzle is to automate through &lt;strong&gt;NAnt&lt;/strong&gt; and &lt;strong&gt;MSBuild&lt;/strong&gt; the creation of the xml/html reports. You can of course just use an &amp;lt;exec&amp;gt; task, however I have put together some custom tasks for both tools which offer a bit more flexibility. These are available for download in the NCoverExplorer.Extras zip file at the bottom of this post along with some included examples and the necessary stylesheets for CruiseControl.Net.&lt;br /&gt;&lt;/exec&gt;&lt;/p&gt;&lt;p&gt;&lt;exec&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_NAnt-704144.png"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.3_NAnt-799968.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If anyone requires it I may put up a blog entry walking through such configuration or perhaps see about getting it documented on the CruiseControl.Net wiki. It is fairly straightforward though:&lt;/exec&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Copy the NCoverExplorer.xsl and NCoverExplorerSummary.xsl stylsheets from the NCoverExplorer.Extras zip file to your CruiseControl.Net\webdashboard\xsl folder&lt;/li&gt;&lt;li&gt;Edit your CruiseControl.Net\webdashboard\dashboard.config file to point to these stylesheets. I have included an example dashboard.config in the .zip&lt;/li&gt;&lt;li&gt;Modify your NAnt or MSBuild script. As stated you can either execute the console application directly with command line arguments or use my custom tasks. For instance to use the custom NAnt task copy NAnt.NCoverExplorer.Tasks.dll to your NAnt\bin\Tasks\net folder and follow the example syntax contained within "example.build".&lt;/li&gt;&lt;li&gt;Modify your CruiseControl.Net project file (ccnet.config) to use the merge publisher to include the xml output from NCoverExplorer.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For my own sanity, other than any bug-fixes I am intending to put a hold on further development for a little while. This has consumed every evening and weekend for the last couple of months so it's time for a break. Any &lt;a href="http://www.kiwidude.com/blog/PaypalPaymentPage.html"&gt;donations&lt;/a&gt; could of course help rekindle my interest ;-)&lt;/p&gt;&lt;p&gt;As always I welcome any feedback. Enjoy!&lt;br /&gt;&lt;/p&gt;&lt;a href="http://www.testdriven.net/Default.aspx?tabid=27"&gt;Download TestDriven.Net 2.0.1578 combined install&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download the latest NCoverExplorer versions from &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;Release Notes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerFAQ.html"&gt;FAQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/cruisecontrol.net" rel="tag"&gt;cruisecontrol.net&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-114400833847860871?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/114400833847860871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=114400833847860871' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114400833847860871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114400833847860871'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/04/ncoverexplorer-v133.html' title='NCoverExplorer... v1.3.3'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-114269445283361652</id><published>2006-03-18T14:49:00.000Z</published><updated>2006-11-10T23:22:25.531Z</updated><title type='text'>NCoverExplorer... Want To Contribute?</title><content type='html'>Any amount is appreciated - &lt;a href="http://www.kiwidude.com/blog/PaypalPaymentPage.html"&gt;read more&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 51, 102); font-weight: bold;"&gt;[Note - originally I tried creating this blog entry directly in here but Blogger wouldn't post form data correctly - my apologies for the indirection.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-114269445283361652?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/114269445283361652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=114269445283361652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114269445283361652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114269445283361652'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/03/ncoverexplorer-want-to-contribute.html' title='NCoverExplorer... Want To Contribute?'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-114251446301175190</id><published>2006-03-16T12:56:00.000Z</published><updated>2006-11-10T23:22:25.388Z</updated><title type='text'>HTML Coverage Reporting</title><content type='html'>I've had a couple of users ask whether NCoverExplorer might ever offer the ability to generate HTML reports of code coverage. An example of the potential sort of output (including the source code highlighted) is shown by &lt;a href="http://www.cenqua.com/clover.net/eg/nunit/report/index.html"&gt;Clover&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm interested to know just how much demand there is for this feature. It looks pretty but personally I doubt I would make use of this particular report - html pages by their nature are static and the hundreds or thousands of pages generated are virtually guaranteed to be out of date immediately as the code changes. I'm open to being educated though - what usage would you make of such a feature if NCoverExplorer offered it, or is it just a "nice to have"?&lt;br /&gt;&lt;br /&gt;The one type of reporting I have found useful is the top summary section produced by the coverage.xsl that comes with &lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt;. The downside of the XSL approach is it is just way too slow on large coverage files. It could be fairly easy for NCoverExplorer instead to produce a static HTML summary page showing the graph percentages. This report could then be included as a CruiseControl build artifact (if I make a console driven NCoverExplorer version) or via e-mail.&lt;br /&gt;&lt;br /&gt;Does this have any appeal? If so, what sort of reports would you like to see (e.g. assembly coverage summary only or namespace/class summary). How detailed and customisable do the report(s) need to be?&lt;br /&gt;&lt;br /&gt;All input for and against welcomed - either in the blog comments, or post your thoughts in the &lt;a href="http://groups.google.com/group/TestDrivenUsers/"&gt;TestDriven.Net users group&lt;/a&gt; in this &lt;a href="http://groups.google.com/group/TestDrivenUsers/browse_frm/thread/db035d872e0d3370/dbc556208b90145a#dbc556208b90145a"&gt;thread&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-114251446301175190?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/114251446301175190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=114251446301175190' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114251446301175190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114251446301175190'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/03/html-coverage-reporting.html' title='HTML Coverage Reporting'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-114236546283809233</id><published>2006-03-14T19:43:00.000Z</published><updated>2007-04-03T21:19:27.043+01:00</updated><title type='text'>NCoverExplorer... v1.3.2</title><content type='html'>Plenty of "must have" features that have been on people's wish lists in this release and a couple of irritating bugs fixed so I can't recommend highly enough that people upgrade. Download details at the bottom of the post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Merging coverage files&lt;/span&gt; is the first of the "killer" features, offering improved integration with &lt;a href="http://weblogs.asp.net/nunitaddin"&gt;TestDriven.Net&lt;/a&gt;. Some of you may have noticed the inability to produce coverage results across a VS.Net solution or with multiple fixtures selected in the solution explorer window. The &lt;a href="http://www.testdriven.net/Default.aspx?tabid=27"&gt;latest release&lt;/a&gt; of TestDriven.Net now supplies multiple coverage file names to NCoverExplorer which will merge and present the consolidated results. You can also manually merge multiple coverage files within NCoverExplorer via a number of ways, such as a "File-&gt;Merge" menu option or drag/drop.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saving&lt;/span&gt; of the consolidated coverage results is now possible using the new "File-&gt;Save/Save As" options. Note that saving will remove any excluded nodes (see below) and merges together any duplicated visit count sections from the new coverage.xml file. This means you will likely find the resulting file much smaller than the originals.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_Exclusions-769834.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_Exclusions-763155.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Coverage exclusions&lt;/span&gt; are my personal favourite new feature. This offers a way for NCoverExplorer to automatically remove from the coverage tree items not relevant to your analysis when a coverage file is loaded - such as unit test fixtures, third party libraries etc. In the screenshot shown you can see the default exclusions I have included with NCoverExplorer - for instance any assemblies ending in ".Tests" will be excluded. You can add exclusions at the class, assembly and namespace level. I have also added support for the &lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt; 1.5.x feature of "exclusion attributes" if they exist in the coverage.xml file (although NCover still has some &lt;a href="http://ncover.org/SITE/forums/thread/247.aspx"&gt;kinks&lt;/a&gt; to be worked out in a future release before you can rely on this feature).&lt;br /&gt;&lt;br /&gt;All excluded items are then added to a special &lt;span style="font-weight: bold;"&gt;Excluded bin&lt;/span&gt; for the parent node as shown in the screenshot below. The source code for excluded methods will be highlighted in grey. You can also manually exclude items on the fly via a right-click "Exclude from Results" menu which replaces the previous "Remove from Results" option.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Source code tabs&lt;/span&gt; started out as a solution to a problem a few users reported with highlighting, particularly to do with &lt;a href="http://www.kiwidude.com/blog/2006/03/ncoverexplorer-partial-classes-grief.html"&gt;partial classes&lt;/a&gt;. I believe I have resolved this once and for all now with the introduction of this feature. If you click on a partial class in the coverage tree, a tab is opened for every source code file making up that class with all the code highlighted as shown here.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_PartialClasses-738092.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_PartialClasses-738092.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The tabs also offer a way of quickly navigating around the coverage tree as selecting a tab will select the corresponding class node.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_Themes-758888.png"&gt;&lt;img style="margin: 0pt 20px 20px 0pt; float: right; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_Themes-758888.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Themes&lt;/span&gt; came about as an answer to another much requested feature of more customisation of the GUI to include fonts and background colours. A "theme" is a group of settings covering most aspects of the appearance of the coverage tree, statistics pane and source code highlighting.&lt;br /&gt;&lt;br /&gt;You can of course add your own themes as shown in the screenshots on this blog entry. Themes are easily toggled between using the new View-&gt;Themes menu.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_FunctionCoverage-700980.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_FunctionCoverage-700980.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Sorting&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Coverage&lt;/span&gt; options came from a couple of user feature requests as shown here.&lt;br /&gt;&lt;br /&gt;These allow NCoverExplorer to display function coverage or focus on methods with the most unvisited code. &lt;br /&gt;&lt;br /&gt;My thanks to Trevor Hall for his time taken to suggest and test not only these features but also a number of others slated for a future release (after I take a break!).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_Sorting-794566.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.2_Sorting-794566.png" alt="" border="0" /&gt;&lt;/a&gt;Thanks also to Jamie and others who have been kind enough to test the beta versions and provide invaluable feedback.&lt;br /&gt;&lt;br /&gt;There are numerous other minor usability tweaks and enhancements I haven't mentioned here that you can read about in the release notes or discover for yourselves. I look forward to any feedback!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.testdriven.net/Default.aspx?tabid=27"&gt;Download TestDriven.Net 2.0.1545 combined install&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download the latest NCoverExplorer versions from &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;Release Notes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerFAQ.html"&gt;FAQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/testdriven.net" rel="tag"&gt;testdriven.net&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-114236546283809233?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/114236546283809233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=114236546283809233' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114236546283809233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114236546283809233'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/03/ncoverexplorer-v132_14.html' title='NCoverExplorer... v1.3.2'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-114134719220085832</id><published>2006-03-03T00:13:00.000Z</published><updated>2006-11-10T23:22:25.168Z</updated><title type='text'>NCoverExplorer... Partial Classes Grief</title><content type='html'>I've had a couple of reports of issues with NCoverExplorer when used with partial classes. Thanks to Matthias Paetzold with his excellent repro I've figured out the cause.&lt;br /&gt;&lt;br /&gt;You should only be experiencing this particular issue if you split your class variable declarations (with initial value assignments inline) into a different partial class file from that containing a constructor.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt; groups all those lines of code together for each constructor - in effect creating something I call "partial methods" (that's not exactly the first words I used when I saw this issue but you get the idea!)&lt;br /&gt;&lt;br /&gt;I'm hoping to get a fix in my NCoverExplorer 1.3.2 release out early next week to coincide with another &lt;a href="http://weblogs.asp.net/nunitaddin/"&gt;TestDriven.Net&lt;/a&gt; public beta from Jamie. There's plenty of new NCoverExplorer features including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;coverage exclusions - automatically remove test assemblies/classes when a coverage file is loaded;&lt;/li&gt;&lt;li&gt;themes - greater GUI customisation and ability to save your own appearance combinations;&lt;/li&gt;&lt;li&gt;alternate display options - such as #unvisited sequence points or function coverage;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;tree sorting capability - by coverage, unvisited sequence points etc;&lt;/li&gt;&lt;/ul&gt;More on these next week...&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-114134719220085832?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/114134719220085832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=114134719220085832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114134719220085832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114134719220085832'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/03/ncoverexplorer-partial-classes-grief.html' title='NCoverExplorer... Partial Classes Grief'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-114012933913259624</id><published>2006-02-16T22:05:00.000Z</published><updated>2006-11-10T23:22:25.106Z</updated><title type='text'>NCoverExplorer... Updated v1.3.1</title><content type='html'>Apologies to any of the "early adopters" of my latest build who downloaded yesterday and may have hit an issue. I have just pushed a fixed build online now along with &lt;a href="http://testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; build 2.0.1438.&lt;br /&gt;&lt;br /&gt;The problem only arose when NCoverExplorer tried to highlight a multiline statement with a blank line in the middle. Not an everyday occurrence but certainly one user came across it (my thanks to Trevor Hall) - the code below would blow up fairly spectacularly with the previous v1.3.0 build:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_BlankLine-782381.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_BlankLine-779189.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;To anyone wondering why this didn't occur with NCoverExplorer v1.3.0 or earlier - it's because I put in a number of workarounds for the otherwise brilliant ICSharp.TextEditor control in this release to improve the highlighting. The TextEditor control appears to be designed to highlight on a "word" basis for a line, whereas I want to highlight absolute positions as reported by NCover. Unfortunately it's word-based approximation sometimes resulted in misleading highlights on screen.&lt;br /&gt;&lt;br /&gt;Fingers crossed this is the last of the tweaks on this issue... but as always if you have a problem feel free to report it.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-114012933913259624?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/114012933913259624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=114012933913259624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114012933913259624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114012933913259624'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/02/ncoverexplorer-updated-v131.html' title='NCoverExplorer... Updated v1.3.1'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-114004734186685204</id><published>2006-02-15T22:59:00.000Z</published><updated>2007-04-03T21:19:57.154+01:00</updated><title type='text'>NCoverExplorer... v1.3.1</title><content type='html'>A ton of new features in the latest release, and a few bugs fixed ranging from minor annoyance (code highlighting) to downright critical for some (supporting .Net 2.0 features like partial classes and generics - thanks to &lt;a href="http://weblogs.asp.net/nunitaddin/"&gt;Jamie Cansdale&lt;/a&gt; &amp; Andreas Hofer in particular for pointing out the issues!).&lt;br /&gt;&lt;br /&gt;As per usual you can download this version with the just released build (2.0.1435) of &lt;a href="http://testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; or as a standalone product via the links at the bottom of this post.&lt;br /&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;&lt;span style="font-weight: bold;"&gt;[Update] A post-release &lt;a href="http://www.kiwidude.com/blog/2006/02/ncoverexplorer-updated-v131.html"&gt;bug fix&lt;/a&gt; implemented on Feb 16th, updated on this site and available with TestDriven.Net build 2.0.1438.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;What's New?&lt;/span&gt;&lt;/span&gt; Loads... more than I'm going to mention here (see the &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;release notes&lt;/a&gt; for the full list). Let's look at the options dialog:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_OptionsTab1-775884.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_OptionsTab1-775884.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Apart from the new tabbed appearance there are some other new options to note here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Namespaces will now be "flattened" by default which is the same appearance as Reflector or the VS.Net 2005 class viewer (see screenshot below).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For the VB.Net crowd out there you can now exclude the "My" namespace by default which NCover includes in the results, distorting your coverage percentages.&lt;/li&gt;&lt;li&gt;An optional threshold for the number of unvisited lines in a method. Acts in a similar way to the existing % threshold feature but just another way of convincing yourself things aren't as bad as they may first seem...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Probably the most requested feature I have had is the ability to customise the colours - so here you go! There is more to come in the future on this but for now you can change:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_OptionsTab2-767371.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_OptionsTab2-767371.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Moving onto the display itself, you can see some new menu options in the tree view and the default view of a "Flat" namespace hierarchy below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_Namespaces-758949.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_Namespaces-758949.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The two new right-click menu options are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Remove from results - does what it says on the tin. This option is context aware so you can use it to "prune" your coverage tree - be it to remove a unit test assembly as shown above or exclude a class. After the remove action is selected NCoverExplorer recalculates the percentages in the tree.&lt;/li&gt;&lt;li&gt;Collapse All - collapses every single coverage node in the tree.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Next is the statistics pane. This has had quite a revamp (my thanks to Andrzej Kaczmarczyk for his suggestions). Clicking on a class node now produces a summary of all the methods and the number of times they were executed (shown below). The columns are now sortable as well. This offers a rudimentary form of code profiling analysis.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_ClassStats2-750951.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3.1_ClassStats2-750951.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The final new feature I think worth highlighting is that by default NCoverExplorer now tries to restore your cursor position / current selected node when reloading a coverage file. So when used in conjunction with the superb &lt;a href="http://testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; "Test With... Coverage" feature you no longer need to keep re-expanding the nodes to get to where you last were...&lt;br /&gt;&lt;br /&gt;I look forward to your &lt;a href="http://try4.fogbugz.com/?id=58973YPDPJE"&gt;feedback&lt;/a&gt; with any additional suggestions, comments... or even dare I suggest new bugs! This release has made quite a dent in the features todo list but there's still a number of things on it yet...&lt;br /&gt;&lt;br /&gt;Also very much worth noting - the latest &lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt; beta release 1.5.3 is now &lt;a href="http://ncover.org/SITE/blogs/ncover_blog/archive/2006/02/14/176.aspx"&gt;available&lt;/a&gt; - highly recommended for the bug fixes alone. Thanks Peter!&lt;br /&gt;&lt;br /&gt;Download the latest NCoverExplorer versions from &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;Release Notes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerFAQ.html"&gt;FAQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-114004734186685204?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/114004734186685204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=114004734186685204' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114004734186685204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/114004734186685204'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/02/ncoverexplorer-v131.html' title='NCoverExplorer... v1.3.1'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-113934702288289980</id><published>2006-02-07T20:55:00.000Z</published><updated>2006-11-10T23:22:24.899Z</updated><title type='text'>NCoverExplorer... Feedback</title><content type='html'>As promised the latest build of TestDriven.Net with &lt;a href="http://www.kiwidude.com/blog/2006/02/ncoverexplorer-v13.html"&gt;NCoverExplorer 1.3&lt;/a&gt; included is now &lt;a href="http://weblogs.asp.net/nunitaddin/archive/2006/02/08/437702.aspx"&gt;available&lt;/a&gt;... with this build of TestDriven.Net it will re-use the same NCoverExplorer instance each time you choose "Test with... Coverage".&lt;br /&gt;&lt;br /&gt;We have also been trialling &lt;a href="http://www.fogcreek.com/FogBugz/"&gt;FogBugz&lt;/a&gt; as a way of tracking features, bugs and questions from everyone for both TestDriven.Net and NCoverExplorer. So far it looks pretty good - ease of use through simplicity is obviously it's goal and it does that well.&lt;br /&gt;&lt;br /&gt;If you do have anything you want to report to us, the url (for the next 40 days during the trial) is &lt;a href="http://try4.fogbugz.com/default.asp?id=58973YPDPJE&amp;amp;pg=pgPublicEdit"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/testdriven.net" rel="tag"&gt;testdriven.net&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/fogbugz" rel="tag"&gt;fogbugz&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-113934702288289980?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/113934702288289980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=113934702288289980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113934702288289980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113934702288289980'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/02/ncoverexplorer-feedback.html' title='NCoverExplorer... Feedback'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-113926046105332437</id><published>2006-02-06T20:36:00.000Z</published><updated>2007-04-03T21:20:31.872+01:00</updated><title type='text'>NCoverExplorer... v1.3</title><content type='html'>I've just finished putting the finishing touches on the latest release. If you want to download it straight away, you can find it in the locations at the bottom of this post. I believe &lt;a href="http://weblogs.asp.net/nunitaddin/"&gt;Jamie Cansdale&lt;/a&gt; will be announcing availability of the next release of &lt;a href="http://testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; within the next 24 hours or so with this bundled...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What's new?&lt;/span&gt; Well as you can see in the screenshot below there's a couple of changes in the treeview. For a start, there is now a new root level node representing the coverage file, giving you a total for coverage of all it's children. In addition by default the coverage is now grouped by module (usually the same as the assembly). Great for large projects...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3-741068.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer_1.3-734199.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;From a code navigation viewpoint a couple of convenience features have been added. The "Expand Covered" option gives you a quick way to open up all nodes with coverage - useful for if you have just executed TestDriven.Net with "Test with... Coverage" running a small subset of tests.&lt;br /&gt;&lt;br /&gt;You can also see an "Edit in VS.Net" option - you can right-click either on the tree or within the source code pane and have your cursor appear at the same place in the source code in your Visual Studio.Net IDE...&lt;br /&gt;&lt;br /&gt;A number of other tweaks and enhancements were made (such as reusing the same NCoverExplorer window when run from TestDriven.Net) - you can read the full details in the &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html"&gt;release notes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A quick note of thanks to everyone who has blogged, e-mailed or otherwise commented and supported NCoverExplorer. I've got a load of more features on my list to come over the next few weeks (time permitting) -  any other ideas are also welcomed either via the blog, the &lt;i&gt;TestDriven.NET Users&lt;/i&gt; &lt;a href="http://groups.google.com/group/TestDrivenUsers/"&gt;group&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;&lt;span style="font-weight: bold;"&gt;[Update]&lt;/span&gt;&lt;span style="color: rgb(102, 51, 102);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;or preferably &lt;/span&gt;&lt;a style="color: rgb(102, 51, 102);" href="http://try4.fogbugz.com/default.asp?id=58973YPDPJE&amp;pg=pgPublicEdit"&gt;FogBugz&lt;/a&gt;&lt;span style="color: rgb(102, 51, 102);"&gt; during our &lt;/span&gt;&lt;a style="color: rgb(102, 51, 102);" href="http://www.kiwidude.com/blog/2006/02/ncoverexplorer-feedback.html"&gt;trial&lt;/a&gt;&lt;span style="color: rgb(102, 51, 102);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;over the next 40 days.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download the latest NCoverExplorer versions from &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/testdriven.net" rel="tag"&gt;testdriven.net&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-113926046105332437?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/113926046105332437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=113926046105332437' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113926046105332437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113926046105332437'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/02/ncoverexplorer-v13.html' title='NCoverExplorer... v1.3'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-113882126897699619</id><published>2006-02-01T18:40:00.000Z</published><updated>2006-11-10T23:22:24.741Z</updated><title type='text'>TestDriven.Net Now Supports NCover 1.3.3</title><content type='html'>As I &lt;a href="http://www.kiwidude.com/blog/2006/01/ncoverexplorer-first-availability.html"&gt;hinted&lt;/a&gt; at previously &lt;a href="http://weblogs.asp.net/nunitaddin/"&gt;Jamie Cansdale&lt;/a&gt; has just &lt;a href="http://weblogs.asp.net/nunitaddin/archive/2006/02/01/437082.aspx"&gt;announced&lt;/a&gt; public availability of a new build which supports NCover 1.3.3 - good news for those of us who are still ploughing the BCL 1.1 fields without 2.0 installed. Jamie is clearly setting dangerous precedents in customer service by way of his superb "&lt;a href="http://weblogs.asp.net/nunitaddin/archive/2006/02/01/437082.aspx"&gt;apology&lt;/a&gt;" - suggestions welcomed for my:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;list of ways I can make him think something is his fault;&lt;/li&gt;&lt;li&gt;list of new features he shall feel obliged to subsequently implement; &lt;/li&gt;&lt;/ul&gt;Actually I think it was quite an intelligent default rule on the part of his firewall to keep me away from his TestDriven.Net source repository while he sleeps, given my "immense" (cough) knowledge of SVN...&lt;br /&gt;&lt;br /&gt;In other news, &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt; released his latest &lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast4.aspx"&gt;Hanselminutes&lt;/a&gt; podcast (about Continuous Integration tools) where he gives a big thumbs up to &lt;a href="http://www.testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; and was kind enough to mention yours truly in there as well in respect of the &lt;a href="http://www.kiwidude.com/blog/2006/01/ncoverexplorer-debut.html"&gt;NCoverExplorer&lt;/a&gt; integration - cheers mate! I'm so chuffed I'd like to send the audio file to Mum &amp;amp; Dad too - but there's ever such a &lt;em&gt;slight&lt;/em&gt; chance they might not understand it...&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/testdriven.net" rel="tag"&gt;testdriven.net&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-113882126897699619?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/113882126897699619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=113882126897699619' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113882126897699619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113882126897699619'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/02/testdrivennet-now-supports-ncover-133.html' title='TestDriven.Net Now Supports NCover 1.3.3'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-113871843134034829</id><published>2006-01-31T14:34:00.000Z</published><updated>2007-04-03T21:21:02.725+01:00</updated><title type='text'>NCoverExplorer... Downloads</title><content type='html'>For anyone who (for some insane reason) does not want the combined installation with &lt;a href="http://www.testdriven.net/"&gt;TestDriven.Net&lt;/a&gt; - I can now offer an alternative. Note that this is exactly the same NCoverExplorer version as deployed with TestDriven.Net.&lt;br /&gt;&lt;br /&gt;Download the latest NCoverExplorer versions from &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have also put together an &lt;a href="http://www.kiwidude.com/dotnet/NCoverExplorerFAQ.html"&gt;FAQ&lt;/a&gt; which is bundled in the zip file...&lt;br /&gt;&lt;br /&gt;Last but by no means least I see that both &lt;a href="http://www.hanselman.com/blog/CodeCoverageComesToTheMasses.aspx"&gt;Scott Hanselman&lt;/a&gt; and &lt;a href="http://ncover.org/SITE/blogs/ncover_blog/archive/2006/01/30/109.aspx"&gt;Peter Waldschmidt&lt;/a&gt; had some nice things to say about NCoverExplorer - cheers guys, makes that 3am effort on Saturday night trying unsuccesfully to get through Jamie's firewall to his SVN server seem more worthwhile now... ;-)&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/testdriven.net" rel="tag"&gt;testdriven.net&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-113871843134034829?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/113871843134034829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=113871843134034829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113871843134034829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113871843134034829'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/01/ncoverexplorer-downloads.html' title='NCoverExplorer... Downloads'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-113869918018782683</id><published>2006-01-31T09:01:00.000Z</published><updated>2006-11-10T23:22:24.576Z</updated><title type='text'>NCoverExplorer... First Availability</title><content type='html'>&lt;a href="http://weblogs.asp.net/nunitaddin"&gt;Jamie Cansdale&lt;/a&gt; has just announced the availability of his latest build of TestDriven.Net in &lt;a href="http://weblogs.asp.net/nunitaddin/archive/2006/01/30/436896.aspx"&gt;this posting.&lt;/a&gt; As part of the installation it includes NCoverExplorer - you can get the download from &lt;a href="http://www.testdriven.net/"&gt;here&lt;/a&gt;. For those of you lucky enough to have .Net 2.0 installed and using the latest NCover 1.5.x you can start using the "Test with... Coverage" functionality right away - that's a pretty awesome combination...&lt;br /&gt;&lt;br /&gt;Sadly at my "day job" they aren't willing to deploy .Net 2.0 to the desktop as yet. That limits us to NCover 1.33 which isn't &lt;strong&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;currently*&lt;/span&gt;&lt;/strong&gt; supported by this TestDriven.Net feature. So we still use NCoverExplorer in "standalone" mode... certainly workable thanks to NAnt/NAntRunner but clearly not as slick!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;[Update]&lt;/span&gt;&lt;/strong&gt; &lt;span style="color: rgb(102, 51, 102);"&gt;I have just played with a new build Jamie is working on which &lt;strong&gt;does &lt;/strong&gt;work with NCover 1.33 - champion mate! No doubt he will announce when it's ready for prime time...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you will see mentioned in Jamie's posting I'm working on making the source etc available as part of the &lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt; project, thanks to Peter for the offer! I've also had a kind offer for a download mirror site - will announce here when everything falls into place...&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/testdriven.net" rel="tag"&gt;testdriven.net&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-113869918018782683?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/113869918018782683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=113869918018782683' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113869918018782683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113869918018782683'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/01/ncoverexplorer-first-availability.html' title='NCoverExplorer... First Availability'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21622397.post-113846429198333737</id><published>2006-01-28T15:23:00.000Z</published><updated>2007-04-03T21:21:59.212+01:00</updated><title type='text'>NCoverExplorer... The Debut</title><content type='html'>A little something I knocked together one weekend around a month ago, inspired by the &lt;a href="http://www.sliver.com/dotnet/NCoverBrowser"&gt;NCoverBrowser&lt;/a&gt; tool by Jeff Key. The source code for Jeff's tool was unavailable mainly due to it's usage of a commercial control, so I rewrote it from scratch using the ICSharpCode TextEditor control instead.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What does it do?&lt;/span&gt; Once you have used &lt;a href="http://ncover.org/"&gt;NCover&lt;/a&gt; to produce an xml result of your coverage, you can open it in this tool to browse the source code with the coverage information highlighted. I tend to do this as part of a NAnt/NUnit task combination that automatically opens the results for me on a second screen. I find it much more useful having the coverage output side-by-side with the IDE while I add/modify the tests to increase coverage.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer-742691.png"&gt;&lt;img style="cursor: pointer;" src="http://www.kiwidude.com/blog/uploaded_images/NCoverExplorer-736851.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why bother?&lt;/span&gt; I wanted to make some tweaks, such as:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Performance (2 secs versus 4 mins for a 12MB file!);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Remembering form state (size and position);&lt;/li&gt;&lt;li&gt;Recent file menu;&lt;/li&gt;&lt;li&gt;Improved highlighting for partial test coverage runs;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Optional nesting of the get_ and set_ properties;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Optional hiding of the visit count pane;&lt;/li&gt;&lt;li&gt;Support any future NCover schema changes;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create an open source project;&lt;/li&gt;&lt;/ul&gt;I happened to mention it to Jamie Cansdale, author of the essential &lt;a href="http://weblogs.asp.net/nunitaddin"&gt;TestDriven.Net&lt;/a&gt; tool and it is now being integrated into his tool as part of the "Test with... Coverage" functionality he has added recently. In addition Jamie has added a few tweaks of his own such as the VSTS block highlighting style you can see in the screenshot above.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Where do I get it?&lt;/span&gt; Good question - our next step is to figure out the hosting and distribution. A few ideas have been thrown in the pot and hopefully we can announce that shortly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;[Update] &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(102, 51, 102);"&gt;Download the latest NCoverExplorer versions from &lt;a href="http://www.kiwidude.com/dotnet/DownloadPage.html"&gt;here&lt;/a&gt;.&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Any suggestions for other features you would like to see are welcomed...&lt;br /&gt;&lt;br /&gt;&lt;div class="tag_list"&gt;Filed in: &lt;span&gt;&lt;a href="http://del.icio.us/kiwidude/ncoverexplorer" rel="tag"&gt;ncoverexplorer&lt;/a&gt; &lt;a href="http://del.icio.us/kiwidude/ncover" rel="tag"&gt;ncover&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21622397-113846429198333737?l=kiwidudeuk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kiwidudeuk.blogspot.com/feeds/113846429198333737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21622397&amp;postID=113846429198333737' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113846429198333737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21622397/posts/default/113846429198333737'/><link rel='alternate' type='text/html' href='http://kiwidudeuk.blogspot.com/2006/01/ncoverexplorer-debut.html' title='NCoverExplorer... The Debut'/><author><name>kiwidude</name><uri>http://www.blogger.com/profile/17107938769027967334</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry></feed>
