<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.paulomorgado.net/~d/styles/itemcontent.css"?><rss xmlns:a10="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Paulo Morgado [EN]</title><link>http://paulomorgado.net/en/</link><description>.NET and Software Architecture and Engeneering</description><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><a10:id>/PauloMorgado/Blogs/EN</a10:id><dc:language xmlns:dc="http://purl.org/dc/elements/1.1/">en</dc:language><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.paulomorgado.net/PauloMorgado/Blogs/EN" /><feedburner:info uri="paulomorgado/blogs/en" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><image><link>http://paulomorgado.net/en/</link><url>http://paulomorgado.net/images/paulomorgado_80x100.png</url><title>Paulo Morgado [EN]</title></image><feedburner:emailServiceId>PauloMorgado/Blogs/EN</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.paulomorgado.net/PauloMorgado/Blogs/EN" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.paulomorgado.net%2FPauloMorgado%2FBlogs%2FEN" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><feedburner:browserFriendly>.NET and Software Architecture and Engeneering</feedburner:browserFriendly><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1754649</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/2x2fri_xDJc/web-site-globalization-with-asp-net-routing.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><title>Web Site Globalization With ASP.NET Routing</title><description>&lt;p align="justify"&gt;For those who don’t know, I have this web site &lt;a href="http://PauloMorgado.NET/"&gt;http://PauloMorgado.NET/&lt;/a&gt; that I use both as a web presence besides my blogs and a playfield.&lt;/p&gt;  &lt;p align="justify"&gt;Because I write both in English and Portuguese, I wanted the web site to have both English and Portuguese versions. This is easily accomplished by using &lt;a title="ASP.NET Globalization and Localization" href="http://msdn.microsoft.com/library/c6zyy3s9.aspx" target="_blank"&gt;ASP.NET Globalization and Localization&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;But I wanted to do more than guessing the user’s language form her/his web browser languages. I wanted something like the &lt;a title="MSDN - Microsoft Developers Network" href="http://msdn.microsoft.com/" target="_blank"&gt;MSDN&lt;/a&gt; and &lt;a title="Microsoft TechNet: Resources for IT Professionals" href="http://technet.microsoft.com/" target="_blank"&gt;TechNet&lt;/a&gt; web sites have where the culture is embedded in the URL which makes it easy for the user to choose in which language she/he wants to see the web site.&lt;/p&gt;  &lt;p align="justify"&gt;With the release of the &lt;a title="ASP.NET Routing" href="http://msdn.microsoft.com/library/cc668201.aspx" target="_blank"&gt;ASP.NET Routing&lt;/a&gt;, this is as easy as writing a custom &lt;a title="IRouteHandler Interface" href="http://msdn.microsoft.com/library/system.web.routing.iroutehandler.aspx" target="_blank"&gt;route handler&lt;/a&gt; that sets the culture for the request and returns the requested &lt;a title="Page Class" href="http://msdn.microsoft.com/library/system.web.ui.page.aspx" target="_blank"&gt;page&lt;/a&gt; &lt;a title="Introduction to HTTP handlers" href="http://msdn.microsoft.com/library/ms227675(VS.85).aspx" target="_blank"&gt;handler&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Something like this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;GlobalizationRouteHandler &lt;/span&gt;: &lt;span style="color:blue;"&gt;global&lt;/span&gt;::System.Web.Routing.&lt;span style="color:#2b91af;"&gt;IRouteHandler
&lt;/span&gt;{
    System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture;
    System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;uiCulture;

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;GlobalizationRouteHandler(System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture)
        : &lt;span style="color:blue;"&gt;this&lt;/span&gt;(culture, culture)
    {
    }

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;GlobalizationRouteHandler(&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture, &lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;uiCulture)
    {
        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(culture == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:blue;"&gt;throw new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;cultureInfo&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;cultureInfo is null.&amp;quot;&lt;/span&gt;);
        }

        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(uiCulture == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:blue;"&gt;throw new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;uiCulture&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;uiCulture is null.&amp;quot;&lt;/span&gt;);
        }

        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.culture = culture;
        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.uiCulture = uiCulture;
    }

    &lt;span style="color:blue;"&gt;private &lt;/span&gt;GlobalizationRouteHandler()
    {
    }

    &lt;span style="color:blue;"&gt;#region &lt;/span&gt;IRouteHandler Members

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IHttpHandler &lt;/span&gt;GetHttpHandler(&lt;span style="color:#2b91af;"&gt;RequestContext &lt;/span&gt;requestContext)
    {
        &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentCulture = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.culture;
        &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentUICulture = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.uiCulture;

        &lt;span style="color:blue;"&gt;string &lt;/span&gt;path = &lt;span style="color:#a31515;"&gt;&amp;quot;~/&amp;quot; &lt;/span&gt;+ (requestContext.RouteData.Values[&lt;span style="color:#a31515;"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;] &lt;span style="color:blue;"&gt;as string&lt;/span&gt;);

        &lt;span style="color:blue;"&gt;var &lt;/span&gt;physicalPath = requestContext.HttpContext.Server.MapPath(path);
        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(System.IO.&lt;span style="color:#2b91af;"&gt;Directory&lt;/span&gt;.Exists(physicalPath))
        {
            path = &lt;span style="color:#2b91af;"&gt;VirtualPathUtility&lt;/span&gt;.Combine(path, &lt;span style="color:#a31515;"&gt;&amp;quot;Default.aspx&amp;quot;&lt;/span&gt;);
        }

        &lt;span style="color:blue;"&gt;var &lt;/span&gt;httpHandler = &lt;span style="color:#2b91af;"&gt;BuildManager&lt;/span&gt;.CreateInstanceFromVirtualPath(path, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;IHttpHandler&lt;/span&gt;)) &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IHttpHandler&lt;/span&gt;;

        &lt;span style="color:blue;"&gt;return &lt;/span&gt;httpHandler;
    }

    &lt;span style="color:blue;"&gt;#endregion
&lt;/span&gt;}&lt;/pre&gt;

&lt;p&gt;And now it’s only a matter of registering the handled cultures:&lt;/p&gt;

