<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Laurent Kempé</title><link>http://weblogs.asp.net/lkempe/default.aspx</link><description>&lt;a href="http://www.techheadbrothers.com"&gt;One of the 
Tech Head Brothers...&lt;/a&gt;</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/lkempe" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Displaying application version on TeamCity home page</title><link>http://feedproxy.google.com/~r/lkempe/~3/J2sN_FnGIjs/displaying-application-version-on-teamcity-home-page.aspx</link><pubDate>Thu, 12 Nov 2009 09:00:06 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7252262</guid><dc:creator>lkempe</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7252262</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/11/12/displaying-application-version-on-teamcity-home-page.aspx#comments</comments><description>&lt;p&gt;I wanted today to display the application version in front of our builds, something I already did on the past but never with the VCS version.&lt;/p&gt;  &lt;p&gt;In fact I used the same &lt;a href="http://www.jetbrains.net/confluence/display/TCD4/Predefined+Properties"&gt;BUILD_VCS_NUMBER_&amp;lt;simplified VCS root name&amp;gt;&lt;/a&gt; that I described here: &lt;a href="http://weblogs.asp.net/lkempe/archive/2009/11/03/build-multiple-clickonce-deployment-packages-using-msbuild-and-team-city.aspx"&gt;Build multiple ClickOnce deployment packages using MSBuild and Team City&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Go in the General Settings of your build and adapt as following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4097914182_2e086aabc1_o1_2739253E.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4097914182_2e086aabc1_o[1]" border="0" alt="4097914182_2e086aabc1_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4097914182_2e086aabc1_o1_thumb_56C71DFD.png" width="682" height="221" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When your software is built it will now display the version:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4097158651_22d00c0ac1_o1_54AA1F34.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4097158651_22d00c0ac1_o[1]" border="0" alt="4097158651_22d00c0ac1_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4097158651_22d00c0ac1_o1_thumb_2101B2D6.png" width="354" height="54" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7252262" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=J2sN_FnGIjs:ynYlN-L-8NA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=J2sN_FnGIjs:ynYlN-L-8NA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=J2sN_FnGIjs:ynYlN-L-8NA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=J2sN_FnGIjs:ynYlN-L-8NA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/J2sN_FnGIjs" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/Team+City/default.aspx">Team City</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/11/12/displaying-application-version-on-teamcity-home-page.aspx</feedburner:origLink></item><item><title>Automating Publish of ClickOnce with TeamCity</title><link>http://feedproxy.google.com/~r/lkempe/~3/YPfH7Dm0W1E/automating-publish-of-clickonce-with-teamcity.aspx</link><pubDate>Wed, 11 Nov 2009 11:24:47 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7251334</guid><dc:creator>lkempe</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7251334</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/11/11/automating-publish-of-clickonce-with-teamcity.aspx#comments</comments><description>&lt;p&gt;The other day I published different posts about the way I automated our build process at &lt;a href="http://www.innoveo.com/" target="_blank"&gt;Innoveo Solutions&lt;/a&gt; to generate different ClickOnce setup using &lt;a href="http://www.jetbrains.com/teamcity/index.html" target="_blank"&gt;TeamCity&lt;/a&gt;: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/lkempe/archive/2009/11/03/build-multiple-clickonce-deployment-packages-using-msbuild-and-team-city.aspx"&gt;Build multiple ClickOnce deployment packages using MSBuild and Team City&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://weblogs.asp.net/lkempe/archive/2009/11/02/building-clickonce-with-teamcity.aspx"&gt;Building ClickOnce with TeamCity&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://weblogs.asp.net/lkempe/archive/2009/11/02/clickonce-certificate-and-teamcity.aspx"&gt;ClickOnce certificate and TeamCity&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://weblogs.asp.net/lkempe/archive/2009/10/27/build-clickonce-deployment-packages-using-msbuild-and-team-city.aspx"&gt;Build ClickOnce deployment packages using MSBuild and Team City&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Yesterday I was asked to solve one minor issue. At ClickOnce publishing time the publish.htm file was not generated so the ClickOnce version number on the web page wasn’t shown. The publish.htm file is a static file on the targeted deploy directory and IIS uses that file. The file contains a hard coded version 2.0.0.x.&lt;/p&gt;  &lt;p&gt;So from a user perspective it was difficult to know if there were a new version. So I was asked to show the correct version.&lt;/p&gt;  &lt;p&gt;I knew from past research a way to handle this from the following post: &lt;a href="http://blogs.msdn.com/mwade/archive/2009/02/28/how-to-generate-publish-htm-with-msbuild.aspx" target="_blank"&gt;How To: Generate publish.htm with MSBuild&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;But I went to a more pragmatic solution, as I already had the &lt;a href="http://msbuildtasks.tigris.org/" target="_blank"&gt;MSBuild Community Tasks&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I made a copy of Publish.htm to Publish.htm.ori on each targeted deploy directory.&lt;/p&gt;  &lt;p&gt;Then I modified my MSBuild script to do the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Copy Publish.html.ori to Publish.htm&lt;/li&gt;    &lt;li&gt;Use FileUpdate of &lt;a href="http://msbuildtasks.tigris.org/" target="_blank"&gt;MSBuild Community Tasks&lt;/a&gt; to search the 2.0.0.x string and replace it with the version&lt;/li&gt; &lt;/ol&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:75c64077-df36-4b1f-aa27-b6be7cb8c39c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000"&gt; Deploy Click Once&lt;/span&gt;&lt;span style="color:#0000ff"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;DeployClickOnce&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Message&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;####### Deploy ClickOnce $(Configuration)|$(Platform)&amp;#160;&amp;#160;---------#&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Exec&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Command&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;xcopy /E /Y $(ClickOnceSrc)&amp;#92;*.* $(ClickOnceDestination)&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Copy&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;SourceFiles&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;$(ClickOnceDestination)&amp;#92;Publish.htm.ori&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;DestinationFiles&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;$(ClickOnceDestination)&amp;#92;Publish.htm&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;FileUpdate&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Files&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;$(ClickOnceDestination)&amp;#92;Publish.htm&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Regex&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;2.0.0.x&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;ReplacementText&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;$(FullVersion)&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;and the FullVersion is defined as this, using TeamCity &lt;a href="http://www.jetbrains.net/confluence/display/TCD4/Predefined+Properties" target="_blank"&gt;BUILD_VCS_NUMBER&lt;/a&gt;, which is Latest VCS revision:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b9120155-0f8c-4e96-bcd7-88d1207c1621" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Major&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Major&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Minor&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Minor&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Build&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Build&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Revision&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;$(BUILD_VCS_NUMBER_app_Trunk)&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Revision&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;FullVersion&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;$(Major).$(Minor).$(Build).$(Revision)&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;FullVersion&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&amp;#160;&amp;#160;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;And now the Publish webpage display the version correctly!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4094558371_70b24140cc_o1_670E614B.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4094558371_70b24140cc_o[1]" border="0" alt="4094558371_70b24140cc_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4094558371_70b24140cc_o1_thumb_5F82F1DE.png" width="177" height="46" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7251334" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=YPfH7Dm0W1E:NtmgQYDxOdY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=YPfH7Dm0W1E:NtmgQYDxOdY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=YPfH7Dm0W1E:NtmgQYDxOdY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=YPfH7Dm0W1E:NtmgQYDxOdY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/YPfH7Dm0W1E" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/continuous+integration/default.aspx">continuous integration</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/Team+City/default.aspx">Team City</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/MSBuild/default.aspx">MSBuild</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/ClickOnce/default.aspx">ClickOnce</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/11/11/automating-publish-of-clickonce-with-teamcity.aspx</feedburner:origLink></item><item><title>Watch Several TeamCity Servers With Windows Tray Notifier</title><link>http://feedproxy.google.com/~r/lkempe/~3/bx-FPj4M01Y/watch-several-teamcity-servers-with-windows-tray-notifier.aspx</link><pubDate>Wed, 04 Nov 2009 19:49:39 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7247217</guid><dc:creator>lkempe</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7247217</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/11/04/watch-several-teamcity-servers-with-windows-tray-notifier.aspx#comments</comments><description>&lt;p&gt;Browsing &lt;a href="http://www.jetbrains.com/teamcity/index.html" target="_blank"&gt;TeamCity&lt;/a&gt; documentation this evening I discovered that it is possible to &lt;a href="http://www.jetbrains.net/confluence/display/TCD5/How+To...#HowTo...-WatchSeveralTeamCityServersWithWindowsTrayNotifier" target="_blank"&gt;Watch Several TeamCity Servers With Windows Tray Notifier&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;TeamCity Tray Notifier is used normally to watch builds and receive notifications from a single TeamCity server.&lt;/p&gt;    &lt;p&gt;In situations, when you have more than one TeamCity server, and want to monitor them with Windows Tray Notifier simultaneously, you need to start a separate instance of Tray Notifier for each of the servers from the command line with the &lt;tt&gt;/allowMultiple&lt;/tt&gt; option:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;navigate to TeamCity Tray notifier installation folder (by default, it's &lt;tt&gt;C:\Program Files\JetBrains\TeamCity&lt;/tt&gt; and run the command:         &lt;pre&gt;JetBrains.TrayNotifier.exe /allowMultiple&lt;/pre&gt;

      &lt;p&gt;Optionally, for each of the Tray Notifier instances you can specify explicitly the URL of the the server to connect to with the &lt;tt&gt;/server&lt;/tt&gt; option. Otherwise, for each further tray notifier instance you will need to log out and change server's URL via UI.&lt;/p&gt;

      &lt;pre&gt;JetBrains.TrayNotifier.exe /allowMultiple /server:http://myTeamCityServer&lt;/pre&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;See also &lt;a href="http://jetbrains.net/tracker/issue/TW-4230#comment=27-14194"&gt;details&lt;/a&gt; in the issue tracker.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So now I am able to have two TeamCity Tray notifier open:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4075997580_e7abf7683e_o1_5C2A092C.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://weblogs.asp.net/blogs/lkempe/4075997580_e7abf7683e_o1_thumb_29F29315.png" width="746" height="376" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;What I also like is to be able to start programs by typing the Windows key and then some text, here for example “te”&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4076003432_6c2b8f449f_o1_01638B34.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4076003432_6c2b8f449f_o[1]" border="0" alt="4076003432_6c2b8f449f_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4076003432_6c2b8f449f_o1_thumb_2BEF4644.png" width="276" height="174" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;To achieve this I created three shortcuts with the different servers configuration and then I placed the shortcuts in my folder C:\Users\Laurent\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu in which it is indexed.&lt;/p&gt;

