<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>Kodefu</title>
        <link>http://geekswithblogs.net/Shadowin/category/6475.aspx</link>
        <description>Hone your software combat skills with kodefu.</description>
        <language>en-US</language>
        <copyright>Chris Eargle</copyright>
        <managingEditor>shadowin@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>ref on Reference Type?!</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/06/12/ref-on-reference-type.aspx</link>
            <description>&lt;p&gt;I recently came across a piece of code that had almost every parameter for every method marked with the &lt;a href="http://msdn.microsoft.com/en-us/library/14akc2c7.aspx"&gt;ref&lt;/a&gt; keyword. This keyword is primarily used to pass a value type by reference, but this one even had reference types marked with the keyword. This made me wonder, why exactly would you ever want to pass a reference type as a ref parameter?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kodefuguru.com/post/2009/06/12/ref-on-Reference-Type!.aspx"&gt;Read More&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132780"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132780" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/132780.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/06/12/ref-on-reference-type.aspx</guid>
            <pubDate>Fri, 12 Jun 2009 21:30:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/132780.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/06/12/ref-on-reference-type.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/132780.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/132780.aspx</trackback:ping>
        </item>
        <item>
            <title>Refactor to Array Initializer</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/06/10/refactor-to-array-initializer.aspx</link>
            <description>&lt;p&gt;Taking advantage of language features can make sleeker, easier to maintain code. One of these language features are &lt;a href="http://msdn.microsoft.com/en-us/library/aa664573(VS.71).aspx"&gt;array initializers&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Have you ever created an array, then assigned each element in the array? This incurs many lines of code with no tangible benefit. Check out this code from the NameMangler class in &lt;a href="http://linqtoxsd.codeplex.com/"&gt;LINQ to XSD&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kodefuguru.com/post/2009/06/10/Refactor-to-Array-Initializer.aspx"&gt;&lt;strong&gt;Read More&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132736"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132736" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/132736.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/06/10/refactor-to-array-initializer.aspx</guid>
            <pubDate>Wed, 10 Jun 2009 17:39:39 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/132736.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/06/10/refactor-to-array-initializer.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/132736.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/132736.aspx</trackback:ping>
        </item>
        <item>
            <title>Structs Structs Structs</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/06/08/structs-structs-structs.aspx</link>
            <description>&lt;p&gt;It appears that my blog post on Friday wasn't saved. This is kind of bizarre. You can catch back up on it at my website.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kodefuguru.com/post/2009/06/05/Stop-Using-Structs-Everywhere.aspx"&gt;Stop Using Structs Everywhere&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And I posted a follow-up today:&lt;/p&gt;
&lt;p&gt;&lt;a class="taggedlink" href="/post/2009/06/08/More-On-Structs.aspx"&gt;More On Structs&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132690"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132690" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/132690.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/06/08/structs-structs-structs.aspx</guid>
            <pubDate>Mon, 08 Jun 2009 18:31:35 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/132690.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/06/08/structs-structs-structs.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/132690.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/132690.aspx</trackback:ping>
        </item>
        <item>
            <title>DynamicAttribute</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/06/04/dynamicattribute.aspx</link>
            <description>&lt;p&gt;We've all been told to think of a dynamic object as a regular object but with dynamic behavior. Kevin Hazzard &lt;a href="http://www.gotnet.biz/Blog/post/CSharp-Dynamic-Type-is-NOT-Just-an-Object.aspx"&gt;peeked behind the curtain&lt;/a&gt; to show that the compiler is actually doing a lot with that keyword; it isn't just an object. It does change the type to an object, but then it builds CallSites everywhere that object is referenced. These CallSites handle the calls to the dynamic language runtime. &lt;/p&gt;
