<?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-6694797453707339109</id><updated>2011-11-27T16:29:33.673-08:00</updated><category term='MSB3395'/><category term='Visual Studio 2008'/><category term='Data Access'/><category term='Team Build'/><category term='TypeMock'/><category term='Team Foundation Build'/><category term='TFS'/><category term='SQL Server'/><category term='.Net'/><category term='Private'/><category term='LINQ2SQL'/><category term='Debugging'/><category term='MSBuild'/><category term='64Bit'/><category term='Source Server'/><category term='clean'/><category term='Build Types'/><category term='Mysteries Unsolved'/><title type='text'>Brumlemann</title><subtitle type='html'>Blogging about the day-to-day turmoils of beeing a Software Architect in a progressive software shop pushing the limits of the MS tech stack. Hopefully somebody will read my agony and provide solutions to the problems I present. Maybe, if I'm lucky, I will be able to produce something of value too.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-3088393783927028375</id><published>2009-12-07T04:57:00.000-08:00</published><updated>2009-12-07T05:12:23.791-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Build'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Build'/><title type='text'>Changing TFS emails to link to Team System Web Access – Part 2 - Visual Studio Team System (VSTS) Blog - by Neno Loje</title><content type='html'>Neno Loje stated in &lt;a href="http://msmvps.com/blogs/vstsblog/archive/2009/01/11/changing-tfs-emails-to-link-to-team-system-web-access-part-2.aspx"&gt;Changing TFS emails to link to Team System Web Access – Part 2 - Visual Studio Team System (VSTS) Blog - by Neno Loje&lt;/a&gt; that:   &lt;br /&gt;  &lt;br /&gt;&amp;quot;There are four areas to look at:   &lt;br /&gt;Work Item notification mails (has already been discussed here)   &lt;br /&gt;Build notification mails   &lt;br /&gt;Check-in notification mails   &lt;br /&gt;Mails sent by Team Explorer (feature of TFS 2008 SP1)   &lt;br /&gt;Area 1 is part of a separate blog post, for Area 2 there are currently no equivalent steps (as stated in KB956761).&amp;quot;   &lt;br /&gt;  &lt;br /&gt;I just couldn't live with it so I made it work, like this in BuildCompletionEvent2.xsl:   &lt;br /&gt;  &lt;br /&gt;  &lt;div class="csharpcode"&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:call-template&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;link&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;format&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;'html'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;embolden&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;'true'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;fontSize&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;'larger'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;link&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;concat(substring-before(Url,':8080/Build/Build.aspx?artifactMonike'),':8090/UI/Pages/Build/Details.aspx?builduri=vstfs%3A%2F%2F%2FBuild%2FBuild%2F',substring-after(Url,'artifactMoniker='))&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;displayText&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:call-template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Where the point of the matter is line 11. The change was inspired by the original post by Neno and a simple fix.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To add even more we even changed it a bit more to include a link to a report over the failing tests for the last 72 hours. I am not showing the report part, but the take-away is the inclusion of the link:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&amp;#160;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:if&lt;/span&gt; &lt;span class="attr"&gt;test&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;StatusCode != 'Succeeded'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PropName&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Build Log Location: &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PropValue&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:call-template&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;link&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;format&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;'html'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;embolden&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;'false'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;link&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LogLocation&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;displayText&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LogLocation&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;       &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:call-template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:call-template&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;link&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;format&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;'html'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;embolden&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;'true'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;fontSize&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;'larger'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;link&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;concat(substring-before(Url,':8080/Build/Build.aspx?artifactMonike'),'/ReportServer/Pages/ReportViewer.aspx?/Confirmit/Failed+Tests&amp;amp;rs%3aCommand=Render&amp;amp;BuildParam=',substring-after(Url,'artifactMoniker='))&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:with-param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;displayText&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;'Report on failing tests in this build'&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:call-template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:if&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The added code is the lines 13 – 21.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Happy coding&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-3088393783927028375?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msmvps.com/blogs/vstsblog/archive/2009/01/11/changing-tfs-emails-to-link-to-team-system-web-access-part-2.aspx' title='Changing TFS emails to link to Team System Web Access – Part 2 - Visual Studio Team System (VSTS) Blog - by Neno Loje'/><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/3088393783927028375/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=3088393783927028375' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/3088393783927028375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/3088393783927028375'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/12/changing-tfs-emails-to-link-to-team.html' title='Changing TFS emails to link to Team System Web Access – Part 2 - Visual Studio Team System (VSTS) Blog - by Neno Loje'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-4330610656397289570</id><published>2009-08-19T01:39:00.000-07:00</published><updated>2009-08-19T01:39:30.530-07:00</updated><title type='text'>Update: Why it is an error for MSBuild to build clean in the same order as it builds regularily</title><content type='html'>In the two postings listed below I described how MSBuild is building the Clean target of a VS Solution in the wrong order.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://brumlemann.blogspot.com/2008/12/why-it-is-error-for-msbuild-to-build.html"&gt;Brumlemann: Why it is an error for MSBuild to build clean in the same order as it builds regularily&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://brumlemann.blogspot.com/2008/12/msbuild-of-vs-solution-under-target.html"&gt;Brumlemann: MSbuild of VS solution under target clean is just plain wrong&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I also created a Microsoft Connect issue on this behaviour and you can find that posting here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=390914"&gt;Brumlemann: MSBuild builds the clean target of VS solution files in the wrong order&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Visual Studio team at Microsoft has since reckognized this as a bug and, as the connect issue shows, a fix has been reported to have been implemented for the next release of VS2010. At the time of writing it is post beta 1, so I guess beta 2 is 'next release'. I will be sure to verify this and report back on my findings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-4330610656397289570?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://brumlemann.blogspot.com/2008/12/why-it-is-error-for-msbuild-to-build.html' title='Update: Why it is an error for MSBuild to build clean in the same order as it builds regularily'/><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/4330610656397289570/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=4330610656397289570' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/4330610656397289570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/4330610656397289570'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/08/update-why-it-is-error-for-msbuild-to.html' title='Update: Why it is an error for MSBuild to build clean in the same order as it builds regularily'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-915976678689175665</id><published>2009-06-25T02:39:00.000-07:00</published><updated>2009-06-25T02:39:51.119-07:00</updated><title type='text'>Aaron Hallberg : Modifying the ConfigurationFolderPath RecursionType in Team Build 2008</title><content type='html'>&lt;a href="http://blogs.msdn.com/aaronhallberg/archive/2008/02/12/modifying-the-configurationfolderpath-recursiontype-in-team-build-2008.aspx"&gt;Aaron Hallberg : Modifying the ConfigurationFolderPath RecursionType in Team Build 2008&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-915976678689175665?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/aaronhallberg/archive/2008/02/12/modifying-the-configurationfolderpath-recursiontype-in-team-build-2008.aspx' title='Aaron Hallberg : Modifying the ConfigurationFolderPath RecursionType in Team Build 2008'/><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/915976678689175665/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=915976678689175665' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/915976678689175665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/915976678689175665'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/06/aaron-hallberg-modifying.html' title='Aaron Hallberg : Modifying the ConfigurationFolderPath RecursionType in Team Build 2008'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-1110563743553748243</id><published>2009-03-21T09:11:00.000-07:00</published><updated>2009-03-21T09:14:56.084-07:00</updated><title type='text'>Analyzing the code base of CruiseControl.NET - Patrick Smacchia [MVP C#]</title><content type='html'>&lt;a href="http://codebetter.com/blogs/patricksmacchia/archive/2009/03/15/analyzing-the-code-base-of-cruisecontrol-net.aspx"&gt;Analyzing the code base of CruiseControl.NET - Patrick Smacchia [MVP C#]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once again Patrick delivers a good blog. His favourite is picking apart popular standard libraries. This time it's CruiseConrol that gets a runthrough.&lt;br /&gt;&lt;br /&gt;The reason why I wanted to mention this post is that he sneaks in another topic that we agree strongly on, and even possitively feel a bit passionate about, namely &lt;blockquote&gt;Copy Local&lt;/blockquote&gt; in Visual Studio project/Solutions. I had planned to blog about why this is a bad idea myself, but Patrick beat me to it. I guess beeing not so entangled in corporate life gives him the oppurtunity to set aside some more time to put things straight. Well done Patrick (again :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-1110563743553748243?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/1110563743553748243/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=1110563743553748243' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1110563743553748243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1110563743553748243'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/03/analyzing-code-base-of-cruisecontrolnet.html' title='Analyzing the code base of CruiseControl.NET - Patrick Smacchia [MVP C#]'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-8715829883400654156</id><published>2009-03-21T08:53:00.001-07:00</published><updated>2009-03-21T14:21:06.490-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Build task for searching in files</title><content type='html'>&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ede0c0fd-c1dc-4307-aa62-0d2c9e7f51eb" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MSBuild" rel="tag"&gt;MSBuild&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Build+Tasks" rel="tag"&gt;Build Tasks&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Just to test out the code add-in I just added to Live Writer I thought I would share this little build task for filtering out files based on standard string search, with or without regular expressions. Disclaimer! The regular expression mode didn’t work as I had expected and my needs there and then didn’t exceed pure freetext search, so it may need some tweaking, and of course the usual use at own risk bla bla.&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; YourNameSpace.BuildTasks&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Diagnostics;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Build.Utilities;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Text.RegularExpressions;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Microsoft.Build.Framework;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;/// Finds files with a content that has one or more matches&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;/// for the pattern provided.&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; FindFilesWithContent : Task&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; FindFilesWithContent()&lt;br /&gt;        {&lt;br /&gt;            results = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;TaskItem&amp;gt;();&lt;br /&gt;        }            &lt;span style="color: #008000"&gt;// Properties&lt;/span&gt;&lt;br /&gt;        [Required]&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ITaskItem[] FilesToSearch { get; set; }&lt;br /&gt;        [Required]&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Pattern { get; set; }&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; UseRegExp { get; set; }&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; List&amp;lt;TaskItem&amp;gt; results;&lt;br /&gt;        [Output]&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ITaskItem[] Results&lt;br /&gt;        {&lt;br /&gt;            get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; results.ToArray(); }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; Execute()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(UseRegExp) Log.LogMessage(MessageImportance.Low,&lt;br /&gt;                &lt;span style="color: #006080"&gt;&amp;quot;Using regular expression&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; });&lt;br /&gt;            Log.LogMessage(MessageImportance.Low,&lt;br /&gt;                &lt;span style="color: #006080"&gt;&amp;quot;Matching with pattern {0}&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { Pattern });&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (ITaskItem taskItem &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; FilesToSearch)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!File.Exists(taskItem.ItemSpec))&lt;br /&gt;                {&lt;br /&gt;                    Log.LogError(&lt;span style="color: #006080"&gt;&amp;quot;File does not exist: {0}&amp;quot;&lt;/span&gt;,&lt;br /&gt;                        &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { taskItem.ItemSpec });&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #008000"&gt;//Read the whole text file to the end before closing it&lt;/span&gt;&lt;br /&gt;                StreamReader reader = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StreamReader(taskItem.ItemSpec);&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; allRead = reader.ReadToEnd();&lt;br /&gt;                reader.Close();&lt;br /&gt;&lt;br /&gt;                Log.LogMessage(MessageImportance.Low,&lt;br /&gt;                    &lt;span style="color: #006080"&gt;&amp;quot;Content of file to match: {0}&amp;quot;&lt;/span&gt;,&lt;br /&gt;                    &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { allRead });&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #008000"&gt;//Do the matching&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Compare(allRead, Pattern))&lt;br /&gt;                {&lt;br /&gt;                    results.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; TaskItem(taskItem));&lt;br /&gt;                    Log.LogMessage(MessageImportance.Low,&lt;br /&gt;                        &lt;span style="color: #006080"&gt;&amp;quot;File matched: {0}&amp;quot;&lt;/span&gt;,&lt;br /&gt;                        &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { taskItem.ItemSpec });&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&gt;                    Log.LogMessage(MessageImportance.Low,&lt;br /&gt;                        &lt;span style="color: #006080"&gt;&amp;quot;File did not match: {0}&amp;quot;&lt;/span&gt;,&lt;br /&gt;                        &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { taskItem.ItemSpec });&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; Compare(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; stringToSearch, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; pattern)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (UseRegExp)&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Regex.IsMatch(stringToSearch, pattern);&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; stringToSearch.Contains(pattern);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The usage is as follows: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;br /&gt;  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #008000"&gt;&amp;lt;!--UseRegExp=&amp;quot;false&amp;quot; is default--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;FindFilesWithContent&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #ff0000"&gt;FilesToSearch&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;@(FilesToSearchWithin)&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #ff0000"&gt;Pattern&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;This string I will find&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #ff0000"&gt;UseRegExp&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Output&lt;/span&gt; &lt;span style="color: #ff0000"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Results&amp;quot;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #ff0000"&gt;ItemName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;FilesThatHaveMatchingContent&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;FindFilesWithContent&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;“share and enjoy” &lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - d. adams&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;&lt;/style&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-8715829883400654156?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/8715829883400654156/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=8715829883400654156' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/8715829883400654156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/8715829883400654156'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/03/testing-out-new-code-add-ins.html' title='Build task for searching in files'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-5507865429924977399</id><published>2009-03-21T07:28:00.001-07:00</published><updated>2009-03-21T07:31:38.357-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Private'/><title type='text'>Blogging - Add-on galleri</title><content type='html'>&lt;p&gt;Just installed IE8 and researching some of the new features. As a consequence I started using Live Writer. Time will tell if this is the cool way to blog. Seems nice enough though. Let’s try to add a picture&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_DfvC1gkJ_CA/ScT5oCcNtlI/AAAAAAAAAEI/6LFDvFQEVKw/s1600-h/20032008060%5B2%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="20032008060" border="0" alt="20032008060" src="http://lh4.ggpht.com/_DfvC1gkJ_CA/ScT5pcEuuDI/AAAAAAAAAEM/4uxcW0COJvc/20032008060_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Not exactly flattering but a test is a test. Now you all know what I look like, when I have worked to much overtime ;-)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.ieaddons.com/no/bloggings/"&gt;Blogging - Add-on galleri&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-5507865429924977399?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/5507865429924977399/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=5507865429924977399' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/5507865429924977399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/5507865429924977399'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/03/blogging-add-on-galleri.html' title='Blogging - Add-on galleri'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_DfvC1gkJ_CA/ScT5pcEuuDI/AAAAAAAAAEM/4uxcW0COJvc/s72-c/20032008060_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-5853805429490466296</id><published>2009-01-19T08:41:00.000-08:00</published><updated>2009-03-21T08:25:58.394-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Build'/><category scheme='http://www.blogger.com/atom/ns#' term='TypeMock'/><title type='text'>Challenges with TypeMock and Team Build</title><content type='html'>According to the &lt;a href="typemock.com"&gt;TypeMock&lt;/a&gt; documentation it's a breeze to set up mocking during Team Build. Well I have just spent a week trying to get it to work and I think I finally cracked it. It all comes down to reading the f*** manual and believing it to be taken literally.   &lt;br /&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;TypeMock location&lt;/h3&gt;  &lt;br /&gt;The TypeMock manual say the following:   &lt;br /&gt;&lt;!-- Use Typemock Isolator MsBuild Extensions --&gt;  &lt;pre&gt;&amp;lt;!-- Use Typemock Isolator MsBuild Extensions --&amp;gt;&lt;br /&gt;&amp;lt;Import Project=&amp;quot;C:\Program Files\TypeMock\Typemock Isolator\TypeMock.MSBuild.tasks&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Override this target to plugin custom tasks before running tests --&amp;gt;&lt;br /&gt;&amp;lt;Target Name=&amp;quot;BeforeTest&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;!-- Start TypeMock --&amp;gt;&lt;br /&gt;  &amp;lt;TypeMockStart/&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Override this target to plugin custom tasks after running tests --&amp;gt;&lt;br /&gt;&amp;lt;Target Name=&amp;quot;AfterTest&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;!-- Quit TypeMock --&amp;gt;&lt;br /&gt;  &amp;lt;TypeMockStop/&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Well first of all this isn't quite true. As of 5.1 (I think) TypeMock installs into another directory (C:\Program Files\Typemock\Isolator\5.2 in my case as we just upgraded to 5.2.1).&amp;#160; So you have to perform some trickery in your MSBuild files to detect whether your doing a build server or desktop build. Luckily there are ways to do this. &lt;br /&gt;  &lt;br /&gt;Anyway, this is not my main point. The main point is that you can get tricked by the way MSBuild is implemented and used during an &lt;a href="http://blog.accentient.com/TeamBuildTargetMap.aspx" target="_blank"&gt;EndToEndIteration&lt;/a&gt; build.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Where does the TypeMockRunner instance live?&lt;/h3&gt;&lt;br/&gt;&lt;br /&gt;What I saw was that my tests were running fine during DesktopBuild but failing miserably during E2EI (yes I ran a desktop build (msbuild TFSBuild.proj /t:test) on the build server and the tests ran fine). So that’s what I've been spending the last week trying to unravel. And here are the results from the Norwegian jury: &lt;br /&gt;  &lt;br /&gt;You must follow the instructions (above) from the TypeMock doc to the extent that you &lt;strong&gt;call TypeMockStart/TypeMockStop from TFSBuild.proj itself&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;We have an existing build system (CruiseControl) so I was reusing my Test.proj calling the necessary targets from inside that. THIS WILL NOT WORK IN A TEAM BUILD CONTEXT! You have to call TypeMockStart from the same instance of MSBuild as the one you're running tests from (i.e. calling MSTest/TestToolsTask)! &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;Consequence: The multiple agents switch (/m) of MSTest is incompatible with TypeMock. &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;I had to disable building in parallel because of this. It has to be said that the guys at TypeMock are waiting for me to have some available time so we can look into this since this is obviously no more good for them than it is for me. Ay ve! So much to deal with and so little time.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-5853805429490466296?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/5853805429490466296/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=5853805429490466296' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/5853805429490466296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/5853805429490466296'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/01/challenges-with-typemock-and-team-build.html' title='Challenges with TypeMock and Team Build'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-1867187406575845587</id><published>2009-01-07T03:13:00.001-08:00</published><updated>2009-01-07T03:20:48.589-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Build'/><title type='text'>A nice overview of the EndToEndIntegration model of Team Build</title><content type='html'>&lt;a href="http://blog.accentient.com/TeamBuildTargetMap.aspx"&gt;http://blog.accentient.com/TeamBuildTargetMap.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-1867187406575845587?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/1867187406575845587/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=1867187406575845587' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1867187406575845587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1867187406575845587'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/01/nice-overview-of-endtoendintegration.html' title='A nice overview of the EndToEndIntegration model of Team Build'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-7072412856219948589</id><published>2009-01-06T09:57:00.000-08:00</published><updated>2009-01-08T07:19:35.159-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mysteries Unsolved'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Build'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Server'/><title type='text'>Bug in how VS/VSTestHost loads symbols?</title><content type='html'>I have started running source server on our TFS build box. (blog about that later) and I just noticed a peculiarity in how the symbol files where loaded during a "Debug Checked Deploed Tests".&lt;br /&gt;&lt;br /&gt;The two different findings arise when downloading the testresults from a team build.&lt;br /&gt;&lt;br /&gt;It seems that when I started with an empty Visual Studio and from there opened the downloaded testrun the "Debug Checked Deployed Tests" handled the source server brialliantly and the debugger broke inside a copy of the versioned item, as expected.&lt;br /&gt;&lt;br /&gt;However, when i HAD MY SOLUTION OPEN IN VISUAL STUDIO and the debugger breaks, it claims that there is no source available and the only choice it gave me was to open the dissambly. Now I',m curious so I open the Modules window, and there I see that the loaded pdb files are the correct ones (or so it seems). I open them in Notepad and they look correct.&lt;br /&gt;&lt;br /&gt;Now the really strange thing happens when I hit F5. I get breaked at the next failing test and there everthing is ok, I get the downloaded versioned item opened and the debugger breaks at the correct location(?!?). Gotta investigate more on this. For now I will just list it as another mystery.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-7072412856219948589?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/7072412856219948589/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=7072412856219948589' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/7072412856219948589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/7072412856219948589'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/01/bug-in-how-vsvstesthost-loads-symbols.html' title='Bug in how VS/VSTestHost loads symbols?'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-4404215918899741917</id><published>2009-01-06T09:01:00.000-08:00</published><updated>2009-01-08T07:18:22.439-08:00</updated><title type='text'>How to make VS 2008 swallow more memory</title><content type='html'>While wating for VS next (2010) which for sure will be 64Bit and massively concurrent on top of the new concurrency APIs in 4.0 (yeah right ;)) this one has been proved to work (thx to Steven Harman):&lt;br /&gt;&lt;br /&gt;http://stevenharman.net/blog/archive/2008/04/29/hacking-visual-studio-to-use-more-than-2gigabytes-of-memory.aspx&lt;br /&gt;&lt;br /&gt;This should make 4GB virtual memory (logical barrier for 32bit app) available (I think?) but it doesn't look that way. I seems to bump at 3GB virtual space now. It's still a massive improvement though and it makes my 100 project 1MLOC solution actually a bit snappy even with ReSharper running on all sylinders (even running solution wide analysis).&lt;br /&gt;&lt;br /&gt;What about physical memory consumption? On my four core Windows 2008 Server 64Bit/8GB dev box I was hoping Stevens trick would release more physical memory than the 2GB it looks like its stopping at now. Anyone have one more trick up their sleeve to tweak the last logical GB out (and I would rather prefer electron flux (physical memory) over magnetic manipulation of iron dust (swap to disk)) while waiting for the above mentioned nirvana?&lt;br /&gt;&lt;br /&gt;Actually I hardly see any disk activity at all. The dev box is equipped with a solid battery powered write cache (windows will take care of the read caching, thx Christian for correcting me on that little trivia ;)) in front of 10K+15K RPM disks :) Windows 2008 does a good job of caching stuff it needs in a situation like that. Cannot take the machine with me when I go home though (doesn't matter, I can remote it over VPN anyway).&lt;br /&gt;----------------&lt;br /&gt;&lt;br /&gt;Update: I think I have to try the same trick on ReSharper too (parts (most?) of it runs in it's own process) because I am still getting OutOfMemory execption from it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-4404215918899741917?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/4404215918899741917/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=4404215918899741917' title='1 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/4404215918899741917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/4404215918899741917'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/01/how-to-make-vs-2008-swallow-more-memory.html' title='How to make VS 2008 swallow more memory'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-5430937964640532517</id><published>2009-01-05T11:55:00.000-08:00</published><updated>2009-01-07T01:28:52.254-08:00</updated><title type='text'>Possible paralellism scheme in MSTest</title><content type='html'>While I am sitting here waiting for a test run to finish I might as well vent my frustration and hopefully spark up some ideas that might resonate with the Team Test crew in Redmond.&lt;br /&gt;&lt;br /&gt;The possible paralellism in a run of MSBuild seems well under way to be taken care of and is now partly under the control of the user (pending disipline amongst the developers). Only yesterday I switched over to /m:8 on my 4 core build machine just to see what it would do to my build process and it was a sight for sore eyes seeing the 7+1 MSBuild processes firing at will on all four cores.&lt;br /&gt;&lt;br /&gt;The only problem I have right now is that our code base is big and therefore divided into several VS solutions. Enabling cleaning of the output then tripped the whole wagon since it seems the solutions are batch-built as a whole. Since we have dependencies between the solutions the build order of the solutions must be observed. Too much goodies then so I switched back to single build process.&lt;br /&gt;&lt;br /&gt;I have been working for a while on a single VS solution containing all our projects (8GB, 4Core developer blades with 15K + 10K RPM disks seems to be able to take the pain without too much(!) trouble), but thanks to some legacy(sic!) J# components (needs J#SE and VS2005) that seems hard to get rid of this is not a path that will be resolved for a while.&lt;br /&gt;&lt;br /&gt;Meanwhile on the test side of things there is currently no free lunch up for grabs even from the product side let alone our own disipline. MSTest will allow you to specify whether tests should be run in separate containers or with no isolation, but it will not run the tests in paralell whatsoever (Google "mstest paralell" and be convinced).&lt;br /&gt;&lt;br /&gt;IMHO this is definitely on the most wanted feature list for VS next (2010) and I hope to see it (haven't had enough time to check it out yet). In my dreams the feature would have these high level properties:&lt;br /&gt;&lt;br /&gt;- MSTest switch to specify at which level the paralellism should take place&lt;br /&gt;- The switch would take its value form the tuple {Solution|Assembly|Class|Method} (update: consider even TestList as a value)&lt;br /&gt;- MSTest switch (like for MSBuild) to specify number of nodes (/m:)&lt;br /&gt;&lt;br /&gt;It would be left to the developer to guarantee that the test units (not unit tests) at the given granularity observes independence of all other test units on that level. In other words, if I knew (because I have worked my behind of to get it like that) that all my [TestClass] adorned classes were completely isolated at runtime from all other [TestClass] classes, then I would specify /p:Isolation=Class in my test run. MSTest/VSTestHost would then run all tests in paralell on all available nodes and I wouldn't have to sit around looking at three out of four cores doing abolutely nothing while the tests take forever.&lt;br /&gt;&lt;br /&gt;Now wouldn't that be great?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-5430937964640532517?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/5430937964640532517/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=5430937964640532517' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/5430937964640532517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/5430937964640532517'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2009/01/paralellism-in-mstest.html' title='Possible paralellism scheme in MSTest'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-3560140023506958577</id><published>2008-12-30T05:47:00.001-08:00</published><updated>2008-12-30T07:54:02.172-08:00</updated><title type='text'>Why it is an error for MSBuild to build clean in the same order as it builds regularily</title><content type='html'>In a &lt;a href="http://brumlemann.blogspot.com/2008/12/msbuild-of-vs-solution-under-target.html"&gt;previous posting&lt;/a&gt; I wrote about the problem you sometimes face when using MSBuild to build VS solution files.&lt;br /&gt;&lt;br /&gt;The investigation of this problem is now complete from my side and I have produced a short and sweet demo that illustrates the problem. The following necessary and sufficienct conditions apply:&lt;br /&gt;&lt;br /&gt;- Two assemblies (Level0 and Level1)&lt;br /&gt;- Level1 has a project reference to Level0 with Private=false (CopyLocal=false)&lt;br /&gt;- Both projects have set OutputPath to a common directory (CopyLocal is an abomination and I will blog about why in the future)&lt;br /&gt;- Level1 has "Register for COM interop" and [assembly: ComVisible(true)] in assemblyinfo.cs&lt;br /&gt;- Level1 containing a type that inherits from a type in Level0. The inheriting type must have [ComVisible(false)] or the solution will not build.&lt;br /&gt;&lt;br /&gt;The problem is of course that the inheritance across the assembly barrier means that the RegisterAssembly() and UnRegisterAssembly() methods of RegisterServices needs to load Level0 in order to resolve the types in Level1, even though the type that needs resolving is not to be registered for COM interop.&lt;br /&gt;&lt;br /&gt;Inside the VS IDE this is no problem since VS in fact does build clean in the proper order, as the following output clearly shows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------ Clean started: Project: Level1, Configuration: Debug Any CPU ------&lt;br /&gt;------ Clean started: Project: Level0, Configuration: Debug Any CPU ------&lt;br /&gt;========== Clean: 2 succeeded, 0 failed, 0 skipped ==========&lt;br /&gt;&lt;br /&gt;MSBuild however does not do this properly, as the following ouput shows:&lt;br /&gt;&lt;br /&gt;C:\Test\BuildDependencies&gt;msbuild BuildDependencies.sln /t:clean /v:n&lt;br /&gt;Microsoft (R) Build Engine Version 3.5.30729.1[Microsoft .NET Framework, Version 2.0.50727.3053]Copyright (C) Microsoft Corporation 2007. All rights reserved.&lt;br /&gt;Build started 12/30/2008 2:56:51 PM.Project "C:\Test\BuildDependencies\BuildDependencies.sln" on node 0 (clean target(s)).  Building solution configuration "DebugAny CPU".Project "C:\Test\BuildDependencies\BuildDependencies.sln" (1) is building "C:\Test\BuildDependencies\Level0\Level0.csproj" (2) on node 0 (Clean target(s)).  Deleting file "C:\Test\BuildDependencies\Binaries\Level0.dll".  Deleting file "C:\Test\BuildDependencies\Binaries\Level0.pdb".  Deleting file "C:\Test\BuildDependencies\Level0\obj\Debug\Level0.dll".  Deleting file "C:\Test\BuildDependencies\Level0\obj\Debug\Level0.pdb".EntityClean:  Successfully cleaned the output for 0 EDMX files.Done Building Project "C:\Test\BuildDependencies\Level0\Level0.csproj" (Clean target(s)).&lt;br /&gt;Project "C:\Test\BuildDependencies\BuildDependencies.sln" (1) is building "C:\Test\BuildDependencies\Level1\Level1.csproj" (3) on node 0 (Clean target(s)).C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(928,9): error MSB3395: Cannot unregister assembly "C:\Test\BuildDependencies\Binaries\Level1.dll". Could not load file or assembly 'Level0, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.Done Building Project "C:\Test\BuildDependencies\Level1\Level1.csproj" (Clean target(s)) -- FAILED.&lt;br /&gt;Done Building Project "C:\Test\BuildDependencies\BuildDependencies.sln" (clean target(s)) -- FAILED.&lt;br /&gt;Build FAILED.&lt;br /&gt;"C:\Test\BuildDependencies\BuildDependencies.sln" (clean target) (1) -&gt;"C:\Test\BuildDependencies\Level1\Level1.csproj" (Clean target) (3) -&gt;(UnmanagedUnregistration target) -&gt;  C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(928,9): error MSB3395: Cannot unregister assembly "C:\Test\BuildDependencies\Binaries\Level1.dll". Could not load file or assembly 'Level0, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.&lt;br /&gt;    0 Warning(s)    1 Error(s)&lt;br /&gt;Time Elapsed 00:00:00.54&lt;br /&gt;C:\Test\BuildDependencies&gt;&lt;br /&gt;&lt;br /&gt;Which prooves my point (look closely at the output and you will see that the projects are cleaned Level0 first then Level1 which is the opposite of what VS does). The MSBuild team, &lt;a href="http://blogs.msdn.com/msbuild/archive/2008/02/11/what-s-up-with-xxx-sln-cache.aspx"&gt;while copying the internal MSBuild model from VS&lt;/a&gt;, obviously forgot to copy the way VS handles the level info.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-3560140023506958577?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/3560140023506958577/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=3560140023506958577' title='2 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/3560140023506958577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/3560140023506958577'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2008/12/why-it-is-error-for-msbuild-to-build.html' title='Why it is an error for MSBuild to build clean in the same order as it builds regularily'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-1196984420291235442</id><published>2008-12-29T07:50:00.000-08:00</published><updated>2008-12-29T08:41:13.346-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clean'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='MSB3395'/><title type='text'>MSbuild of VS solution under target clean is just plain wrong</title><content type='html'>One of our solutions has been bothering us for a long time so I finally decided to make a simple demo of the problem.&lt;br /&gt;&lt;br /&gt;In my demo solution I have three library type C# projects Level0, Level1 and Level2. Adding and removing a (project) reference from Level1 to Level0 and building with both default and clean targets using MSBuild illustrates the problem. Beneath is the ouput of the clean build without the reference in place:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;C:\Test\BuildDependencies&gt;msbuild C:\Test\BuildDependencies\BuildDependencies.sln /t:clean&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Microsoft (R) Build Engine Version 3.5.30729.1[Microsoft .NET Framework, Version 2.0.50727.3053]Copyright (C) Microsoft Corporation 2007. All rights reserved.&lt;br /&gt;Build started 12/29/2008 4:01:39 PM.Project "C:\Test\BuildDependencies\BuildDependencies.sln" on node 0 (clean target(s)). Building solution configuration "DebugAny CPU".Project "C:\Test\BuildDependencies\BuildDependencies.sln" (1) is building "C:\Test\BuildDependencies\Level0\Level0.csproj" (2) on node 0 (Clean target(s)). Deleting file "C:\Test\BuildDependencies\Level0\bin\Debug\Level0.dll". Deleting file "C:\Test\BuildDependencies\Level0\bin\Debug\Level0.pdb". Deleting file "C:\Test\BuildDependencies\Level0\obj\Debug\Level0.dll". Deleting file "C:\Test\BuildDependencies\Level0\obj\Debug\Level0.pdb".EntityClean: Successfully cleaned the output for 0 EDMX files.Done Building Project "C:\Test\BuildDependencies\Level0\Level0.csproj" (Clean target(s)).&lt;br /&gt;Project "C:\Test\BuildDependencies\BuildDependencies.sln" (1) is building "C:\Test\BuildDependencies\Level1\Level1.csproj" (3) on node 0 (Clean target(s)). Deleting file "C:\Test\BuildDependencies\Level1\bin\Debug\Level1.dll". Deleting file "C:\Test\BuildDependencies\Level1\bin\Debug\Level1.pdb". Deleting file "C:\Test\BuildDependencies\Level1\bin\Debug\Level1.tlb". Deleting file "C:\Test\BuildDependencies\Level1\obj\Debug\Level1.dll". Deleting file "C:\Test\BuildDependencies\Level1\obj\Debug\Level1.pdb".EntityClean: Successfully cleaned the output for 0 EDMX files.Done Building Project "C:\Test\BuildDependencies\Level1\Level1.csproj" (Clean target(s)).&lt;br /&gt;Project "C:\Test\BuildDependencies\BuildDependencies.sln" (1) is building "C:\Test\BuildDependencies\Level2\Level2.csproj" (4) on node 0 (Clean target(s)). Deleting file "C:\Test\BuildDependencies\Level2\bin\Debug\Level2.dll". Deleting file "C:\Test\BuildDependencies\Level2\bin\Debug\Level2.pdb". Deleting file "C:\Test\BuildDependencies\Level2\obj\Debug\Level2.dll". Deleting file "C:\Test\BuildDependencies\Level2\obj\Debug\Level2.pdb".EntityClean: Successfully cleaned the output for 0 EDMX files.Done Building Project "C:\Test\BuildDependencies\Level2\Level2.csproj" (Clean target(s)).&lt;br /&gt;Done Building Project "C:\Test\BuildDependencies\BuildDependencies.sln" (clean target(s)).&lt;br /&gt;Build succeeded. 0 Warning(s) 0 Error(s)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Here is the output with the reference (Level1 -&gt; Level0) in place:&lt;br /&gt;&lt;br /&gt;C:\Test\BuildDependencies&gt;msbuild C:\Test\BuildDependencies\BuildDependencies.sln /t:clean&lt;br /&gt;Microsoft (R) Build Engine Version 3.5.30729.1[Microsoft .NET Framework, Version 2.0.50727.3053]Copyright (C) Microsoft Corporation 2007. All rights reserved.&lt;br /&gt;Build started 12/29/2008 4:02:14 PM.Project "C:\Test\BuildDependencies\BuildDependencies.sln" on node 0 (clean target(s)). Building solution configuration "DebugAny CPU".Project "C:\Test\BuildDependencies\BuildDependencies.sln" (1) is building "C:\Test\BuildDependencies\Level0\Level0.csproj" (2) on node 0 (Clean target(s)). Deleting file "C:\Test\BuildDependencies\Level0\bin\Debug\Level0.dll". Deleting file "C:\Test\BuildDependencies\Level0\bin\Debug\Level0.pdb". Deleting file "C:\Test\BuildDependencies\Level0\obj\Debug\Level0.dll". Deleting file "C:\Test\BuildDependencies\Level0\obj\Debug\Level0.pdb".EntityClean: Successfully cleaned the output for 0 EDMX files.Done Building Project "C:\Test\BuildDependencies\Level0\Level0.csproj" (Clean target(s)).&lt;br /&gt;Project "C:\Test\BuildDependencies\BuildDependencies.sln" (1) is building "C:\Test\BuildDependencies\Level2\Level2.csproj" (3) on node 0 (Clean target(s)). Deleting file "C:\Test\BuildDependencies\Level2\bin\Debug\Level2.dll". Deleting file "C:\Test\BuildDependencies\Level2\bin\Debug\Level2.pdb". Deleting file "C:\Test\BuildDependencies\Level2\obj\Debug\Level2.dll". Deleting file "C:\Test\BuildDependencies\Level2\obj\Debug\Level2.pdb".EntityClean: Successfully cleaned the output for 0 EDMX files.Done Building Project "C:\Test\BuildDependencies\Level2\Level2.csproj" (Clean target(s)).&lt;br /&gt;Project "C:\Test\BuildDependencies\BuildDependencies.sln" (1) is building "C:\Test\BuildDependencies\Level1\Level1.csproj" (4) on node 0 (Clean target(s)). Deleting file "C:\Test\BuildDependencies\Level1\bin\Debug\Level1.dll". Deleting file "C:\Test\BuildDependencies\Level1\bin\Debug\Level1.pdb". Deleting file "C:\Test\BuildDependencies\Level1\bin\Debug\Level1.tlb". Deleting file "C:\Test\BuildDependencies\Level1\bin\Debug\Level0.dll". Deleting file "C:\Test\BuildDependencies\Level1\bin\Debug\Level0.pdb". Deleting file "C:\Test\BuildDependencies\Level1\obj\Debug\ResolveAssemblyReference.cache". Deleting file "C:\Test\BuildDependencies\Level1\obj\Debug\Level1.dll". Deleting file "C:\Test\BuildDependencies\Level1\obj\Debug\Level1.pdb".EntityClean: Successfully cleaned the output for 0 EDMX files.Done Building Project "C:\Test\BuildDependencies\Level1\Level1.csproj" (Clean target(s)).&lt;br /&gt;Done Building Project "C:\Test\BuildDependencies\BuildDependencies.sln" (clean target(s)).&lt;br /&gt;&lt;br /&gt;Now, the point is that allthough adding the reference alters the build order MSBuild does not build the clean targets in the correct order.&lt;br /&gt;&lt;br /&gt;If you don't beleive me have a look at the &lt;solutionname&gt;.sln.cache that gets generated (if you use MSBuild V3 and VS2008). Compare the Clean and the Build targets and you will see that the build order is the same (BuildLevel0 is done before BuildLevel1 etc.).&lt;br /&gt;&lt;br /&gt;Cleaning a referer after the referee (is that the right term?) will fail in some cases. Specifically it will fail if you need the refered assembly to clean the current assembly.&lt;br /&gt;&lt;br /&gt;When do you need the referred assembly to clean the current one? Well our build breaks during clean with the "MSB3395: Cannot unregister assembly" error. It seems our referring assembly needs some type in the referred assembly to properly unregister. I am currently investigating why this is the case but the result doesn't change the fact that MSBuild has an issue here.&lt;br /&gt;&lt;br /&gt;It's obvious if you think about it. If you have access to dependency information you should always clean in the opposite order of the way you normally build. Am I the only one getting this?!? Shouldn't this be obvious to the guys in redmond too?!?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-1196984420291235442?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/1196984420291235442/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=1196984420291235442' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1196984420291235442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1196984420291235442'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2008/12/msbuild-of-vs-solution-under-target.html' title='MSbuild of VS solution under target clean is just plain wrong'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-1504024232936493824</id><published>2008-12-16T05:31:00.001-08:00</published><updated>2008-12-16T05:32:39.191-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Build'/><category scheme='http://www.blogger.com/atom/ns#' term='Build Types'/><title type='text'>Good overview on the motivations behind choice of Team Build structure</title><content type='html'>&lt;a href="http://blog.nwcadence.com/2007/11/12/how-many-team-build-types-should-i-have-for-one-solution/"&gt;http://blog.nwcadence.com/2007/11/12/how-many-team-build-types-should-i-have-for-one-solution/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-1504024232936493824?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/1504024232936493824/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=1504024232936493824' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1504024232936493824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1504024232936493824'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2008/12/good-overview-on-motivations-behind.html' title='Good overview on the motivations behind choice of Team Build structure'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-1607548471232520079</id><published>2008-12-16T03:23:00.000-08:00</published><updated>2008-12-16T03:56:35.938-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Build'/><title type='text'>AdditionalReferencePaths can/will screw up your Team Build</title><content type='html'>Just spent several days pondering over a Team Build that only builds the first time after a thorough clean of the build directory. Prelimenary conclusion is as follows:&lt;br /&gt;&lt;br /&gt;It seems like the AdditionalReferencePaths option is given a higher priority than the framework itself. This leads to resolving things like System.dll from the output path instead of from the relevant target framework(!!).&lt;br /&gt;&lt;br /&gt;The reason I started thinking this is that the it was obvious from the build log that our output path was beeing preferred for stuff like System.dll, System.Data.dll etc. We are deliberately not using CopyLocal and simultaneously have set all our $(Output) to one directory. All file references are picked up from this folder.&lt;br /&gt;&lt;br /&gt;I tested out this conclusion by simply removing the one AdditionalReferencePaths inclusion we had and it did the trick.&lt;br /&gt;&lt;br /&gt;Now, this preference of AdditionalReferencePaths over target framework path cannot be a good descicion from MS can it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-1607548471232520079?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/1607548471232520079/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=1607548471232520079' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1607548471232520079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/1607548471232520079'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2008/12/additionalreferencepaths-canwill-screw.html' title='AdditionalReferencePaths can/will screw up your Team Build'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-4709852949759616408</id><published>2008-12-09T06:49:00.000-08:00</published><updated>2008-12-09T06:56:47.773-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Access'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ2SQL'/><title type='text'>Bug in how LINQ2SQL tracks changes?</title><content type='html'>Just realized (through a reported bug in my code) that you have to be careful with the Attach to DataContext pattern (Note to self. Remember to blog on this).&lt;br /&gt;&lt;br /&gt;It seems that even though attaching a newly created POCO to your DataContext will start change tracking, setting properties to the "type default" value doesn't add an entry to the change log for the DataContext.&lt;br /&gt;&lt;br /&gt;I will try to verify this partly by taking alook under the hood of LINQ2SQL (thanks Lutz ;)) and partly by working around this in my code. Should this be considered a bug in LINQ2SQL? I for one am open for debate.&lt;br /&gt;&lt;br /&gt;Will be back with more on this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-4709852949759616408?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/4709852949759616408/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=4709852949759616408' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/4709852949759616408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/4709852949759616408'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2008/12/just-realized-through-reported-bug-in.html' title='Bug in how LINQ2SQL tracks changes?'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6694797453707339109.post-106250325771905323</id><published>2008-11-26T14:43:00.000-08:00</published><updated>2008-11-26T14:53:26.503-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='64Bit'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Some fiddle bits on .NET 64 bit</title><content type='html'>While fiddling with a totally different problem I came over this little thing on enabling 64Bit .NET in various ways. It made my Windows Server 2003 R2 64Bit Sql Server 2005 64Bit combo much more happy (for now).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.expta.com/2007/11/installing-or-switching-aspnet-versions.html"&gt;http://www.expta.com/2007/11/installing-or-switching-aspnet-versions.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MartinM&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694797453707339109-106250325771905323?l=brumlemann.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brumlemann.blogspot.com/feeds/106250325771905323/comments/default' title='Legg inn kommentarer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6694797453707339109&amp;postID=106250325771905323' title='0 Kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/106250325771905323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6694797453707339109/posts/default/106250325771905323'/><link rel='alternate' type='text/html' href='http://brumlemann.blogspot.com/2008/11/some-fiddle-bits-on-net-64-bit.html' title='Some fiddle bits on .NET 64 bit'/><author><name>Brumlemann</name><uri>http://www.blogger.com/profile/14141594572684513092</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_DfvC1gkJ_CA/SV4fsSnzRBI/AAAAAAAAADc/F8E_QanO1Xk/S220/Happy.jpg'/></author><thr:total>0</thr:total></entry></feed>