&lt;pre class="code"&gt;routes.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;en&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Route&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;en/{*path}&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;GlobalizationRouteHandler&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt;.GetCultureInfo(&lt;span style="color:#a31515;"&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;))));
routes.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;pt&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Route&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;pt/{*path}&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;GlobalizationRouteHandler&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt;.GetCultureInfo(&lt;span style="color:#a31515;"&gt;&amp;quot;pt-PT&amp;quot;&lt;/span&gt;))));&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1754649" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1754649" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1754649" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=2x2fri_xDJc:kTxPXzq2vfU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=2x2fri_xDJc:kTxPXzq2vfU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=2x2fri_xDJc:kTxPXzq2vfU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=2x2fri_xDJc:kTxPXzq2vfU:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=2x2fri_xDJc:kTxPXzq2vfU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=2x2fri_xDJc:kTxPXzq2vfU:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=2x2fri_xDJc:kTxPXzq2vfU:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/2x2fri_xDJc" height="1" width="1"/&gt;</description><pubDate>Sun, 31 Jan 2010 23:29:08 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1754649</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1754649</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2010/01/31/web-site-globalization-with-asp-net-routing.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2010/01/31/web-site-globalization-with-asp-net-routing.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1754133</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/5f85SjieeV4/coupling-asp-net-session-state-with-forms-authentication.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><title>Coupling ASP.NET Session State With Forms Authentication</title><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Today I was talking with &lt;a title="João Cardoso" href="http://pontonetpt.com/blogs/joaocardoso" target="_blank"&gt;João&lt;/a&gt; about a way to couple the lifetime of the &lt;a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt;&amp;#160;&lt;a title="ASP.NET Session State Overview" href="http://msdn.microsoft.com/library/ms178581.aspx" target="_blank"&gt;session state&lt;/a&gt; with the lifetime of &lt;a title="Forms Authentication Provider" href="http://msdn.microsoft.com/library/9wff0kyh.aspx" target="_blank"&gt;Forms Authentication&lt;/a&gt; &lt;a title="Understanding the Forms Authentication Ticket and Cookie" href="http://support.microsoft.com/kb/910443" target="_blank"&gt;ticket&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;My idea was to store the session ID in the &lt;a title="FormsAuthenticationTicket.UserData Property" href="http://msdn.microsoft.com/library/System.Web.Security.FormsAuthenticationTicket.UserData.aspx" target="_blank"&gt;UserData&lt;/a&gt; property of the &lt;a title="FormsAuthenticationTicket Class" href="http://msdn.microsoft.com/library/system.web.security.formsauthenticationticket.aspx" target="_blank"&gt;forms authentication ticket&lt;/a&gt; upon logon and retrieve it with a custom &lt;a title="ISessionIDManager Interface" href="http://msdn.microsoft.com/library/system.web.sessionstate.isessionidmanager.aspx" target="_blank"&gt;session ID manager&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;The login code would be something like this:&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Login1_Authenticate(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;AuthenticateEventArgs &lt;/span&gt;e)
{
    &lt;span style="color:blue;"&gt;bool &lt;/span&gt;isPersistent = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Login1.RememberMeSet;
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;username = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Login1.UserName;
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;ticket = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FormsAuthenticationTicket&lt;/span&gt;(
        0,
        username,
        &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now,
        &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now.AddMinutes(2),
        isPersistent,
        &lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;.NewGuid().ToString(&lt;span style="color:#a31515;"&gt;&amp;quot;N&amp;quot;&lt;/span&gt;));

    &lt;span style="color:green;"&gt;// Encrypt the ticket.
    &lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;encryptedTicket = &lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.Encrypt(ticket);

    &lt;span style="color:green;"&gt;// Create the cookie.
    &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Response.Cookies.Add(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpCookie&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.FormsCookieName, encryptedTicket));

    &lt;span style="color:green;"&gt;// Redirect back to original URL.
    &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Response.Redirect(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.GetRedirectUrl(username, isPersistent));
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;For the purpose of this test I am using a &lt;a title="Guid Structure" href="http://msdn.microsoft.com/library/system.guid.aspx" target="_blank"&gt;Guid&lt;/a&gt; as the session ID.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;The session ID manager will return this session ID when queried by &lt;a title="SessionStateModule Class" href="http://msdn.microsoft.com/library/System.Web.SessionState.SessionStateModule.aspx" target="_blank"&gt;the session state HTTP module&lt;/a&gt;:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SessionIdManager &lt;/span&gt;: &lt;span style="color:blue;"&gt;global&lt;/span&gt;::System.Web.SessionState.&lt;span style="color:#2b91af;"&gt;ISessionIDManager
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;#region &lt;/span&gt;ISessionIDManager Members

    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;CreateSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetDummySessionIdOrRedirectToLoginPage(context);
    }

    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;GetSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetSessionIdFromFormsIdentity(context);
    }

    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;Initialize()
    {
    }

    &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;InitializeRequest(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context, &lt;span style="color:blue;"&gt;bool &lt;/span&gt;suppressAutoDetectRedirect, &lt;span style="color:blue;"&gt;out bool &lt;/span&gt;supportSessionIDReissue)
    {
        supportSessionIDReissue = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetSessionIdFromFormsIdentity(context) == &lt;span style="color:blue;"&gt;null&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;RemoveSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
    }

    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;SaveSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context, &lt;span style="color:blue;"&gt;string &lt;/span&gt;id, &lt;span style="color:blue;"&gt;out bool &lt;/span&gt;redirected, &lt;span style="color:blue;"&gt;out bool &lt;/span&gt;cookieAdded)
    {
        redirected = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
        cookieAdded = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;Validate(&lt;span style="color:blue;"&gt;string &lt;/span&gt;id)
    {
        &lt;span style="color:blue;"&gt;return true&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;#endregion

    private static string &lt;/span&gt;GetSessionIdFromFormsIdentity(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;identity = context.User != &lt;span style="color:blue;"&gt;null &lt;/span&gt;? context.User.Identity &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FormsIdentity &lt;/span&gt;: &lt;span style="color:blue;"&gt;null&lt;/span&gt;;

        &lt;span style="color:blue;"&gt;if &lt;/span&gt;((identity == &lt;span style="color:blue;"&gt;null&lt;/span&gt;) || (identity.Ticket == &lt;span style="color:blue;"&gt;null&lt;/span&gt;) || &lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(identity.Ticket.UserData))
        {
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetDummySessionIdOrRedirectToLoginPage(context);
        }
        &lt;span style="color:blue;"&gt;else
        &lt;/span&gt;{
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;identity.Ticket.UserData;
        }
    }

    &lt;span style="color:blue;"&gt;private static string &lt;/span&gt;GetDummySessionIdOrRedirectToLoginPage(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(context.Request.CurrentExecutionFilePath.Equals(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.DefaultUrl, &lt;span style="color:#2b91af;"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase)
                        || context.Request.CurrentExecutionFilePath.Equals(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.LoginUrl, &lt;span style="color:#2b91af;"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase))
        {
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;.NewGuid().ToString(&lt;span style="color:#a31515;"&gt;&amp;quot;N&amp;quot;&lt;/span&gt;);
        }
        &lt;span style="color:blue;"&gt;else
        &lt;/span&gt;{
            &lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.RedirectToLoginPage();
            &lt;span style="color:blue;"&gt;return null&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Although this might work, it’s just an intellectual exercise and wasn’t fully tested.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1754133" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1754133" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1754133" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=5f85SjieeV4:0iod1XENq3g:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=5f85SjieeV4:0iod1XENq3g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=5f85SjieeV4:0iod1XENq3g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=5f85SjieeV4:0iod1XENq3g:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=5f85SjieeV4:0iod1XENq3g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=5f85SjieeV4:0iod1XENq3g:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=5f85SjieeV4:0iod1XENq3g:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/5f85SjieeV4" height="1" width="1"/&gt;</description><pubDate>Thu, 28 Jan 2010 01:18:49 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1754133</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1754133</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2010/01/28/coupling-asp-net-session-state-with-forms-authentication.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2010/01/28/coupling-asp-net-session-state-with-forms-authentication.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1753897</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/1UM7B6xw-BA/playing-with-linq-getting-interface-property-implementations.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET4.0/default.aspx">.NET4.0</category><title>Playing With LINQ: Getting Interface Property Implementations</title><description>&lt;p align="justify"&gt;Today, my friend &lt;a title="Nuno Gomes" href="http://nunogomes.net/" target="_blank"&gt;Nuno&lt;/a&gt; was writing some code to get the &lt;a title="PropertyInfo Class" href="http://msdn.microsoft.com/library/System.Reflection.PropertyInfo.aspx" target="_blank"&gt;PropertyInfo&lt;/a&gt;s of a class implementation of an interface.&lt;/p&gt;
&lt;p align="justify"&gt;Given this interface:&lt;/p&gt;&lt;pre class="code"&gt;&lt;p&gt;&lt;span style="COLOR:blue;"&gt;public interface &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;ISomeInterface
&lt;/span&gt;{
    &lt;span style="COLOR:blue;"&gt;int &lt;/span&gt;IntProperty { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:blue;"&gt;set&lt;/span&gt;; }
    &lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;StringProperty { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; }
    &lt;span style="COLOR:blue;"&gt;void &lt;/span&gt;Method();
}&lt;/p&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p align="justify"&gt;and this class:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;public class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;SomeClass &lt;/span&gt;: &lt;span style="COLOR:#2b91af;"&gt;ISomeInterface
&lt;/span&gt;{
    &lt;span style="COLOR:blue;"&gt;int &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;ISomeInterface&lt;/span&gt;.IntProperty { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:blue;"&gt;set&lt;/span&gt;; }
    &lt;span style="COLOR:blue;"&gt;public int &lt;/span&gt;IntProperty { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:blue;"&gt;private set&lt;/span&gt;; }
    &lt;span style="COLOR:blue;"&gt;public string &lt;/span&gt;StringProperty { &lt;span style="COLOR:blue;"&gt;get&lt;/span&gt;; &lt;span style="COLOR:blue;"&gt;private set&lt;/span&gt;; }
    &lt;span style="COLOR:blue;"&gt;public void &lt;/span&gt;Method() { }
}&lt;/pre&gt;
&lt;p&gt;Nuno wanted to retrieve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Int32 ISomeInterface.IntProperty &lt;/li&gt;
&lt;li&gt;System.String StringProperty &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The code is fairly simple. First we need to get the interface mappings for the class:&lt;/p&gt;
&lt;p style="PADDING-LEFT:1em;"&gt;&lt;code&gt;&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;SomeClass&lt;/span&gt;).GetInterfaceMap(&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;ISomeInterface&lt;/span&gt;)).TargetMethods&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and get all &lt;strong&gt;PropertyInfo&lt;/strong&gt;s for which the &lt;a title="MethodInfo Class" href="http://msdn.microsoft.com/library/System.Reflection.MethodInfo.aspx" target="_blank"&gt;MethodInfo&lt;/a&gt; in the list is part of the implementation of the property (is either the &lt;strong&gt;set&lt;/strong&gt; method or the &lt;strong&gt;get&lt;/strong&gt; method).&lt;/p&gt;
&lt;p&gt;Something like his:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;public static bool &lt;/span&gt;Implements(&lt;span style="COLOR:blue;"&gt;this &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MethodInfo &lt;/span&gt;methodInfo, &lt;span style="COLOR:#2b91af;"&gt;PropertyInfo &lt;/span&gt;propertyInfo)
{
    &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;(propertyInfo.GetGetMethod(&lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;) == methodInfo) || (propertyInfo.GetSetMethod(&lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;) == methodInfo);
}&lt;/pre&gt;
&lt;p&gt;But what caught my eye was that, with the above &lt;a title="Extension Methods (C# Programming Guide)" href="http://msdn.microsoft.com/library/bb383977.aspx" target="_blank"&gt;extension methods&lt;/a&gt;, I can use &lt;a title="Language-Integrated Query (LINQ)" href="http://msdn.microsoft.com/library/bb397926.aspx" target="_blank"&gt;LINQ&lt;/a&gt; to retrieve a list of the desired &lt;strong&gt;PropertyInfo&lt;/strong&gt;s.&lt;/p&gt;
&lt;p&gt;Something like this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;public static &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;PropertyInfo&lt;/span&gt;&amp;gt; GetInterfacePropertyImplementation(&lt;span style="COLOR:#2b91af;"&gt;Type &lt;/span&gt;implementer, &lt;span style="COLOR:#2b91af;"&gt;Type &lt;/span&gt;implemented)
{
    &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;from &lt;/span&gt;propertyInfo &lt;span style="COLOR:blue;"&gt;in &lt;/span&gt;implementer.GetProperties(&lt;span style="COLOR:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="COLOR:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public | &lt;span style="COLOR:#2b91af;"&gt;BindingFlags&lt;/span&gt;.NonPublic).AsEnumerable()
            &lt;span style="COLOR:blue;"&gt;from &lt;/span&gt;methodInfo &lt;span style="COLOR:blue;"&gt;in &lt;/span&gt;implementer.GetInterfaceMap(implemented).TargetMethods.AsEnumerable()
            &lt;span style="COLOR:blue;"&gt;where &lt;/span&gt;methodInfo.Implements(propertyInfo)
            &lt;span style="COLOR:blue;"&gt;select &lt;/span&gt;propertyInfo).Distinct();
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;For the sample class and interface, the usage would be something like this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;var &lt;/span&gt;q = GetInterfacePropertyImplementation(&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;SomeClass&lt;/span&gt;), &lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;ISomeInterface&lt;/span&gt;));

&lt;span style="COLOR:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;var &lt;/span&gt;p &lt;span style="COLOR:blue;"&gt;in &lt;/span&gt;q)
{
    &lt;span style="COLOR:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(p);
}&lt;/pre&gt;
&lt;p&gt;Which would produce the following output:&lt;/p&gt;&lt;pre class="code"&gt;Int32 ISomeInterface.IntProperty
System.String StringProperty&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;UPDATED&lt;/strong&gt;: The previous implementation was overcomplicated and had some string based logic. Kudos to Nuno.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1753897" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1753897" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1753897" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=1UM7B6xw-BA:wgufGDKAyBM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=1UM7B6xw-BA:wgufGDKAyBM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=1UM7B6xw-BA:wgufGDKAyBM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=1UM7B6xw-BA:wgufGDKAyBM:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=1UM7B6xw-BA:wgufGDKAyBM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=1UM7B6xw-BA:wgufGDKAyBM:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=1UM7B6xw-BA:wgufGDKAyBM:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/1UM7B6xw-BA" height="1" width="1"/&gt;</description><pubDate>Wed, 27 Jan 2010 02:22:00 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1753897</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1753897</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2010/01/27/playing-with-linq-getting-interface-property-implementations.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2010/01/27/playing-with-linq-getting-interface-property-implementations.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1753545</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/3TS-cwoQmR0/a-tracelistener-for-tests.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Testing/default.aspx">Testing</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/UnitTests/default.aspx">UnitTests</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio2008/default.aspx">VisualStudio2008</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio2005/default.aspx">VisualStudio2005</category><title>A TraceListener For Tests</title><description>&lt;p align="justify"&gt;In my code, I make extensive use of debug assertions (see &lt;a title="Debug.Assert Method" href="http://msdn.microsoft.com/library/System.Diagnostics.Debug.Assert.aspx" target="_blank"&gt;System.Diagnostics.Debug.Assert&lt;/a&gt;). These assertions are very helpful while debugging because you don’t need to step into every line of code to see if all pre-conditions are met. As soon as a pre-condition fails, an assertion failed window will pop up and will allow us to either abort, ignore or go to the assertion instruction (retry).&lt;/p&gt;
&lt;p align="justify"&gt;Imagine you have this code:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;private void &lt;/span&gt;IKnowForSureThatANullStringWillNeverBePassed(&lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;text)
{
    System.Diagnostics.&lt;span style="COLOR:#2b91af;"&gt;Debug&lt;/span&gt;.Assert(&lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;!= &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;, &lt;span style="COLOR:#a31515;"&gt;&amp;quot;text is null.&amp;quot;&lt;/span&gt;);

    &lt;span style="COLOR:green;"&gt;// ...
&lt;/span&gt;}&lt;/pre&gt;
&lt;p align="justify"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Because this method is private, I have full control of what is passed to the &lt;strong&gt;text&lt;/strong&gt; parameter, therefore I’m asserting that it will never be &lt;strong&gt;null&lt;/strong&gt;. Because it might not be obvious that &lt;strong&gt;text&lt;/strong&gt; will never be &lt;strong&gt;null&lt;/strong&gt;, the assertion also acts as documentation.&lt;/p&gt;
&lt;p align="justify"&gt;I usually run my unit tests and integration test on debug compilations and these assertions would be helpful by making the test fail on an assertion fail instead of running through the method and failing with an &lt;a title="NullReferenceException Class" href="http://msdn.microsoft.com/library/System.NullReferenceException.aspx" target="_blank"&gt;NullReferenceException&lt;/a&gt;. That’s why I (and more people out there) wrote this simple &lt;a title="TraceListener Class" href="http://msdn.microsoft.com/library/System.Diagnostics.TraceListener.aspx" target="_blank"&gt;TraceListener&lt;/a&gt;:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;public class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;TraceListener &lt;/span&gt;: &lt;span style="COLOR:blue;"&gt;global&lt;/span&gt;::System.Diagnostics.&lt;span style="COLOR:#2b91af;"&gt;TraceListener
&lt;/span&gt;{
    &lt;span style="COLOR:blue;"&gt;public static readonly &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;TraceListener &lt;/span&gt;Default = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;TraceListener&lt;/span&gt;();

    &lt;span style="COLOR:blue;"&gt;protected &lt;/span&gt;TraceListener()
    {
        &lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.Name = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Testing Trace Listener&amp;quot;&lt;/span&gt;;    
    }

    &lt;span style="COLOR:blue;"&gt;protected &lt;/span&gt;TraceListener(&lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;name)
        : &lt;span style="COLOR:blue;"&gt;base&lt;/span&gt;(name)
    {
    }

    &lt;span style="COLOR:blue;"&gt;public override void &lt;/span&gt;Write(&lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;message)
    {
    }

    &lt;span style="COLOR:blue;"&gt;public override void &lt;/span&gt;WriteLine(&lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;message)
    {
    }

    &lt;span style="COLOR:blue;"&gt;public override void &lt;/span&gt;Fail(&lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;message, &lt;span style="COLOR:blue;"&gt;string &lt;/span&gt;detailMessage)
    {
        &lt;span style="COLOR:blue;"&gt;var &lt;/span&gt;builder = &lt;span style="COLOR:blue;"&gt;new global&lt;/span&gt;::System.Text.&lt;span style="COLOR:#2b91af;"&gt;StringBuilder&lt;/span&gt;();

        builder.Append(message);

        &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(detailMessage != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;)
        {
            builder.Append(&lt;span style="COLOR:#a31515;"&gt;&amp;quot; &amp;quot;&lt;/span&gt;);
            builder.Append(detailMessage);
        }

        &lt;span style="COLOR:blue;"&gt;throw new global&lt;/span&gt;::Microsoft.VisualStudio.TestTools.UnitTesting.&lt;span style="COLOR:#2b91af;"&gt;AssertFailedException&lt;/span&gt;(builder.ToString());

    }
}&lt;/pre&gt;
&lt;p align="justify"&gt;This trace listener won’t write anything to anywhere. It will just throw an &lt;a title="AssertFailedException Class" href="http://msdn.microsoft.com/library/Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException.aspx" target="_blank"&gt;AssertFailedException&lt;/a&gt; if the &lt;a title="TraceListener.Fail Method" href="http://msdn.microsoft.com/library/t9h55cex.aspx" target="_blank"&gt;Fail&lt;/a&gt; method is called, which is what happens when an assertion fails.&lt;/p&gt;
&lt;p align="justify"&gt;Because an assertion window is not desired when running the tests (specially if they are automated tests ran as part of a build process) it’s better to disable the assert UI on the configuration file of the test project.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;xml &lt;/span&gt;&lt;span style="COLOR:red;"&gt;version&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;encoding&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="COLOR:blue;"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;system.diagnostics&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;assert &lt;/span&gt;&lt;span style="COLOR:red;"&gt;assertuienabled&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;trace&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;listeners&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;add &lt;/span&gt;&lt;span style="COLOR:red;"&gt;name&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;TestTraceListener&lt;/span&gt;&amp;quot;
                     &lt;span style="COLOR:red;"&gt;type&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;PauloMorgado.TestTools.VisualStudio.UnitTesting.Diagnostics.TraceListener, PauloMorgado.TestTools.VisualStudio&lt;/span&gt;&amp;quot; &lt;span style="COLOR:blue;"&gt;/&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;listeners&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;trace&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;system.diagnostics&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;You can find this and other tools on the &lt;a title="PauloMorgado.TestTools" href="http://pmtesttools.codeplex.com/" target="_blank"&gt;PauloMorgado.TestTools&lt;/a&gt; on &lt;a title="CodePlex - Open Source Community" href="http://www.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;.&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1753545" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1753545" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1753545" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=3TS-cwoQmR0:Y09QktavKU0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=3TS-cwoQmR0:Y09QktavKU0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=3TS-cwoQmR0:Y09QktavKU0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=3TS-cwoQmR0:Y09QktavKU0:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=3TS-cwoQmR0:Y09QktavKU0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=3TS-cwoQmR0:Y09QktavKU0:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=3TS-cwoQmR0:Y09QktavKU0:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/3TS-cwoQmR0" height="1" width="1"/&gt;</description><pubDate>Sun, 24 Jan 2010 23:59:00 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1753545</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1753545</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2010/01/24/a-tracelistener-for-tests.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2010/01/24/a-tracelistener-for-tests.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1752368</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/xzvJC3E3d7E/how-to-set-elements-of-an-array-of-a-private-type-using-visual-studio-shadows.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Testing/default.aspx">Testing</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio2008/default.aspx">VisualStudio2008</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio2010/default.aspx">VisualStudio2010</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET4.0/default.aspx">.NET4.0</category><title>How To Set Elements Of An Array Of A Private Type Using Visual Studio Shadows</title><description>&lt;p&gt;&lt;a title="Microsoft Visual Studio" href="http://cli.gs/vstudio" target="_blank"&gt;Visual Studio&lt;/a&gt; uses &lt;a title="Using Publicize to Create Private Accessors" href="http://msdn.microsoft.com/library/bb514191.aspx" target="_blank"&gt;Publicize&lt;/a&gt; to create accessors public for private members and types of a type.&lt;/p&gt;
&lt;p&gt;But when you try to set elements of a private array of elements of a private type, things get complicated.&lt;/p&gt;
&lt;p&gt;Imagine this hypothetic class to test:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;public static class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyClass
&lt;/span&gt;{
    &lt;span style="COLOR:blue;"&gt;private static readonly &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyInnerClass&lt;/span&gt;[] myArray = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyInnerClass&lt;/span&gt;[10];

    &lt;span style="COLOR:blue;"&gt;public static bool &lt;/span&gt;IsEmpty()
    {
        &lt;span style="COLOR:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;var &lt;/span&gt;item &lt;span style="COLOR:blue;"&gt;in &lt;/span&gt;myArray)
        {
            &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;((item != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (!&lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(item.Field)))
            {
                &lt;span style="COLOR:blue;"&gt;return false&lt;/span&gt;;
            }
        }

        &lt;span style="COLOR:blue;"&gt;return true&lt;/span&gt;;
    }

    &lt;span style="COLOR:blue;"&gt;private class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyInnerClass
    &lt;/span&gt;{
        &lt;span style="COLOR:blue;"&gt;public string &lt;/span&gt;Field;
    }
}&lt;/pre&gt;
&lt;p&gt;If I want to write a test for the case when the array has “non empty” entries, I need to setup the array first.&lt;/p&gt;
&lt;p&gt;Using the accessors generated by Visual Studio, I would write something like this:&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="COLOR:#2b91af;"&gt;TestClass&lt;/span&gt;()]
&lt;span style="COLOR:blue;"&gt;public class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyClassTest
&lt;/span&gt;{
    [&lt;span style="COLOR:#2b91af;"&gt;TestMethod&lt;/span&gt;()]
    &lt;span style="COLOR:blue;"&gt;public void &lt;/span&gt;IsEmpty_NotEmpty_ReturnsFalse()
    {
        &lt;span style="COLOR:blue;"&gt;for &lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; 10; i++)
        {
            &lt;span style="COLOR:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.myArray[i] = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.&lt;span style="COLOR:#2b91af;"&gt;MyInnerClass &lt;/span&gt;{ Field = i.ToString() };
        }

        &lt;span style="COLOR:blue;"&gt;bool &lt;/span&gt;expected = &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;
        &lt;span style="COLOR:blue;"&gt;bool &lt;/span&gt;actual;

        actual = &lt;span style="COLOR:#2b91af;"&gt;MyClass&lt;/span&gt;.IsEmpty();

        &lt;span style="COLOR:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(expected, actual);
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;But the test will fail because, although the elements of the private array &lt;strong&gt;myArray&lt;/strong&gt; can be read as &lt;strong&gt;MyClass_Accessor.MyInnerClass&lt;/strong&gt; instances, they can’t be written as such.&lt;/p&gt;
&lt;p&gt;To do so, the test would have to be written like this:&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="COLOR:#2b91af;"&gt;TestClass&lt;/span&gt;()]
&lt;span style="COLOR:blue;"&gt;public class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyClassTest
&lt;/span&gt;{
    [&lt;span style="COLOR:#2b91af;"&gt;TestMethod&lt;/span&gt;()]
    &lt;span style="COLOR:blue;"&gt;public void &lt;/span&gt;IsEmpty_NotEmpty_ReturnsFalse()
    {
        &lt;span style="COLOR:blue;"&gt;for &lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; 10; i++)
        {
            &lt;span style="COLOR:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.ShadowedType.SetStaticArrayElement(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;myArray&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.&lt;span style="COLOR:#2b91af;"&gt;MyInnerClass &lt;/span&gt;{ Field = i.ToString() }.Target, i);
        }

        &lt;span style="COLOR:blue;"&gt;bool &lt;/span&gt;expected = &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;
        &lt;span style="COLOR:blue;"&gt;bool &lt;/span&gt;actual;

        actual = &lt;span style="COLOR:#2b91af;"&gt;MyClass&lt;/span&gt;.IsEmpty();

        &lt;span style="COLOR:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(expected, actual);
    }
}&lt;/pre&gt;
&lt;p&gt;But, this way, we loose all the strong typing of the accessors because we need to write the name of the array field.&lt;/p&gt;
&lt;p&gt;Because the accessor for the field is a property, we could write a set of &lt;a title="Extension Methods (C# Programming Guide)" href="http://msdn.microsoft.com/library/bb383977.aspx" target="_blank"&gt;extension methods&lt;/a&gt; that take care of getting the field name for us. Something like this:&lt;/p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;public static class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;PrivateypeExtensions
&lt;/span&gt;{
    &lt;span style="COLOR:blue;"&gt;public static void &lt;/span&gt;SetStaticArrayElement&amp;lt;T&amp;gt;(&lt;span style="COLOR:blue;"&gt;this &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;PrivateType &lt;/span&gt;self, &lt;span style="COLOR:#2b91af;"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T[]&amp;gt;&amp;gt; expression, T value, &lt;span style="COLOR:blue;"&gt;params int&lt;/span&gt;[] indices)
    {
        &lt;span style="COLOR:blue;"&gt;object &lt;/span&gt;elementValue = (value &lt;span style="COLOR:blue;"&gt;is &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;BaseShadow&lt;/span&gt;) ? (value &lt;span style="COLOR:blue;"&gt;as &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;BaseShadow&lt;/span&gt;).Target : value;

        self.SetStaticArrayElement(
            ((&lt;span style="COLOR:#2b91af;"&gt;PropertyInfo&lt;/span&gt;)((&lt;span style="COLOR:#2b91af;"&gt;MemberExpression&lt;/span&gt;)(expression.Body)).Member).Name,
            elementValue,
            indices);
    }

    &lt;span style="COLOR:blue;"&gt;public static void &lt;/span&gt;SetStaticArrayElement&amp;lt;T&amp;gt;(&lt;span style="COLOR:blue;"&gt;this &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;PrivateType &lt;/span&gt;self, &lt;span style="COLOR:#2b91af;"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T[]&amp;gt;&amp;gt; expression, &lt;span style="COLOR:#2b91af;"&gt;BindingFlags &lt;/span&gt;invokeAttr, T value, &lt;span style="COLOR:blue;"&gt;params int&lt;/span&gt;[] indices)
    {
        &lt;span style="COLOR:blue;"&gt;object &lt;/span&gt;elementValue = (value &lt;span style="COLOR:blue;"&gt;is &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;BaseShadow&lt;/span&gt;) ? (value &lt;span style="COLOR:blue;"&gt;as &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;BaseShadow&lt;/span&gt;).Target : value;

        self.SetStaticArrayElement(
            ((&lt;span style="COLOR:#2b91af;"&gt;PropertyInfo&lt;/span&gt;)((&lt;span style="COLOR:#2b91af;"&gt;MemberExpression&lt;/span&gt;)(expression.Body)).Member).Name,
            invokeAttr,
            elementValue,
            indices);
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Now, we can write the test like this:&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="COLOR:#2b91af;"&gt;TestClass&lt;/span&gt;()]
&lt;span style="COLOR:blue;"&gt;public class &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyClassTest
&lt;/span&gt;{
    [&lt;span style="COLOR:#2b91af;"&gt;TestMethod&lt;/span&gt;()]
    &lt;span style="COLOR:blue;"&gt;public void &lt;/span&gt;IsEmpty_NotEmpty_ReturnsFalse()
    {
        &lt;span style="COLOR:blue;"&gt;for &lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; 10; i++)
        {
            &lt;span style="COLOR:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.ShadowedType.SetStaticArrayElement(() =&amp;gt; &lt;span style="COLOR:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.myArray, &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.&lt;span style="COLOR:#2b91af;"&gt;MyInnerClass &lt;/span&gt;{ Field = i.ToString() }, i);
        }

        &lt;span style="COLOR:blue;"&gt;bool &lt;/span&gt;expected = &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;
        &lt;span style="COLOR:blue;"&gt;bool &lt;/span&gt;actual;

        actual = &lt;span style="COLOR:#2b91af;"&gt;MyClass&lt;/span&gt;.IsEmpty();

        &lt;span style="COLOR:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(expected, actual);
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;It’s not the same as the first form, but it’s strongly typed and we’ll get a compiler error instead of a test run error if we change the name of the &lt;strong&gt;myArray &lt;/strong&gt;field.&lt;/p&gt;
&lt;p&gt;You can find this and other tools on the &lt;a title="PauloMorgado.TestTools" href="http://pmtesttools.codeplex.com/" target="_blank"&gt;&lt;font color="#006ff7"&gt;PauloMorgado.TestTools&lt;/font&gt;&lt;/a&gt; on &lt;a title="CodePlex - Open Source Community" href="http://www.codeplex.com/" target="_blank"&gt;&lt;font color="#006ff7"&gt;CodePlex&lt;/font&gt;&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1752368" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1752368" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1752368" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=xzvJC3E3d7E:SZOEpxNDZzI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=xzvJC3E3d7E:SZOEpxNDZzI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=xzvJC3E3d7E:SZOEpxNDZzI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=xzvJC3E3d7E:SZOEpxNDZzI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=xzvJC3E3d7E:SZOEpxNDZzI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=xzvJC3E3d7E:SZOEpxNDZzI:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=xzvJC3E3d7E:SZOEpxNDZzI:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/xzvJC3E3d7E" height="1" width="1"/&gt;</description><pubDate>Tue, 19 Jan 2010 00:26:00 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1752368</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1752368</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2010/01/19/how-to-set-elements-of-an-array-of-a-private-type-using-visual-studio-shadows.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2010/01/19/how-to-set-elements-of-an-array-of-a-private-type-using-visual-studio-shadows.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1743268</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/JA26N2eiu38/extended-webbrowser-control-version-0-0-0-0-uploaded.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/InternetExplorer/default.aspx">InternetExplorer</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WindowsClient/default.aspx">WindowsClient</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WindowsForms/default.aspx">WindowsForms</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WebBrowserEx/default.aspx">WebBrowserEx</category><title>Extended WebBrowser Control - Version 0.0.0.0 Uploaded</title><description>&lt;p align="justify"&gt;After a long time, I finally managed to upload a version of the &lt;a title="Extended WebBrowser Control" href="http://webbrowserex.codeplex.com/" target="_blank"&gt;Extended WebBrowser Control&lt;/a&gt; to &lt;a title="Open Source Project Hosting" href="http://www.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;It&amp;#39;s still a work in progress, but it&amp;#39;s usable. Feel free to &lt;a title="Downloads for WebBrowserEx - Extended WebBrowser Control" href="http://webbrowserex.codeplex.com/Release/ProjectReleases.aspx" target="_blank"&gt;download&lt;/a&gt;, &lt;a title="Discussions for WebBrowserEx - Extended WebBrowser Control" href="http://webbrowserex.codeplex.com/Thread/List.aspx" target="_blank"&gt;comment&lt;/a&gt; and &lt;a title="Issue Tracker for WebBrowserEx - Extended WebBrowser Control" href="http://webbrowserex.codeplex.com/WorkItem/List.aspx" target="_blank"&gt;file issues&lt;/a&gt;. A nice tabbed browser demo is included.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1743268" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1743268" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1743268" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JA26N2eiu38:smEQu63Da2M:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JA26N2eiu38:smEQu63Da2M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JA26N2eiu38:smEQu63Da2M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JA26N2eiu38:smEQu63Da2M:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JA26N2eiu38:smEQu63Da2M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JA26N2eiu38:smEQu63Da2M:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JA26N2eiu38:smEQu63Da2M:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/JA26N2eiu38" height="1" width="1"/&gt;</description><pubDate>Wed, 02 Dec 2009 02:03:48 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1743268</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1743268</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-version-0-0-0-0-uploaded.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-version-0-0-0-0-uploaded.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1735161</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/JI73FKs-7I8/compiling-net-1-1-projects-in-visual-studio-2008.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TypeMock/default.aspx">TypeMock</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio2008/default.aspx">VisualStudio2008</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET1.1/default.aspx">.NET1.1</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSBuild/default.aspx">MSBuild</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/VisualStudio2003/default.aspx">VisualStudio2003</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSBee/default.aspx">MSBee</category><title>Compiling .NET 1.1 Projects In Visual Studio 2008</title><description>&lt;p align="justify"&gt;After having put my &lt;strong&gt;&lt;a title="Microsoft .NET Framework" href="https://www.microsoft.com/net/" target="_blank"&gt;.NET&lt;/a&gt; 1.1&lt;/strong&gt; application running on the &lt;strong&gt;.NET 2.0&lt;/strong&gt; runtime (&lt;a title="Running .NET 1.1 Applications On .NET 2.0" href="http://msmvps.com/blogs/paulomorgado/archive/2009/10/20/running-net-1-1-applications-on-net-2-0.aspx" target="_blank"&gt;^&lt;/a&gt;), I’m planning on migrating it to &lt;strong&gt;.NET 2.0&lt;/strong&gt;, but not all at once.&lt;/p&gt;  &lt;p align="justify"&gt;Because I don’t want to have 2 solutions (one on &lt;strong&gt;Visual Studio 2003&lt;/strong&gt; for the &lt;strong&gt;.NET 1.1&lt;/strong&gt; assemblies and another on &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; for the &lt;strong&gt;.NET 2.0&lt;/strong&gt; assemblies) I decide to try using &lt;a title="MSBuild Extras - Toolkit for .NET 1.1" href="http://www.codeplex.com/MSBee" target="_blank"&gt;MSBee&lt;/a&gt; and have only one &lt;a title="Microsoft Visual Studio" href="http://www.microsoft.com/visualstudio/default.mspx" target="_blank"&gt;Visual Studio&lt;/a&gt; 2008 solution.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;MSBee&lt;/strong&gt; has a &lt;a title="Project Hosting for Open Source Software" href="http://www.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt; project. You can download it from there or from &lt;a title="MSBuild Extras - Toolkit for .NET 1.1" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E0D0776F-25C4-444A-A6B9-71D06826F5B4"&gt;Microsoft Downloads&lt;/a&gt;. Because the build on Microsoft Downloads seemed to be the most stable one, that was the one I downloaded and installed. The package comes with a &lt;a title="Microsoft Office Word" href="http://office.microsoft.com/word/default.aspx" target="_blank"&gt;Word&lt;/a&gt; document that explains all that needs to be done.&lt;/p&gt;  &lt;p align="justify"&gt;Before you can install and use &lt;strong&gt;MSBee&lt;/strong&gt; you’ll need to install the &lt;a title=".NET Framework SDK Version 1.1" href="http://www.microsoft.com/downloads/details.aspx?familyid=9B3A2CA6-3647-4070-9F41-A333C6B9181D" target="_blank"&gt;.NET 1.1 SDK&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Having everything installed, I just opened the &lt;strong&gt;Visual Studio 2003&lt;/strong&gt; solution in &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; and let it convert the solution and projects (near 30).&lt;/p&gt;  &lt;p align="justify"&gt;After the conversion, for building the projects with the &lt;strong&gt;.NET 1.1&lt;/strong&gt; &lt;a title="Visual C# Developer Center" href="http://msdn.microsoft.com/vcsharp/default.aspx" target="_blank"&gt;C#&lt;/a&gt; compiler, the project files need to be edited to add the override the default targets with the &lt;strong&gt;MSBee&lt;/strong&gt; ones by adding the &lt;strong&gt;MSBee&lt;/strong&gt; imports after the default imports for the language: &lt;/p&gt;  &lt;pre style="font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;overflow:auto;" class="code"&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:red;"&gt;Project&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(MSBuildBinPath)\Microsoft.CSharp.targets&lt;/span&gt;&amp;quot; &lt;span style="color:blue;font-size:larger;font-weight:bold;"&gt;/&amp;gt;
&lt;span&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:red;"&gt;Project&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(MSBuildExtensionsPath)\MSBee\MSBuildExtras.FX1_1.CSharp.targets&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Another change needed (for &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; - I don&amp;#39;t know if it was needed for &lt;strong&gt;Visual Studio 2005&lt;/strong&gt;) is the tools version. &lt;strong&gt;MSBee&lt;/strong&gt; needs version 2.0. To change that you&amp;#39;ll have to change the ToolsVersion attribute of the project’s root element:&lt;/p&gt;

&lt;pre style="font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;overflow:auto;" class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Project &lt;/span&gt;&lt;span style="color:red;"&gt;DefaultTargets&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Build&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;ToolsVersion&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;font-size:larger;font-weight:bold;text-decoration:underline;"&gt;2.0&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/developer/msbuild/2003&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;&lt;strong&gt;MSBee&lt;/strong&gt; likes has own idea about output paths and I had set up custom output paths on my project. There’s information about this on the documentation but I decided to simply comment that out of the &lt;span style="font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;"&gt;$(MSBuildExtensionsPath)\MSBee\MSBuildExtras.FX1_1.Common.targets&lt;/span&gt; file:&lt;/p&gt;

&lt;pre style="font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;overflow:auto;" class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;!-- &lt;/span&gt;&lt;span style="color:green;"&gt;Paulo
&amp;lt;Choose&amp;gt;
  &amp;lt;When Condition=&amp;quot; &amp;#39;$(BaseFX1_1OutputPath)&amp;#39; == &amp;#39;&amp;#39; &amp;quot;&amp;gt;
    &amp;lt;PropertyGroup&amp;gt;
      &amp;lt;OutputPath&amp;gt;bin\FX1_1\&amp;lt;/OutputPath&amp;gt;
    &amp;lt;/PropertyGroup&amp;gt;
  &amp;lt;/When&amp;gt;
  &amp;lt;Otherwise&amp;gt;
    &amp;lt;PropertyGroup&amp;gt;
      &amp;lt;OutputPath&amp;gt;$(BaseFX1_1OutputPath)&amp;lt;/OutputPath&amp;gt;
      &amp;lt;OutputPath Condition=&amp;quot; !HasTrailingSlash(&amp;#39;$(OutputPath)&amp;#39;) &amp;quot;&amp;gt;$(OutputPath)\&amp;lt;/OutputPath&amp;gt;
    &amp;lt;/PropertyGroup&amp;gt;
  &amp;lt;/Otherwise&amp;gt;
&amp;lt;/Choose&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;

&amp;lt;!-- &lt;/span&gt;&lt;span style="color:green;"&gt;Paulo
&amp;lt;PropertyGroup&amp;gt;
  &amp;lt;BaseIntermediateOutputPath&amp;gt;obj\FX1_1\&amp;lt;/BaseIntermediateOutputPath&amp;gt;
  &amp;lt;IntermediateOutputPath Condition=&amp;quot; &amp;#39;$(PlatformName)&amp;#39; == &amp;#39;AnyCPU&amp;#39; &amp;quot;&amp;gt;$(BaseIntermediateOutputPath)$(Configuration)\&amp;lt;/IntermediateOutputPath&amp;gt;
  &amp;lt;IntermediateOutputPath Condition=&amp;quot; &amp;#39;$(PlatformName)&amp;#39; != &amp;#39;AnyCPU&amp;#39; &amp;quot;&amp;gt;$(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\&amp;lt;/IntermediateOutputPath&amp;gt;

  &amp;lt;OutputPath Condition=&amp;quot; &amp;#39;$(PlatformName)&amp;#39; == &amp;#39;AnyCPU&amp;#39; &amp;quot;&amp;gt;$(OutputPath)$(Configuration)\&amp;lt;/OutputPath&amp;gt;
  &amp;lt;OutputPath Condition=&amp;quot; &amp;#39;$(PlatformName)&amp;#39; != &amp;#39;AnyCPU&amp;#39; &amp;quot;&amp;gt;$(OutputPath)$(PlatformName)\$(Configuration)\&amp;lt;/OutputPath&amp;gt;
  
  &amp;lt;- Once OutputPath is determined, set OutDir to its value. -&amp;gt;
  &amp;lt;OutDir&amp;gt;$(OutputPath)&amp;lt;/OutDir&amp;gt;
&amp;lt;/PropertyGroup&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;This all seemed to work fine on my old Windows XP machine without any third party Visual Studio plug-ins, but when I tried it on my Windows Vista X64 machine, I came across some problems:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;div align="left"&gt;License Compiler&lt;/div&gt;

    &lt;p align="justify"&gt;Because I&amp;#39;m using &lt;a title="Infragistics - User Interface Components" href="http://www.infragistics.com/" target="_blank"&gt;Infragistics&lt;/a&gt;&amp;#39; controls, there&amp;#39;s a licences.licx file and the build will compile it. And that proved to be a problem.&lt;/p&gt;

    &lt;p align="justify"&gt;MSBee copies all the files it needs to the build process to a temporary folder, builds it in there and then copies the result to the output path.&lt;/p&gt;

    &lt;p align="justify"&gt;LC.exe seemed to never be able to find all the assemblies it needed. Searching seemed to me to be an old issue (even from the .NET 1.1 times) and the solution always pointed to not compile the license file. So, I commented that part out of the &lt;span style="font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;"&gt;$(MSBuildExtensionsPath)\MSBee\MSBuildExtras.FX1_1.Common.targets&lt;/span&gt; file:&lt;/p&gt;

    &lt;pre style="font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;overflow:auto;" class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Target
    &lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;CompileLicxFiles&lt;/span&gt;&amp;quot;&amp;#160; &lt;span style="color:red;"&gt;Condition&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;#39;@(_LicxFile)&amp;#39;!=&amp;#39;&amp;#39;&lt;/span&gt;&amp;quot;
    &lt;span style="color:red;"&gt;DependsOnTargets&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(CompileLicxFilesDependsOn)&lt;/span&gt;&amp;quot;
    &lt;span style="color:red;"&gt;Inputs&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(MSBuildAllProjects);@(_LicxFile);@(ReferencePath);@(ReferenceDependencyPaths)&lt;/span&gt;&amp;quot;
    &lt;span style="color:red;"&gt;Outputs&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(IntermediateOutputPath)$(TargetFileName).licenses&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;

  &amp;lt;!--
  &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;LC
      Sources=&amp;quot;@(_LicxFile)&amp;quot;
      LicenseTarget=&amp;quot;$(TargetFileName)&amp;quot;
      OutputDirectory=&amp;quot;$(IntermediateOutputPath)&amp;quot;
      OutputLicense=&amp;quot;$(IntermediateOutputPath)$(TargetFileName).licenses&amp;quot;
      ReferencedAssemblies=&amp;quot;@(ReferencePath);@(ReferenceDependencyPaths)&amp;quot;
      ToolPath=&amp;quot;$(TargetFrameworkSDKDirectory)bin\&amp;quot;&amp;gt;

    &amp;lt;Output TaskParameter=&amp;quot;OutputLicense&amp;quot; ItemName=&amp;quot;CompiledLicenseFile&amp;quot;/&amp;gt;
    &amp;lt;Output TaskParameter=&amp;quot;OutputLicense&amp;quot; ItemName=&amp;quot;FileWrites&amp;quot;/&amp;gt;

  &amp;lt;/LC&amp;gt;
  &lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;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;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;
    &lt;div align="left"&gt;Resource Generator&lt;/div&gt;

    &lt;p align="justify"&gt;Although this worked fine on the command line, inside &lt;strong&gt;Visual Studio&lt;/strong&gt; &lt;span style="font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;"&gt;ResGen.exe&lt;/span&gt; would throw some error and needed to be closed.&lt;/p&gt;

    &lt;p align="justify"&gt;Looking at the &lt;a title="Windows Application Log" href="http://technet.microsoft.com/library/ms157312.aspx" target="_blank"&gt;Windows Application Log&lt;/a&gt; I found out this:&lt;/p&gt;

    &lt;div align="justify"&gt;
      &lt;p style="font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;overflow:auto;" class="code"&gt;Faulting application Resgen.exe, version 1.1.4322.573, time stamp 0x3e559b5f, faulting module MockWeaver.dll, version 0.0.0.0, time stamp 0x4adb072e, exception code 0xc0000005, fault offset 0x00018fac, process id 0x4a50, application start time 0x01ca53c14488a2fb. &lt;/p&gt;
    &lt;/div&gt;

    &lt;p align="justify"&gt;&lt;strong&gt;MockWeaver.dll&lt;/strong&gt; belongs to &lt;a title="Typemock Isolator - Isolate any .NET dependencies to make unit testing easy" href="http://www.typemock.com/" target="_blank"&gt;Isolator&lt;/a&gt; and I just disable it when building inside &lt;strong&gt;Visual Studio&lt;/strong&gt;. I was hoping to start using Isolator on this project, but, for now, I can&amp;#39;t.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p align="justify"&gt;I hope this can be of some help and, if you need more, you’ll probably find it at the &lt;strong&gt;MSBee&lt;/strong&gt;’s &lt;strong&gt;CodePlex&lt;/strong&gt; forum.&lt;/p&gt;

&lt;p align="justify"&gt;The bottom line is: &lt;strong&gt;You don’t need Visual Studio 2003!&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1735161" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1735161" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1735161" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JI73FKs-7I8:mIeQDWdiDYo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JI73FKs-7I8:mIeQDWdiDYo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JI73FKs-7I8:mIeQDWdiDYo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JI73FKs-7I8:mIeQDWdiDYo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JI73FKs-7I8:mIeQDWdiDYo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=JI73FKs-7I8:mIeQDWdiDYo:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=JI73FKs-7I8:mIeQDWdiDYo:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/JI73FKs-7I8" height="1" width="1"/&gt;</description><pubDate>Sun, 25 Oct 2009 23:09:44 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1735161</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1735161</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/10/26/compiling-net-1-1-projects-in-visual-studio-2008.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/10/26/compiling-net-1-1-projects-in-visual-studio-2008.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1733546</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/uG7zHwHEppo/running-net-1-1-applications-on-net-2-0.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET1.1/default.aspx">.NET1.1</category><title>Running .NET 1.1 Applications On .NET 2.0</title><description>&lt;p align="justify"&gt;One of the applications I develop is a &lt;a title="Microsoft .NET Framework" href="https://www.microsoft.com/net/" target="_blank"&gt;.NET&lt;/a&gt; 1.1 &lt;a title="The Official Microsoft WPF and Windows Forms Site" href="http://windowsclient.net/" target="_blank"&gt;Windows Forms&lt;/a&gt; application used by more than 5000 users and critical for the business.&lt;/p&gt;  &lt;p align="justify"&gt;Being a complex and critical application, porting it to the 2.0 runtime just because it was not an option because it would mean installing the new runtime and framework on the stable environment of the workstations (&lt;a title="Microsoft Windows" href="http://cli.gs/Microsoft-Windows" target="_blank"&gt;&lt;/a&gt;&lt;a title="Microsoft Windows XP" href="http://www.microsoft.com/windows/windows-xp/" target="_blank"&gt;Windows XP&lt;/a&gt;&lt;/a&gt;) and test fully the application. That was not an option.&lt;/p&gt;  &lt;p align="justify"&gt;As time went by, a developer received a brand new laptop with &lt;a title="Microsoft Windows Vista" href="https://www.microsoft.com/windows/windows-vista/" target="_blank"&gt;Windows Vista&lt;/a&gt;. Since he only needed ,NET 2.0 for his developments, he never installed .NET 1.1.&lt;/p&gt;  &lt;p align="justify"&gt;Another developer on my team had already tried to port the application to .NET 2.0 and run into some issues:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;The main component of this application is the &lt;a title="WebBrowserControl for the .NET Framework 1.1" href="http://www.codeproject.com/KB/miscctrl/WebBrowserControl11.aspx" target="_blank"&gt;Web Browser Control&lt;/a&gt;. This control derives from &lt;a title="AxHost Class" href="http://msdn.microsoft.com/library/system.windows.forms.axhost.aspx" target="_blank"&gt;AxHost&lt;/a&gt;, which changed going from 1.1 to 2.0 and needed major changes to compile for the 2.0 framework.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Another change was that mixing synchronous and asynchronous calls is not allowed in the 2.0 framework and we had, at least, one of those in our use of &lt;a title="HttpWebRequest Class" href="http://msdn.microsoft.com/library/system.net.httpwebrequest.aspx" target="_blank"&gt;HttpWebRequest&lt;/a&gt;/&lt;a title="HttpWebResponse Class" href="http://msdn.microsoft.com/library/system.net.httpwebresponse.aspx" target="_blank"&gt;HttpWebResponse&lt;/a&gt;.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;The .NET 2.0 runtime and frameworks were developed to be highly compatible with applications written and compiled to the 1.1 runtime and frameworks. In fact, some of the changes were just applying the &lt;a title="ObsoleteAttribute Class" href="http://msdn.microsoft.com/library/system.obsoleteattribute.aspx" target="_blank"&gt;ObsoleteAttribute&lt;/a&gt; set to throw a compiler error when used, which doesn’t prevent its use by already compiled assemblies. This was the case of the WebBrowserControl/AxHost and just using the assembly compiled for .NET 1.1 would probably run fine. And it did.&lt;/p&gt;  &lt;p align="justify"&gt;The synchronous/asynchronous was also very easy to fix. All it took was changing this:&lt;/p&gt;  &lt;p style="padding-left:2em;" align="left"&gt;&lt;font face="Consolas"&gt;request.GetRequestStream()&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;into this:&lt;/p&gt;  &lt;p style="padding-left:2em;" align="left"&gt;&lt;font face="Consolas"&gt;request.EndGetRequestStream(response.BeginGetRequestStream(null, null))&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;And it all worked as if it was running on .NET 1.1.&lt;/p&gt;  &lt;p&gt;But that’s not the end of it. Latter came a requirement to use, in one of the web pages that ran in the web browser control, an ActiveX component developed in .NET 2.0.&lt;/p&gt;  &lt;p&gt;But that time, the 2.0 runtime and framework were already installed on the workstations.&lt;/p&gt;  &lt;p&gt;But how would we force the application to run in the 2.0 runtime if the 1.1 runtime was still there?&lt;/p&gt;  &lt;p&gt;As simple as adding this to the configuration file (App.config):&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;startup&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;requiredRuntime &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;v2.0.50727&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;safemode&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;startup&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1733546" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1733546" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1733546" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uG7zHwHEppo:CcK0jhfiDPw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uG7zHwHEppo:CcK0jhfiDPw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uG7zHwHEppo:CcK0jhfiDPw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uG7zHwHEppo:CcK0jhfiDPw:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uG7zHwHEppo:CcK0jhfiDPw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uG7zHwHEppo:CcK0jhfiDPw:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uG7zHwHEppo:CcK0jhfiDPw:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/uG7zHwHEppo" height="1" width="1"/&gt;</description><pubDate>Tue, 20 Oct 2009 00:40:20 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1733546</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1733546</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/10/20/running-net-1-1-applications-on-net-2-0.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/10/20/running-net-1-1-applications-on-net-2-0.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1732069</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/m6ncRttF_X0/linq-to-sql-tips-amp-tricks-string-operations.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/LINQ2SQL/default.aspx">LINQ2SQL</category><title>LINQ To SQL Tips &amp; Tricks: String Operations</title><description>&lt;a title="LINQ With C# (Portuguese)" href="http://bit.ly/Livro-LINQ-Com-Charp" target="_blank"&gt;&lt;img style="border-right-width:0px;margin:0px 0px 10px 10px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="LINQ With C# (Portuguese)" border="0" alt="LINQ With C# (Portuguese)" align="right" src="http://www.fca.pt/ximages/722_547.gif" width="99" height="140" /&gt;&lt;/a&gt;   &lt;p align="justify"&gt;&lt;a title="Language-Integrated Query (LINQ)" href="http://msdn.microsoft.com/library/bb397926.aspx" target="_blank"&gt;LINQ&lt;/a&gt; brought developers a very user friendly and domain independent style of writing queries.&lt;/p&gt;  &lt;p align="justify"&gt;The fact that the way queries are written is domain independent doesn’t mean that any query will compile the same way or even run the same way. You’ll always need to know how the provider will behave.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a title="LINQ to Objects" href="http://msdn.microsoft.com/library/bb397919.aspx" target="_blank"&gt;LINQ To Objects&lt;/a&gt;, for example, will compile queries as a &lt;strong&gt;Func&amp;lt;&amp;gt;&lt;/strong&gt; delegate and the query methods will return &lt;a title="IEnumerable(T) Interface" href="http://msdn.microsoft.com/library/9eekhta0.aspx" target="_blank"&gt;IEnumerable(T)&lt;/a&gt; implementations.&lt;/p&gt;  &lt;p align="justify"&gt;On the other hand, &lt;a title="LINQ To SQL" href="http://msdn.microsoft.com/library/bb386976.aspx" target="_blank"&gt;LINQ To SQL&lt;/a&gt; will compile queries as an &lt;strong&gt;Expression&amp;lt;Func&amp;lt;&amp;gt;&amp;gt;&lt;/strong&gt; (which is, in fact, an expression tree) instance and the query methods will return &lt;a title="IQueryable(T) Interface" href="http://msdn.microsoft.com/library/bb351562.aspx" target="_blank"&gt;IQueryable(T)&lt;/a&gt; implementations.&lt;/p&gt;  &lt;p align="justify"&gt;Because LINQ To SQL queries are compiled to an expression tree, that allows the provider to treat the query elements as it sees fit.&lt;/p&gt;  &lt;p align="justify"&gt;In this case, this means that all operations that can be done on the database will be done on the database and the developer must be aware of this when she/he is writing the queries.&lt;/p&gt;  &lt;p align="justify"&gt;Lets take an example using the &lt;strong&gt;AdventureWorks&lt;/strong&gt; database (if you don’t have it, you can download it from &lt;a title="Microsoft SQL Server Product Samples: Database" href="http://msftdbprodsamples.codeplex.com/" target="_blank"&gt;here&lt;/a&gt;).&lt;/p&gt;  &lt;p align="justify"&gt;I want to build a list of salutation for every employee that has the &lt;strong&gt;SalariedFlag&lt;/strong&gt; set, in the form of:&lt;/p&gt;  &lt;p style="padding-left:1em;" align="justify"&gt;[Mr.|Mrs.|Miss] &amp;lt;first name&amp;gt; &amp;lt;middle name&amp;gt; &amp;lt;last name&amp;gt;&lt;/p&gt;  &lt;p align="justify"&gt;But there’s also one detail about the data in the database: FirstName, MiddleName and LastName may have trailing spaces and I don’t want them.&lt;/p&gt;  &lt;p align="justify"&gt;This is a simple query like this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;q1 = &lt;span style="color:blue;"&gt;from &lt;/span&gt;e &lt;span style="color:blue;"&gt;in &lt;/span&gt;context.Employees
         &lt;span style="color:blue;"&gt;where &lt;/span&gt;e.SalariedFlag
         &lt;span style="color:blue;"&gt;select
            &lt;/span&gt;((e.Gender == &lt;span style="color:#a31515;"&gt;&amp;#39;F&amp;#39;&lt;/span&gt;) ? ((e.MaritalStatus == &lt;span style="color:#a31515;"&gt;&amp;#39;S&amp;#39;&lt;/span&gt;) ? &lt;span style="color:#a31515;"&gt;&amp;quot;Miss&amp;quot; &lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot;Mrs.&amp;quot;&lt;/span&gt;) : &lt;span style="color:#a31515;"&gt;&amp;quot;Mr.&amp;quot;&lt;/span&gt;) + &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;+
            e.Person.FirstName.Trim() +
            (e.Person.MiddleName == &lt;span style="color:blue;"&gt;null &lt;/span&gt;|| e.Person.MiddleName.Trim().Length == 0 ? &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;+ e.Person.MiddleName.Trim() + &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot;&lt;/span&gt;) +
            e.Person.LastName.Trim();&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;and it will be executed as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;((((
    (&lt;/span&gt;&lt;span style="color:blue;"&gt;CASE
        WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;UNICODE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Gender]&lt;span style="color:gray;"&gt;) = &lt;/span&gt;@p0 &lt;span style="color:blue;"&gt;THEN
            &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;CASE
                WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;UNICODE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MaritalStatus]&lt;span style="color:gray;"&gt;) = &lt;/span&gt;@p1 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;@p2
                &lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;@p3
             &lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;span style="color:gray;"&gt;)
        &lt;/span&gt;&lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;&lt;span style="color:magenta;"&gt;CONVERT&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;NVarChar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4&lt;span style="color:gray;"&gt;),&lt;/span&gt;@p4&lt;span style="color:gray;"&gt;)
     &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;span style="color:gray;"&gt;)) + &lt;/span&gt;@p5&lt;span style="color:gray;"&gt;) + &lt;/span&gt;&lt;span style="color:magenta;"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[FirstName]&lt;span style="color:gray;"&gt;))) + (
    (&lt;/span&gt;&lt;span style="color:blue;"&gt;CASE
        WHEN &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MiddleName] &lt;span style="color:gray;"&gt;IS NULL) OR (&lt;/span&gt;&lt;span style="color:magenta;"&gt;LEN&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MiddleName]&lt;span style="color:gray;"&gt;))) = &lt;/span&gt;@p6&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;CONVERT&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;NVarChar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;MAX&lt;/span&gt;&lt;span style="color:gray;"&gt;),&lt;/span&gt;@p7&lt;span style="color:gray;"&gt;)
        &lt;/span&gt;&lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@p8 &lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MiddleName]&lt;span style="color:gray;"&gt;))) + &lt;/span&gt;@p9
     &lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;span style="color:gray;"&gt;))) + &lt;/span&gt;&lt;span style="color:magenta;"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[LastName]&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[value]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;[HumanResources]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Employee] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[t0]
