<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.blackmarble.co.uk/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>But it works on my PC!</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/default.aspx</link><description>The random thoughts of Richard Fennell on technology and software development</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Running Fitnesse.NET tests using MSTest</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/18/running-fitnesse-net-tests-using-mstest.aspx</link><pubDate>Fri, 18 Jul 2008 22:00:00 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:13263</guid><dc:creator>Richard</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=13263</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/18/running-fitnesse-net-tests-using-mstest.aspx#comments</comments><description>&lt;p&gt;I have been looking at &lt;a href="http://fitnesse.org/FitNesse.DotNet"&gt;Fitnesse.NET&lt;/a&gt; for a while; if you have not come across this testing tool I cannot recommend &lt;a href="http://gojko.net/fitnesse/book/"&gt;Gojko Adzic book&lt;/a&gt; highly enough; an excellent real world introduction to Fitnesse.NET.&lt;/p&gt;
&lt;p&gt;For me, the problem with Fitnesse is that it&amp;#39;s WIKI architecture does not lend itself to working within our Team Foundation Server based development model. However, as I am not really looking for a tool to allow Business Analysts to edit&amp;nbsp;a central repository of tests the WIKI was not that important; so I have been looking at a way to store the Fitnesse tests inside a Visual Studio solution, so they are managed like a unit test.&lt;/p&gt;
&lt;p&gt;The first step was to get my head round using Fitnesse without a WIKI. This is achieved using FolderRunner,exe that ships as part of Fitnesse.NET. This allows you to define a test as a HTML file as opposed to a WIKI page. Firstly I thought you could just copy the relevant &lt;b&gt;contents.txt&lt;/b&gt; page out of the WIKI structure, but this does not work as this file holds the test not as a HTML table, as required, but in the WIKIs own format using | characters to define the table cells. So you have to create the test file containing the Fitnesse tables using your HTML editor of choice. Once you have done this you run the test using the following command line. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;..\fitnesse\dotnet2\FolderRunner.exe -i userstory1.htm -a MyAssembly.dll -o results&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A HTML results file ends up in the &lt;b&gt;results&lt;/b&gt; directory and you get a simple results test count on the console.&lt;/p&gt;
&lt;p&gt;All this is very good but how can you bolt this into Visual Studio? After a bit of thought I decided that the easiest option was to put the Fitnesse calls within a wrapper unit test. I chose MSTest as I was aiming to run the final solution within TFS Build (but any type if unit testing framework such as &lt;a href="http://www.nunit.org/"&gt;nUnit&lt;/a&gt; or &lt;a href="http://www.mbunit.com/"&gt;mbUnit&lt;/a&gt; would have done).&lt;/p&gt;
&lt;p&gt;Next I decided to make the required calls to run the tests in C#, calling the methods in the Fitnesse DLLs. This was as opposed to trying to shell out and run the &lt;b&gt;FolderRunner.exe&lt;/b&gt;. &lt;/p&gt;
&lt;p&gt;The easiest way to find the correct calls was to use &lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;Reflector&lt;/a&gt; to have a look at the code in the &lt;b&gt;FolderRunner.exe&lt;/b&gt; (and the other Fit assemblies). After a brief &lt;i&gt;splunk&lt;/i&gt; around I found the calls were fairly simple, so this is the process I ended up with to run the tests via MSTest:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I started with a solution that contains an application assembly and an second assembly that had all the methods required for the Fit tests (and&amp;nbsp;made sure it all worked via the WIKI and/or command line FolderRunner)&lt;/li&gt;
&lt;li&gt;Next I added a test project to the solution&lt;/li&gt;
&lt;li&gt;In the test project I add a reference to the assembly that contains fit test methods and also the &lt;b&gt;fit.dll&lt;/b&gt; (I had some problems here that when I ran the test, I got a &lt;i&gt;The location of the file or directory &amp;#39;(path omitted)\fit.dll&amp;#39; is not trusted.&lt;/i&gt; error. If you get this error follow the &lt;a href="http://blogs.blackmarble.co.uk/controlpanel/blogs/The%20location%20of%20the%20file%20or%20directory%20%27%28path%20omitted%29%5Cmain%5CSource%5CSharedBinaries%5CRhino.Mocks.dll%27%20is%20not%20trusted."&gt;process on Don Felker&amp;#39;s blog&lt;/a&gt; to fix it)&lt;/li&gt;
&lt;li&gt;Add an HTML file to the Test Project and in it create the Fit test tables.&lt;/li&gt;
&lt;li&gt;Set the HTML file properties so it is copied to the output directory.&lt;/li&gt;
&lt;li&gt;Create a new Test Method to run all the tests in a the HTML file as shown below (obviously you will need to make sure the paths are right to the HTML files and assemblies for your project).&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;[&lt;font color="#0080ff"&gt;TestMethod&lt;/font&gt;]&lt;br /&gt;&lt;font color="#0000ff"&gt;public void&lt;/font&gt; RunFitnessTests()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; fit.Runner.&lt;font color="#0080ff"&gt;FolderRunner&lt;/font&gt; runner = new&amp;nbsp;&amp;nbsp;&amp;nbsp; fit.Runner.&lt;font color="#0080ff"&gt;FolderRunner&lt;/font&gt;(&lt;font color="#0000ff"&gt;new&lt;/font&gt; fit.Runner.&lt;font color="#0080ff"&gt;ConsoleReporter&lt;/font&gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;var&lt;/font&gt; errorCount = runner.Run(&lt;font color="#0000ff"&gt;new string&lt;/font&gt;[] {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#804000"&gt;&amp;quot;-i&amp;quot;,@&amp;quot;userstory1.htm&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;-a&amp;quot;,@&amp;quot;MyAssembly.dll&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;-o&amp;quot;,@&amp;quot;results&amp;quot;&lt;/font&gt;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0080ff"&gt;Assert&lt;/font&gt;.AreEqual(0, errorCount,runner.Results);&lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;So now you can make sure this test works using &lt;a href="http://www.testdriven.net/"&gt;TestDriven.NET&lt;/a&gt; to run this test, this checks the test works when the application is built to the standard bin\debug directory. &lt;/li&gt;
&lt;li&gt;However this does not mean it will work with MSTest under the Visual Studio test runner. This is because, by default, the HTML file that holds the test will not be deployed to the TestResults directory (also the actual application assembly under test will not be copied). This is critical, as you have to be careful here, as if the HTML file is missing you get a false success. The Runner.Run method will return 0 as no test failed (as there were none defined) so the assert passes. To get round this you need to add the HTML file (and any other files required) to the list of files to deploy prior to testing. This is done by editing the deployment file list via the menu option &lt;b&gt;Test | Edit Test Run Configuration | Deployment tab&lt;/b&gt;. An option to guard against this issue&amp;nbsp;is to add an extra assert to make sure at least some tests were run and we don&amp;#39;t have four zeros in the results string, a bit of RegEx will do (this line is not in the sample project by the way) &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Courier New" size="2"&gt;&lt;font color="#0080ff"&gt;Assert&lt;/font&gt;&lt;/font&gt;.AreEqual(false,Regex.IsMatch(runner.Results, &amp;quot;^0.+?0.+?0.+?0.+?$&amp;quot;),&amp;quot;No tests appear to have been run&amp;quot;); &lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Once this is all done you can run the test via the Visual Studio Test menu option and you should see the test run and get a simple pass or fail result with a count of any failures in the error message. (Another possible option would be a make better use of the detailed HTML results file, at present we just use the simple result string for test results details)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;So where do we end up?&amp;nbsp; I think we have a workable solution. We can run Fitnesse tests as easily as any unit test, and as with unit tests the Fitnesse test files are under TFS source control and kept in sync with the application they test. All without the need for the WIKI.&lt;/p&gt;
&lt;p&gt;I have &lt;a href="http://blogs.blackmarble.co.uk/files/folders/samples/entry13262.aspx"&gt;packaged up a sample&lt;/a&gt; of this solution and posted to this server.&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=13263" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>Registration opened for SQLBits III (Cubed)</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/18/registration-opened-for-sqlbits-iii-cubed.aspx</link><pubDate>Fri, 18 Jul 2008 08:59:41 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:13257</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=13257</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/18/registration-opened-for-sqlbits-iii-cubed.aspx#comments</comments><description>&lt;p&gt;I see that the &lt;a href="http://www.sqlbits.com/"&gt;registration&lt;/a&gt; (and hence session voting) has opened for the free community conference SQLBits III, &lt;/p&gt; &lt;p&gt;I can&amp;#39;t make it as it is the same day as &lt;a href="http://altdotnet.org/events/5"&gt;Alt.Net&lt;/a&gt;. However, I really do recommend this event if you ever work with data (some of you do that don&amp;#39;t you?)&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=13257" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/SQLBits/default.aspx">SQLBits</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Community/default.aspx">Community</category></item><item><title>New Team System Power Tools</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/17/new-team-system-power-tools.aspx</link><pubDate>Thu, 17 Jul 2008 10:19:30 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:13251</guid><dc:creator>Richard</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=13251</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/17/new-team-system-power-tools.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=00803636-1d16-4df1-8a3d-ef1ad4f4bbab&amp;amp;displaylang=en"&gt;July edition of the Team System power tools&lt;/a&gt; have just been released. &lt;/p&gt; &lt;p&gt;To pick out just one of a great set of tools - have a look at the Alert Editor, a really easy way to wire up external events handler to do things when TFS events occur.&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=13251" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>Leeds SQL Usergroup</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/17/leeds-sql-usergroup.aspx</link><pubDate>Thu, 17 Jul 2008 09:32:12 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:13250</guid><dc:creator>Richard</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=13250</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/17/leeds-sql-usergroup.aspx#comments</comments><description>&lt;p&gt;Thanks to everyone one who attended my session at the Leeds SQL User group on Visual Studio Database Edition and to UPCO for hosting the event.&lt;/p&gt; &lt;p&gt;The &lt;a href="http://www.blackmarble.co.uk/ConferencePapers/Leeds%20SQL%20UG%20-%20SQL%20DevelopmentLife%20Cycle%20using%20Visual%20Studio%20Team%20Edition.ppt"&gt;slide stack is available&lt;/a&gt; on the Black Marble web site&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=13250" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Community/default.aspx">Community</category></item><item><title>And as predicted....</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/12/and-as-predicted.aspx</link><pubDate>Sat, 12 Jul 2008 08:49:58 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:13144</guid><dc:creator>Richard</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=13144</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/12/and-as-predicted.aspx#comments</comments><description>&lt;p&gt;The Alt.net summer conference is now full after about 24 hours and that is with a larger capacity venue than the last one. &lt;/p&gt; &lt;p&gt;Told it would be fast&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=13144" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/altnetuk/default.aspx">altnetuk</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Alt.net/default.aspx">Alt.net</category></item><item><title>I've registered have you?</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/11/i-ve-registered-have-you.aspx</link><pubDate>Fri, 11 Jul 2008 08:07:23 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12980</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12980</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/11/i-ve-registered-have-you.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://altdotnet.org/events/5"&gt;Registration has opened&lt;/a&gt; for the &lt;a href="http://blog.benhall.me.uk/2008/07/altnet-uk-summer-conference-dates.html"&gt;Alt.UK Summer conference&lt;/a&gt;. If the &lt;a href="http://www.altnetpedia.com/London%20Alt.Net.UK%202nd%20Feb%202008.ashx"&gt;first UK Alt.net&lt;/a&gt; conference event is anything to go by it will fill up fast, so don&amp;#39;t hang around if you are interested&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.blackmarble.co.uk/blogs/rfennell/WindowsLiveWriter/Iveregisteredhaveyou_804A/altdotnet_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="53" alt="altdotnet" src="http://blogs.blackmarble.co.uk/blogs/rfennell/WindowsLiveWriter/Iveregisteredhaveyou_804A/altdotnet_thumb.jpg" width="132" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12980" width="1" height="1"&gt;</description></item><item><title>Publishing a ASP.NET WCF service encryption error</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/08/publishing-a-asp-net-wcf-service-encryption-error.aspx</link><pubDate>Tue, 08 Jul 2008 09:30:52 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12665</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12665</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/08/publishing-a-asp-net-wcf-service-encryption-error.aspx#comments</comments><description>&lt;p&gt;I was trying to publish a .NET 3.5 WCF service to a network share &lt;a&gt;e.g.\\myserver\share\folder_to_holdservice&lt;/a&gt; and got the error &amp;quot;The specified file could not be encrypted&amp;quot; for all the files.&lt;/p&gt; &lt;p&gt;I changed to a publish to the local disk it published fine, so what caused that?&lt;/p&gt; &lt;p&gt;As part of some security impact modelling I have been doing development with my local source directories encrypted using standard Vista security (FYI does not seem to cause any significant performance impact)&lt;/p&gt; &lt;p&gt;So when I copied the published files to the network share manually I got an message &amp;#39;do I want to copy without encryption&amp;#39; which I answered yes to and all was OK. Shame VS publish method does not have a away to answer this question &lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12665" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Technical+Tips/default.aspx">Technical Tips</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>Next XP Club meeting</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/07/next-xp-club-meeting.aspx</link><pubDate>Mon, 07 Jul 2008 13:26:10 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12662</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12662</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/07/next-xp-club-meeting.aspx#comments</comments><description>&lt;p&gt;This months meeting of the &lt;a href="http://xpclub.erudine.com/"&gt;XPClub is on Wednesday&lt;/a&gt;. It is a general group chat about refactoring, branching and merging.&lt;/p&gt; &lt;p&gt;This is a free event, usually with a few free beers, at the usual time &amp;amp; location, 7pm at the &lt;a href="http://maps.google.co.uk/maps?ie=UTF-8&amp;amp;oe=utf-8&amp;amp;rls=org.mozilla:en-GB:official&amp;amp;client=firefox-a&amp;amp;um=1&amp;amp;q=victoria+hotel+pub+&amp;amp;near=Leeds&amp;amp;fb=1&amp;amp;view=text&amp;amp;latlng=53800862,-1550393,8912007649988110241"&gt;Victoria Hotel in Leeds&lt;/a&gt;, so hope to see you there&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12662" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Extreme+Programming+Club/default.aspx">Extreme Programming Club</category></item><item><title>Bug tracking with TFS</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/06/bug-tracking-with-tfs.aspx</link><pubDate>Sun, 06 Jul 2008 22:37:25 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12659</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12659</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/06/bug-tracking-with-tfs.aspx#comments</comments><description>&lt;p&gt;I have posted in the past about my efforts to write a user facing bug tracking interface for TFS to integrate with our SharePoint based customer portal. I have had some &lt;a href="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2007/12/19/tfs-webpart-for-viewing-workitems-in-sharepoint-2007.aspx"&gt;mixed success&lt;/a&gt;, but the end point is that I am just not happy with what I have written.&lt;/p&gt; &lt;p&gt;Historically we have used our own home grown call tracking system (started as an Access DB, went via VB6 to ASP then ASP.NET, now is web service based) which our clients know (and love?). This give a far richer audit trail for the actions performed on a support call than is possible with a work item in TFS. In the end this simple fact is what has forced me to conclude that TFS work items are not the thing to expose to end user/help desk staff for bug tracking.&lt;/p&gt; &lt;p&gt;My new plan is to add a new feature to our existing call tracking system (oh and of course port it into a SharePoint webpart based UI) that allows a call to be escalated into TFS when it becomes change request or requires a code bug fix. This means all the initial triage can be handed by the support desk in a their call tracking system and TFS only gains a work item when it is a task for the development team, a product backlog item in Scrum terminology.&lt;/p&gt; &lt;p&gt;This seems a more sensible approach, much like the &lt;a href="http://visuallounge.techsmith.com/2007/05/new_snagit_output_for_microsoft_visual_studio_team_system.html"&gt;Snagit add-in for TFS&lt;/a&gt;, I will report back as to how it goes.&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12659" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Sharepoint/default.aspx">Sharepoint</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Opinion/default.aspx">Opinion</category></item><item><title>DDD7 Session Submissions</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/03/ddd7-session-submissions.aspx</link><pubDate>Thu, 03 Jul 2008 12:22:57 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12619</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12619</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/03/ddd7-session-submissions.aspx#comments</comments><description>&lt;p&gt;It really good to see so many &lt;a href="http://www.developerday.co.uk/ddd/agendaddd7.asp"&gt;submissions for the DDD7&lt;/a&gt;, and many new names, always a good sign of a the community working well. &lt;/p&gt; &lt;p&gt;I just got round to putting one in myself on integrating testing into MSBuild. &lt;/p&gt; &lt;p&gt;There is still time for more though. So have a think and put in a session proposal - trust me it is great fun.&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12619" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/DDD/default.aspx">DDD</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Community/default.aspx">Community</category></item><item><title>Wow I'm an MVP</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/02/wow-i-m-an-mvp.aspx</link><pubDate>Wed, 02 Jul 2008 08:42:48 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12591</guid><dc:creator>Richard</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12591</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/07/02/wow-i-m-an-mvp.aspx#comments</comments><description>&lt;p&gt;Found out last night that I have just been made an MVP for Team System, is that cool or what!&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.blackmarble.co.uk/blogs/rfennell/WindowsLiveWriter/WowImanMVP_8895/mvp_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="72" alt="mvp" src="http://blogs.blackmarble.co.uk/blogs/rfennell/WindowsLiveWriter/WowImanMVP_8895/mvp_thumb.png" width="173" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12591" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/MVP/default.aspx">MVP</category></item><item><title>TFS Team Build compile details</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/06/23/tfs-team-build-compile-details.aspx</link><pubDate>Mon, 23 Jun 2008 20:31:34 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12514</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12514</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/06/23/tfs-team-build-compile-details.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.woodwardweb.com/gadgets/000434.html"&gt;Martin Woodward posted a few weeks ago about his build bunny&lt;/a&gt;. Now this is something I had tried a &lt;a href="http://www.blackmarble.com/ConferencePapers/DDD4%20Presentation%20-%20&amp;#39;But%20it%20works%20on%20my%20PC&amp;#39;%20or%20Continuous%20Integration%20to%20improve%20quality.ppt"&gt;while ago for DDD4&lt;/a&gt;, but hit the same problem Martin had that the old &lt;a href="http://api.nabaztag.com/docs/home.html"&gt;Nabaztag API&lt;/a&gt; was too slow and messages could take hours to arrive, making it useless in the real world. Inspired by Martin and the new faster API I have been working on a new Team Build status monitor for the office. &lt;/p&gt; &lt;p&gt;Getting most of it going is straight forward as Martin said, the TFS API event model is easy to use. However I did have a problem getting the details of the build. I could see if it built or not, but I could not get any count of warning, code analysis errors or test results etc.&lt;/p&gt; &lt;p&gt;It seems the problem is that when the &lt;strong&gt;BuildQueue_StatusChanged &lt;/strong&gt;event fires after a build completes it does not have all the details in the &lt;strong&gt;IBuildDetail&lt;/strong&gt; object you would expect. However, if you re-query the TFS server you can get the information.&lt;/p&gt; &lt;p&gt;I added the following to the end of the &lt;strong&gt;BuildQueue_StatusChanged&lt;/strong&gt; event handler:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier New" color="#008000"&gt;// first get the handle to the queue (you might have this stored already)&lt;/font&gt;&lt;font color="#008000"&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;TeamFoundationServer tfs = new TeamFoundationServer(&amp;quot;http://myserver:8080&amp;quot;);&lt;br /&gt;IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));&lt;br /&gt;IQueuedBuildsView buildQueue = buildServer.CreateQueuedBuildsView(&amp;quot;MyProject&amp;quot;);&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;// Now re query using the project build URL to get the number of errors and warning&lt;br /&gt;// the array of string list what details we want&lt;br /&gt;&lt;/font&gt;IBuildDetail buildDetails = buildServer.GetBuild(buildQueue.QueuedBuilds&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [lastItem].Build.Uri, new string[] {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TeamFoundation.Build.Common.InformationTypes.ConfigurationSummary, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TeamFoundation.Build.Common.InformationTypes.TestSummary, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TeamFoundation.Build.Common.InformationTypes.CodeCoverageSummary, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TeamFoundation.Build.Common.InformationTypes.CompilationSummary},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QueryOptions.None); &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;// Now use the new IBuildDetail object to update the screen associated display &lt;br /&gt;// user control&lt;br /&gt;&lt;/font&gt;this.display.UpdateStatus(buildDetails);&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Now in my display usercontrol all I need to go is to extract compiler summary details using a standard TFS&amp;nbsp; &lt;strong&gt;InformationNodeConverter&lt;/strong&gt; (and you could do the same for test or code coverage).&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;var buildSummaries = InformationNodeConverters.GetConfigurationSummaries(build Details);&lt;br /&gt;if (buildSummaries.Count &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; this.lblCompileReport.Text = &amp;quot;[Errors:&amp;quot; + buildSummaries[0].TotalCompilationErrors +&lt;br /&gt;&amp;nbsp; &amp;quot;] [Warnings:&amp;quot; + buildSummaries[0].TotalCompilationWarnings +&lt;br /&gt;&amp;nbsp; &amp;quot;] [Static Analysis Errors:&amp;quot; + buildSummaries[0].TotalStaticAnalysisErrors +&lt;br /&gt;&amp;nbsp; &amp;quot;] [Static Analysis Warnings:&amp;quot; + buildSummaries[0].TotalStaticAnalysisWarnings +&amp;quot;]&amp;quot;;&lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12514" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>Speaking at Leeds SQL User group</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/06/21/speaking-at-leeds-sql-user-group.aspx</link><pubDate>Sat, 21 Jun 2008 21:38:17 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12499</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12499</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/06/21/speaking-at-leeds-sql-user-group.aspx#comments</comments><description>&lt;p&gt;For those who are interested, I am speaking on Visual Studio for Database Professionals at the Leeds SQL user group on the 16th July. This is a free event, f&lt;a href="http://www.developerfusion.co.uk/show/7793/"&gt;or more details see the event web site&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12499" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Community/default.aspx">Community</category></item><item><title>CA0055 error in FXCop</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/06/20/ca0055-error-in-fxcop.aspx</link><pubDate>Fri, 20 Jun 2008 16:29:02 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12489</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12489</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/06/20/ca0055-error-in-fxcop.aspx#comments</comments><description>&lt;p&gt;I have been setting up a new Team Build server today. All our projects are being set to do code analysis (FXCop) after the build. For one project this worked on the developer PC but failed on the build machine.&lt;/p&gt; &lt;p&gt;The CA0055 error means &amp;#39;file not found&amp;#39; or &amp;#39;could not load&amp;#39; the assembly to be analysed. Firstly I suspected there was a problem with path names being over 256 characters (both the assemblies and solutions names were long) which can be a problem MSBuild, but this was not the case.&lt;/p&gt; &lt;p&gt;In the end I looked in the *.CodeAnalysisLog.xml file in the build directory. This gave the inner exception and I found it was a missing DLL that was referenced by a DLL the main DLL referenced - so two hops away! I added this DLL to the project references to make sure it was in the build directory and all was OK.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;TIP&lt;/strong&gt;: read the detailed FXCop log file - it shows far more than the summary in the IDE&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12489" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Technical+Tips/default.aspx">Technical Tips</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>XPClub Meeting about Opera</title><link>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/06/12/xpclub-meeting-about-opera.aspx</link><pubDate>Thu, 12 Jun 2008 11:40:01 GMT</pubDate><guid isPermaLink="false">e2247bbd-a8ea-45d7-b15f-e334232e9347:12357</guid><dc:creator>Richard</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.blackmarble.co.uk/blogs/rfennell/rsscomments.aspx?PostID=12357</wfw:commentRss><comments>http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2008/06/12/xpclub-meeting-about-opera.aspx#comments</comments><description>&lt;p&gt;Good session at the Yorkshire Extreme Programming Club last night. Chris Mills of Opera spoke on the mobile web.&lt;/p&gt; &lt;p&gt;If this, or the general issue of standards in web development are of interest &lt;a href="http://dev.opera.com"&gt;http://dev.opera.com&lt;/a&gt; is well worth a look.&lt;/p&gt;&lt;img src="http://blogs.blackmarble.co.uk/aggbug.aspx?PostID=12357" width="1" height="1"&gt;</description><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/tags/Extreme+Programming+Club/default.aspx">Extreme Programming Club</category></item></channel></rss>