&lt;p&gt;That's great, but we have an object. How does a consumer of your class library know that a property you marked as dynamic is dynamic when it is compiled to an object? To figure this out, I compiled a simple class then reflected it. &lt;/p&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;TestDynamic&lt;br /&gt;
&lt;/span&gt;&lt;span style="COLOR: black"&gt;    {&lt;br /&gt;
        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public dynamic &lt;/span&gt;&lt;span style="COLOR: black"&gt;Foo { &lt;/span&gt;&lt;span style="COLOR: blue"&gt;get&lt;/span&gt;&lt;span style="COLOR: black"&gt;; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;set&lt;/span&gt;&lt;span style="COLOR: black"&gt;; }&lt;br /&gt;
&lt;br /&gt;
        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;&lt;span style="COLOR: black"&gt; Bar()&lt;br /&gt;
        {&lt;br /&gt;
            &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;&lt;span style="COLOR: black"&gt;.WriteLine(Foo);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;/span&gt; &lt;/div&gt;
&lt;p&gt;I refactored the reflected class to make it easier to read. &lt;/p&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;TestManual&lt;br /&gt;
&lt;/span&gt;&lt;span style="COLOR: black"&gt;    {&lt;br /&gt;
        [&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Dynamic&lt;/span&gt;&lt;span style="COLOR: black"&gt;]&lt;br /&gt;
        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;object&lt;/span&gt;&lt;span style="COLOR: black"&gt; k__BackingField;&lt;br /&gt;
&lt;br /&gt;
        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;&lt;span style="COLOR: black"&gt; Bar()&lt;br /&gt;
        {&lt;br /&gt;
            &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;span style="COLOR: black"&gt; (&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;SiteContainer&lt;/span&gt;&lt;span style="COLOR: black"&gt;.Site1 == &lt;/span&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;span style="COLOR: black"&gt;)&lt;br /&gt;
            {&lt;br /&gt;
                &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;SiteContainer&lt;/span&gt;&lt;span style="COLOR: black"&gt;.Site1 = &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CallSite&lt;/span&gt;&lt;span style="COLOR: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt;&lt;span style="COLOR: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CallSite&lt;/span&gt;&lt;span style="COLOR: black"&gt;, &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Type&lt;/span&gt;&lt;span style="COLOR: black"&gt;, &lt;/span&gt;&lt;span style="COLOR: blue"&gt;object&lt;/span&gt;&lt;span style="COLOR: black"&gt;&amp;gt;&amp;gt;.Create(&lt;/span&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CSharpInvokeMemberBinder&lt;/span&gt;&lt;span style="COLOR: black"&gt;(&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CSharpCallFlags&lt;/span&gt;&lt;span style="COLOR: black"&gt;.None, &lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;"WriteLine"&lt;/span&gt;&lt;span style="COLOR: black"&gt;, &lt;/span&gt;&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;&lt;span style="COLOR: black"&gt;(&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;TestDynamic&lt;/span&gt;&lt;span style="COLOR: black"&gt;), &lt;/span&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;span style="COLOR: black"&gt;, &lt;/span&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CSharpArgumentInfo&lt;/span&gt;&lt;span style="COLOR: black"&gt;[] { &lt;/span&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CSharpArgumentInfo&lt;/span&gt;&lt;span style="COLOR: black"&gt;(&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CSharpArgumentInfoFlags&lt;/span&gt;&lt;span style="COLOR: black"&gt;.IsStaticType | &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CSharpArgumentInfoFlags&lt;/span&gt;&lt;span style="COLOR: black"&gt;.UseCompileTimeType, &lt;/span&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;span style="COLOR: black"&gt;), &lt;/span&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CSharpArgumentInfo&lt;/span&gt;&lt;span style="COLOR: black"&gt;(&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CSharpArgumentInfoFlags&lt;/span&gt;&lt;span style="COLOR: black"&gt;.None, &lt;/span&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;span style="COLOR: black"&gt;) }));&lt;br /&gt;
            }&lt;br /&gt;
            &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;SiteContainer&lt;/span&gt;&lt;span style="COLOR: black"&gt;.Site1.Target(&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;SiteContainer&lt;/span&gt;&lt;span style="COLOR: black"&gt;.Site1, &lt;/span&gt;&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;&lt;span style="COLOR: black"&gt;(&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;&lt;span style="COLOR: black"&gt;), &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;&lt;span style="COLOR: black"&gt;.Foo);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        [&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Dynamic&lt;/span&gt;&lt;span style="COLOR: black"&gt;]&lt;br /&gt;
        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;object&lt;/span&gt;&lt;span style="COLOR: black"&gt; Foo { [&lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&lt;span style="COLOR: black"&gt;: &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Dynamic&lt;/span&gt;&lt;span style="COLOR: black"&gt;] &lt;/span&gt;&lt;span style="COLOR: blue"&gt;get&lt;/span&gt;&lt;span style="COLOR: black"&gt;; [&lt;/span&gt;&lt;span style="COLOR: blue"&gt;param&lt;/span&gt;&lt;span style="COLOR: black"&gt;: &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Dynamic&lt;/span&gt;&lt;span style="COLOR: black"&gt;] &lt;/span&gt;&lt;span style="COLOR: blue"&gt;set&lt;/span&gt;&lt;span style="COLOR: black"&gt;; }&lt;br /&gt;
&lt;br /&gt;
        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;SiteContainer&lt;br /&gt;
&lt;/span&gt;&lt;span style="COLOR: black"&gt;        {&lt;br /&gt;
            &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CallSite&lt;/span&gt;&lt;span style="COLOR: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Action&lt;/span&gt;&lt;span style="COLOR: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;CallSite&lt;/span&gt;&lt;span style="COLOR: black"&gt;, &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Type&lt;/span&gt;&lt;span style="COLOR: black"&gt;, &lt;/span&gt;&lt;span style="COLOR: blue"&gt;object&lt;/span&gt;&lt;span style="COLOR: black"&gt;&amp;gt;&amp;gt; Site1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;/span&gt; &lt;/div&gt;
&lt;p&gt;The magic is all in the new DynamicAttribute class. This attribute is unnecessary for the assembly you compiled, but it is important for anyone referencing that assembly. The compiler will use that attribute to know that it has to treat the property, field, or method as though the dynamic keyword were used. &lt;/p&gt;
&lt;p&gt;When I saw that, I imagined the possibilities. What if I make a class have static behavior in my assembly but dynamic behavior in a calling assembly? I set out to make this happen, but then I ran into a big roadblock:  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Do not use 'System.Runtime.CompilerServices.DynamicAttribute'. Use the 'dynamic' keyword instead. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's unfortunate, and I couldn't find a way around it. I see nothing being reflected back from the DynamicAttribute class, so the error must be baked into the compiler. &lt;/p&gt;
&lt;p&gt;So, it appears that you can't use this class yourself. However, it is useful to know when reflecting a class that you can check for that attribute if you need to know if it is a dynamic type. Though, I do suspect an IsDynamic property will appear on the Type class sooner or later. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132630"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132630" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/132630.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/06/04/dynamicattribute.aspx</guid>
            <pubDate>Thu, 04 Jun 2009 22:18:44 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/132630.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/06/04/dynamicattribute.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/132630.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/132630.aspx</trackback:ping>
        </item>
        <item>
            <title>PDF From Web in AxAcroPDF</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/06/03/pdf-from-web-in-axacropdf.aspx</link>
            <description>&lt;p&gt;If you've ever needed to host a PDF in a windows form application, the easiest way to do so is by using the ActiveX control provided by Adobe Acrobat. Accessing it is easy: Right click the toolbox, select Choose Items, select COM Components, then check Adobe PDF Reader. &lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://www.kodefuguru.com/image.axd?picture=2009%2f6%2fChooseToolboxItems.png" /&gt; &lt;/p&gt;
&lt;p&gt;The Adobe PDF Reader control now shows up in your toolbox under the General tab. You can move this to a different tab by dragging and dropping. &lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://www.kodefuguru.com/image.axd?picture=2009%2f6%2fAdobePDFReader.png" /&gt; &lt;/p&gt;
&lt;p&gt;If you drag this to your Windows Form, it now acts like a regular control. Its default name is axAcroPDF1. &lt;/p&gt;
&lt;p&gt;The typical way to display a pdf in the control is by using the LoadFile method. Unfortunately this method does not work for loading from a url. Instead, there is property to set for that: src. &lt;/p&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;axAcroPDF1.src = url; &lt;/div&gt;
&lt;p&gt;However, you may have another reason for storing the pdf on the disk before displaying it. Here's the code that will help you in that situation. Note that WebClient is located in the System.Net namespace. &lt;/p&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;span style="COLOR: black"&gt; fileName = &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Path&lt;/span&gt;&lt;span style="COLOR: black"&gt;.GetTempFileName();&lt;br /&gt;
&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;WebClient&lt;/span&gt;&lt;span style="COLOR: black"&gt; client = &lt;/span&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;WebClient&lt;/span&gt;&lt;span style="COLOR: black"&gt;();&lt;br /&gt;
client.DownloadFile(url, fileName);&lt;br /&gt;
axAcroPDF1.LoadFile(fileName);&lt;/span&gt; &lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132599"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132599" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/132599.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/06/03/pdf-from-web-in-axacropdf.aspx</guid>
            <pubDate>Wed, 03 Jun 2009 22:52:28 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/132599.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/06/03/pdf-from-web-in-axacropdf.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/132599.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/132599.aspx</trackback:ping>
        </item>
        <item>
            <title>Edit Object in Properties Pane</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/06/01/edit-object-in-properties-pane.aspx</link>
            <description>&lt;p&gt;When creating a designer for Visual Studio, you may want to allow editing in the properties pane. This took me a while to figure out how to do, because the terminology wasn't quite what I expected it to be. Here's how I accomplished this task. &lt;/p&gt;
&lt;p&gt;The window pane that hosts the designer implements &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivswindowpane.aspx"&gt;IVsWindowPane&lt;/a&gt;. This interface contains a method called &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivswindowpane.setsite.aspx"&gt;SetSite&lt;/a&gt;, which will provide a pointer to an object that implements &lt;a href="http://msdn.microsoft.com/en-us/library/system.iserviceprovider.aspx"&gt;IServiceProvider&lt;/a&gt;. I instantiate a &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.serviceprovider.aspx"&gt;ServiceProvider&lt;/a&gt; and assign this to a ServiceProvider property on the editor. &lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;int&lt;/span&gt;&lt;span style="COLOR: black"&gt; SetSite(&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;IOleServiceProvider&lt;/span&gt;&lt;span style="COLOR: black"&gt; psp)&lt;br /&gt;
{&lt;br /&gt;
    decisionTableEditor.ServiceProvider = &lt;/span&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;ServiceProvider&lt;/span&gt;&lt;span style="COLOR: black"&gt;(psp);&lt;br /&gt;
    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;VSConstants&lt;/span&gt;&lt;span style="COLOR: black"&gt;.S_OK;&lt;br /&gt;
}&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;Inside the code for DecisionTableEditor, I have a private method called ShowProperties. This method will take a &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.selectioncontainer.aspx"&gt;SelectionContainer&lt;/a&gt; that it will pass to the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.strackselection.aspx"&gt;TrackSelection&lt;/a&gt; service. The service is obtained using the ServiceProvider's GetService method. The container is passed into the TrackSelection's &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.itrackselection.onselectchange.aspx"&gt;OnSelectChange&lt;/a&gt; method. It is important to note that you can't change this to pass in the array of objects (either as an array or as params) and assign it to the selection containers &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.selectioncontainer.selectedobjects.aspx"&gt;SelectedObjects&lt;/a&gt; because it interrogates the the type of array in deciding what properties to show in the panel (which will be none for object). &lt;/p&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;&lt;span style="COLOR: black"&gt; ShowProperties(&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;SelectionContainer&lt;/span&gt;&lt;span style="COLOR: black"&gt; container)&lt;br /&gt;
{&lt;br /&gt;
    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;var&lt;/span&gt;&lt;span style="COLOR: black"&gt; track = ServiceProvider.GetService(&lt;/span&gt;&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;&lt;span style="COLOR: black"&gt;(&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;STrackSelection&lt;/span&gt;&lt;span style="COLOR: black"&gt;)) &lt;/span&gt;&lt;span style="COLOR: blue"&gt;as&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;ITrackSelection&lt;/span&gt;&lt;span style="COLOR: black"&gt;;&lt;br /&gt;
    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;span style="COLOR: black"&gt; (track != &lt;/span&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;span style="COLOR: black"&gt;)&lt;br /&gt;
    {&lt;br /&gt;
        track.OnSelectChange(container);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/span&gt; &lt;/div&gt;
&lt;p&gt;When you want to call ShowProperties, you create a SelectionContainer and set its SelectedObjects property to an array of the object you wish to show. If the properties window needs to be cleared, passing in null for the container will do the trick. &lt;/p&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;&lt;span style="COLOR: #2b91af"&gt;SelectionContainer&lt;/span&gt;&lt;span style="COLOR: black"&gt; selectionContainer = &lt;/span&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;span style="COLOR: black"&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;span style="COLOR: black"&gt; (ColumnIndex &amp;gt;= 0)&lt;br /&gt;
{&lt;br /&gt;
    selectionContainer = &lt;/span&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;SelectionContainer&lt;/span&gt;&lt;span style="COLOR: black"&gt;();&lt;br /&gt;
&lt;br /&gt;
    selectionContainer.SelectedObjects = &lt;/span&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;span style="COLOR: black"&gt;[] { DecisionTable.Columns[ColumnIndex] };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ShowProperties(selectionContainer);&lt;/span&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The next step is deciding what to show. By default, public properties will show up. If they're read-only, they will be read-only in the Properties pane. In the class definition for the objects you wish to show in the Properties pane, you can assign attributes to be more descriptive. These attributes are located in the System.ComponentModel namespace. The most important is probably the &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.browsableattribute.aspx"&gt;BrowsableAttribute&lt;/a&gt;, as it allows you to hide properties from the Properties pane. &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.descriptionattribute.aspx"&gt;DescriptionAttribute&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.categoryattribute.aspx"&gt;CategoryAttribute&lt;/a&gt; are useful as well, but you will need to deep dive System.ComponentModel if you want to get the full power of the Properties pane. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132547"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132547" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/132547.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/06/01/edit-object-in-properties-pane.aspx</guid>
            <pubDate>Tue, 02 Jun 2009 00:05:40 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/132547.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/06/01/edit-object-in-properties-pane.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/132547.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/132547.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Studio 2010 Beta 1 Available Today</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/05/18/visual-studio-2010-beta-1-available-today.aspx</link>
            <description>&lt;p&gt;Mike Ormond has &lt;a href="http://blogs.msdn.com/mikeormond/archive/2009/05/18/visual-studio-2010-beta-1-available-today-to-msdn-subscribers.aspx"&gt;announced&lt;/a&gt; that Visual Studio Beta 1 (including .NET Fx 4.0)  will be available to &lt;a href="http://msdn.microsoft.com/en-gb/subscriptions/"&gt;MSDN subscribers&lt;/a&gt; later today. &lt;/p&gt;
&lt;p&gt;He also posted a few &lt;a href="http://blogs.msdn.com/mikeormond/archive/2009/05/18/a-few-vs2010-beta-1-screenshots.aspx"&gt;screenshots&lt;/a&gt;. I admit that I'm somewhat saddened by the removal of the &lt;a href="http://blogs.msdn.com/jasonz/archive/2009/05/12/vs2010-on-triangles-and-performance.aspx"&gt;triangles&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132198"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132198" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/132198.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/05/18/visual-studio-2010-beta-1-available-today.aspx</guid>
            <pubDate>Mon, 18 May 2009 14:35:28 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/132198.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/05/18/visual-studio-2010-beta-1-available-today.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/132198.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/132198.aspx</trackback:ping>
        </item>
        <item>
            <title>GacUtil, MPF, and CSProj</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/04/30/gacutil-mpf-and-csproj.aspx</link>
            <description>&lt;p&gt;Yesterday, I &lt;a href="/post/2009/04/29/GacUtil-from-Project-File.aspx"&gt;wrote&lt;/a&gt; about running GacUtil from within the AfterBuild target, due to some constraints with MPF and T4. &lt;/p&gt;
&lt;p&gt;I discovered that the path I provided was wrong. It's the only GacUtil.exe under the Microsoft.NET folder, but it won't register the assembly. Since I wasn't sure which path I should be using, I used the GacUtil task from &lt;a href="http://msbuildtasks.tigris.org/"&gt;MSBuild Community Tasks&lt;/a&gt;. Here is the relevant code it uses to retrieve the path to gacutil.exe: &lt;/p&gt;
&lt;blockquote&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;&lt;span style="COLOR: blue"&gt;protected&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;override&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;span style="COLOR: black"&gt; GenerateFullPathToTool()&lt;br /&gt;
{&lt;br /&gt;
    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&lt;span style="COLOR: black"&gt; ToolLocationHelper.GetPathToDotNetFrameworkSdkFile(ToolName, TargetDotNetFrameworkVersion.Version20);&lt;br /&gt;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style="COLOR: blue"&gt;protected&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;override&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;span style="COLOR: black"&gt; ToolName&lt;br /&gt;
{&lt;br /&gt;
    &lt;/span&gt;&lt;span style="COLOR: blue"&gt;get&lt;/span&gt;&lt;span style="COLOR: black"&gt; { &lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&lt;span style="COLOR: black"&gt; &lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;"gacutil.exe"&lt;/span&gt;&lt;span style="COLOR: black"&gt;; }&lt;br /&gt;
}&lt;/span&gt; &lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;This was fine, but it turns out that you get an error from regpkg.exe if the assembly is location in the GAC if you're trying to generate from a path. &lt;/div&gt;
&lt;blockquote&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;regpkg : warning : The Assembly specified at [Path]\[Assembly]cannot be loaded because an alternate copy with the same identity exists in the Assembly probing path at 'C:\WINDOWS\assembly\GAC_MSIL\[Assembly]\1.0.0.0__7c2bf94927fd6e28\[Assembly]. The Assembly at 'C:\WINDOWS\assembly\GAC_MSIL\[Assembly]\1.0.0.0__7c2bf94927fd6e28\[Assembly] will be loaded instead.&lt;br /&gt;
regpkg : error : Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.&lt;br /&gt;
  Could not load file or assembly '[Assembly], Version=1.0.0.0, Culture=neutral, PublicKeyToken=7c2bf94927fd6e28' or one of its dependencies. The system cannot find the file specified.&lt;br /&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;To fix this, I made the GacUtil uninstall the assembly in the BeforeBuild target. However, I kept receiving the same error. Generating a diagnostic log from MSBuild showed me the actual culprit: the RegisterManagedPackage target builds after the AfterBuild target. I fixed it by making AfterBuild depend on RegisterManagedPackage. I've pasted the final, relevant script below. Note that the RegPkg command in the AfterBuild is used to generate installer wix. TargetName is used in the GacUtil uninstall because it requires the name without the extension. &lt;/div&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Import&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Project&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;br /&gt;
&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Target&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;BeforeBuild&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br /&gt;
   &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;GacUtil&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Command&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;Uninstall&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Assemblies&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;$(TargetName)&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;ContinueOnError&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br /&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Target&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Target&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Name&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;AfterBuild&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;DependsOnTargets&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;RegisterManagedPackage&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br /&gt;
  &amp;lt;!--&lt;/span&gt;&lt;span style="COLOR: green"&gt; .wix is specified instead of .wxi because the RegPkg task requires it to generate the wix script. &lt;/span&gt;&lt;span style="COLOR: blue"&gt;--&amp;gt;&lt;br /&gt;
   &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;RegPkg&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;ItemToRegister&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;$(TargetPath)&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;ProductVersion&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;$(TargetVSVersion)&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;SDKVersion&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;$(VsSDKVersion)&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;OutputFile&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;..\Installer\RegistryEntries.wix&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Unregister&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;UseCodeBase&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;UseRanu&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;br /&gt;
   &amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;GacUtil&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Assemblies&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;$(TargetPath)&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;br /&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Target&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;/span&gt; &lt;/div&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131616"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131616" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/131616.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/04/30/gacutil-mpf-and-csproj.aspx</guid>
            <pubDate>Thu, 30 Apr 2009 16:13:03 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/131616.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/04/30/gacutil-mpf-and-csproj.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/131616.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/131616.aspx</trackback:ping>
        </item>
        <item>
            <title>GacUtil from Project File</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/04/29/gacutil-from-project-file.aspx</link>
            <description>&lt;p&gt;Due to circumstances involving a MPF package and Text Templating (t4), I had to add an assembly to the GAC after compiling if I wanted to be able to run the generator in the VS Experimental. So, I added the following line to the AfterBuild target of the csproj file: &lt;/p&gt;
&lt;blockquote&gt;
&lt;div style="BACKGROUND-COLOR: white; FONT-FAMILY: Monospace"&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Exec&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Command&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;gacutil /i $(TargetPath)&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt; &lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, I received the following error when I compiled:  &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Error 155 The command "gacutil /i [PathToDll]" exited with code 9009. C:\Projects\AperioVisualStudioAddins\AperioVisualStudioAddins\AperioVisualStudioPackage.csproj 202 2 [DllName] &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem is that when Visual Studio is building the project, it does not have access to the path. The way to make it work is to specify the fully qualified path and filename to gacutil. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;Exec&lt;/span&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;Command&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;font color="#0000ff"&gt;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\&lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;gacutil.exe /i $(TargetPath)&lt;/span&gt;&lt;span style="COLOR: black"&gt;"&lt;/span&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;&lt;/span&gt; &lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131592"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131592" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/131592.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/04/29/gacutil-from-project-file.aspx</guid>
            <pubDate>Wed, 29 Apr 2009 22:51:09 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/131592.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/04/29/gacutil-from-project-file.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/131592.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/131592.aspx</trackback:ping>
        </item>
        <item>
            <title>Team System 2010 Overview</title>
            <link>http://geekswithblogs.net/Shadowin/archive/2009/04/21/team-system-2010-overview.aspx</link>
            <description>&lt;p&gt;Brian Harry has posted a &lt;a href="http://blogs.msdn.com/bharry/archive/2009/04/08/team-system-2010-overview.aspx"&gt;list of features&lt;/a&gt; that will be in the upcoming beta 1 of Visual Studio 2010 Team System. Unfortunately, the date of release for beta 1 has not been announced yet. &lt;/p&gt;
&lt;p&gt;Architecture (&lt;a title="http://blogs.msdn.com/camerons/" href="http://blogs.msdn.com/camerons/"&gt;http://blogs.msdn.com/camerons/&lt;/a&gt;) &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Architecture Explorer &lt;/li&gt;
    &lt;li&gt;Layer diagram &lt;/li&gt;
    &lt;li&gt;Use case designer &lt;/li&gt;
    &lt;li&gt;Activity designer &lt;/li&gt;
    &lt;li&gt;Component diagram &lt;/li&gt;
    &lt;li&gt;Logical class designer &lt;/li&gt;
    &lt;li&gt;Sequence diagram &lt;/li&gt;
    &lt;li&gt;Modeling project system &lt;/li&gt;
    &lt;li&gt;UML Model explorer &lt;/li&gt;
    &lt;li&gt;Architecture validation during build &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Development &amp;amp; Database (&lt;a title="http://blogs.msdn.com/habibh/" href="http://blogs.msdn.com/habibh/"&gt;http://blogs.msdn.com/habibh/&lt;/a&gt;) &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Historical debugging &lt;/li&gt;
    &lt;li&gt;Test impact analysis &lt;/li&gt;
    &lt;li&gt;Improved code analysis &lt;/li&gt;
    &lt;li&gt;Improved profiling (especially multi-tier) &lt;/li&gt;
    &lt;li&gt;Database extensibility &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lab Management (&lt;a href="http://blogs.msdn.com/amit_chatterjee"&gt;http://blogs.msdn.com/amit_chatterjee&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/lab_management"&gt;http://blogs.msdn.com/lab_management&lt;/a&gt;) &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Multi-tier Environment creation and management &lt;/li&gt;
    &lt;li&gt;Automated deployment &lt;/li&gt;
    &lt;li&gt;Easily manage machine pools &lt;/li&gt;
    &lt;li&gt;Network fencing &lt;/li&gt;
    &lt;li&gt;Checkpoints &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Test (&lt;a href="http://blogs.msdn.com/amit_chatterjee"&gt;http://blogs.msdn.com/amit_chatterjee&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/james_whittaker"&gt;http://blogs.msdn.com/james_whittaker&lt;/a&gt;) &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Test planning &lt;/li&gt;
    &lt;li&gt;Test case management &lt;/li&gt;
    &lt;li&gt;Test prioritization &lt;/li&gt;
    &lt;li&gt;Run management &amp;amp; reporting &lt;/li&gt;
    &lt;li&gt;Project quality reports &lt;/li&gt;
    &lt;li&gt;Manual test execution &lt;/li&gt;
    &lt;li&gt;Diagnostic recording (environment, video, etc) &lt;/li&gt;
    &lt;li&gt;UI Automation recording &lt;/li&gt;
    &lt;li&gt;Coded UI tests &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TFS (my blog &lt;a href="http://blogs.msdn.com/bharry"&gt;http://blogs.msdn.com/bharry&lt;/a&gt;) &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Work item hierarchy &amp;amp; linking &lt;/li&gt;
    &lt;li&gt;Improved Agile template &lt;/li&gt;
    &lt;li&gt;MOSS &amp;amp; WSS Dashboards &lt;/li&gt;
    &lt;li&gt;Simplified reporting &lt;/li&gt;
    &lt;li&gt;Improved support for parallel development &lt;/li&gt;
    &lt;li&gt;Rollback &lt;/li&gt;
    &lt;li&gt;Build queuing and pooling &lt;/li&gt;
    &lt;li&gt;Gated checkin &lt;/li&gt;
    &lt;li&gt;Simplified setup &lt;/li&gt;
    &lt;li&gt;Scale out of web and data tiers &lt;/li&gt;
    &lt;li&gt;Admin console &lt;/li&gt;
    &lt;li&gt;Project move/archive/restore &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131347"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131347" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Shadowin/aggbug/131347.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Chris Eargle</dc:creator>
            <guid>http://geekswithblogs.net/Shadowin/archive/2009/04/21/team-system-2010-overview.aspx</guid>
            <pubDate>Tue, 21 Apr 2009 14:32:55 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Shadowin/comments/131347.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Shadowin/archive/2009/04/21/team-system-2010-overview.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Shadowin/comments/commentRss/131347.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Shadowin/services/trackbacks/131347.aspx</trackback:ping>
        </item>
    </channel>
</rss>