&lt;span style="color:gray;"&gt;INNER JOIN &lt;/span&gt;[Person]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Person] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[t1] &lt;span style="color:blue;"&gt;ON &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID] &lt;span style="color:gray;"&gt;= &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID]
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[SalariedFlag] &lt;span style="color:gray;"&gt;= &lt;/span&gt;1
&lt;span style="color:green;"&gt;-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [70]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [83]
-- @p2: Input NVarChar (Size = 4; Prec = 0; Scale = 0) [Miss]
-- @p3: Input NVarChar (Size = 4; Prec = 0; Scale = 0) [Mrs.]
-- @p4: Input NVarChar (Size = 3; Prec = 0; Scale = 0) [Mr.]
-- @p5: Input NVarChar (Size = 1; Prec = 0; Scale = 0) [ ]
-- @p6: Input Int (Size = 0; Prec = 0; Scale = 0) [0]
-- @p7: Input NVarChar (Size = 1; Prec = 0; Scale = 0) [ ]
-- @p8: Input NVarChar (Size = 1; Prec = 0; Scale = 0) [ ]
-- @p9: Input NVarChar (Size = 1; Prec = 0; Scale = 0) [ ]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926&lt;/span&gt;&lt;/pre&gt;

&lt;p align="justify"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;If you notice the query, there are a lot of text operations going on for each row.&lt;/p&gt;

