<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Visual Studio</title>
        <link>http://blogs.imeta.co.uk/HHariri/category/61.aspx</link>
        <description>Visual Studio</description>
        <language>en-GB</language>
        <copyright>Hadi Hariri </copyright>
        <generator>Subtext Version 2.1.1.1</generator>
        <item>
            <title>ReSharper's Hidden Gem</title>
            <link>http://blogs.imeta.co.uk/HHariri/archive/2009/06/26/resharpers-hidden-gem.aspx</link>
            <description>&lt;p&gt;During &lt;a href="http://www.ndc2009.no"&gt;NDC&lt;/a&gt;, Eugene, from &lt;a href="http://www.jetbrains.com"&gt;JetBrains&lt;/a&gt;, Technical Lead for ReSharper, showed me some of the cool things that are coming out in the next version, 5.0. But guess what? I'm not going to talk about those now :).&lt;/p&gt;
&lt;p&gt;What I am going to talk about is an interesting problem he said they were having and something many of us also experience: building solutions. &lt;/p&gt;
&lt;p&gt;Visual Studio takes some time to build solutions when something changes. The reasons for this are two-fold:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Sequential Builds&lt;/strong&gt;. When Visual Studio builds projects, it does them in a sequential order, even if these are completely independent. So let's say you have 20 projects, 15 of which are completely unrelated, Visual Studio will still build these sequentially.       &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;. When you have one project that references another, Visual Studio will always re-build the referencing project if referenced project has changed. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;And being ReSharper quite a large solution, it was taking them approximately five minutes to build, and they needed a fix for this. &lt;/p&gt;
&lt;p&gt;One of the not-so-well-known features of MSBuild is the possibility of building projects in parallel. This is a feature that ships with the MSBuild 3.5 Tool set. The following code shows a simple MSBuild project that takes advantage of this feature:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;xml&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;version&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="1.0"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;encoding&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="utf-8"&lt;/span&gt;?&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Project&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://schemas.microsoft.com/developer/msbuild/2003"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;ToolsVersion&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="3.5"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   4:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ProjectReference&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;Include&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="**\*.csproj"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   5:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   6:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Target&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;Name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="BuildProjectSet1"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   7:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;MSBuild&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;Projects&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="@(ProjectReference)"&lt;/span&gt; &lt;strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;BuildInParallel&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="true"&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   8:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Target&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   9:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Project&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Combining this with the maxcpucount command line argument, you can specify the number of parallel builds.&lt;/p&gt;
&lt;p&gt;Now this solves the first issue, of having independent projects build in parallel as opposed to sequentially, but what about the second problem? Every time you make a change in a project that is referenced in another project, Visual Studio will build the latter, even if none of the public interfaces have changed. Just so we make sure we're on the same page, let's go thru an example:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Building NHibernate using Visual Studio&lt;/h3&gt;
&lt;p&gt;If you've never built NHibernate before, the first time you need to run the NANT script for it to generate the missing AssemblyInfo.cs files, etc. Once you've done that, you can build it inside Visual Studio. &lt;/p&gt;
&lt;p&gt;We first do a BUILD ALL and notice how seven projects get built: &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Solution Window&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_4.png"&gt;&lt;img height="386" width="411" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_1.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Build Output&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_6.png"&gt;&lt;img height="146" width="672" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_2.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Now let's make a change to NHibernate.csproj, which is referenced by the majority of the other projects. We'll add a new public class to it:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_8.png"&gt;&lt;img height="394" width="538" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_3.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;If we now Build the entire solution, all projects that reference NHibernate will get re-built. This is expected behaviour since we've made a change to the public interface of the referenced assembly. However, what would happen if we just added a few lines of comments:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_12.png"&gt;&lt;img height="146" width="423" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_5.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Despite the public interface not changing, all assemblies that reference NHibernate will be re-built (You can verify this by looking at the timestamps of the assemblies). &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;Verifying what has changed on referenced assemblies&lt;/h3&gt;
&lt;p&gt;Thinking about it though, why would we want to have Visual Studio rebuild all referenced assemblies even if there hadn't been a public interface change? Wouldn't it be great if that wouldn't happen?  &lt;/p&gt;
&lt;p&gt;Here's where ReSharper comes into play. What the guys at JetBrains have done is use the assembly metadata to see if there has been a change in the public interface and ONLY if there has been, build! &lt;/p&gt;
&lt;p&gt;This has allowed them to reduce their build time drastically, in some instances dropping down to 30-40 seconds (obviously based on the changes). &lt;/p&gt;
&lt;p align="left"&gt;What they've done is create their own Solution Builder that examines if the metadata for a referenced assembly has changed. If and only if it has changed, then they build it. &lt;/p&gt;
&lt;p align="left"&gt;Here's some screenshots of it in action:&lt;/p&gt;
&lt;p align="left"&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;em&gt;Projects building concurrently when possible:&lt;/em&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_20.png"&gt;&lt;img height="136" width="352" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_9.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_22.png"&gt;&lt;img height="137" width="352" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_10.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_24.png"&gt;&lt;img height="138" width="354" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_11.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;em&gt;Build Results:&lt;/em&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_26.png"&gt;&lt;img height="194" width="387" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_12.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt; &lt;/p&gt;
&lt;p align="left"&gt;If we run the same changes steps against NHibernate as we've done above, using ReSharper's solution builder, we'll see that if there is no interface change on the referenced assemblies, those assemblies that use them don't get re-built. When in a large solution, this saves substantial amount of time as you can imagine. Combined with parallel builds of independent projects and we're on to a winner!&lt;/p&gt;
&lt;p align="left"&gt; &lt;/p&gt;
&lt;h3&gt;So when can I play with this?&lt;/h3&gt;
&lt;p&gt;The bad news is that as it stands right now, there is no guarantee that this feature will make it in 5.0. The good news is that you already have this feature in ReSharper :). However, before we go on, I have to put in a few words (I promised Eugene I would). &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="center"&gt;&lt;strong&gt;DISCLAIMER&lt;/strong&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;strong&gt;WHAT I'M ABOUT TO SHOW YOU IS NOT OFFICIALLY, UNOFFICIALLY OR EVEN REMOTELY SUPPORTED BY JETBRAINS. THEY WILL NOT BE RESPONSIBLE IF YOUR PROJECT GETS CORRUPTED, DELETED, BUILDS SOMEONE ELSE'S PROJECT REMOTELY OVER THE INTERNET OR EVEN BLOWS UP BY ENABLING THE FOLLOWING FEATURES OF RESHARPER. USE PURELY AT YOUR OWN RISK. YOU, YOURSELF, AND POSSIBLY YOUR MOTHER WILL BE RESPONSIBLE FOR ANYTHING THAT HAPPENS FROM NOW ON. YOU CAN'T HOLD ME RESPONSIBLE EITHER, IN CASE THAT IS NOT BLATANTLY OBVIOUS. OH, BTW, THIS MIGHT NOT ALWAYS WORK.&lt;/strong&gt;&lt;/p&gt;
&lt;p align="center"&gt;&lt;strong /&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="left"&gt;To enable these features, close down Visual Studio and then start it up with the following command line option: &lt;strong&gt;/ReSharper.Internal&lt;/strong&gt;. If all goes well, you'll have some new options enabled in the ReSharper menu (see image below). If you've got something named wrong, you'll get an error. Shut down and try again. &lt;/p&gt;
&lt;p align="left"&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_2.png"&gt;&lt;img height="400" width="451" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt; &lt;/p&gt;
&lt;p align="left"&gt;Obviously, apart from the Solution Builder, you'll see a whole slew of new features pop up under the ReSharper menu. I've not played with a lot of them yet, but plan to when I get a chance.  &lt;/p&gt;
&lt;p align="left"&gt; &lt;/p&gt;
&lt;h3&gt;Building using the Solution Builder&lt;/h3&gt;
&lt;p&gt;When you first open a project after launching Visual Studio with these features enabled, and try and Build, you'll get a screen asking you if you want to use Visual Studio solution builder or ReSharper's Solution Builder. You need to click MSBuild for the latter:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_14.png"&gt;&lt;img height="158" width="315" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_6.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;You can also enable this via the ReSharper options:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Choose Internals under Options:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_16.png"&gt;&lt;img height="157" width="289" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_7.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Set options as below:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_18.png"&gt;&lt;img height="308" width="442" border="0" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ReSharpersHiddenGem_8BF3/image_thumb_8.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;This works for Jetbrains and it works for me, but you use it at your own risk. It might not give you the desired results, but then again, that's why it's not released.&lt;/p&gt;
&lt;p&gt;Have fun! &lt;/p&gt;&lt;img src="http://blogs.imeta.co.uk/HHariri/aggbug/715.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Hadi Hariri </dc:creator>
            <guid>http://blogs.imeta.co.uk/HHariri/archive/2009/06/26/resharpers-hidden-gem.aspx</guid>
            <pubDate>Fri, 26 Jun 2009 10:58:33 GMT</pubDate>
            <comments>http://blogs.imeta.co.uk/HHariri/archive/2009/06/26/resharpers-hidden-gem.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/HHariri/comments/commentRss/715.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/HHariri/services/trackbacks/715.aspx</trackback:ping>
        </item>
        <item>
            <title>Oops, I forgot I was in a WPF app when I did that second ComboBox</title>
            <link>http://blogs.imeta.co.uk/HHariri/archive/2009/01/20/oops-i-forgot-i-was-in-a-wpf-when-i.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/OopsIforgotIwasinaWPFwhenIdidthatsecondC_D45D/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="145" alt="image" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/OopsIforgotIwasinaWPFwhenIdidthatsecondC_D45D/image_thumb.png" width="775" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;A style missing perhaps? I mean honestly! &lt;/p&gt;&lt;img src="http://blogs.imeta.co.uk/HHariri/aggbug/577.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Hadi Hariri </dc:creator>
            <guid>http://blogs.imeta.co.uk/HHariri/archive/2009/01/20/oops-i-forgot-i-was-in-a-wpf-when-i.aspx</guid>
            <pubDate>Tue, 20 Jan 2009 14:05:00 GMT</pubDate>
            <comments>http://blogs.imeta.co.uk/HHariri/archive/2009/01/20/oops-i-forgot-i-was-in-a-wpf-when-i.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/HHariri/comments/commentRss/577.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/HHariri/services/trackbacks/577.aspx</trackback:ping>
        </item>
        <item>
            <title>and there's no opting out...</title>
            <link>http://blogs.imeta.co.uk/HHariri/archive/2008/12/01/and-theres-no-opting-out.aspx</link>
            <description>&lt;p&gt;Just noticed this under one of the Build failure notification e-mails received from the TFS daemon:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt; &lt;/p&gt;    &lt;p&gt;- You are receiving this notification because of a subscription created by xxxx\Hadi Hariri Provided by Microsoft Visual Studio® Team System 2008 &amp;lt;&lt;a href="http://msdn.microsoft.com/vstudio/teamsystem/"&gt;http://msdn.microsoft.com/vstudio/teamsystem/&lt;/a&gt;&amp;gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Notice there's no "If you do not wish to receive future notifications please....."&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Nope, you're screwed. Your best bet is to not break the build...or break me! &lt;/p&gt;&lt;img src="http://blogs.imeta.co.uk/HHariri/aggbug/526.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Hadi Hariri </dc:creator>
            <guid>http://blogs.imeta.co.uk/HHariri/archive/2008/12/01/and-theres-no-opting-out.aspx</guid>
            <pubDate>Mon, 01 Dec 2008 12:58:01 GMT</pubDate>
            <comments>http://blogs.imeta.co.uk/HHariri/archive/2008/12/01/and-theres-no-opting-out.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/HHariri/comments/commentRss/526.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/HHariri/services/trackbacks/526.aspx</trackback:ping>
        </item>
        <item>
            <title>Identify code smells with tags</title>
            <link>http://blogs.imeta.co.uk/HHariri/archive/2008/11/29/identify-code-smells-with-tags.aspx</link>
            <description>&lt;p&gt;Visual Studio comes with TODO markers where you can mark sections of code with little comments to indicate that you need to do something. However, TODO sometimes becomes too generic. You start to mark tasks, features, futures, (bugs have their own by default) with the same tag. Fortunately you can add custom ones. If you have Re-sharper installed, you get additional benefits since it allows you to create filters, identify the tags inside comments and highlight them on the right margin. &lt;/p&gt;  &lt;p&gt;One tag to add is SMELL. A code smell is a piece of code that works yet it just isn't right, and you know that the longer it's left in there, there worse it can get. It can lead to an unsustainable situation where the whole project can start to smell like a dump site. Other times it's just a small section that is isolated and won't have immediate side-effects, but would be good to get it cleaned up. &lt;/p&gt;  &lt;p&gt;Now, I know the purists would probably scream and say that any smell should be eradicated then and there. Snap back to reality. Both you and I know that that's not always viable. Having said that, If it's a bad smell that can lead down a spiral of stink, then yes, it should be, taking into account schedules, etc.. but even in that case, you're not going to do it all at once, so you still need to identify the smells as you go cleaning them up. &lt;/p&gt;  &lt;p&gt;Here's some screen shots of smells with Resharper&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/Identifycodesmells_8C93/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="114" alt="image" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/Identifycodesmells_8C93/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To define them, use Resharper's To-Do item entry&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/Identifycodesmells_8C93/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="133" alt="image" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/Identifycodesmells_8C93/image_thumb_2.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can also see on the To-Do Explorer&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/Identifycodesmells_8C93/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/Identifycodesmells_8C93/image_thumb_3.png" width="216" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.imeta.co.uk/HHariri/aggbug/525.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Hadi Hariri </dc:creator>
            <guid>http://blogs.imeta.co.uk/HHariri/archive/2008/11/29/identify-code-smells-with-tags.aspx</guid>
            <pubDate>Sat, 29 Nov 2008 09:29:25 GMT</pubDate>
            <comments>http://blogs.imeta.co.uk/HHariri/archive/2008/11/29/identify-code-smells-with-tags.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/HHariri/comments/commentRss/525.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/HHariri/services/trackbacks/525.aspx</trackback:ping>
        </item>
        <item>
            <title>Design Principles event next month in Belgium</title>
            <link>http://blogs.imeta.co.uk/HHariri/archive/2008/11/18/design-principles-event-next-month-in-belgium.aspx</link>
            <description>&lt;p&gt;I'll be doing a &lt;a href="http://www.visug.be/Default.aspx"&gt;talk in Belgium next month at the Visual Studio User Group&lt;/a&gt;, where I'll be covering topics such as Separation of Concerns, Single Responsibility, Interface Segregation, Dependency Injection and Inversion of Control, along with examples of IoC containers. There's limited space (90) and already 55 signed up, so if you're in or around the neighbourhood, got nothing better to do than here my brag, come along. I think they are organizing a geek dinner afterwards so it should be fun. Although the talk will be in C#, the important things to grasp are the concepts, not the language, be it Visual Basic, Delphi or whatever else (obviously it needs to be a OO language).&lt;/p&gt;&lt;img src="http://blogs.imeta.co.uk/HHariri/aggbug/511.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Hadi Hariri </dc:creator>
            <guid>http://blogs.imeta.co.uk/HHariri/archive/2008/11/18/design-principles-event-next-month-in-belgium.aspx</guid>
            <pubDate>Tue, 18 Nov 2008 10:36:38 GMT</pubDate>
            <comments>http://blogs.imeta.co.uk/HHariri/archive/2008/11/18/design-principles-event-next-month-in-belgium.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/HHariri/comments/commentRss/511.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/HHariri/services/trackbacks/511.aspx</trackback:ping>
        </item>
        <item>
            <title>ALM Session, Workshop and Planning Poker</title>
            <link>http://blogs.imeta.co.uk/HHariri/archive/2008/10/20/alm-session-workshop-and-planning-poker.aspx</link>
            <description>&lt;p&gt;Last week I did a session at Microsoft's first ALM Event in Spain (Microsoft ALM' 08). Was a very good event. As sponsors, &lt;a href="http://www.imeta.com"&gt;iMeta&lt;/a&gt; also had a booth there were we were giving out among other things, Planning Poker cards. And they went like hot cakes! &lt;/p&gt;  &lt;p&gt;I'm following up the presentation (Continuous Integration with VSTS) with a workshop to be held in Madrid on the 6th of November (in Spanish). The agenda will include not only how to set up CI with VSTS but more about the whole CI process including unit testing, integration tests, build automation, etc. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://hadihariri.com/Downloads/ContinuousIntegrationVSTS.pdf"&gt;Download my session from here&lt;/a&gt; (they've recorded the session. Once I have the link I'll post it)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Workshop @ Microsoft Offices - Madrid, 6th November 2008&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Introducción    &lt;br /&gt;Pruebas unitarias y suplantación de dependencias     &lt;br /&gt;Pruebas de integración     &lt;br /&gt;Integración continua como proceso     &lt;br /&gt;Automatización de procesos con MSBuild     &lt;br /&gt;Integración continua con TFS 2008     &lt;br /&gt;Extensibilidad de TFS 20083&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032390145&amp;amp;culture=es-ES"&gt;Register here&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ALMSessionWorkshopandPlanningPoker_12D63/image_4.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/HHariri/WindowsLiveWriter/ALMSessionWorkshopandPlanningPoker_12D63/image_thumb_1.png" width="462" height="111" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;P.S.: Due to the high demand, we are considering shipping Planning Poker cards at cost price to anyone interested. The process is not set up yet but we're hoping to have something in place pretty soon. If you're interested, send me an email and I'll make sure you're put on the list. &lt;/p&gt;&lt;img src="http://blogs.imeta.co.uk/HHariri/aggbug/457.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Hadi Hariri </dc:creator>
            <guid>http://blogs.imeta.co.uk/HHariri/archive/2008/10/20/alm-session-workshop-and-planning-poker.aspx</guid>
            <pubDate>Mon, 20 Oct 2008 20:23:50 GMT</pubDate>
            <comments>http://blogs.imeta.co.uk/HHariri/archive/2008/10/20/alm-session-workshop-and-planning-poker.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/HHariri/comments/commentRss/457.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/HHariri/services/trackbacks/457.aspx</trackback:ping>
        </item>
        <item>
            <title>More on what's coming in .NET 4.0</title>
            <link>http://blogs.imeta.co.uk/HHariri/archive/2008/10/01/more-on-whats-coming-in-.net-4.0.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt;  &lt;p&gt;On &lt;a href="http://blogs.msdn.com/stevemar/archive/2008/10/01/the-road-to-pdc-net-framework-4-0-and-dublin.aspx"&gt;Steve Martin's blog&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.imeta.co.uk/HHariri/aggbug/413.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Hadi Hariri </dc:creator>
            <guid>http://blogs.imeta.co.uk/HHariri/archive/2008/10/01/more-on-whats-coming-in-.net-4.0.aspx</guid>
            <pubDate>Wed, 01 Oct 2008 16:46:28 GMT</pubDate>
            <comments>http://blogs.imeta.co.uk/HHariri/archive/2008/10/01/more-on-whats-coming-in-.net-4.0.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/HHariri/comments/commentRss/413.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/HHariri/services/trackbacks/413.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Studio will ship with jQuery</title>
            <link>http://blogs.imeta.co.uk/HHariri/archive/2008/09/28/visual-studio-will-ship-with-jquery.aspx</link>
            <description>&lt;p&gt;This is &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx"&gt;awesome news&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.imeta.co.uk/HHariri/aggbug/402.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Hadi Hariri </dc:creator>
            <guid>http://blogs.imeta.co.uk/HHariri/archive/2008/09/28/visual-studio-will-ship-with-jquery.aspx</guid>
            <pubDate>Sun, 28 Sep 2008 19:52:32 GMT</pubDate>
            <comments>http://blogs.imeta.co.uk/HHariri/archive/2008/09/28/visual-studio-will-ship-with-jquery.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/HHariri/comments/commentRss/402.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/HHariri/services/trackbacks/402.aspx</trackback:ping>
        </item>
        <item>
            <title>Build Notification Tool, Visual Studio 2008 Fails</title>
            <link>http://blogs.imeta.co.uk/HHariri/archive/2008/09/19/build-notification-tool-visual-studio-2008-fails.aspx</link>
            <description>&lt;p&gt;The Build Notification Tool for Visual Studio 2008 &lt;a href="http://connect.microsoft.com/VisualStudio/feedback/ViewFeedBack.aspx?FeedBackID=357244"&gt;stops working&lt;/a&gt; if you install Visual Studio SP1. It sort of explains why it was working for everyone else except me, until they decided to update to SP1 also. &lt;/p&gt;&lt;img src="http://blogs.imeta.co.uk/HHariri/aggbug/381.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Hadi Hariri </dc:creator>
            <guid>http://blogs.imeta.co.uk/HHariri/archive/2008/09/19/build-notification-tool-visual-studio-2008-fails.aspx</guid>
            <pubDate>Fri, 19 Sep 2008 05:17:23 GMT</pubDate>
            <comments>http://blogs.imeta.co.uk/HHariri/archive/2008/09/19/build-notification-tool-visual-studio-2008-fails.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/HHariri/comments/commentRss/381.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/HHariri/services/trackbacks/381.aspx</trackback:ping>
        </item>
    </channel>
</rss>