&lt;p&gt;Nice!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7247217" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=bx-FPj4M01Y:DH0Bukpef8w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=bx-FPj4M01Y:DH0Bukpef8w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=bx-FPj4M01Y:DH0Bukpef8w:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=bx-FPj4M01Y:DH0Bukpef8w:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/bx-FPj4M01Y" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/Team+City/default.aspx">Team City</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/11/04/watch-several-teamcity-servers-with-windows-tray-notifier.aspx</feedburner:origLink></item><item><title>Windows Backup, Xbox 360 media extender and 0x80070002 error</title><link>http://feedproxy.google.com/~r/lkempe/~3/4wWmymuo0AA/windows-backup-xbox-360-media-extender-and-0x80070002-error.aspx</link><pubDate>Tue, 03 Nov 2009 09:57:20 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7245810</guid><dc:creator>lkempe</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7245810</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/11/03/windows-backup-xbox-360-media-extender-and-0x80070002-error.aspx#comments</comments><description>&lt;p&gt;Yesterday I bought a new Western Digital external hard drive of 1TB for 109CHF, incredible how cheap it is now.&lt;/p&gt;  &lt;p&gt;Then I configured my Windows 7 backup to use this new hard drive, very easy and the backup in less than 2 minutes.&lt;/p&gt;  &lt;p&gt;At the end the backup failed because of drive having errors, then after a Error-checking everything was fine.&lt;/p&gt;  &lt;p&gt;So I restarted the backup and got again an error:&lt;/p&gt;  &lt;p&gt;Backup encountered a problem while backing up file C:\Users\Mcx1-xx-PC\Contacts. Error:(The system cannot find the file specified. (0x80070002))   &lt;br /&gt;Backup encountered a problem while backing up file C:\Users\Mcx1-xx-PC\Searches. Error:(The system cannot find the file specified. (0x80070002))    &lt;br /&gt;Backup encountered a problem while backing up file C:\Users\Mcx2-xx-PC\Contacts. Error:(The system cannot find the file specified. (0x80070002))    &lt;br /&gt;Backup encountered a problem while backing up file C:\Users\Mcx2-xx-PC\Searches. Error:(The system cannot find the file specified. (0x80070002))&lt;/p&gt;  &lt;p&gt;Searching on the Internet I found a &lt;a href="http://social.technet.microsoft.com/Forums/en-US/w7itprogeneral/thread/bff71aac-c78e-42bd-a959-116019c93478/" target="_blank"&gt;forum post&lt;/a&gt; with the following solution:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;This is a known issue with Media center users. For such users, Windows does not create &amp;quot;Contacts&amp;quot; and &amp;quot;Searches&amp;quot; directories which Windows backup expect to be present. As a workaround, please do the following:     &lt;br /&gt;1. Launch Change backup settings.      &lt;br /&gt;2. Choose the same backup target and proceed to next page.      &lt;br /&gt;3. Select &amp;quot;Let me choose&amp;quot;.      &lt;br /&gt;4. Expand the user Mcx1-NEO node in the treeview. Expand &amp;quot;Additional locations&amp;quot;.       &lt;br /&gt;5. Exclude the Contacts and Searches directories for the user.       &lt;br /&gt;6. Proceed with configuration and save settings.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4071003833_d19380d9ab_o1_0EDC1E31.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4071003833_d19380d9ab_o[1]" border="0" alt="4071003833_d19380d9ab_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4071003833_d19380d9ab_o1_thumb_762C3546.png" width="630" height="548" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Restarted backup and now it works!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7245810" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=4wWmymuo0AA:BEjaRyBAyZ0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=4wWmymuo0AA:BEjaRyBAyZ0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=4wWmymuo0AA:BEjaRyBAyZ0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=4wWmymuo0AA:BEjaRyBAyZ0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/4wWmymuo0AA" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/media+extender/default.aspx">media extender</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/xbox+360/default.aspx">xbox 360</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/11/03/windows-backup-xbox-360-media-extender-and-0x80070002-error.aspx</feedburner:origLink></item><item><title>Build multiple ClickOnce deployment packages using MSBuild and Team City</title><link>http://feedproxy.google.com/~r/lkempe/~3/gNvzBshqQCQ/build-multiple-clickonce-deployment-packages-using-msbuild-and-team-city.aspx</link><pubDate>Tue, 03 Nov 2009 08:10:52 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7245764</guid><dc:creator>lkempe</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7245764</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/11/03/build-multiple-clickonce-deployment-packages-using-msbuild-and-team-city.aspx#comments</comments><description>&lt;p&gt;The other day I posted about &lt;a href="http://weblogs.asp.net/lkempe/archive/2009/10/27/build-clickonce-deployment-packages-using-msbuild-and-team-city.aspx"&gt;Build ClickOnce deployment packages using MSBuild and Team City&lt;/a&gt;, and there were something that I didn’t liked in my way of doing it.&lt;/p&gt;  &lt;p&gt;I have multiple ClickOnce deployment packages created using TeamCity and MSBuild but each ClickOnce packages have their own Application Revision due to the usage of TeamCity &lt;a href="http://www.jetbrains.net/confluence/display/TCD4/Predefined+Properties" target="_blank"&gt;BUILD_NUMBER server build property&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;So I changed to use TeamCity &lt;a href="http://www.jetbrains.net/confluence/display/TCD4/Predefined+Properties" target="_blank"&gt;BUILD_VCS_NUMBER_&amp;lt;simplified VCS root name&amp;gt;&lt;/a&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:938d7efb-f5b5-4dca-90a2-68001b35ba46" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000"&gt; ClickOnce getting build number from Team City &lt;/span&gt;&lt;span style="color:#0000ff"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ApplicationRevision&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;$(BUILD_VCS_NUMBER_MyApplication_Trunk)&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ApplicationRevision&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;And now all my ClickOnce packages have the same Application Revision which is better !&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7245764" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=gNvzBshqQCQ:f4EP_CLv--I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=gNvzBshqQCQ:f4EP_CLv--I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=gNvzBshqQCQ:f4EP_CLv--I:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=gNvzBshqQCQ:f4EP_CLv--I:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/gNvzBshqQCQ" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/continuous+integration/default.aspx">continuous integration</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/Team+City/default.aspx">Team City</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/MSBuild/default.aspx">MSBuild</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/ClickOnce/default.aspx">ClickOnce</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/11/03/build-multiple-clickonce-deployment-packages-using-msbuild-and-team-city.aspx</feedburner:origLink></item><item><title>Building ClickOnce with TeamCity</title><link>http://feedproxy.google.com/~r/lkempe/~3/FmQesEw5ATM/building-clickonce-with-teamcity.aspx</link><pubDate>Mon, 02 Nov 2009 22:52:25 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7245509</guid><dc:creator>lkempe</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7245509</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/11/02/building-clickonce-with-teamcity.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/lkempe/archive/2009/11/02/teamcity-migration-tip.aspx"&gt;Migrating our TeamCity&lt;/a&gt; server today I got the following error on the new server:&lt;/p&gt;  &lt;p&gt;error MSB3147: Could not find required file 'setup.bin' in …&lt;/p&gt;  &lt;p&gt;I for sure fixed that on the older server, and the fix was to have the SDK on the build server. The issue is that I don’t want to install Visual Studio to do that, so here is how I achieved it&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Copy my whole c:\Program Files\Microsoft SDKs\Windows\v6.0a folder to the server&lt;/li&gt;    &lt;li&gt;Created a registry key      &lt;br /&gt;Key: HKEY_LOCAL_MACHINE\Software\Microsoft\GenericBootstrapper\3.5\       &lt;br /&gt;Value: Path       &lt;br /&gt;Type: REG_SZ       &lt;br /&gt;Data: C:\Program Files\Microsoft SDKs\Windows\v6.0a\Bootstrapper\&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Then the error was gone and I had my build server ready again to build ClickOnce setup.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7245509" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=FmQesEw5ATM:ECzLV68qpnE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=FmQesEw5ATM:ECzLV68qpnE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=FmQesEw5ATM:ECzLV68qpnE:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=FmQesEw5ATM:ECzLV68qpnE:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/FmQesEw5ATM" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/continuous+integration/default.aspx">continuous integration</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/Team+City/default.aspx">Team City</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/ClickOnce/default.aspx">ClickOnce</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/11/02/building-clickonce-with-teamcity.aspx</feedburner:origLink></item><item><title>TeamCity migration tip</title><link>http://feedproxy.google.com/~r/lkempe/~3/Lva9KgW_lYU/teamcity-migration-tip.aspx</link><pubDate>Mon, 02 Nov 2009 15:39:27 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7245331</guid><dc:creator>lkempe</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7245331</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/11/02/teamcity-migration-tip.aspx#comments</comments><description>&lt;p&gt;Today I am migrating a &lt;a href="http://www.jetbrains.com/teamcity/index.html" target="_blank"&gt;TeamCity&lt;/a&gt; installation from an old server to a new server and discovered that it is really easy to do that!&lt;/p&gt;  &lt;p&gt;First I fully re-installed TeamCity using the Windows Setup that JetBrains delivered on the new server.&lt;/p&gt;  &lt;p&gt;Then I stopped the old and new instances and transferred the folder &lt;strong&gt;&lt;a href="http://www.jetbrains.net/confluence/display/TCD4/TeamCity+Data+Directory" target="_blank"&gt;.BuildServer&lt;/a&gt;&lt;/strong&gt; from the old server to the new server.&lt;/p&gt;  &lt;p&gt;Restarted the new instance and got all my settings from the old instance on the new instance (projects, users…)&lt;/p&gt;  &lt;p&gt;This saved my day! and lots of work! Thank you JetBrains for this great tool.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Update&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you set on the original server the &lt;a href="http://www.jetbrains.net/confluence/display/TCD4/Configuring+Server+URL" target="_blank"&gt;Server URL&lt;/a&gt;, don’t forget to update it to the new Server URL. This can be done through the Administration &amp;gt; Server Configuration page.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7245331" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=Lva9KgW_lYU:yJFYfWVIWw8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=Lva9KgW_lYU:yJFYfWVIWw8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=Lva9KgW_lYU:yJFYfWVIWw8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=Lva9KgW_lYU:yJFYfWVIWw8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/Lva9KgW_lYU" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/11/02/teamcity-migration-tip.aspx</feedburner:origLink></item><item><title>ClickOnce certificate and TeamCity</title><link>http://feedproxy.google.com/~r/lkempe/~3/J23NXVmihyo/clickonce-certificate-and-teamcity.aspx</link><pubDate>Mon, 02 Nov 2009 15:28:56 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7245315</guid><dc:creator>lkempe</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7245315</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/11/02/clickonce-certificate-and-teamcity.aspx#comments</comments><description>&lt;p&gt;To be able to run a build on &lt;a href="http://www.jetbrains.com/teamcity/index.html" target="_blank"&gt;TeamCity&lt;/a&gt; of a Visual Studio solution containing a ClickOnce manifest which needs to be signed, you will need to add the certificate to the Windows account on which TeamCity services runs.&lt;/p&gt;  &lt;p&gt;TeamCity run under Local System account per default.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4068846824_d9a73b13b8_o1_6E59C304.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4068846824_d9a73b13b8_o[1]" border="0" alt="4068846824_d9a73b13b8_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4068846824_d9a73b13b8_o1_thumb_0D9C69D8.png" width="278" height="130" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So you need to add the certificate to this account! But how do you do that?&lt;/p&gt;  &lt;p&gt;You will need a tool from &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx" target="_blank"&gt;SysInternals called PsExec&lt;/a&gt;, then using PsExec:&lt;/p&gt;  &lt;p&gt;&amp;gt; Psexec.exe -i -s cmd.exe&lt;/p&gt;  &lt;p&gt;you will have ran a command prompt on your system in the Local System Account (LSA).&lt;/p&gt;  &lt;p&gt;Using that new command prompt, cd to the folder containing your certificate and start it&lt;/p&gt;  &lt;p&gt;&amp;gt; my_TemporaryKey.pfx&lt;/p&gt;  &lt;p&gt;Then you will face the Certificate Import Wizard in which you click Next &amp;gt; Next &amp;gt; Type the password &amp;gt; Next.&lt;/p&gt;  &lt;p&gt;Your certificate is installed now for Local System Account (LSA), and your build should work now.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7245315" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=J23NXVmihyo:Q__HILcore0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=J23NXVmihyo:Q__HILcore0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=J23NXVmihyo:Q__HILcore0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=J23NXVmihyo:Q__HILcore0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/J23NXVmihyo" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/continuous+integration/default.aspx">continuous integration</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/Team+City/default.aspx">Team City</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/ClickOnce/default.aspx">ClickOnce</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/11/02/clickonce-certificate-and-teamcity.aspx</feedburner:origLink></item><item><title>Build ClickOnce deployment packages using MSBuild and Team City</title><link>http://feedproxy.google.com/~r/lkempe/~3/0Auog_ljpPk/build-clickonce-deployment-packages-using-msbuild-and-team-city.aspx</link><pubDate>Tue, 27 Oct 2009 11:25:26 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7240436</guid><dc:creator>lkempe</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7240436</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/10/27/build-clickonce-deployment-packages-using-msbuild-and-team-city.aspx#comments</comments><description>&lt;p&gt;The other day I was requested to automate our build process to issue different &lt;a href="http://msdn.microsoft.com/en-us/library/t71a733d(VS.80).aspx" target="_blank"&gt;ClickOnce&lt;/a&gt; setup for the same application. The main difference was some configuration files pointing to different back end web services.&lt;/p&gt;  &lt;p&gt;To start I had to create new build configurations on &lt;a href="http://www.jetbrains.com/teamcity/index.html" target="_blank"&gt;Team City&lt;/a&gt; which used the following settings for the Build Runner:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Targets&lt;/strong&gt;: Rebuild Publish &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Configuration&lt;/strong&gt;:&lt;strong&gt;&amp;#160;&lt;/strong&gt;One per build configurations; e.g&lt;strong&gt;&amp;#160;&lt;/strong&gt;DeployClickOnce, integrationDeployClickOnce &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4049721154_08aa444fd1_o1_1C3452FB.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Targets and Configuration" border="0" alt="Targets and Configuration" src="http://weblogs.asp.net/blogs/lkempe/4049721154_08aa444fd1_o1_thumb_12F817BA.png" width="397" height="160" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then in my Visual Studio 2008 solution I created several Solution configuration reflecting the different configurations that I needed during my deployment, e.g. DeployClickOnce&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4048977891_8fef52e1df_o1_2D580AD1.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Visual Studio 2008 solutions" border="0" alt="Visual Studio 2008 solutions" src="http://weblogs.asp.net/blogs/lkempe/4048977891_8fef52e1df_o1_thumb_4F606697.png" width="287" height="144" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Then using the project properties from the solution explorer in Visual Studio I had to set all Publish options I was interested in; Publish Location, Installation Folder Url, Install Mode and Settings, Prerequisites…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4048988539_2a9f77285f_o1_1B4BC744.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="4048988539_2a9f77285f_o[1]" border="0" alt="4048988539_2a9f77285f_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4048988539_2a9f77285f_o1_thumb_614C5E8A.png" width="763" height="492" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The issue now is that the Publish Version automatically increment the revision with each publish. But this doesn’t work with our continuous integration server Team City as it would need to checkin the modified file back to subversion. SO a different approach was needed.&lt;/p&gt;  &lt;p&gt;The solution I used is to use the &lt;a href="http://www.jetbrains.net/confluence/display/TCD4/Predefined+Properties#PredefinedProperties-buildNumber" target="_blank"&gt;Build Number&lt;/a&gt; offered by Team City, so I had to modify the MSBuild script to use the the BUILD_NUMBER. To do that, right click in the Solution Explorer on our project and select Edit Project File:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4049748852_2ea06972ca_o1_650A035A.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="4049748852_2ea06972ca_o[1]" border="0" alt="4049748852_2ea06972ca_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4049748852_2ea06972ca_o1_thumb_238F5101.png" width="179" height="121" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then you will face the your MSBuild script, and you will have to search for the configuration that we defined some steps before:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:68c8585d-4f35-4bb1-bc7f-3e5d6368c615" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Condition&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &amp;#39;$(Configuration)|$(Platform)&amp;#39; == &amp;#39;DeployClickOnce|AnyCPU&amp;#39; &lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then before the end of the closing PropertyGroupd tag add the following lines:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:79a05921-b262-4485-a7bb-7cce56f4a693" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000"&gt; ClickOnce getting build number from Team City &lt;/span&gt;&lt;span style="color:#0000ff"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ApplicationRevision&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;$(BUILD_NUMBER)&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ApplicationRevision&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;InstallUrl&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;http://myserver.com/&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;InstallUrl&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;strong&gt;ApplicationRevision &lt;/strong&gt;will overwrite the Application revision using the BUILD_NUMBER defined by Team City.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;InstallUrl &lt;/strong&gt;is another configuration that we want to override because we want to create multiple ClickOnce setup installed from different urls. So for DeployClickOnce you will have an InstallURL and for integrationDeployClickOnce you will have another one.&lt;/p&gt;  &lt;p&gt;Now we are ready for the final step in which we want to exchange some configuration files related to the different ClickOnce builds and Publish the output to an IIS server so that our testers can access the different ClickOnce package for the different stages.&lt;/p&gt;  &lt;p&gt;ClickOnce secure the different files that are created with checksums so that they cannot be mitigated during the installment transfer. So the only option we have to be able to exchange our configuration files is before compilation. So we had a Target to our MSBuild script:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:416854f2-ad0a-41c8-8f7f-714d3c50093d" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;BeforeCompile&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;CallTarget&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Targets&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;ExchangeDefaultSettings&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;ContinueOnError&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;CallTarget&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Targets&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;ExchangeAppConfig&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;ContinueOnError&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;The BeforeCompile target will be called before each build and will exchange our App.config and another settings file containing stage dependant configuration.&lt;/p&gt;  &lt;p&gt;Here is the simple target which exchanges the App.config stored in a configs folder:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c416415d-7f09-45ef-86d7-5b284b6bb880" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;ExchangeAppConfig&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Message&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;####### CONFIG Exchange $(Configuration)|$(Platform)&amp;#160;&amp;#160;---------#&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Copy&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Condition&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &amp;#39;$(Configuration)&amp;#39; == &amp;#39;DeployClickOnce&amp;#39; &lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;SourceFiles&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;$(SolutionFolder)&amp;#92;Sources&amp;#92;Application&amp;#92;configs&amp;#92;localhost.App.config&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;DestinationFiles&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;$(SolutionFolder)&amp;#92;Sources&amp;#92;Application&amp;#92;App.config&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;ContinueOnError&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Copy&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Condition&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &amp;#39;$(Configuration)&amp;#39; == &amp;#39;integrationDeployClickOnce&amp;#39; &lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;SourceFiles&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;$(SolutionFolder)&amp;#92;Sources&amp;#92;Application&amp;#92;configs&amp;#92;integration.App.config&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;DestinationFiles&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;$(SolutionFolder)&amp;#92;Sources&amp;#92;Application&amp;#92;App.config&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;ContinueOnError&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;The ExchangeDefaultSettings Target works the same.&lt;/p&gt;  &lt;p&gt;So before any compilation of our solution using the DeployClickOnce, integrationDeployClickOnce solution configuration the App.config and the default settings file are exchanged. So after the compilation they will be correct according to the stage that we target.&lt;/p&gt;  &lt;p&gt;The final step is to Publish the ClickOnce package created to the IIS server. As we defined the &lt;strong&gt;Targets&lt;/strong&gt;: Rebuild Publish, there will be a Rebuild and then a Publish phase in our build script. So now we have to take care of the Publish target.&lt;/p&gt;  &lt;p&gt;So we add a Target Publish as here:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0cd3c3b1-a3d4-4711-a329-267c0e87cd04" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;Publish&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;CallTarget&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Condition&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &amp;#39;$(Configuration)&amp;#39; == &amp;#39;DeployClickOnce&amp;#39; &lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li&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;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Targets&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;DeployClickOnce&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;ContinueOnError&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;CallTarget&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Condition&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &amp;#39;$(Configuration)&amp;#39; == &amp;#39;integrationDeployClickOnce&amp;#39; &lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&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;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;Targets&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;DeployClickOnce&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li&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;&lt;span style="color:#0000ff"&gt;&lt;/span&gt;&lt;span style="color:#ff0000"&gt;ContinueOnError&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Which just call a Target DeployClickOnce for the configuration we are interested in: DeployClickOnce and integrationDeployClickOnce.&lt;/p&gt;  &lt;p&gt;The DeployClickOnce Target is responsible to xcopy the packages created by the Publish Target to the different IIS path used to host our ClickOnce deployment setup:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:833c691d-8a00-4ec6-86af-582367848b49" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000"&gt; Deploy Click Once&lt;/span&gt;&lt;span style="color:#0000ff"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;DeployClickOnce&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Message&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;####### Deploy ClickOnce $(Configuration)|$(Platform)&amp;#160;&amp;#160;---------#&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;Exec&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Command&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;xcopy /E /Y $(ClickOnceSrc)&amp;#92;*.* $(ClickOnceDestination)&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;Target&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;This is achieved by using two variables &lt;strong&gt;ClickOnceSrc&lt;/strong&gt; and &lt;strong&gt;ClickOnceDestination&lt;/strong&gt; which are also defined per solution configuration like the &lt;strong&gt;ApplicationUrl&lt;/strong&gt; and &lt;strong&gt;InstallUrl&lt;/strong&gt;. The destination is a folder on a IIS server which already has a manually customized Publish.htm file.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:71ce7464-b98f-44e5-8d30-8f9bd908a5cf" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Condition&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &amp;#39;$(Configuration)|$(Platform)&amp;#39; == &amp;#39;DeployClickOnce|AnyCPU&amp;#39; &lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ClickOnceSrc&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;$(TestsFolder)&amp;#92;Output&amp;#92;$(OutputPath)app.publish&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ClickOnceSrc&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ClickOnceDestination&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;E:&amp;#92;Inetpub&amp;#92;Application&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ClickOnceDestination&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;And&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6b8dc035-17de-4b4c-b11f-120a7f8168ca" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color:#0000ff"&gt; &lt;/span&gt;&lt;span style="color:#ff0000"&gt;Condition&lt;/span&gt;&lt;span style="color:#0000ff"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt; &amp;#39;$(Configuration)|$(Platform)&amp;#39; == &amp;#39;integrationDeployClickOnce|AnyCPU&amp;#39; &lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ClickOnceSrc&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;$(TestsFolder)&amp;#92;Output&amp;#92;$(OutputPath)app.publish&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ClickOnceSrc&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;ClickOnceDestination&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;E:&amp;#92;Inetpub&amp;#92;Application&amp;#92;integration&lt;span style="color:#0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;ClickOnceDestination&lt;/span&gt;&lt;span style="color:#0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Now you have two build configurations which output two valid ClickOnce setup packages using different stage dependant configurations that your tester can install directly from your ClickOnce web site. And if you have configured the automatic update of the application through the ClickOnce Application Updates then the applciation will be updated automatically when a tester start you application.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7240436" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=0Auog_ljpPk:YMLPK-hzL9s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=0Auog_ljpPk:YMLPK-hzL9s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=0Auog_ljpPk:YMLPK-hzL9s:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=0Auog_ljpPk:YMLPK-hzL9s:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/0Auog_ljpPk" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/Team+City/default.aspx">Team City</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/ClickOnce/default.aspx">ClickOnce</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/10/27/build-clickonce-deployment-packages-using-msbuild-and-team-city.aspx</feedburner:origLink></item><item><title>Daily stand up meeting using Skype</title><link>http://feedproxy.google.com/~r/lkempe/~3/p4Ye1HgZKck/daily-stand-up-meeting-using-skype.aspx</link><pubDate>Tue, 20 Oct 2009 08:48:37 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7233644</guid><dc:creator>lkempe</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7233644</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/10/20/daily-stand-up-meeting-using-skype.aspx#comments</comments><description>&lt;p&gt;Today at &lt;a href="http://www.innoveo.com/" target="_blank"&gt;Innoveo Solutions&lt;/a&gt; we had our daily Stand Up meeting using Skype as I am at home. It worked really good ! I can’t wait to experience it on the new plasma TV that we have in our meeting room!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4028288873_799bc9aef2_o1_4205934A.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4028288873_799bc9aef2_o[1]" border="0" alt="4028288873_799bc9aef2_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4028288873_799bc9aef2_o1_thumb_45DF6FB5.png" width="435" height="326" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And a Chicken entering the meeting ! Hey Bojan :-)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/lkempe/4029051070_a90ca3a4e8_o1_4325CC90.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="4029051070_a90ca3a4e8_o[1]" border="0" alt="4029051070_a90ca3a4e8_o[1]" src="http://weblogs.asp.net/blogs/lkempe/4029051070_a90ca3a4e8_o1_thumb_33826F27.png" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7233644" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=p4Ye1HgZKck:jjvxa3jLtRw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=p4Ye1HgZKck:jjvxa3jLtRw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=p4Ye1HgZKck:jjvxa3jLtRw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=p4Ye1HgZKck:jjvxa3jLtRw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/p4Ye1HgZKck" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/innoveo+solutions/default.aspx">innoveo solutions</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/Scrum/default.aspx">Scrum</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/10/20/daily-stand-up-meeting-using-skype.aspx</feedburner:origLink></item><item><title>MVVM Light Toolkit V2</title><link>http://feedproxy.google.com/~r/lkempe/~3/9RXijSONflw/mvvm-light-toolkit-v2.aspx</link><pubDate>Tue, 13 Oct 2009 21:12:53 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7229087</guid><dc:creator>lkempe</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7229087</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/10/13/mvvm-light-toolkit-v2.aspx#comments</comments><description>&lt;p&gt;At &lt;a href="http://www.innoveo.com/" target="_blank"&gt;Innoveo Solutions&lt;/a&gt; we are using .NET and WPF for our &lt;a href="http://www.innoveo.com/Products.aspx" target="_blank"&gt;Innoveo Skye&lt;/a&gt;® Editor application. Skye® Editor is a distribution channel editor targeting business people letting them edit and configure their insurance products. &lt;/p&gt;  &lt;p&gt;From the beginning we have adopted the &lt;strong&gt;Model-View-ViewModel&lt;/strong&gt; architecture. Having our solution growing we were facing the issue of having our ViewModels dependency growing too. Some ViewModel became too much dependent of others. This was obvious in our unit tests whose complexity to setup were growing too. It was time to find a solution to decouple the ViewModels.&lt;/p&gt;  &lt;p&gt;The solution came out after a discussion with &lt;a href="http://www.galasoft.ch/intro_en.html" target="_blank"&gt;Laurent Bugnion&lt;/a&gt;, the famous author of &lt;a href="http://www.galasoft.ch/mvvm/getstarted/" target="_blank"&gt;&lt;strong&gt;MVVM Light Toolkit&lt;/strong&gt;&lt;/a&gt;. At that time we used the V1 that already helped a lot in this decoupling.&lt;/p&gt;  &lt;p&gt;Now with &lt;strong&gt;&lt;a href="http://blog.galasoft.ch/archive/2009/10/03/mvvm-light-toolkit-v2-whatrsquos-new.aspx" target="_blank"&gt;MVVM Light Toolkit V2&lt;/a&gt;&lt;/strong&gt; it is even better with the new Messenger API. What we also really appreciated in comparison to other frameworks is that it is really &lt;strong&gt;light &lt;/strong&gt;and the ability to open and edit the user interface into Expression Blend.&lt;/p&gt;  &lt;p&gt;So Thank you &lt;a href="http://www.galasoft.ch/intro_en.html" target="_blank"&gt;Laurent&lt;/a&gt; for this GREAT framework and I looking forward for V3!&lt;/p&gt;  &lt;p&gt;I also would like to thank my managers at Innoveo Solutions who understand Open Source and the need to have people contributing to Open Source projects, even during their professional working time. A Win-Win situation and not just a one way benefit as often.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7229087" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=9RXijSONflw:Sod4tji3Rb8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=9RXijSONflw:Sod4tji3Rb8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=9RXijSONflw:Sod4tji3Rb8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=9RXijSONflw:Sod4tji3Rb8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/9RXijSONflw" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/WPF/default.aspx">WPF</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/innoveo+solutions/default.aspx">innoveo solutions</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/MVVM/default.aspx">MVVM</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/10/13/mvvm-light-toolkit-v2.aspx</feedburner:origLink></item><item><title>ReSharper 5.0 Overview</title><link>http://feedproxy.google.com/~r/lkempe/~3/nOJX7MewWGc/resharper-5-0-overview.aspx</link><pubDate>Mon, 12 Oct 2009 18:29:45 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7228071</guid><dc:creator>lkempe</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7228071</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/10/12/resharper-5-0-overview.aspx#comments</comments><description>&lt;p&gt;As part of the &lt;a href="http://weblogs.asp.net/lkempe/archive/2009/09/06/joining-jetbrains-academy.aspx" target="_blank"&gt;Jetbrains Academy&lt;/a&gt; I am using/testing &lt;a href="http://www.jetbrains.com/resharper/index.html" target="_blank"&gt;ReSharper&lt;/a&gt; 5 for around a month now. It is quite stable for a pre-release and I have lots of fun using it, and as always a productivity boost. Some of my preferred features are: External Sources, ASP.NET MVC integration, Solution-Wide Warnings and Suggestions, Upgrade-to-LINQ Actions. Till now I wasn’t able to test the Native NUnit Support, but this is definitely something I will test in the near future.&lt;/p&gt;  &lt;p&gt;Jetbrains just posted on their blog &lt;a href="http://blogs.jetbrains.com/dotnet/2009/10/resharper-50-overview/" target="_blank"&gt;ReSharper 5.0 Overview&lt;/a&gt;, check it out:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;As promised, we’re publishing general ReSharper 5.0 overview, elaborating on its feature set in more detail.&lt;/p&gt;    &lt;p&gt;Please keep in mind that this is a preliminary document. The general picture will stay unchanged but local amendments can not be ruled out at this point, and many user interface items will probably change.&lt;/p&gt;    &lt;h5&gt;Features&lt;/h5&gt;    &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;External Sources&lt;/strong&gt;        &lt;br /&gt;A solution is not limited to sources included in your projects, but it also contains sources that were used to build your libraries. Some companies publish parts of their sources using the Source Server feature of debug information files (&lt;em&gt;PDB&lt;/em&gt;). This is the same technology that Microsoft uses to provide access to source code for parts of .NET Framework. With ReSharper 5, you can now access it as if it were a part of your solution. When no sources are available, ReSharper does a decent job of reconstructing types’ structure from metadata for your browsing pleasure.        &lt;br /&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/external_sources_crop.png"&gt;&lt;img title="external_sources_crop" alt="" src="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/external_sources_crop-247x300.png" width="247" height="300" /&gt;&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Structured Patterns&lt;/strong&gt;        &lt;br /&gt;“I was assigned to new project, and the source code is full of [&lt;em&gt;your favorite code smell here&lt;/em&gt;]. Please, make ReSharper analyze and fix it!”. Fortunately, ReSharper 5 can address this demand. You can set up your own code patterns, search for them, replace them, include them into code analysis, and even use quick fixes to replace! Building patterns and enforcing good practices has never been easier. Corporate and team policies, your own frameworks, favorite open source libraries and tools — you can cover them all.        &lt;br /&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/structural_search.png"&gt;&lt;img title="structural_search" alt="" src="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/structural_search-300x239.png" width="300" height="239" /&gt;&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Project Refactorings and Dependencies View&lt;/strong&gt;        &lt;br /&gt;Once you are used to smart, automated refactorings provided by ReSharper, you can’t think of executing them manually anymore. In this release, we extend ReSharper’s coverage to bring you several refactorings for project structure. With ReSharper 5, you can move files and folders between projects, synchronize namespaces to folder structure in any scope as large as solution, safely delete obsolete subsystems without going type by type, and split a file with lots of types created from usages into their own dedicated files in one go. We have also added special project dependencies view to help you track down excessive dependencies between projects and eliminate them. As an early ReSharper 5 user said, “I no longer feel fear to restructure my project. I just go and do it when I feel it is right to do so”. &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Call Tracking&lt;/strong&gt;        &lt;br /&gt;Find usages, find usages, find usages. Formerly, attempting to track call sequences in code could end up with lost context, lots of &lt;em&gt;Find Results&lt;/em&gt; windows and frustration. With ReSharper 5, you can inspect an entire call sequence in a single window in a simple and straightforward manner. Stuck in unfamiliar code? ReSharper’s code inspecting tools for the rescue!        &lt;br /&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/calltracking.png"&gt;&lt;img title="calltracking" alt="" src="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/calltracking-300x177.png" width="300" height="177" /&gt;&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Value Tracking&lt;/strong&gt;        &lt;br /&gt;Value Tracking provides you with important information about data flow in your program. At any point in your source code, select a variable, parameter, field or property and ask ReSharper to inspect it. You will then see how its value flows through your program, back to its sources or straight to consumers. Wonder how null could be passed to a specific parameter? Track it!        &lt;br /&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/valuetracking.png"&gt;&lt;img title="valuetracking" alt="" src="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/valuetracking-300x205.png" width="300" height="205" /&gt;&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Internationalization&lt;/strong&gt;        &lt;br /&gt;Software localization and globalization has always been a tough and at times unwanted task for developers. ReSharper 5 greatly simplifies the process of working with resources by providing a full stack of features for &lt;em&gt;ResX&lt;/em&gt; files and resource usages in C# and VB.NET code, in ASP.NET and XAML markup. &lt;em&gt;Move string to resource&lt;/em&gt;, &lt;em&gt;Find usages of resource&lt;/em&gt; and other navigation features, refactoring support, inspections and fixes — all ReSharper goodness for your localization pleasure.&lt;/li&gt;   &lt;/ul&gt;    &lt;h5&gt;Technologies and Languages&lt;/h5&gt;    &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;Visual Studio 2010&lt;/strong&gt;        &lt;br /&gt;We will publish more information about Visual Studio 2010 support when VS Beta 2 is released. Currently, ReSharper 5 builds support Visual Studio 2005 and Visual Studio 2008. &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;C# 4 and VB10&lt;/strong&gt;        &lt;br /&gt;New language versions appear at a great speed nowadays, and ReSharper team works hard to support them right when you need them. ReSharper 5 provides beta support for C# 4 and VB10, as Visual Studio 2010 does itself. Variance, dynamic types, named arguments and optional parameters, embedded COM assemblies — all of these features are supported in the new ReSharper. During VS 2010 Beta 2 phase we’re hoping to learn from your experience using these features and improve their support for Visual Studio 2010 release. &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;ASP.NET&lt;/strong&gt;        &lt;br /&gt;With this new version, ReSharper support for ASP.NET is improved tenfold. In addition to performance and responsiveness improvements, lots of new features for ASP.NET markup files are introduced to make your life easier. Web-specific navigation, master page support, new inspections and syntax highlighting for web files, &lt;em&gt;File Structure&lt;/em&gt; and &lt;em&gt;Go to File Member&lt;/em&gt; for in-page navigation and overview, live templates for common markup and more!        &lt;br /&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/asp_generate1.png"&gt;&lt;img title="asp_generate1" alt="" src="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/asp_generate1-300x240.png" width="300" height="240" /&gt;&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;ASP.NET MVC&lt;/strong&gt;        &lt;br /&gt;ASP.NET MVC deserved our special attention: special syntax highlighting, inspections, navigation to and from action or controller, and even actions to create new types and methods from usage in pages.        &lt;br /&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/aspnetmvc.png"&gt;&lt;img title="aspnetmvc" alt="" src="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/aspnetmvc-300x135.png" width="300" height="135" /&gt;&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;h5&gt;Productivity&lt;/h5&gt;    &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;IntelliSense&lt;/strong&gt;        &lt;br /&gt;ReSharper continues to bring first-class IntelliSense experience, and the new version gives even more. We have added automatic completion for enum members and boolean values, made automatic triggering smarter, and greatly improved speed. Completion for unresolved symbols in local scope is a new ReSharper IntelliSense feature. Another improvement is completion for all-lower text with CamelHumps&amp;#160; — to make &lt;em&gt;cocopro&lt;/em&gt; match &lt;em&gt;CodeCompletionProvider&lt;/em&gt; — and that means you don’t need to press &lt;em&gt;Shift&lt;/em&gt; too often. &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Bookmarks&lt;/strong&gt;        &lt;br /&gt;This is a simple yet powerful feature: drop a numbered marker with a single shortcut, jump back at any time with another keyboard key. Up to 10 numbered bookmarks, unlimited unnumbered bookmarks, full list of bookmarked positions in a single pop-up window — all to help you switch between several code spots instantly.        &lt;br /&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/bookmarks.png"&gt;&lt;img title="bookmarks" alt="" src="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/bookmarks-300x154.png" width="300" height="154" /&gt;&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;h5&gt;Inspections&lt;/h5&gt;    &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;Solution-Wide Warnings and Suggestions&lt;/strong&gt;        &lt;br /&gt;We have received a lot of positive feedback from our users regarding solution-wide error analysis that allows you to immediately see compilation errors in whole solution. In ReSharper 5, we took this technology to a new level by adding warnings and suggestions to the list. Now you can browse code smells that ReSharper finds across your solution and quickly improve quality of your code. &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Upgrade-to-LINQ Actions&lt;/strong&gt;        &lt;br /&gt;With C# 3.0 and LINQ, developers are able to write data-intensive code more easily by directly describing their intent to the compiler. However, years of imperative programming left us with tons of &lt;em&gt;foreach&lt;/em&gt;-style code waiting to be upgraded. ReSharper 5 detects parts of your code that can be rewritten using the new LINQ syntax and suggests to make the conversion automatically, to make the developer’s intent crystal clear.        &lt;br /&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/foreach_new.png"&gt;&lt;img title="foreach_new" alt="" src="http://blogs.jetbrains.com/dotnet/wp-content/uploads/2009/10/foreach_new-300x232.png" width="300" height="232" /&gt;&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Use IEnumerable Where Possible&lt;/strong&gt;        &lt;br /&gt;With the power of LINQ, &lt;em&gt;IEnumerable&lt;/em&gt; is more than enough to pass a collection of values. So why restrict yourself with API requiring you to pass old-school arrays, &lt;em&gt;List&lt;/em&gt;s and &lt;em&gt;ArrayList&lt;/em&gt;s? ReSharper will scan your code base to detect methods that can safely return and accept &lt;em&gt;IEnumerable&lt;/em&gt; instead of a more specific type. Of course, we will also take care of the conversion. &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;New and Improved Code Inspections&lt;/strong&gt;        &lt;br /&gt;We have collected rich customer feedback and went through a list of common errors that developers make in code. Based on that, we have added a ton of highly intelligent inspections to immediately boost your .NET expertise. For example, if you take your API seriously and want it to be well documented, ReSharper will help you by highlighting errors in XML comments.&lt;/li&gt;   &lt;/ul&gt;    &lt;h5&gt;Other improvements&lt;/h5&gt;    &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;Native NUnit Support&lt;/strong&gt;        &lt;br /&gt;ReSharper 5 introduces a completely new approach to running your NUnit tests. Our engine is now based on native NUnit code. What it means to you is 100% compatibility with the latest released version of NUnit and full support of its recent unit testing features. &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;XML Formatting&lt;/strong&gt;        &lt;br /&gt;XML data is an important part of modern applications and you want it to be in order. The new version of ReSharper is supplied with superb configurable formatter for XML files.&lt;/li&gt;   &lt;/ul&gt;&lt;/blockquote&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7228071" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=nOJX7MewWGc:FxYXmAAtgQM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=nOJX7MewWGc:FxYXmAAtgQM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=nOJX7MewWGc:FxYXmAAtgQM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=nOJX7MewWGc:FxYXmAAtgQM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/nOJX7MewWGc" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/ReSharper/default.aspx">ReSharper</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/10/12/resharper-5-0-overview.aspx</feedburner:origLink></item><item><title>Unit Tests without leaving the keyboard</title><link>http://feedproxy.google.com/~r/lkempe/~3/pMf2q5PV858/unit-tests-without-leaving-the-keyboard.aspx</link><pubDate>Thu, 08 Oct 2009 07:24:54 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7225281</guid><dc:creator>lkempe</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7225281</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/10/08/unit-tests-without-leaving-the-keyboard.aspx#comments</comments><description>&lt;p&gt;I like the Roy Osherove blog: &lt;a href="http://5whys.com/"&gt;Five Whys&lt;/a&gt;, Leadership in software teams.&lt;/p&gt;  &lt;p&gt;Follow up on those two posts “&lt;a href="http://feedproxy.google.com/~r/5whys/~3/EJ_zJ9h3pn0/how-to-measure-programmer-productivity-using-tdd-katas.html" target="_blank"&gt;How to measure programmer productivity using TDD Katas&lt;/a&gt;” or “&lt;a href="http://feedproxy.google.com/~r/5whys/~3/3ugKivEOxAg/be-productive-and-go-mouseless.html" target="_blank"&gt;Be Productive and Go Mouseless&lt;/a&gt;”. I would like to share a little keyboard shortcut which save me quite some time on my daily developments.&lt;/p&gt;  &lt;p&gt;As you might know I am a fan of ReSharper and when I am doing Test Driven Development I hate having to switch from keyboard to mouse to run the test I just wrote. So searching for ReSharper Keyboard command I found &lt;strong&gt;Resharper_UnitTest_ContextRun&lt;/strong&gt; which I assign to the &lt;strong&gt;Ctrl+Shift+&amp;lt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://weblogs.asp.net/blogs/lkempe/3986142655_a489b88d41_o1_58609135.png" width="757" height="440" /&gt; &lt;/p&gt;  &lt;p&gt;Now I can run the unit test I just wrote with just a combination of keys which are really near to each other so really easy!&lt;/p&gt;  &lt;p&gt;The bonus of this command is that if I have the cursor in one unit test in a TestFixture class then it will run that particular test, but if I have the cursor out of any unit test method it will run all tests of that TextFixture. Very efficient!&lt;/p&gt;  &lt;p&gt;Enjoy it!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7225281" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=pMf2q5PV858:p9P8qXHgK_4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=pMf2q5PV858:p9P8qXHgK_4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=pMf2q5PV858:p9P8qXHgK_4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=pMf2q5PV858:p9P8qXHgK_4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/pMf2q5PV858" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/ReSharper/default.aspx">ReSharper</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/unit+test/default.aspx">unit test</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/TDD/default.aspx">TDD</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/10/08/unit-tests-without-leaving-the-keyboard.aspx</feedburner:origLink></item><item><title>Build your .NET project with a right click in Windows Explorer</title><link>http://feedproxy.google.com/~r/lkempe/~3/LNvcNOxsPuU/build-your-net-project-with-a-right-click-in-windows-explorer.aspx</link><pubDate>Fri, 11 Sep 2009 06:01:01 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7200345</guid><dc:creator>lkempe</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7200345</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/09/11/build-your-net-project-with-a-right-click-in-windows-explorer.aspx#comments</comments><description>&lt;a href="http://weblogs.asp.net/blogs/lkempe/3909092572_94125e9397_o1_6D052ACD.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="3909092572_94125e9397_o[1]" border="0" alt="3909092572_94125e9397_o[1]" align="right" src="http://weblogs.asp.net/blogs/lkempe/3909092572_94125e9397_o1_thumb_3D670C41.png" width="186" height="128" /&gt;&lt;/a&gt;   &lt;p&gt;This is a tool that I always install on my machine because it saves you from opening Visual Studio when you just want to compile a solution/project. You can just do it right from the Windows Explorer. Today I spent 10 minutes searching for it, as I couldn’t remember the name, I made a little ‘note to self’.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://msbuildshellex.codeplex.com/" target="_blank"&gt;MSBuildShellExtension&lt;/a&gt; lets you build .NET projects without ever opening Visual Studio or the command prompt. MSBuild targets can be executed from your favourite file system tool like Windows Explorer or Total Commander. The possibility to extend MSBuildShellExtension with your own targets and editors, makes it a very flexible and useful tool for all .NET developers.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7200345" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=LNvcNOxsPuU:9TljSwWjbkc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=LNvcNOxsPuU:9TljSwWjbkc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=LNvcNOxsPuU:9TljSwWjbkc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=LNvcNOxsPuU:9TljSwWjbkc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/LNvcNOxsPuU" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/lkempe/archive/tags/Note+to+self/default.aspx">Note to self</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/09/11/build-your-net-project-with-a-right-click-in-windows-explorer.aspx</feedburner:origLink></item><item><title>Devices and Printers empty on Windows 7</title><link>http://feedproxy.google.com/~r/lkempe/~3/bVPe48Uxke0/devices-and-printers-empty-on-windows-7.aspx</link><pubDate>Sun, 06 Sep 2009 12:16:31 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7194392</guid><dc:creator>lkempe</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/lkempe/rsscomments.aspx?PostID=7194392</wfw:commentRss><comments>http://weblogs.asp.net/lkempe/archive/2009/09/06/devices-and-printers-empty-on-windows-7.aspx#comments</comments><description>&lt;p&gt;For some days I had the following issue on my Windows 7 installation: clicking on the start orb then on Devices and Printers would open the window, show a progress bar and then nothing else, a completely empty folder.&lt;/p&gt;  &lt;p&gt;I tried a restore that didn’t solved the issue but it reminded me that I installed some days ago a Bluetooth software for a Bluetooth headset I received as a Microsoft MVP gift. This gave me the direction to search for.&lt;/p&gt;  &lt;p&gt;I ended up seeing in the Services that the “Bluetooth Support Service” was stopped and that it Statup type was set to disabled. Re-enabling it fixed my issue and now I have again the full list of Devices and Printers shown in the dialog.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7194392" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=bVPe48Uxke0:sCxYR-Z8ooA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=bVPe48Uxke0:sCxYR-Z8ooA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lkempe?a=bVPe48Uxke0:sCxYR-Z8ooA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lkempe?i=bVPe48Uxke0:sCxYR-Z8ooA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/lkempe/~4/bVPe48Uxke0" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/lkempe/archive/tags/Windows+7/default.aspx">Windows 7</category><feedburner:origLink>http://weblogs.asp.net/lkempe/archive/2009/09/06/devices-and-printers-empty-on-windows-7.aspx</feedburner:origLink></item></channel></rss>