&lt;p align="justify"&gt;Depending on the number of rows or database load this can prove to be very bad. The result might even be just a timeout.&lt;/p&gt;

&lt;p align="justify"&gt;So, how do we force the string operations to occur on the client instead of the database?&lt;/p&gt;

&lt;p align="justify"&gt;Only &lt;strong&gt;IQueryable&amp;lt;T&amp;gt;&lt;/strong&gt; will be translated to T-SQL. So, all we need to do is change the type of the enumerator being iterated.&lt;/p&gt;

&lt;p align="justify"&gt;One way to do this is using the the &lt;a title="Enumerable.AsEnumerable(TSource) Method" href="http://msdn.microsoft.com/library/bb335435.aspx" target="_blank"&gt;AsEnumerable&lt;/a&gt; method of the &lt;a title="Enumerable Class" href="http://msdn.microsoft.com/library/system.linq.enumerable.aspx" target="_blank"&gt;Enumerable&lt;/a&gt; class.&lt;/p&gt;

&lt;p align="justify"&gt;The query would now be written as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;q2 = &lt;span style="color:blue;"&gt;from &lt;/span&gt;e &lt;span style="color:blue;"&gt;in &lt;/span&gt;context.Employees.Where(e =&amp;gt; e.SalariedFlag).AsEnumerable()
         &lt;span style="color:blue;"&gt;select
            &lt;/span&gt;((e.Gender == &lt;span style="color:#a31515;"&gt;&amp;#39;F&amp;#39;&lt;/span&gt;) ? ((e.MaritalStatus == &lt;span style="color:#a31515;"&gt;&amp;#39;S&amp;#39;&lt;/span&gt;) ? &lt;span style="color:#a31515;"&gt;&amp;quot;Miss&amp;quot; &lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot;Mrs.&amp;quot;&lt;/span&gt;) : &lt;span style="color:#a31515;"&gt;&amp;quot;Mr.&amp;quot;&lt;/span&gt;) + &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;+ e.Person.FirstName.Trim() +
            (e.Person.MiddleName == &lt;span style="color:blue;"&gt;null &lt;/span&gt;|| e.Person.MiddleName.Trim().Length == 0 ? &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;+ e.Person.MiddleName.Trim() + &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot;&lt;/span&gt;) +
            e.Person.LastName.Trim();&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;and it will be executed as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[LoginID]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[NationalIDNumber]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[JobTitle]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MaritalStatus]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BirthDate]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Gender]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[HireDate]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[SalariedFlag]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[VacationHours]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[SickLeaveHours]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[CurrentFlag]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[rowguid]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ModifiedDate]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[BusinessEntityID2]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[PersonType]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[NameStyle]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Title]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[FirstName]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MiddleName]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[LastName]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Suffix]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[EmailPromotion]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[AdditionalContactInfo]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Demographics]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[rowguid] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[rowguid2]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ModifiedDate] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[ModifiedDate2]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;[HumanResources]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Employee] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[t0]
&lt;span style="color:gray;"&gt;INNER JOIN &lt;/span&gt;[Person]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Person] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[t1] &lt;span style="color:blue;"&gt;ON &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID] &lt;span style="color:gray;"&gt;= &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID]
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[SalariedFlag] &lt;span style="color:gray;"&gt;= &lt;/span&gt;1
&lt;span style="color:green;"&gt;-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;As you can notice, text operations are no longer done on the database, but all the columns of both tables are being returned. And this is still a bad thing because we are using network bandwidth with data that won’t be used.&lt;/p&gt;

&lt;p align="justify"&gt;The way to choose the columns that will be retrieved from the database is by selecting only the ones wanted in the select statement. But because we still want string operations the be done on the client, we’ll need to project the desired columns into an intermediary object. Since we won’t need this object outside the query, we’ll use an &lt;a title="Anonymous Types" href="http://msdn.microsoft.com/library/bb397696.aspx" target="_blank"&gt;anonymous type&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The query would now be written as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;q3 = &lt;span style="color:blue;"&gt;from &lt;/span&gt;n &lt;span style="color:blue;"&gt;in
             &lt;/span&gt;(
                 &lt;span style="color:blue;"&gt;from &lt;/span&gt;e &lt;span style="color:blue;"&gt;in &lt;/span&gt;context.Employees
                 &lt;span style="color:blue;"&gt;where &lt;/span&gt;e.SalariedFlag
                 &lt;span style="color:blue;"&gt;select new
                 &lt;/span&gt;{
                     Gender = e.Gender,
                     MaritalStatus = e.MaritalStatus,
                     FirstName = e.Person.FirstName,
                     MiddleName = e.Person.MiddleName,
                     LastName = e.Person.LastName
                 }
             ).AsEnumerable()
         &lt;span style="color:blue;"&gt;select &lt;/span&gt;((n.Gender == &lt;span style="color:#a31515;"&gt;&amp;#39;F&amp;#39;&lt;/span&gt;) ? ((n.MaritalStatus == &lt;span style="color:#a31515;"&gt;&amp;#39;S&amp;#39;&lt;/span&gt;) ? &lt;span style="color:#a31515;"&gt;&amp;quot;Miss&amp;quot; &lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot;Mrs.&amp;quot;&lt;/span&gt;) : &lt;span style="color:#a31515;"&gt;&amp;quot;Mr.&amp;quot;&lt;/span&gt;) + &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;+ n.FirstName.Trim()
         + (n.MiddleName == &lt;span style="color:blue;"&gt;null &lt;/span&gt;|| n.MiddleName.Trim().Length == 0 ? &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;+ n.MiddleName.Trim() + &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot;&lt;/span&gt;)
         + n.LastName.Trim();&lt;/pre&gt;

&lt;p&gt;and it will be executed as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Gender]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MaritalStatus]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[FirstName]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MiddleName]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[LastName]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;[HumanResources]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Employee] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[t0]
&lt;span style="color:gray;"&gt;INNER JOIN &lt;/span&gt;[Person]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Person] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[t1] &lt;span style="color:blue;"&gt;ON &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID] &lt;span style="color:gray;"&gt;= &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID]
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[SalariedFlag] &lt;span style="color:gray;"&gt;= &lt;/span&gt;1
&lt;span style="color:green;"&gt;-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Notice the call to Enumerable.As Enumerable to translate the LINQ To SQL query into a LINQ To Objects query.&lt;/p&gt;

&lt;p&gt;And, to end this long blog post, if you don’t use any string operations on the query, they, obviously, won’t be translated to T-SQL:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;q4 = &lt;span style="color:blue;"&gt;from &lt;/span&gt;e &lt;span style="color:blue;"&gt;in &lt;/span&gt;context.Employees
         &lt;span style="color:blue;"&gt;where &lt;/span&gt;e.SalariedFlag
         &lt;span style="color:blue;"&gt;select &lt;/span&gt;BuildSalutation(e.Gender, e.MaritalStatus, e.Person.FirstName, e.Person.MiddleName, e.Person.LastName);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;where &lt;strong&gt;BuildSalutation&lt;/strong&gt; is implemented as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private static object &lt;/span&gt;BuildSalutation(&lt;span style="color:blue;"&gt;char &lt;/span&gt;gender, &lt;span style="color:blue;"&gt;char &lt;/span&gt;maritalStatus, &lt;span style="color:blue;"&gt;string &lt;/span&gt;firstName, &lt;span style="color:blue;"&gt;string &lt;/span&gt;middleName, &lt;span style="color:blue;"&gt;string &lt;/span&gt;lastName)
{
    &lt;span style="color:blue;"&gt;return &lt;/span&gt;((gender == &lt;span style="color:#a31515;"&gt;&amp;#39;F&amp;#39;&lt;/span&gt;) ? ((maritalStatus == &lt;span style="color:#a31515;"&gt;&amp;#39;S&amp;#39;&lt;/span&gt;) ? &lt;span style="color:#a31515;"&gt;&amp;quot;Miss&amp;quot; &lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot;Mrs.&amp;quot;&lt;/span&gt;) : &lt;span style="color:#a31515;"&gt;&amp;quot;Mr.&amp;quot;&lt;/span&gt;) + &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot;
        &lt;/span&gt;+ firstName.Trim()
        + (middleName == &lt;span style="color:blue;"&gt;null &lt;/span&gt;|| middleName.Trim().Length == 0 ? &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot; &lt;/span&gt;+ middleName.Trim() + &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot;&lt;/span&gt;)
        + lastName.Trim();
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;and it will be executed as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Gender] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[gender]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MaritalStatus] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[maritalStatus]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[FirstName] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[firstName]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MiddleName] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[middleName]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[LastName] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[lastName]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;[HumanResources]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Employee] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[t0]
&lt;span style="color:gray;"&gt;INNER JOIN &lt;/span&gt;[Person]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Person] &lt;span style="color:blue;"&gt;AS &lt;/span&gt;[t1] &lt;span style="color:blue;"&gt;ON &lt;/span&gt;[t1]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID] &lt;span style="color:gray;"&gt;= &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[BusinessEntityID]
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;[t0]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[SalariedFlag] &lt;span style="color:gray;"&gt;= &lt;/span&gt;1
&lt;span style="color:green;"&gt;-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Have you noticed that this T-SQL query is pretty much the same in the previous example?&lt;/p&gt;

&lt;p&gt;If you are still reading this, I hope you now aware of how you write your LINQ To SQL queries affect the generated T-SQL.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1732069" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1732069" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1732069" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=m6ncRttF_X0:doW11NjQDZI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=m6ncRttF_X0:doW11NjQDZI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=m6ncRttF_X0:doW11NjQDZI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=m6ncRttF_X0:doW11NjQDZI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=m6ncRttF_X0:doW11NjQDZI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=m6ncRttF_X0:doW11NjQDZI:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=m6ncRttF_X0:doW11NjQDZI:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/m6ncRttF_X0" height="1" width="1"/&gt;</description><pubDate>Tue, 13 Oct 2009 00:51:43 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1732069</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1732069</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/10/13/linq-to-sql-tips-amp-tricks-string-operations.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/10/13/linq-to-sql-tips-amp-tricks-string-operations.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1724580</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/Kv_TJZtBCq0/powershell-for-the-net-developer.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Reflector/default.aspx">Reflector</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PowerShell/default.aspx">PowerShell</category><title>PowerShell For The .NET Developer</title><description>&lt;p align="justify"&gt;Some time ago I needed to have the &lt;strong&gt;validationKey&lt;/strong&gt; of the &lt;a title="machineKey Element (ASP.NET Settings Schema)" href="http://msdn.microsoft.com/library/w8h3skw9.aspx" target="_blank"&gt;machineKey element&lt;/a&gt; of an &lt;a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; application changed and found out that ASP.NET doesn’t provide a command-line tool (or any other) to do this.&lt;/p&gt;  &lt;p align="justify"&gt;Looking around I found several applications and code samples to do it, but to have a system administrator do this I needed to test and document the application and it was to much work for such task.&lt;/p&gt;  &lt;p align="justify"&gt;I’ve always been a supporter of the idea of &lt;a title="Windows PowerShell" href="http://www.microsoft.com/powershell" target="_blank"&gt;PowerShell&lt;/a&gt; but I never used it my self. Just because I almost always have &lt;a title="Microsoft Visual Studio" href="http://cli.gs/vstudio" target="_blank"&gt;Visual Studio&lt;/a&gt; open and writing a simple console application is quicker and easier than learning PowerShell.&lt;/p&gt;  &lt;p align="justify"&gt;This time I decide that I would do a PowerShell script instead.&lt;/p&gt;  &lt;p align="justify"&gt;In &lt;a title="Microsoft Visual C#" href="http://cli.gs/vcsharp" target="_blank"&gt;C#&lt;/a&gt; I would have done something like this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Program
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;private static string &lt;/span&gt;GenerateKey()
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;buff = &lt;span style="color:blue;"&gt;new byte&lt;/span&gt;[64];
        (&lt;span style="color:blue;"&gt;new &lt;/span&gt;System.Security.Cryptography.&lt;span style="color:#2b91af;"&gt;RNGCryptoServiceProvider&lt;/span&gt;()).GetBytes(buff);
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;sb = &lt;span style="color:blue;"&gt;new &lt;/span&gt;System.Text.&lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;();
        &lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;b &lt;span style="color:blue;"&gt;in &lt;/span&gt;buff)
        {
            sb.AppendFormat(&lt;span style="color:#a31515;"&gt;&amp;quot;{0:X2}&amp;quot;&lt;/span&gt;, b);
        }
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;sb.ToString();
    }

    &lt;span style="color:blue;"&gt;private static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args)
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;path = args[0];
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;config = System.Web.Configuration.&lt;span style="color:#2b91af;"&gt;WebConfigurationManager&lt;/span&gt;.OpenMachineConfiguration(path);
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;systemWeb = config.GetSectionGroup(&lt;span style="color:#a31515;"&gt;&amp;quot;system.web&amp;quot;&lt;/span&gt;) &lt;span style="color:blue;"&gt;as &lt;/span&gt;System.Web.Configuration.&lt;span style="color:#2b91af;"&gt;SystemWebSectionGroup&lt;/span&gt;;
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;machineKey = systemWeb.MachineKey;
        machineKey.ValidationKey = GenerateKey();
        config.Save(System.Configuration.&lt;span style="color:#2b91af;"&gt;ConfigurationSaveMode&lt;/span&gt;.Modified);
    }
}&lt;/pre&gt;

&lt;p align="justify"&gt;How would it be in PowerShell? As simple as this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;function GenerateKey
&lt;/span&gt;&lt;span style="color:black;"&gt;{
    [&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Byte&lt;/span&gt;&lt;span style="color:black;"&gt;[]]&lt;/span&gt;&lt;span style="color:purple;"&gt;$buff &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0..63
    (&lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;new-object &lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Security.Cryptography.RNGCryptoServiceProvider&lt;/span&gt;&lt;span style="color:black;"&gt;).&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;GetBytes&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;$buff&lt;/span&gt;&lt;span style="color:black;"&gt;)
    &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;new-object &lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Text.StringBuilder&lt;/span&gt;&lt;span style="color:black;"&gt;(128)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;$i &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0&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:purple;"&gt;$i &lt;/span&gt;&lt;span style="color:red;"&gt;-lt &lt;/span&gt;&lt;span style="color:purple;"&gt;$buff&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;Length&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:purple;"&gt;$i&lt;/span&gt;&lt;span style="color:red;"&gt;++&lt;/span&gt;&lt;span style="color:black;"&gt;)
    {
        &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;AppendFormat&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;{0:X2}&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:purple;"&gt;$buff&lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:purple;"&gt;$i&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:purple;"&gt;$sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;ToString&lt;/span&gt;&lt;span style="color:black;"&gt;()
}

[&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Reflection.Assembly&lt;/span&gt;&lt;span style="color:black;"&gt;]::&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;LoadWithPartialName&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;System.Web&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)
&lt;/span&gt;&lt;span style="color:purple;"&gt;$config &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Web.Configuration.WebConfigurationManager&lt;/span&gt;&lt;span style="color:black;"&gt;]::&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;OpenWebConfiguration&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;em&gt;&amp;lt;path&amp;gt;&lt;/em&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)
&lt;/span&gt;&lt;span style="color:purple;"&gt;$systemWeb &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;$config&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;GetSectionGroup&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;system.web&amp;quot;&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:purple;"&gt;$machineKey &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;$systemWeb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;MachineKey
&lt;/span&gt;&lt;span style="color:purple;"&gt;$machineKey&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;ValidationKey&lt;/span&gt;&lt;span style="color:red;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;GenerateKey
&lt;/span&gt;&lt;span style="color:purple;"&gt;$config&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;save&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Wonder how I got from no knowledge of PowerShell to this? Simple. Something that every real &lt;a title="Microsoft .NET Framework" href="https://www.microsoft.com/net/" target="_blank"&gt;.NET&lt;/a&gt; developer has and loves: &lt;a title=".NET Reflector" href="http://www.red-gate.com/products/reflector/" target="_blank"&gt;.NET Reflector&lt;/a&gt; (with a &lt;a title="PowerShellLanguage" href="http://reflectoraddins.codeplex.com/Wiki/View.aspx?title=PowerShellLanguage" target="_blank"&gt;PowerShell add-in&lt;/a&gt;, of course).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1724580" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1724580" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1724580" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=Kv_TJZtBCq0:XRH4H85tGfs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=Kv_TJZtBCq0:XRH4H85tGfs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=Kv_TJZtBCq0:XRH4H85tGfs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=Kv_TJZtBCq0:XRH4H85tGfs:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=Kv_TJZtBCq0:XRH4H85tGfs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=Kv_TJZtBCq0:XRH4H85tGfs:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=Kv_TJZtBCq0:XRH4H85tGfs:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/Kv_TJZtBCq0" height="1" width="1"/&gt;</description><pubDate>Fri, 18 Sep 2009 00:03:12 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1724580</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1724580</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/09/18/powershell-for-the-net-developer.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/09/18/powershell-for-the-net-developer.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1723915</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/ftSz8D4FAIQ/from-vista-to-7-with-wet-and-whs.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Windows/default.aspx">Windows</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WindowsHomeServer/default.aspx">WindowsHomeServer</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WindowsVista/default.aspx">WindowsVista</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Office/default.aspx">Office</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Office2010/default.aspx">Office2010</category><title>From Vista To 7 With WET And WHS</title><description>&lt;p align="justify"&gt;My son inherits my old machines.&lt;/p&gt;  &lt;p align="justify"&gt;His current one was a machine that started with &lt;a title="Microsoft Windows Vista" href="https://www.microsoft.com/windows/windows-vista/" target="_blank"&gt;Windows Vista&lt;/a&gt; x86 Ultimate RTM, then SP1 and finally SP2. Also, along the way, several versions of &lt;a title="Microsoft Office" href="http://office.microsoft.com/" target="_blank"&gt;Microsoft Office&lt;/a&gt;, &lt;a title="Microsoft .NET Framework" href="https://www.microsoft.com/net/" target="_blank"&gt;.NET&lt;/a&gt;, &lt;a title="Microsoft Visual Studio" href="http://cli.gs/vstudio" target="_blank"&gt;Visual Studio&lt;/a&gt;, &lt;a title="Microsoft SQL Server" href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;SQL Server&lt;/a&gt; and much more.&lt;/p&gt;  &lt;p align="justify"&gt;I usually have dozens of applications installed. Retrieving license keys and installing them a gain is such an hassle that I choose to upgrade whenever I can.&lt;/p&gt;  &lt;p align="justify"&gt;Now that &lt;a title="Microsoft Windows 7" href="http://www.microsoft.com/windows/windows-7/" target="_blank"&gt;Windows 7&lt;/a&gt; is out and there’s a beta of Office 2010, my son wanted to upgrade the machine.&lt;/p&gt;  &lt;p align="justify"&gt;Because the machine had already gone through all those updates and he didn’t like the way I had partitioned the disk, I recommended him to format the disk and do a clean install.&lt;/p&gt;  &lt;p align="justify"&gt;One of the hassles of a clean install is that you loose all your settings such as &lt;a title="Internet Explorer" href="http://www.microsoft.com/windows/internet-explorer/" target="_blank"&gt;Internet Explorer&lt;/a&gt; settings and favorites and &lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt; &lt;a title="Microsoft Outlook" href="http://office.microsoft.com/outlook/" target="_blank"&gt;Outlook&lt;/a&gt; accounts and PSTs (specially if you have &lt;a title="Internet Message Access Protocol" href="http://wikipedia.org/wiki/Internet_Message_Access_Protocol" target="_blank"&gt;IMAP&lt;/a&gt; accounts).&lt;/p&gt;  &lt;p align="justify"&gt;Since I had already successfully used &lt;a title="Windows Easy Transfer" href="http://www.microsoft.com/windows/windows-vista/get/easy-transfer.aspx" target="_blank"&gt;Windows Easy Transfer&lt;/a&gt; to migrate my work laptop from &lt;a title="Microsoft Windows XP" href="http://www.microsoft.com/windows/windows-xp/" target="_blank"&gt;Windows XP&lt;/a&gt; (x86) to Windows Vista x64 Enterprise, I told him not to worry.&lt;/p&gt;  &lt;p align="justify"&gt;Windows Easy Transfer guides you through the process of transferring files and settings from one Windows installation to another.&lt;/p&gt;  &lt;p align="justify"&gt;With Windows Easy Transfer you can transfer:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Files and folders.&lt;/b&gt;&lt;/div&gt;      &lt;div align="justify"&gt;Everything within the Documents, Pictures, and Shared Documents folders. Using advanced options, you can select additional files and folders to transfer.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;E‑mail settings, contacts, and messages.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Messages, account settings, and address books from Microsoft Outlook Express, Outlook, Windows Mail, and other e‑mail programs.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Program settings.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Settings that keep your programs configured as you had them on your old installation. You must first install the programs on your new computer, because Windows Easy Transfer does not transfer the programs themselves. Some programs might not work on this version of Windows, including security programs, antivirus programs, firewall programs (your new computer should already have a firewall running to help ensure safety during the transfer), and programs with software drivers.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;User accounts and settings.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Color schemes, desktop backgrounds, network connections, screen savers, fonts, Start menu options, taskbar options, folders, specific files, network printers and drives, and accessibility options.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Internet settings and favorites.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Internet connection settings, favorites, and cookies.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Music.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Electronic music files, playlists, and album art.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Pictures and video.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Pictures—which includes any visual file type (for example, .jpg, .bmp, .gif) - and personal videos.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;After saving everything to the .MIG file, all it took was installing Windows 7, Office 2010 and import the settings back.&lt;/p&gt;  &lt;p align="justify"&gt;To get the other files and folders that were on the disk before being formatted, since we have a &lt;a title="Microsoft Windows Home Server" href="http://www.microsoft.com/windows/products/winfamily/windowshomeserver/" target="_blank"&gt;Windows Home Server&lt;/a&gt; that backs up all the PCs in the house , all it was needed was mounting one of the old backups as a disk and copying the files back.&lt;/p&gt;  &lt;p align="justify"&gt;It’s so easy that he did it al by himself while and he just turned 14. So, if you need to do something like this, don’t stress. It’s that easy.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1723915" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1723915" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1723915" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=ftSz8D4FAIQ:j3dNOE1k0Dw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=ftSz8D4FAIQ:j3dNOE1k0Dw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=ftSz8D4FAIQ:j3dNOE1k0Dw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=ftSz8D4FAIQ:j3dNOE1k0Dw:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=ftSz8D4FAIQ:j3dNOE1k0Dw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=ftSz8D4FAIQ:j3dNOE1k0Dw:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=ftSz8D4FAIQ:j3dNOE1k0Dw:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/ftSz8D4FAIQ" height="1" width="1"/&gt;</description><pubDate>Wed, 16 Sep 2009 23:19:52 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1723915</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1723915</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/09/17/from-vista-to-7-with-wet-and-whs.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/09/17/from-vista-to-7-with-wet-and-whs.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1722131</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/d17ay8vmNgM/remix-09-is-coming-to-lisbon-portugal.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Events/default.aspx">Events</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Mix/default.aspx">Mix</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Mix09/default.aspx">Mix09</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Expression+Blend/default.aspx">Expression Blend</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Expression/default.aspx">Expression</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Expression+Studio/default.aspx">Expression Studio</category><title>ReMIX 09 Is Coming To Lisbon, Portugal</title><description>&lt;p&gt;&lt;a title="ReMIX 09 Portugal" href="http://www.microsoft.com/portugal/remix/index.aspx" target="_blank"&gt;&lt;img style="border-right-width:0px;margin:0px 10px 10px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="ReMIX 09" border="0" alt="ReMIX 09" align="left" src="https://www.microsoft.com/portugal/remix/res/img/remix_logo.gif" width="134" height="61" /&gt;&lt;/a&gt;For the first time, &lt;a title="MIX Online" href="http://www.visitmix.com/" target="_blank"&gt;ReMIX&lt;/a&gt; is coming to &lt;a title="Portugal" href="http://wikipedia.org/wiki/Portugal" target="_blank"&gt;Portugal&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The event will have a keynote and 3 tracks (Web Developer, UX and Architect) with 4 sessions each by the best speakers in each field.&lt;/p&gt;  &lt;p&gt;Don’t miss it! &lt;a title="ReMIX 09 Portugal" href="http://www.microsoft.com/portugal/remix/index.aspx" target="_blank"&gt;Register&lt;/a&gt; now!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1722131" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1722131" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1722131" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=d17ay8vmNgM:Oylm0qH4MaA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=d17ay8vmNgM:Oylm0qH4MaA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=d17ay8vmNgM:Oylm0qH4MaA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=d17ay8vmNgM:Oylm0qH4MaA:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=d17ay8vmNgM:Oylm0qH4MaA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=d17ay8vmNgM:Oylm0qH4MaA:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=d17ay8vmNgM:Oylm0qH4MaA:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/d17ay8vmNgM" height="1" width="1"/&gt;</description><pubDate>Wed, 09 Sep 2009 18:50:28 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1722131</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1722131</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/09/09/remix-09-is-coming-to-lisbon-portugal.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/09/09/remix-09-is-coming-to-lisbon-portugal.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1719985</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/uM0oSL-qYqo/windows-live-messenger-unable-to-connect-with-error-code-80040200.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WindowsLive/default.aspx">WindowsLive</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/WindowsLiveMessenger/default.aspx">WindowsLiveMessenger</category><title>Windows Live Messenger Unable To Connect With Error Code 80040200</title><description>&lt;p align="justify"&gt;Today I came across this issue when trying to sign in to &lt;a title="Windows Live Messenger" href="http://download.live.com/messenger" target="_blank"&gt;Windows Live Messenger&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Everyone I talked to was able to sign in, though, so I tried another account and was also able to sign in.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a title="Bing" href="http://www.bing.com/" target="_blank"&gt;Bing&lt;/a&gt;ing around, I found several blog posts pointing to a &lt;a title="Error: 8100030d" href="http://messenger-support.spaces.live.com/blog/cns!8B3F39C76A8B853F!13937.entry" target="_blank"&gt;post&lt;/a&gt; in the &lt;a title="Messenger Support Space&amp;#39;s Blog - Windows Live" href="http://messenger-support.spaces.live.com/blog/" target="_blank"&gt;Messenger Support blog&lt;/a&gt; with the solution to this problem. In my case (&lt;a title="Microsoft Windows 7" href="http://www.microsoft.com/windows/windows-7/" target="_blank"&gt;Windows 7&lt;/a&gt; x64) the solution would be to remove the &lt;strong&gt;%LOCALAPPDATA%\Microsoft\Windows Live Contacts&lt;/strong&gt; (usually &lt;strong&gt;C:\Users\&lt;em&gt;&amp;lt;Windows Logon name&amp;gt;&lt;/em&gt;\AppData\Local\Microsoft\Windows Live Contacts&lt;/strong&gt;) folder.&lt;/p&gt;  &lt;p&gt;Instead of removing the folder, I thought of renaming it to avoid removing my contacts for all account that were able to sign in. When I tried it, I got an error stating the the folder was already being used by another application.&lt;/p&gt;  &lt;p&gt;Since I had &lt;a title="Windows Live Mail" href="http://download.live.com/wlmail" target="_blank"&gt;Windows Live Mail&lt;/a&gt; open and assumed it uses the same contact store, I closed it and was able to sign in to messenger with no problems.&lt;/p&gt;  &lt;p&gt;As a developer and architect, I find it disturbing that such errors are presented to the user. The message hinted that there was a problem signing in to the server and, as it turned out, it was a problem with only one account for only one &lt;a title="Microsoft Windows" href="http://cli.gs/Microsoft-Windows" target="_blank"&gt;Windows&lt;/a&gt; user in only one machine.&lt;/p&gt;  &lt;p&gt;So, developers and architects out there (me included), always give the user an error message meaningful to what problem he/she is running into. Adding technical data to help support is nice but should be expressly accessed by the user (Windows Live Messenger got that part right).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1719985" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1719985" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1719985" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uM0oSL-qYqo:8Gt5RDqtbAI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uM0oSL-qYqo:8Gt5RDqtbAI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uM0oSL-qYqo:8Gt5RDqtbAI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uM0oSL-qYqo:8Gt5RDqtbAI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uM0oSL-qYqo:8Gt5RDqtbAI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=uM0oSL-qYqo:8Gt5RDqtbAI:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=uM0oSL-qYqo:8Gt5RDqtbAI:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/uM0oSL-qYqo" height="1" width="1"/&gt;</description><pubDate>Tue, 01 Sep 2009 23:55:17 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1719985</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1719985</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/09/02/windows-live-messenger-unable-to-connect-with-error-code-80040200.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/09/02/windows-live-messenger-unable-to-connect-with-error-code-80040200.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1697525</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/MJ5G70sttDs/hurrah-mvp-for-the-seventh-consecutive-year.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Community/default.aspx">Community</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MVP/default.aspx">MVP</category><title>Hurrah! MVP for the seventh consecutive year!</title><description>&lt;p&gt;After all these years, it&amp;#39;s still an honor, a privilege ... and a few stressful days.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1697525" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1697525" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1697525" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=MJ5G70sttDs:xHhlDq3pwKo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=MJ5G70sttDs:xHhlDq3pwKo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=MJ5G70sttDs:xHhlDq3pwKo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=MJ5G70sttDs:xHhlDq3pwKo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=MJ5G70sttDs:xHhlDq3pwKo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=MJ5G70sttDs:xHhlDq3pwKo:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=MJ5G70sttDs:xHhlDq3pwKo:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/MJ5G70sttDs" height="1" width="1"/&gt;</description><pubDate>Thu, 02 Jul 2009 00:31:46 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1697525</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1697525</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/07/02/hurrah-mvp-for-the-seventh-consecutive-year.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/07/02/hurrah-mvp-for-the-seventh-consecutive-year.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1696253</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/YtSGnOn82BM/microsoft-tech-ed-europe-2009-registration-opened.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Events/default.aspx">Events</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TechNet/default.aspx">TechNet</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TechEd/default.aspx">TechEd</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/TechEd2009/default.aspx">TechEd2009</category><title>Microsoft Tech•Ed Europe 2009 Registration Opened</title><description>&lt;div style="background-image:url(http://www.msteched.com/resources/Content_Files/EU_Header_screen.jpg);width:950px;background-repeat:no-repeat;height:240px;"&gt;   &lt;div style="margin:20px 20px 19px;width:180px;height:199px;"&gt;&lt;a style="width:180px;height:199px;" title="Microsoft Tech•Ed Europe 2009" href="http://www.msteched.com/europe/Public/default.aspx"&gt;&lt;img style="border-bottom-style:none;border-right-style:none;width:180px;border-top-style:none;height:199px;border-left-style:none;" alt="Microsoft Tech•Ed Europe 2009" src="http://www.msteched.com/resources/Content_Files/TechEd_Europe_Blog_L_MVPs.gif" width="180" height="199" /&gt; &lt;/a&gt;&lt;/div&gt; &lt;/div&gt;  &lt;p align="justify"&gt;&lt;a title="Microsoft Tech•Ed Europe 2009" href="http://www.msteched.com/europe/Public/default.aspx" target="_blank"&gt;Microsoft Tech•Ed Europe 2009&lt;/a&gt; &lt;a title="Microsoft Tech•Ed Europe 2009 Registration Info" href="http://www.msteched.com/europe/public/registration-info.aspx" target="_blank"&gt;Registration&lt;/a&gt; is now open.&lt;/p&gt;  &lt;p align="justify"&gt;There are a few novelties this year:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Due to attendee feedback, both the Developer and IT Pro editions will take place at the same time (November, 9-13).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;The registration site uses &lt;a title="Windows Live™ ID" href="https://accountservices.passport.net/reg.srf?wa=wsignin1.0&amp;amp;rpsnv=10&amp;amp;ct=1244819257&amp;amp;rver=5.0.3265.0&amp;amp;wp=MCMBI&amp;amp;wreply=https%3A//profile.microsoft.com/RegSysProfileCenter/ContactPref.aspx?LCID=1033&amp;amp;cb=Lcid=1033&amp;amp;Brand=microsoft&amp;amp;SubBrand=profile%20center&amp;amp;cru=https%3A//profile.microsoft.com/RegSysProfileCenter/ContactPref.aspx?LCID=1033&amp;amp;id=42814&amp;amp;sl=1&amp;amp;lc=2057" target="_blank"&gt;Windows Live™ ID&lt;/a&gt; for authentication.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Registration prices are based on a tiered approach with the earlier you registration the more you will save. Register first, save the most!&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Top Reasons To Attend Tech·Ed Europe 2009&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p align="left"&gt;EVERYONE CAN LEARN MORE ABOUT:&lt;/p&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;p align="left"&gt;&lt;strong&gt;MICROSOFT WINDOWS 7 - Learn about Microsoft&amp;#39;s next-generation operating system&lt;/strong&gt;&lt;/p&gt;          &lt;p align="justify"&gt;Advancements Windows 7 brings to user productivity, security and PC management - all of which save businesses time and money.&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p align="left"&gt;&lt;strong&gt;MICROSOFT OFFICE and new ways to maximize business productivity&lt;/strong&gt;&lt;/p&gt;          &lt;p align="justify"&gt;The Office System track will help you deploy, adopt and develop on business productivity applications.&lt;/p&gt;          &lt;p align="justify"&gt;Learn about deploying Microsoft Office to your users, building pervasive Microsoft Office SharePoint solutions and managing your work with Microsoft Business Productivity Visio.&lt;/p&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p align="left"&gt;DEVELOPERS CAN LEARN MORE ABOUT:&lt;/p&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;p align="left"&gt;&lt;strong&gt;STREAMLINING your way to cloud applications&lt;/strong&gt;&lt;/p&gt;          &lt;p align="justify"&gt;Find out how The Azure™ Services Platform reduces the need for up-front technology purchases, and enables developers to quickly and easily create applications running in the cloud.&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p align="left"&gt;&lt;strong&gt;SECURITY that helps cut application support costs&lt;/strong&gt;&lt;/p&gt;          &lt;p align="justify"&gt;Find out how Microsoft’s ForeFront technologies can secure your IT environment faster, and help you write more secure code to eliminate application support costs.&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p align="left"&gt;&lt;strong&gt;TRUTH about maximizing deployments and search&lt;/strong&gt;&lt;/p&gt;          &lt;p align="justify"&gt;Find out how SharePoint can help create that central repository, maximizing deployments and search that eliminates multiple versions and misunderstandings about the source of the &amp;quot;truth&amp;quot; on any given project.&lt;/p&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;IT PROFESSIONALS CAN LEARN MORE ABOUT:&lt;/p&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;p align="left"&gt;&lt;strong&gt;VIRTUALISATION that helps leverage existing investments&lt;/strong&gt;&lt;/p&gt;          &lt;p align="justify"&gt;Get an in-depth understanding of today’s low-cost virtualization technologies and how they can help you make the most of your current software and hardware investments.&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p align="left"&gt;&lt;strong&gt;HOSTING for economies of scale&lt;/strong&gt;&lt;/p&gt;          &lt;p align="justify"&gt;Learn how to take advantage of Microsoft’s hosted services to scale your IT department’s communications and collaboration offering. You’ll also lower your hardware, management and power costs.&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p align="left"&gt;&lt;strong&gt;UNIFYING to reduce costs and help increase efficiencies&lt;/strong&gt;&lt;/p&gt;          &lt;p align="justify"&gt;Truly unified communications create a single communication infrastructure. That means reduced costs for PBX enhancements while improving productivity through unified inboxes along with rules that help workers manage interruptions.&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p align="left"&gt;&lt;strong&gt;DEPLOYMENT - maximize your existing IT infrastructure and do more with what you&amp;#39;ve got&lt;/strong&gt;&lt;/p&gt;          &lt;p align="justify"&gt;Learn how to get maximum value out of your existing IT infrastructure. &lt;/p&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1696253" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1696253" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1696253" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=YtSGnOn82BM:17tYuhvmI30:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=YtSGnOn82BM:17tYuhvmI30:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=YtSGnOn82BM:17tYuhvmI30:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=YtSGnOn82BM:17tYuhvmI30:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=YtSGnOn82BM:17tYuhvmI30:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=YtSGnOn82BM:17tYuhvmI30:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=YtSGnOn82BM:17tYuhvmI30:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/YtSGnOn82BM" height="1" width="1"/&gt;</description><pubDate>Mon, 22 Jun 2009 22:42:44 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1696253</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1696253</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/06/22/microsoft-tech-ed-europe-2009-registration-opened.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/06/22/microsoft-tech-ed-europe-2009-registration-opened.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1695185</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/K34rgB7zWfo/playing-with-sql-server-clr-integration-part-iv-deploying-to-sql-server-2005.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer/default.aspx">SQLServer</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer2005/default.aspx">SQLServer2005</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLCLR/default.aspx">SQLCLR</category><title>Playing With SQL Server CLR Integration – Part IV (Deploying To SQL Server 2005)</title><description>&lt;p&gt;With all developed and tested on my laptop using &lt;a title="Microsoft SQL Server" href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;SQL Server&lt;/a&gt; 2008, it’s time to deploy to the company’s test machine running SQL Server 2005.&lt;/p&gt;  &lt;p&gt;The first thing I ran into when executing:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE ASSEMBLY &lt;/span&gt;[MyAssembly]
&lt;span style="color:blue;"&gt;AUTHORIZATION &lt;/span&gt;[dbo]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;...\MyAssembly.dll&amp;#39;
&lt;/span&gt;&lt;span style="color:blue;"&gt;WITH PERMISSION_SET &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;SAFE
GO&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;was:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:red;"&gt;Msg 10327, Level 14, State 1, Line 1
Assembly &amp;#39;MyAssembly&amp;#39; references assembly &amp;#39;system.xml.linq, version=3.5.0.0, culture=neutral, publickeytoken=b77a5c561934e089.&amp;#39;,
which is not present in the current database.
SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from,
but that operation has failed (reason: 2(The system cannot find the file specified.)).
Please load the referenced assembly into the current database and retry your request.&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Looks like SQL Server 2005 doesn’t know about &lt;a title="Microsoft .NET" href="http://cli.gs/cligs/Microsoft-NET" target="_blank"&gt;.NET Framework&lt;/a&gt; 3.5. I’d just load the assemblies being used: &lt;strong&gt;System.Core&lt;/strong&gt; and &lt;strong&gt;System.Linq.Xml&lt;/strong&gt;:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE ASSEMBLY &lt;/span&gt;[System.Core]
&lt;span style="color:blue;"&gt;AUTHORIZATION &lt;/span&gt;[dbo]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll&amp;#39;
&lt;/span&gt;&lt;span style="color:blue;"&gt;WITH PERMISSION_SET &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;SAFE
GO
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Not so easy:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:black;"&gt;Warning: The Microsoft .Net frameworks assembly &amp;#39;system.core, version=3.5.0.0, culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil.&amp;#39; you are registering is not fully tested in SQL Server hosted environment.&lt;/span&gt;
&lt;span style="color:red;"&gt;Msg 6218, Level 16, State 2, Line 1
CREATE ASSEMBLY for assembly &amp;#39;System.Core&amp;#39; failed because assembly &amp;#39;System.Core&amp;#39; failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
[ : System.Diagnostics.Eventing.EventProvider::EtwRegister][mdToken=0x600003b][offset 0x0000003D][found Native Int][expected unmanaged pointer] Unexpected type on the stack.
[ : System.Diagnostics.Eventing.EventProvider::EncodeObject][mdToken=0x6000046][offset 0x00000000] Unmanaged pointers are not a verifiable type.
[ : System.Diagnostics.Eventing.EventProvider::WriteMessageEvent][mdToken=0x6000047][offset 0x0000003C][found ref &amp;#39;System.String&amp;#39;] Expected numeric type on the stack.
[ : System.Diagnostics.Eventing.EventProvider::WriteEvent][mdToken=0x6000049][offset 0x0000012E] Instruction cannot be verified.
[ : System.Diagnostics.Eventing.EventProvider::WriteEvent][mdToken=0x6000049][offset 0x00000030] Instruction cannot be verified.
[ : System.Diagnostics.Eventing.EventProvider::WriteEvent][mdToken=0x600004a][offset 0x0000005F][found ref &amp;#39;System.String&amp;#39;] Expected numeric type on the stack.
[ : System.Diagnostics.Eventing.EventProvider::WriteEvent][mdToken=0x600004b][offset 0x00000010][found unmanaged pointer][expected unmanaged pointer] Unexpected type on the stack.
[ : System.Diagnostics.Eventing.EventProvider::WriteTransferEvent][mdToken=0x600004c][offset 0x0000007D] Instruction cannot be verified.
[ : System.Diagnostics.Eventing.EventProvider::WriteTransferEvent][mdToken=0x600004c][offset 0x00000309][found Native Int][expected unmanaged pointer] Unexpected type on the stack.
[ : System.Diagnostics.Eventing.EventProvider::WriteTransferEvent][mdToken=0x600004d][offset 0x0000001B][found unmanaged pointer][expected unmanaged pointer] Unexpected type on the stack.
[ : System.Security.Cryptography.CapiNative::ImportSymmetricKey][mdToken=0x60007c2][offset 0x00000071][found address of Byte] Expected numeric type on the stac...&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Ok. I’d just load it with &lt;strong&gt;PERMISSION_SET = UNSAFE&lt;/strong&gt;:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE ASSEMBLY &lt;/span&gt;[MyAssembly]
&lt;span style="color:blue;"&gt;AUTHORIZATION &lt;/span&gt;[dbo]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;...\MyAssembly.dll&amp;#39;
&lt;/span&gt;&lt;span style="color:blue;"&gt;WITH PERMISSION_SET &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNSAFE
GO&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Not yet:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:black;"&gt;Warning: The Microsoft .Net frameworks assembly &amp;#39;system.core, version=3.5.0.0, culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil.&amp;#39; you are registering is not fully tested in SQL Server hosted environment.&lt;/span&gt;
&lt;span style="color:red;"&gt;Msg 10327, Level 14, State 1, Line 1
CREATE ASSEMBLY for assembly &amp;#39;System.Core&amp;#39; failed because assembly &amp;#39;System.Core&amp;#39; is not authorized for PERMISSION_SET = UNSAFE.
The assembly is authorized when either of the following is true: the database owner (DBO) has UNSAFE ASSEMBLY permission and the database has the TRUSTWORTHY database property on; or the assembly is signed with a certificate or an asymmetric key that has a corresponding login with UNSAFE ASSEMBLY permission.
If you have restored or attached this database, make sure the database owner is mapped to the correct login on this server.
If not, use sp_changedbowner to fix the problem.&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Solved:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;ALTER DATABASE &lt;/span&gt;MyDatabase &lt;span style="color:blue;"&gt;SET TRUSTWORTHY ON
GO&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Only than I was able to load the .NET 3.5 assemblies:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE ASSEMBLY &lt;/span&gt;[System.Core]
&lt;span style="color:blue;"&gt;AUTHORIZATION &lt;/span&gt;[dbo]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll&amp;#39;
&lt;/span&gt;&lt;span style="color:blue;"&gt;WITH PERMISSION_SET &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNSAFE
GO

CREATE ASSEMBLY &lt;/span&gt;[System.Xml.Linq]
&lt;span style="color:blue;"&gt;AUTHORIZATION &lt;/span&gt;[dbo]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll&amp;#39;
&lt;/span&gt;&lt;span style="color:blue;"&gt;WITH PERMISSION_SET &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNSAFE
GO&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;With all dependencies in place, I tried to load the assembly with &lt;strong&gt;PERMISSION_SET = SAFE&lt;/strong&gt; with no luck:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:red;"&gt;Msg 6212, Level 16, State 1, Line 1
CREATE ASSEMBLY failed because method &amp;#39;ShortPropsToXml&amp;#39; on type &amp;#39;ShortProps&amp;#39;  in safe assembly &amp;#39;Esi.SA.Encyclopedia&amp;#39; is storing to a static field.
Storing to a static field is not allowed in safe assemblies.&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;It had to be with &lt;strong&gt;PERMISSION_SET = UNSAFE&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After successfully loading the assemblies, I was finally able to create the &lt;a title="Transact-SQL Overview" href="http://cli.gs/Transact-SQL" target="_blank"&gt;Transact-SQL&lt;/a&gt; definitions for the functions (see &lt;a title="Playing With SQL Server CLR Integration - Part I" href="http://cli.gs/gupt5m" target="_blank"&gt;Part I&lt;/a&gt; and &lt;a title="Playing With SQL Server CLR Integration - Part II" href="http://cli.gs/2gs6GD" target="_blank"&gt;Part II&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Now the DBAs won’t definitely let me use this, but it was fun to build it.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1695185" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1695185" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1695185" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=K34rgB7zWfo:qQszCWqoKBc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=K34rgB7zWfo:qQszCWqoKBc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=K34rgB7zWfo:qQszCWqoKBc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=K34rgB7zWfo:qQszCWqoKBc:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=K34rgB7zWfo:qQszCWqoKBc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=K34rgB7zWfo:qQszCWqoKBc:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=K34rgB7zWfo:qQszCWqoKBc:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/K34rgB7zWfo" height="1" width="1"/&gt;</description><pubDate>Sat, 13 Jun 2009 08:39:10 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1695185</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1695185</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/06/13/playing-with-sql-server-clr-integration-part-iv-deploying-to-sql-server-2005.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/06/13/playing-with-sql-server-clr-integration-part-iv-deploying-to-sql-server-2005.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1695056</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/8Fl0OWBTb7o/playing-with-sql-server-clr-integration-part-iii.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer/default.aspx">SQLServer</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer2008/default.aspx">SQLServer2008</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer2005/default.aspx">SQLServer2005</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLCLR/default.aspx">SQLCLR</category><title>Playing With SQL Server CLR Integration – Part III</title><description>&lt;p&gt;You might have noticed that I used &lt;a title="Language-Integrated Query (LINQ)" href="http://msdn2.microsoft.com/library/bb397926.aspx" target="_blank"&gt;LINQ&lt;/a&gt; in my last Playing With SQL Server CLR Integration posts (&lt;a title="Playing With SQL Server CLR Integration - Part I" href="http://cli.gs/gupt5m" target="_blank"&gt;Part I&lt;/a&gt;, &lt;a title="Playing With SQL Server CLR Integration - Part II" href="http://cli.gs/2gs6GD" target="_blank"&gt;Part II&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;I couldn’t make it work with the standard &lt;a title="Microsoft Visual Studio" href="http://cli.gs/vstudio" target="_blank"&gt;Visual Studio&lt;/a&gt; 2008 SQL CLR project template. Changing the &lt;strong&gt;Target Framework&lt;/strong&gt; to &lt;a title=".NET Framework" href="http://cli.gs/netframework" target="_blank"&gt;&lt;/a&gt;&lt;a title="Microsoft .NET" href="http://cli.gs/cligs/Microsoft-NET" target="_blank"&gt;.NET Framework&lt;/a&gt; 3.5&lt;/a&gt; wasn’t enough. I had to edit the &lt;strong&gt;.csproj&lt;/strong&gt; file by hand:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Project &lt;/span&gt;&lt;span style="color:red;"&gt;ToolsVersion&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;3.5&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;DefaultTargets&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Build&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/developer/msbuild/2003&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;  &amp;lt;!—&lt;/span&gt;&lt;span style="color:green;"&gt; ... &lt;span style="color:blue;"&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;&lt;span style="color:blue;"&gt;!—&lt;/span&gt;&lt;span style="color:green;"&gt; ... &lt;span style="color:blue;"&gt;--&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;strong&gt;    &amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:#a31515;"&gt;Reference &lt;/span&gt;&lt;span style="color:red;"&gt;Include&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;System.Core&lt;/span&gt;&amp;quot;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RequiredTargetFramework&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;3.5&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RequiredTargetFramework&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Reference&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Reference &lt;/span&gt;&lt;span style="color:red;"&gt;Include&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;System.Xml.Linq&lt;/span&gt;&amp;quot;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RequiredTargetFramework&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;3.5&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RequiredTargetFramework&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Reference&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;span style="color:blue;"&gt;!—&lt;/span&gt;&lt;span style="color:green;"&gt; ... &lt;span style="color:blue;"&gt;--&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Project&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1695056" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1695056" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1695056" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=8Fl0OWBTb7o:iISu9rup9no:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=8Fl0OWBTb7o:iISu9rup9no:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=8Fl0OWBTb7o:iISu9rup9no:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=8Fl0OWBTb7o:iISu9rup9no:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=8Fl0OWBTb7o:iISu9rup9no:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=8Fl0OWBTb7o:iISu9rup9no:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=8Fl0OWBTb7o:iISu9rup9no:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/8Fl0OWBTb7o" height="1" width="1"/&gt;</description><pubDate>Fri, 12 Jun 2009 00:11:00 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1695056</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1695056</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/06/12/playing-with-sql-server-clr-integration-part-iii.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/06/12/playing-with-sql-server-clr-integration-part-iii.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1695052</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/BQTnkXKzmaI/playing-with-sql-server-clr-integration-part-ii.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer/default.aspx">SQLServer</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/XML/default.aspx">XML</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer2008/default.aspx">SQLServer2008</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer2005/default.aspx">SQLServer2005</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLCLR/default.aspx">SQLCLR</category><title>Playing With SQL Server CLR Integration – Part II</title><description>&lt;p align="justify"&gt;On my last &lt;a title="Playing With SQL Server CLR Integration – Part I" href="http://cli.gs/gupt5m" target="_blank"&gt;post&lt;/a&gt;, I showed how to convert a property bag stored in text to a &lt;a title="CLR Table-Valued Functions" href="http://cli.gs/DGRt9u" target="_blank"&gt;CLR Table-Valued Function&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;I started thinking that I could retrieve the property values, but I couldn’t change them or add new properties.&lt;/p&gt;  &lt;p align="justify"&gt;Passing a table as a parameter is still not possible in &lt;a title="Microsoft SQL Server" href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;SQL Server&lt;/a&gt; 2005. And that would force me to load the table into a variable, change it and load it back into the property bag.&lt;/p&gt;  &lt;p align="justify"&gt;Or I could create functions to Create, Update and Delete properties from the property bag.&lt;/p&gt;  &lt;p align="justify"&gt;Or I could just use XML. All it takes is creating a &lt;a title="CLR Scalar-Valued Functions" href="http://cli.gs/ySuXMU" target="_blank"&gt;CLR Scalar-Valued Function&lt;/a&gt; to convert the property bag to an XML representation and another to convert the XML back to the property bag format.&lt;/p&gt;  &lt;p align="justify"&gt;It still makes me load the property bag into a variable if I want to change it, but it’s usable in SQL Server 2005, which was the targeted platform.&lt;/p&gt;  &lt;p align="justify"&gt;Converting the property bag to an XML document is easy using the previously created enumerator:&lt;/p&gt;  &lt;pre class="code"&gt;[Microsoft.SqlServer.Server.&lt;span style="color:#2b91af;"&gt;SqlFunction&lt;/span&gt;(
    Name = &lt;span style="color:#a31515;"&gt;&amp;quot;ShortPropsToXml&amp;quot;&lt;/span&gt;,
    IsDeterministic = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,
    IsPrecise = &lt;span style="color:blue;"&gt;false&lt;/span&gt;,
    DataAccess = &lt;span style="color:#2b91af;"&gt;DataAccessKind&lt;/span&gt;.None,
    SystemDataAccess = &lt;span style="color:#2b91af;"&gt;SystemDataAccessKind&lt;/span&gt;.None)]
&lt;span style="color:blue;"&gt;public static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlXml &lt;/span&gt;ShortPropsToXml(&lt;span style="color:blue;"&gt;string &lt;/span&gt;shortPropsText)
{
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;xml = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XElement&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;ShortProps&amp;quot;&lt;/span&gt;,
        &lt;span style="color:blue;"&gt;from &lt;/span&gt;shortProp &lt;span style="color:blue;"&gt;in &lt;/span&gt;ShortPropsEnumerable(shortPropsText)
        &lt;span style="color:blue;"&gt;select new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XElement&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;p&amp;quot;&lt;/span&gt;,
            &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XAttribute&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;n&amp;quot;&lt;/span&gt;, shortProp.Key),
            &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XCData&lt;/span&gt;(shortProp.Value)));

    &lt;span style="color:blue;"&gt;using &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;buffer = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt;())
    {
        &lt;span style="color:blue;"&gt;using &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;xmlWriter = &lt;span style="color:#2b91af;"&gt;XmlWriter&lt;/span&gt;.Create(buffer, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XmlWriterSettings &lt;/span&gt;{ CheckCharacters = &lt;span style="color:blue;"&gt;false &lt;/span&gt;}))
        {
            xml.WriteTo(xmlWriter);
        }

        buffer.Position = 0;

        &lt;span style="color:blue;"&gt;using &lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;XmlReader &lt;/span&gt;xmlReader = &lt;span style="color:#2b91af;"&gt;XmlReader&lt;/span&gt;.Create(buffer, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XmlReaderSettings &lt;/span&gt;{ CheckCharacters = &lt;span style="color:blue;"&gt;false &lt;/span&gt;}))
        {
            &lt;span style="color:blue;"&gt;return new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlXml&lt;/span&gt;(xmlReader);
        }
    }
}&lt;/pre&gt;

&lt;p align="justify"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Converting the an XML document back into the property bag format is also easy:&lt;/p&gt;

&lt;pre class="code"&gt;[Microsoft.SqlServer.Server.&lt;span style="color:#2b91af;"&gt;SqlFunction&lt;/span&gt;(
    Name = &lt;span style="color:#a31515;"&gt;&amp;quot;XmlToShortProps&amp;quot;&lt;/span&gt;,
    IsDeterministic = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,
    IsPrecise = &lt;span style="color:blue;"&gt;false&lt;/span&gt;,
    DataAccess = &lt;span style="color:#2b91af;"&gt;DataAccessKind&lt;/span&gt;.None,
    SystemDataAccess = &lt;span style="color:#2b91af;"&gt;SystemDataAccessKind&lt;/span&gt;.None)]
&lt;span style="color:blue;"&gt;public static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlChars &lt;/span&gt;XmlToShortProps(&lt;span style="color:#2b91af;"&gt;SqlXml &lt;/span&gt;shortPropsXml)
{
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;xml = &lt;span style="color:#2b91af;"&gt;XDocument&lt;/span&gt;.Parse(shortPropsXml.Value);

    &lt;span style="color:blue;"&gt;var &lt;/span&gt;textBuilder = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;();
    &lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;item &lt;span style="color:blue;"&gt;in &lt;/span&gt;xml.Document.Element(&lt;span style="color:#a31515;"&gt;&amp;quot;ShortProps&amp;quot;&lt;/span&gt;).Elements(&lt;span style="color:#a31515;"&gt;&amp;quot;p&amp;quot;&lt;/span&gt;))
    {
        textBuilder.AppendFormat(&lt;span style="color:#a31515;"&gt;&amp;quot;[[[{1}]]]{0}{2}{0}&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;.NewLine, item.Attribute(&lt;span style="color:#a31515;"&gt;&amp;quot;n&amp;quot;&lt;/span&gt;).Value, item.Value);
    }

    &lt;span style="color:blue;"&gt;return new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlChars&lt;/span&gt;(textBuilder.ToString().ToCharArray());
}&lt;/pre&gt;

&lt;p align="justify"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Now it’s just uploading the new version of the assembly to the database:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;ALTER ASSEMBLY &lt;/span&gt;[MyAssembly]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;...\MyAssembly.dll&amp;#39;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And defining the Scalar-Valued Functions in &lt;a title="Transact-SQL Overview" href="http://cli.gs/Transact-SQL" target="_blank"&gt;Transact-SQL&lt;/a&gt;:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE FUNCTION &lt;/span&gt;[dbo]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ShortPropsToXml]&lt;span style="color:gray;"&gt;(&lt;/span&gt;@shortPropsText [nvarchar]&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;))
&lt;/span&gt;&lt;span style="color:blue;"&gt;RETURNS &lt;/span&gt;[xml] &lt;span style="color:blue;"&gt;WITH EXECUTE AS CALLER
AS 
EXTERNAL &lt;/span&gt;NAME [Esi.SA.Encyclopedia]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ShortProps]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ShortPropsToXml]
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;
&lt;span style="color:blue;"&gt;CREATE FUNCTION &lt;/span&gt;[dbo]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[XmlToShortProps]&lt;span style="color:gray;"&gt;(&lt;/span&gt;@shortPropsXml [xml]&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;RETURNS &lt;/span&gt;[nvarchar]&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;max&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;WITH EXECUTE AS CALLER
AS 
EXTERNAL &lt;/span&gt;NAME [Esi.SA.Encyclopedia]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ShortProps]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[XmlToShortProps]
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;And it’s all set to go.&lt;/p&gt;

&lt;p align="justify"&gt;Now, given this property bag definition:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;declare &lt;/span&gt;@text &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;max&lt;/span&gt;&lt;span style="color:gray;"&gt;)=&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;[[[name1]]]
value1
[[[name2]]]
value2
[[[name3]]]
value3
&amp;#39;
&lt;/span&gt;&lt;/pre&gt;

&lt;p align="justify"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;I can change it into XML:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@xml [xml] &lt;span style="color:gray;"&gt;= &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;ShortPropsToXml&lt;span style="color:gray;"&gt;(&lt;/span&gt;@text&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;div align="justify"&gt;Update: &lt;/div&gt;

    &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;set &lt;/span&gt;@xml&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;modify&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;replace value of (/ShortProps/p[@n=&amp;quot;name2&amp;quot;]/text())[1] with &amp;quot;new value2&amp;quot;&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Insert: &lt;/div&gt;

    &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;set &lt;/span&gt;@xml&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;modify&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;insert &amp;lt;p n=&amp;quot;name4&amp;quot;&amp;gt;Value4.1
Value4.2&amp;lt;/p&amp;gt; after (/ShortProps/p[@n=&amp;quot;name2&amp;quot;])[1]&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Delete &lt;/div&gt;

    &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;set &lt;/span&gt;@xml&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;modify&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;delete (/ShortProps/p[@n=&amp;quot;name3&amp;quot;])[1]&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;p align="justify"&gt;Convert back to the property bag format: &lt;/p&gt;

    &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;print &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XmlToShortProps&lt;span style="color:gray;"&gt;(&lt;/span&gt;@xml&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

    &lt;pre class="code"&gt;[[[name1]]]
value1
[[[name2]]]
new value2
[[[name4]]]
Value4.1
Value4.2&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p align="justify"&gt;Query as a table: &lt;/p&gt;

    &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;select &lt;/span&gt;T&lt;span style="color:gray;"&gt;.&lt;/span&gt;C&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;./@n&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;nvarchar(max)&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;Name&lt;span style="color:gray;"&gt;, &lt;/span&gt;T&lt;span style="color:gray;"&gt;.&lt;/span&gt;C&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;nvarchar(max)&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;Value &lt;span style="color:blue;"&gt;from &lt;/span&gt;@xml&lt;span style="color:gray;"&gt;.&lt;/span&gt;nodes&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;/ShortProps/p&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;T&lt;span style="color:gray;"&gt;(&lt;/span&gt;C&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/pre&gt;

    &lt;table style="border-bottom:black thin solid;border-left:black thin solid;border-top:black thin solid;border-right:black thin solid;"&gt;&lt;tbody&gt;
        &lt;tr&gt;
          &lt;th style="border-bottom:black thin solid;border-left:black thin solid;border-top:black thin solid;border-right:black thin solid;"&gt;Name&lt;/th&gt;

          &lt;th style="border-bottom:black thin solid;border-left:black thin solid;border-top:black thin solid;border-right:black thin solid;"&gt;Value&lt;/th&gt;
        &lt;/tr&gt;

        &lt;tr&gt;
          &lt;td style="border-bottom:black thin solid;border-left:black thin solid;border-top:black thin solid;border-right:black thin solid;"&gt;name1&lt;/td&gt;

          &lt;td style="border-bottom:black thin solid;border-left:black thin solid;border-top:black thin solid;border-right:black thin solid;"&gt;value1&lt;/td&gt;
        &lt;/tr&gt;

        &lt;tr&gt;
          &lt;td style="border-bottom:black thin solid;border-left:black thin solid;border-top:black thin solid;border-right:black thin solid;"&gt;name2&lt;/td&gt;

          &lt;td style="border-bottom:black thin solid;border-left:black thin solid;border-top:black thin solid;border-right:black thin solid;"&gt;new value2&lt;/td&gt;
        &lt;/tr&gt;

        &lt;tr&gt;
          &lt;td style="border-bottom:black thin solid;border-left:black thin solid;border-top:black thin solid;border-right:black thin solid;"&gt;name4&lt;/td&gt;

          &lt;td style="border-bottom:black thin solid;border-left:black thin solid;border-top:black thin solid;border-right:black thin solid;"&gt;Value4.1 
            &lt;br /&gt;Value4.2&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p align="justify"&gt;Unfortunately, the application uses characters that are invalid to SQL Server as XML characters and I can’t use it on that application. I’ll have to understand those values better and add other fields to the table and XML.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1695052" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1695052" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1695052" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=BQTnkXKzmaI:OSkC8VgDt_I:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=BQTnkXKzmaI:OSkC8VgDt_I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=BQTnkXKzmaI:OSkC8VgDt_I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=BQTnkXKzmaI:OSkC8VgDt_I:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=BQTnkXKzmaI:OSkC8VgDt_I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=BQTnkXKzmaI:OSkC8VgDt_I:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=BQTnkXKzmaI:OSkC8VgDt_I:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/BQTnkXKzmaI" height="1" width="1"/&gt;</description><pubDate>Thu, 11 Jun 2009 23:52:37 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1695052</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1695052</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/06/12/playing-with-sql-server-clr-integration-part-ii.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/06/12/playing-with-sql-server-clr-integration-part-ii.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1695049</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/q6CasKE5XBo/playing-with-sql-server-clr-integration-part-i.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer/default.aspx">SQLServer</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer2008/default.aspx">SQLServer2008</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLServer2005/default.aspx">SQLServer2005</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SQLCLR/default.aspx">SQLCLR</category><title>Playing With SQL Server CLR Integration – Part I</title><description>&lt;p align="justify"&gt;I’m currently working with an application that stores a property bag in a &lt;a title="Microsoft SQL Server" href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;SQL Server&lt;/a&gt; column like this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:black;"&gt;[[[name1]]]
value1
[[[name2]]]
value2.1
value2.2
[[[name3]]]
value3&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Don’t ask me why it’s done like this. It just is.&lt;/p&gt;

&lt;p align="justify"&gt;The application decodes this property bag into its inner structures and all works fine.&lt;/p&gt;

&lt;p align="justify"&gt;Sometimes I would like to query the database directly or do some reporting on those properties and just can’t.&lt;/p&gt;

&lt;p align="justify"&gt;So, I thought this was a good use case for SQL Server &lt;a title="Overview of CLR Integration" href="http://cli.gs/rDr0Yj" target="_blank"&gt;CLR Integration&lt;/a&gt;. I decided to build a &lt;a title="CLR Table-Valued Functions" href="http://cli.gs/DGRt9u" target="_blank"&gt;CLR Table-Valued Function&lt;/a&gt; that would return the property bag as a two column table.&lt;/p&gt;

&lt;p align="justify"&gt;Parsing the property bag text can easily be achieved with a simple regular expression:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Regex&lt;/span&gt;(
        &lt;span style="color:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;@&amp;quot;(?&amp;lt;Name&amp;gt;(?&amp;lt;=\[\[\[).*(?=\]\]\]{0}))\]\]\]{0}(?&amp;lt;Value&amp;gt;(([\s\S]*?(?={0}\[\[\[))|([\s\S]*?(?={0}$))))&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;.NewLine),
        &lt;span style="color:#2b91af;"&gt;RegexOptions&lt;/span&gt;.Multiline | &lt;span style="color:#2b91af;"&gt;RegexOptions&lt;/span&gt;.ExplicitCapture | &lt;span style="color:#2b91af;"&gt;RegexOptions&lt;/span&gt;.CultureInvariant | &lt;span style="color:#2b91af;"&gt;RegexOptions&lt;/span&gt;.Compiled);&lt;/pre&gt;

&lt;p align="justify"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a title="Ultrapico" href="http://cli.gs/Ultrapico" target="_blank"&gt;Ultrapico&lt;/a&gt;’s &lt;a title="Ultrapico&amp;#39;s Expresso" href="http://cli.gs/Ultrapico-Expresso" target="_blank"&gt;Expresso&lt;/a&gt; was a big help when developing this regular expression.&lt;/p&gt;

&lt;p align="justify"&gt;In case you don’t know, the way CLR Table-Valued Function are built is using an initial method to take the input and return an IEnumerable and row filler method the receives the enumerator item and outputs the column values.&lt;/p&gt;

&lt;p align="justify"&gt;Since these are really key-value pairs of strings, I decided to use &lt;a title="KeyValuePair&amp;lt;(Of &amp;lt;(TKey, TValue&amp;gt;)&amp;gt;) Structure" href="http://msdn.microsoft.com/library/5tbh8a42.aspx" target="_blank"&gt;)&amp;gt;) Structure&amp;quot; href=&amp;quot;http://msdn.microsoft.com/library/5tbh8a42.aspx&amp;quot; target=_blank&amp;gt;KeyValuePair&lt;/a&gt;&amp;lt;string, string&amp;gt; instances to store each item and the enumerator became simply this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt;&amp;gt; ShortPropsEnumerable(&lt;span style="color:blue;"&gt;string &lt;/span&gt;shortPropsText)
{
    &lt;span style="color:blue;"&gt;return from &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Match &lt;/span&gt;m &lt;span style="color:blue;"&gt;in &lt;/span&gt;shortPropsRegex.Matches(shortPropsText)
           &lt;span style="color:blue;"&gt;select new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt;(m.Groups[&lt;span style="color:#a31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;].Value, m.Groups[&lt;span style="color:#a31515;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;].Value);
}&lt;/pre&gt;

&lt;p align="justify"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;And the implementation of the CLR Table-Valued Function is as simple as this: &lt;/p&gt;

&lt;pre class="code"&gt;[Microsoft.SqlServer.Server.&lt;span style="color:#2b91af;"&gt;SqlFunction&lt;/span&gt;(
    Name = &lt;span style="color:#a31515;"&gt;&amp;quot;ShortPropsToTable&amp;quot;&lt;/span&gt;,
    FillRowMethodName = &lt;span style="color:#a31515;"&gt;&amp;quot;ShortPropsToTableFillRow&amp;quot;&lt;/span&gt;,
    TableDefinition = &lt;span style="color:#a31515;"&gt;&amp;quot;Name NVARCHAR(4000), Value NVARCHAR(4000)&amp;quot;&lt;/span&gt;,
    IsDeterministic = &lt;span style="color:blue;"&gt;true&lt;/span&gt;,
    IsPrecise = &lt;span style="color:blue;"&gt;false&lt;/span&gt;,
    DataAccess = &lt;span style="color:#2b91af;"&gt;DataAccessKind&lt;/span&gt;.None,
    SystemDataAccess = &lt;span style="color:#2b91af;"&gt;SystemDataAccessKind&lt;/span&gt;.None)]
&lt;span style="color:blue;"&gt;public static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IEnumerable &lt;/span&gt;ShortPropsToTable(&lt;span style="color:blue;"&gt;string &lt;/span&gt;shortPropsText)
{
    &lt;span style="color:blue;"&gt;return &lt;/span&gt;ShortPropsEnumerable(shortPropsText);
}

&lt;span style="color:blue;"&gt;public static void &lt;/span&gt;ShortPropsToTableFillRow(&lt;span style="color:blue;"&gt;object &lt;/span&gt;item, &lt;span style="color:blue;"&gt;out &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlChars &lt;/span&gt;name, &lt;span style="color:blue;"&gt;out &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlChars &lt;/span&gt;value)
{
    &lt;span style="color:#2b91af;"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt; shortProp = (&lt;span style="color:#2b91af;"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt;)item;

    name = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlChars&lt;/span&gt;(shortProp.Key);
    value = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlChars&lt;/span&gt;(shortProp.Value);
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;To use this in SQL Server a few simple steps are need:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;div align="justify"&gt;Load the assembly into the database: &lt;/div&gt;

    &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE ASSEMBLY &lt;/span&gt;[MyAssembly]
&lt;span style="color:blue;"&gt;AUTHORIZATION &lt;/span&gt;[dbo]
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;...\MyAssembly.dll&amp;#39;
&lt;/span&gt;&lt;span style="color:blue;"&gt;WITH PERMISSION_SET &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;SAFE
GO&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Defining the &lt;a title="Table-Valued User-Defined Functions" href="http://cli.gs/GngXhh" target="_blank"&gt;Table-Valued User-Defined Function&lt;/a&gt; in &lt;a title="Transact-SQL Overview" href="http://cli.gs/Transact-SQL" target="_blank"&gt;Transact-SQL&lt;/a&gt;: &lt;/div&gt;

    &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE FUNCTION &lt;/span&gt;[dbo]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ShortPropsToTable]&lt;span style="color:gray;"&gt;(&lt;/span&gt;@shortPropsText [nvarchar]&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;))
&lt;/span&gt;&lt;span style="color:blue;"&gt;RETURNS  TABLE &lt;/span&gt;&lt;span style="color:gray;"&gt;(
    &lt;/span&gt;[Name] [nvarchar]&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;) NULL,
    &lt;/span&gt;[Value] [nvarchar]&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;) NULL
) &lt;/span&gt;&lt;span style="color:blue;"&gt;WITH EXECUTE AS CALLER
AS 
EXTERNAL &lt;/span&gt;NAME [MyAssembly]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ShortProps]&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ShortPropsToTable]
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Enable CLR Integration: &lt;/div&gt;

    &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;EXEC &lt;/span&gt;&lt;span style="color:maroon;"&gt;sp_configure &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;clr enabled&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;1
&lt;span style="color:blue;"&gt;GO
RECONFIGURE
GO
&lt;/span&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p align="justify"&gt;And all is set to go.&lt;/p&gt;

&lt;p align="justify"&gt;Now I can just query the property bag as a table:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT
    &lt;/span&gt;e&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ID]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;e&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Name]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;e&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Class]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;e&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Type]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Name]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Value]
&lt;span style="color:blue;"&gt;FROM
    &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;Entity &lt;span style="color:blue;"&gt;as &lt;/span&gt;e
    &lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;ShortPropsToTable&lt;span style="color:gray;"&gt;(&lt;/span&gt;e&lt;span style="color:gray;"&gt;.&lt;/span&gt;[ShortProps]&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;p&lt;/pre&gt;

&lt;p align="justify"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Just for curiosity, for a little over 50000 entities (that can be retrieved on about 1 second on my laptop), I got a little under 630000 properties in les then 40 seconds.&lt;/p&gt;

&lt;p align="justify"&gt;40 seconds might seem a lot compared to the 1 second, but I would like to see better times using T-SQL. And develop and test the TVF in just a couple of hours.&lt;/p&gt;

&lt;p align="justify"&gt;Now, if only he DBAs would allow me to use it. It doesn’t fit into the company’s “security policy”, you know.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1695049" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1695049" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1695049" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=q6CasKE5XBo:3HqOfp6zjv8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=q6CasKE5XBo:3HqOfp6zjv8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=q6CasKE5XBo:3HqOfp6zjv8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=q6CasKE5XBo:3HqOfp6zjv8:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=q6CasKE5XBo:3HqOfp6zjv8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=q6CasKE5XBo:3HqOfp6zjv8:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=q6CasKE5XBo:3HqOfp6zjv8:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/q6CasKE5XBo" height="1" width="1"/&gt;</description><pubDate>Thu, 11 Jun 2009 23:41:14 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1695049</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1695049</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/06/12/playing-with-sql-server-clr-integration-part-i.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/06/12/playing-with-sql-server-clr-integration-part-i.aspx</feedburner:origLink></item><item><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693499</guid><link>http://feeds.paulomorgado.net/~r/PauloMorgado/Blogs/EN/~3/zliHubRDUFI/microsoft-url-rewrite-module-1-1-for-iis-7-to-the-rescue.aspx</link><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/CommunityServer/default.aspx">CommunityServer</category><title>Microsoft URL Rewrite Module 1.1 For IIS 7 To The Rescue</title><description>&lt;p&gt;We are migrating the &lt;a title="[:: PontoNetPT - .NET em Português(PT) ::]" href="http://www.pontonetpt.com/" target="_blank"&gt;PontoNetPT&lt;/a&gt; community from an old .TEXT version to the latest &lt;a title="Community Software by Telligent" href="http://communityserver.com/" target="_blank"&gt;Community Server&lt;/a&gt; (CS).&lt;/p&gt;  &lt;p&gt;Because &lt;strong&gt;PontoNetPT&lt;/strong&gt; has nearly 200 blogs with I don’t know how any posts, commentaries, trackbacks, etc., we are using the &lt;a title="Community Server API - Extending the platform just got easier..." href="http://api.communityserver.com/" target="_blank"&gt;Community Server REST API&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The problem with using this API is that it doesn’t create the folder that CS can be configured to create with a default.aspx file for each blog created using it’s web site administration.&lt;/p&gt;  &lt;p&gt;The importance of this folder and file is for &lt;a title="IIS.net : The Official Microsoft IIS Site" href="http://www.iis.net/" target="_blank"&gt;IIS&lt;/a&gt; to be able to handle the requests &lt;strong&gt;http://&amp;lt;your community&amp;gt;/blogs/&amp;lt;your blog&amp;gt;&lt;/strong&gt; or &lt;strong&gt;http://&amp;lt;your community&amp;gt;/blogs/&amp;lt;your blog&amp;gt;/&lt;/strong&gt; as if was a request to &lt;strong&gt;http://&amp;lt;your community&amp;gt;/blogs/&amp;lt;your blog&amp;gt;/default.aspx&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Fortunately, we are running on &lt;a title="Microsoft Windows Server 2008" href="http://cli.gs/Microsoft-Windows-Server-2008" target="_blank"&gt;Windows 2008&lt;/a&gt; and IIS 7 and all it took was to install the &lt;a title="Microsoft URL Rewrite Module 1.1 For IIS 7" href="http://cli.gs/Microsoft-IIS7-URL-Rewrite-Module" target="_blank"&gt;Microsoft URL Rewrite Module 1.1 For IIS 7&lt;/a&gt; and configure it:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;!--&lt;/span&gt;&lt;span style="color:green;"&gt;...&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.webServer&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;!--&lt;/span&gt;&lt;span style="color:green;"&gt;...&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rewrite&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rules&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Add Default.aspx to blog root URLs&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;stopProcessing&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;match &lt;/span&gt;&lt;span style="color:red;"&gt;url&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;^blogs/([^/]*)(/?)$&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;/&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;action &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Rewrite&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;url&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;blogs/{R:1}/Default.aspx&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rules&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rewrite&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;!--&lt;/span&gt;&lt;span style="color:green;"&gt;...&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.webServer&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;!--&lt;/span&gt;&lt;span style="color:green;"&gt;...&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693499" width="1" height="1"&gt;
&lt;div class="feed_ad"&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1693499" class="feed_ad"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=cf9aef0715954372b326ea8526e04393&amp;u=1693499" border="0" class="feed_ad"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=zliHubRDUFI:sxgGpbFLDO4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=zliHubRDUFI:sxgGpbFLDO4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=zliHubRDUFI:sxgGpbFLDO4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=zliHubRDUFI:sxgGpbFLDO4:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=zliHubRDUFI:sxgGpbFLDO4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.paulomorgado.net/~ff/PauloMorgado/Blogs/EN?a=zliHubRDUFI:sxgGpbFLDO4:3yuytNF0dJw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PauloMorgado/Blogs/EN?i=zliHubRDUFI:sxgGpbFLDO4:3yuytNF0dJw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PauloMorgado/Blogs/EN/~4/zliHubRDUFI" height="1" width="1"/&gt;</description><pubDate>Mon, 01 Jun 2009 00:10:00 Z</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Paulo Morgado</dc:creator><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1693499</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1693499</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/06/01/microsoft-url-rewrite-module-1-1-for-iis-7-to-the-rescue.aspx#comments</comments><feedburner:origLink>http://msmvps.com/blogs/paulomorgado/archive/2009/06/01/microsoft-url-rewrite-module-1-1-for-iis-7-to-the-rescue.aspx</feedburner:origLink></item></channel></rss>
