<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Jason Whitehorn</title>
        <link>http://geekswithblogs.net/jwhitehorn/Default.aspx</link>
        <description>MarshalByRefObject.net</description>
        <language>en-US</language>
        <copyright>Jason Whitehorn</copyright>
        <managingEditor>jason.whitehorn@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Jason Whitehorn</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/jwhitehorn/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>ASP.NET MVC With aspNETserve</title>
            <category>ASP.NET</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/12/11/117606.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/12/11/ASPNET+MVC+With+AspNETserve.aspx"&gt;http://jason.whitehorn.ws/2007/12/11/ASPNET+MVC+With+AspNETserve.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I am pleased to announce that &lt;a href="http://www.codeplex.com/aspNETserve"&gt;aspNETserve&lt;/a&gt; works with the latest CTP of &lt;a href="http://asp.net/downloads/3.5-extensions/"&gt;MVC for ASP.NET&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
aspNETserve has held up well against the MVC samples I have thrown its way, and has actually not required any code changes in aspNETserve.&lt;br /&gt;
&lt;br /&gt;
&lt;r&gt; Let me know if you run into any problems with this.&lt;/r&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117606"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117606" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117606.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/12/11/117606.aspx</guid>
            <pubDate>Wed, 12 Dec 2007 02:00:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/12/11/117606.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117606.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117606.aspx</trackback:ping>
        </item>
        <item>
            <title>Using ASP.NET MVC From Visual Web Developer Express 2008</title>
            <category>ASP.NET</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/12/10/117569.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/12/10/Using+ASPNET+MVC+From+Visual+Web+Developer+Express+2008.aspx"&gt;http://jason.whitehorn.ws/2007/12/10/Using+ASPNET+MVC+From+Visual+Web+Developer+Express+2008.aspx&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Today marked the released of the first preview of &lt;a href="http://asp.net/downloads/3.5-extensions/"&gt;MVC for ASP.NET&lt;/a&gt;. While it works just fine from the free &lt;a href="http://www.microsoft.com/express/vwd/Default.aspx"&gt;Visual Web Developer Express 2008&lt;/a&gt;, this release is missing a project template to help you get up an running quickly.&lt;br /&gt;
&lt;br /&gt;
So, I have thrown together a project template to allow you get get starting using MVC from VWD Express. Unlike VWD Express' big brother, VWD Express seems unable to create Web Application, only Web Sites. So this template has a slightly modified layout from the one available from Visual Studio.&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://img337.imageshack.us/img337/6492/layoutzx0.png" alt="Image Hosted by ImageShack.us" /&gt;&lt;br /&gt;
&lt;br /&gt;
Since Web Site projects can only arbitrarily host classes in the App_Code directory, I have placed the Models and Controllers there. The Views are located in an appropriately named directory off of the site root.&lt;br /&gt;
&lt;br /&gt;
There are two versions of this template, one for C# and one for VB.NET.&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;&lt;a href="http://whitehorn.ws/files/jason/MVC_Express/ASP.NET%20MVC%20Web%20Site.zip"&gt;ASP.NET MVC Web Site For C#&lt;/a&gt;&lt;a&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://whitehorn.ws/files/jason/MVC_Express/ASP.NET%20MVC%20Web%20Site%20In%20VB.NET.zip"&gt;ASP.NET MVC Web Site For VB.NET&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Download the template of your choice to the &lt;strong&gt;&lt;em&gt;Visual Studio 2008\Templates\ProjectTemplates\Visual Web Developer&lt;/em&gt;&lt;/strong&gt; directory located in your "My Documents" directory. After doing so, simply start VWD Express and you will notice a new template available when you go to create a new web site.&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://img337.imageshack.us/img337/5516/startad0.png" alt="Image Hosted by ImageShack.us" /&gt;&lt;br /&gt;
&lt;br /&gt;
This was just something that I threw together really quickly, and is not intended to be a demonstration of MVC. It is simply a starting point for getting started quickly with MVC. If you should encounter any difficulties with this, please let me know.&lt;/li&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117569"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117569" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117569.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/12/10/117569.aspx</guid>
            <pubDate>Tue, 11 Dec 2007 01:35:34 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/12/10/117569.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117569.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117569.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET MVC CTP Now Available</title>
            <category>ASP.NET</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/12/09/117525.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/12/09/ASPNET+MVC+CTP+Now+Available.aspx"&gt;http://jason.whitehorn.ws/2007/12/09/ASPNET+MVC+CTP+Now+Available.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The community technology preview of MVC (Model-View-Control) extensions for ASP.NET is now available for download from:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=A9C6BC06-B894-4B11-8300-35BD2F8FC908&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=A9C6BC06-B894-4B11-8300-35BD2F8FC908&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
For those unfamiliar with this upcoming framework, &lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt; has released a four part series on this technology that can be found at:&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx"&gt; ASP.NET MVC Framework (Part 1)&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx"&gt; ASP.NET MVC Framework (Part 2): URL Routing&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx"&gt; ASP.NET MVC Framework (Part 3): Passing ViewData from Controllers to Views&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx"&gt; ASP.NET MVC Framework (Part 4): Handling Form Edit and Post Scenarios&lt;/a&gt;&lt;/li&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117525"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117525" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117525.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/12/09/117525.aspx</guid>
            <pubDate>Mon, 10 Dec 2007 03:07:36 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/12/09/117525.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117525.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117525.aspx</trackback:ping>
        </item>
        <item>
            <title>aspNETserve Version 1.2 Finally Released</title>
            <category>ASP.NET</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/12/09/117515.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/12/09/aspNETserve+Version+12+Finally+Released.aspx"&gt;http://jason.whitehorn.ws/2007/12/09/aspNETserve+Version+12+Finally+Released.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Just today I was able to release &lt;a href="http://www.codeplex.com/aspNETserve"&gt;aspNETserve&lt;/a&gt; version 1.2!&lt;br /&gt;
&lt;br /&gt;
After the birth of my son I took a few months off, so this project sat dormant for awhile. Now that he has been sleeping regularly (and I have too &lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/regular_smile.gif" /&gt;), I have been able to contribute to my open source project again.&lt;br /&gt;
&lt;br /&gt;
If you haven't checked out &lt;a href="http://www.codeplex.com/aspNETserve"&gt;aspNETserve&lt;/a&gt;, you should really look into it. It is by no means a replacement for IIS, not yet anyways. But, it still proves to be very helpful. One of the new features in version 1.2 that I am excited about is the "Host in aspNETserve" context menu. From just about anywhere in Windows you can now right click on a directory and start hosting your web application.&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=aspNETserve&amp;amp;DownloadId=23326" /&gt; &lt;br /&gt;
&lt;br /&gt;
I cannot think of how many times I have downloaded sample web applications off the net, and had wished I had this feature earlier. Now you can take that website for a test spin without having to configure IIS.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117515"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117515" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117515.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/12/09/117515.aspx</guid>
            <pubDate>Sun, 09 Dec 2007 08:17:30 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/12/09/117515.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117515.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117515.aspx</trackback:ping>
        </item>
        <item>
            <title>.NET Wiki Weekend Update 12/7/2007</title>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/12/07/117495.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/12/07/NET+Wiki+Weekend+Update+1272007.aspx"&gt;http://jason.whitehorn.ws/2007/12/07/NET+Wiki+Weekend+Update+1272007.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Its been a great week on the &lt;a href="http://www.marshalbyrefobject.net/wiki/"&gt;.NET Wiki&lt;/a&gt;. There have been a few newly registered users, and several pages added.&lt;br /&gt;
&lt;br /&gt;
The updated pages include:&lt;br /&gt;
&lt;a href="http://www.marshalbyrefobject.net/wiki/value+type.ashx"&gt;Value Type&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.marshalbyrefobject.net/wiki/Access+Modifier.ashx"&gt;Access Modifier&lt;/a&gt;&lt;a&gt;&lt;br /&gt;
&lt;/a&gt;&lt;a href="http://www.marshalbyrefobject.net/wiki/LINQ.ashx"&gt;LINQ&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.marshalbyrefobject.net/wiki/Silverlight.ashx"&gt;Silverlight&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Additionally I managed to updated our version of &lt;a href="http://www.screwturn.eu/"&gt;ScrewTurn Wiki&lt;/a&gt; to the latest version (2.0.21, up from 2.0.20).&lt;br /&gt;
&lt;br /&gt;
Things are really moving along nicely.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117495"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117495" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117495.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/12/07/117495.aspx</guid>
            <pubDate>Sat, 08 Dec 2007 05:07:45 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/12/07/117495.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117495.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117495.aspx</trackback:ping>
        </item>
        <item>
            <title>The Design Of Code</title>
            <category>Random</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/12/07/117493.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/12/07/The+Design+Of+Code.aspx"&gt;http://jason.whitehorn.ws/2007/12/07/The+Design+Of+Code.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://geekswithblogs.net/starr/Default.aspx"&gt;Jonathan Starr&lt;/a&gt; in a &lt;a href="http://geekswithblogs.net/starr/archive/2007/12/07/117489.aspx"&gt;recent post&lt;/a&gt;, asked his readers:&lt;br /&gt;
&lt;p&gt;"&lt;em&gt;As we software engineers refactor someone else's code [...] at what point is the new application essentially not the same as the legacy application that you improved?"&lt;/em&gt; &lt;/p&gt;
Software rarely occurs in isolation, especially enterprise software. Often years of business rules, legacy systems, and even unjustified rational guide and shape the applications we work on. &lt;br /&gt;
&lt;br /&gt;
When you are involved in a massive re-engineering of an existing application, you typically work you way piece-wise through the code. It is in this fashion that you systematically rework entire subsystems of the application. During this process we are hardly aware that, despite our best intentions, we are not truly guiding the design of the application. The legacy design is guiding its own redesign.&lt;br /&gt;
&lt;br /&gt;
We often have to shape our ideas to fit into the legacy mold the application presents. This, coupled with the same business needs and environment that shaped the application originally, is precisely why most applications never truly change. The source code may look different, however the differences is purely cosmetic. Much the same as how an adult is still the same person as they were as a child. The adult has a few new behaviors, some they don't perform any more. The adult even looks, walks, and sounds different. But the adult is still the same person they were as a child.&lt;br /&gt;
&lt;br /&gt;
An application can only truly be reborn, when it is clean room re-engineered, as anything short of this would re-introduce the "&lt;span style="font-style: italic;"&gt;spirit&lt;/span&gt;" of its predecessor.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117493"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117493" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117493.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/12/07/117493.aspx</guid>
            <pubDate>Sat, 08 Dec 2007 04:35:47 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/12/07/117493.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117493.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117493.aspx</trackback:ping>
        </item>
        <item>
            <title>Making Visual Studio Load Faster</title>
            <category>Random</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/12/07/117491.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/12/07/Making+Visual+Studio+Load+Faster.aspx"&gt;http://jason.whitehorn.ws/2007/12/07/Making+Visual+Studio+Load+Faster.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tired of Visual Studio being sluggish? &lt;br /&gt;
&lt;br /&gt;
Well, I can't help you there. But I can tell you how to make it start up faster. You simply need to disable the startup screen. &lt;br /&gt;
&lt;a target="_blank" href="http://img456.imageshack.us/my.php?image=img1ka0.png"&gt;&lt;img border="0" src="http://img456.imageshack.us/img456/8500/img1ka0.th.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Really, you didn't use that screen anyway ;-)&lt;br /&gt;
&lt;br /&gt;
To disable it, goto to the &lt;em&gt;Tools&lt;/em&gt; menu, and select the &lt;em&gt;Options&lt;/em&gt; option.&lt;br /&gt;
&lt;br /&gt;
&lt;a target="_blank" href="http://img456.imageshack.us/my.php?image=img2cu1.png"&gt;&lt;img border="0" src="http://img456.imageshack.us/img456/3221/img2cu1.th.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
From the &lt;em&gt;Options&lt;/em&gt; menu, navigate to the &lt;em&gt;Environment&lt;/em&gt; tree option, then the &lt;em&gt;Startup&lt;/em&gt; option. &lt;br /&gt;
&lt;br /&gt;
&lt;a target="_blank" href="http://img456.imageshack.us/my.php?image=img3cd0.png"&gt;&lt;img border="0" src="http://img456.imageshack.us/img456/7827/img3cd0.th.png" alt="" /&gt;&lt;/a&gt; &lt;br /&gt;
From here you can select the &lt;em&gt;Show empty environment&lt;/em&gt; value for the "At Startup" drop down.&lt;br /&gt;
&lt;br /&gt;
There you go, that will disable that sluggish startup screen!&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117491"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117491" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117491.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/12/07/117491.aspx</guid>
            <pubDate>Sat, 08 Dec 2007 01:05:38 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/12/07/117491.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117491.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117491.aspx</trackback:ping>
        </item>
        <item>
            <title>Blog Badges</title>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/12/02/117303.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/12/02/Blog+Badges.aspx"&gt;http://jason.whitehorn.ws/2007/12/02/Blog+Badges.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Like badges? I know I do, so here you go:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.marshalbyrefobject.net/wiki/MainPage.ashx" border="0"&gt; &lt;img src="http://www.marshalbyrefobject.net/media/dotnet-wiki_80x15.png" alt="dotNet" wiki="" /&gt; &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Source code:&lt;br /&gt;
&lt;pre class="code"&gt;&amp;lt;a href="http://www.marshalbyrefobject.net/wiki/MainPage.ashx" border="0"&amp;gt;&lt;br /&gt;&amp;lt;img src="http://www.marshalbyrefobject.net/media/dotnet-wiki_80x15.png" alt="dotNet wiki" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Spread the word for the .NET wiki by adding this bade to your blog!&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117303"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117303" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117303.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/12/02/117303.aspx</guid>
            <pubDate>Mon, 03 Dec 2007 04:28:51 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/12/02/117303.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117303.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117303.aspx</trackback:ping>
        </item>
        <item>
            <title>See You In Tulsa!</title>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/11/28/117207.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/11/28/See+You+In+Tulsa.aspx"&gt;http://jason.whitehorn.ws/2007/11/28/See+You+In+Tulsa.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A Visual Studio 2008 InstallFest will be held this Monday (12/3/2007) in Tulsa Oklahoma. The event is sponsored in part by &lt;a href="http://www.tulsadevelopers.net/"&gt;TulsaDevelopers.NET&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I will be at the event, so if you see me let me know.&lt;br /&gt;
&lt;a target="_blank" href="http://img516.imageshack.us/my.php?image=meof1.jpg"&gt;&lt;img border="0" src="http://img516.imageshack.us/img516/1291/meof1.th.jpg" alt="" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117207"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117207" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117207.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/11/28/117207.aspx</guid>
            <pubDate>Thu, 29 Nov 2007 01:57:59 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/11/28/117207.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117207.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117207.aspx</trackback:ping>
        </item>
        <item>
            <title>.NET Wiki</title>
            <category>Random</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/11/27/117169.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/11/27/NET+Wiki.aspx"&gt;http://jason.whitehorn.ws/2007/11/27/NET+Wiki.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have just launched a Wiki devoted to all things .NET. You can check it out at &lt;a href="http://www.marshalbyrefobject.net/wiki/MainPage.ashx"&gt;MarshalByRefObject.net/Wiki/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The site is new, so there is still lots of room for improvement. So if you see anything you'd like see improved, just let me know.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117169"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117169" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/117169.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/11/27/117169.aspx</guid>
            <pubDate>Wed, 28 Nov 2007 05:46:23 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/11/27/117169.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/117169.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/117169.aspx</trackback:ping>
        </item>
        <item>
            <title>The Wonders Of InternalsVisibleTo</title>
            <category>.NET</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/11/09/116750.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/11/09/The+Wonders+Of+InternalsVisibleTo.aspx"&gt;http://jason.whitehorn.ws/2007/11/09/The+Wonders+Of+InternalsVisibleTo.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I do not know how I missed this, but just today I found out that you can expose an assembly's internal methods/properties/classes to a "friend" assembly. Normally internals are only accessible to members of the same assembly, and are often used to hide "plumbing" methods and utilities classes. &lt;br /&gt;
&lt;br /&gt;
For many reasons you often want to separate your code into multiple assemblies, perhaps one for each application layer or some other logical boundary. A problem arises when two or more assemblies need access to each others internals. Prior to .NET 2.0 you had two choices, either expose these plumbing methods as public, or lump as much of your code into one assembly as was needed to keep the plumbing internal.&lt;br /&gt;
&lt;br /&gt;
In comes .NET 2.0's &lt;a href="http://www.marshalbyrefobject.net/wiki/System.Runtime.CompilerServices.InternalsVisibleToAttribute.ashx"&gt;InternalsVisibleTo&lt;/a&gt; attribute. This attribute is applied on the assembly level, and allows the assembly to give internal access to specific assemblies. &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
Say you have two assemblies, &lt;span style="font-weight: bold;"&gt;MyExample.DomainObjects&lt;/span&gt; &amp;amp; &lt;span style="font-weight: bold;"&gt;MyExample.ServiceLayer&lt;/span&gt;. In the DomainObjects assembly you have the following abstract class:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;namespace MyExample.DomainObjects{&lt;br /&gt;     public abstract class DomainObject{&lt;br /&gt;          //.... other things....&lt;br /&gt;          public virtual DateTime LastModifiedDate{&lt;br /&gt;               get { ... }&lt;br /&gt;               internal set { ... }&lt;br /&gt;          }&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
In the above example you would like to have your service layer in a separate assembly from you domain objects. You would also like to have a LastModifiedDate property for each of your domain objects, but you would prefer if it was only settable by your service layer.&lt;br /&gt;
&lt;br /&gt;
This is were the InternalsVisibleTo comes in handy. In the DomainObjects assembly you can added the InternalsVisbleTo attribute to give only the ServiceLayer assembly access to any and all internal items. For unsigned assemblies the attribute would look like:&lt;br /&gt;
&lt;pre class="code"&gt;[assembly: InternalsVisibleTo("MyExample.ServiceLayer")]&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
This is straight forward when the target assembly is unsigned, but gets a little more difficult when the target assembly is signed. For signed assemblies you will need the assembly's public key. This is not to be confused with the assembly's public key &lt;span style="font-weight: bold;"&gt;token&lt;/span&gt;, which is often what you see. To acquire the public key of a signed assembly you will need the "sn.exe" tool that ships with Visual Studio. &lt;br /&gt;
&lt;br /&gt;
From the "Visual Studio Command Prompt":&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;sn -Tp c:\Users\jason\projects\MyExample\MyExample.ServiceLayer.dll&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt; NOTE:&lt;/span&gt; &lt;span style="font-style: italic;"&gt;the "sn" command takes a big "T" and a little "p" for the switch, and you will need to replace my example path with your own ;-)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Whats pops out of this handy little program is both the public key, and the public key token. The one we needs is the longer one, the public key. With this in hand we can now add the appropriate attribute to our DomainObjects assembly.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;[assembly: InternalsVisibleTo("MyExample.ServiceLayer, PublicKey=0024000004809{key shortened for readability}30a09825a6999")]&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt; NOTE:&lt;/span&gt; &lt;span style="font-style: italic;"&gt;The public key is &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;much &lt;/span&gt;&lt;span style="font-style: italic;"&gt;longer than what is shown above. The above sample is intentionally incorrect for legibility. For this to work you will need to copy and paste the public key in its entirety.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
With the public key added to the assembly name on the attribute our example ServiceLayer assembly can access the internals of the DomainObjects assembly. &lt;br /&gt;
&lt;br /&gt;
Additionally, since the InternalsVisibleTo attribute references the friend assembly by its string name, no real dependency is created from our DomainObjects assembly to our ServiceLayer assembly. The DomainObjects assembly will continue to work with or without the ServiceLayer assembly present.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116750"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116750" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/116750.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/11/09/116750.aspx</guid>
            <pubDate>Sat, 10 Nov 2007 02:53:30 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/11/09/116750.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/116750.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/116750.aspx</trackback:ping>
        </item>
        <item>
            <title>Enable MS DTC on Windows Vista</title>
            <category>.NET</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/10/31/116504.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/10/31/Enable+MS+DTC+On+Windows+Vista.aspx"&gt;http://jason.whitehorn.ws/2007/10/31/Enable+MS+DTC+On+Windows+Vista.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To enable MS DTC on Windows Vista simply follow the instructions from:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://technet2.microsoft.com/windowsserver2008/en/library/1f6d0a27-533b-4516-8656-b492f1649e9f1033.mspx?mfr=true"&gt;http://technet2.microsoft.com/windowsserver2008/en/library/1f6d0a27-533b-4516-8656-b492f1649e9f1033.mspx?mfr=true&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
MS DTC appears to be required to use System.Transactions against SQL Server, and is disabled by default.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116504"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116504" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/116504.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/10/31/116504.aspx</guid>
            <pubDate>Thu, 01 Nov 2007 03:10:18 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/10/31/116504.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/116504.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/116504.aspx</trackback:ping>
        </item>
        <item>
            <title>A Possible Solution To The .NET 3.5/Visual Studio 2005 Feud</title>
            <category>.NET</category>
            <category>ASP.NET</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/07/03/113660.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/07/03/A+Possible+Solution+To+The+NET+35Visual+Studio+2005+Feud.aspx"&gt;http://jason.whitehorn.ws/2007/07/03/A+Possible+Solution+To+The+NET+35Visual+Studio+2005+Feud.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In &lt;a href="http://geekswithblogs.net/jwhitehorn/archive/2007/06/23/113412.aspx"&gt;my previous post&lt;/a&gt; I discussed a problem of developing ASP.NET 2.0 applications in Visual Studio 2005, while having the .NET 3.5 framework installed. In summation, the issue was because Visual Studio 2005 was linking against a library that shipped with .NET 3.5 instead of the explicitly referenced version from the web.config. &lt;br /&gt;
&lt;br /&gt;
The comments of one reader of &lt;a href="http://geekswithblogs.net/jwhitehorn/archive/2007/06/23/113412.aspx"&gt;my previous post&lt;/a&gt; mentioned using &lt;a href="http://msdn2.microsoft.com/en-us/library/eftw1fys.aspx"&gt;binding redirection&lt;/a&gt; to resolve the issue. In short, it looks like they were correct. As best as I can tell, binding redirection does in fact fix this issue.&lt;br /&gt;
&lt;br /&gt;
Binding redirection is the ability to take a pre-compiled application and tell the loader to link against a different version of a library than the application was originally built with. In our case, we would need to add the following configuration to our web.config.&lt;br /&gt;
&lt;pre class="code"&gt;&amp;lt;runtime&amp;gt;&lt;br /&gt;    &amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;&lt;br /&gt;      &amp;lt;dependentAssembly&amp;gt;&lt;br /&gt;        &amp;lt;assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/&amp;gt;&lt;br /&gt;        &amp;lt;bindingRedirect oldVersion="2.0.0.0" newVersion="1.0.61025.0"/&amp;gt;&lt;br /&gt;      &amp;lt;/dependentAssembly&amp;gt;&lt;br /&gt;    &amp;lt;/assemblyBinding&amp;gt;&lt;br /&gt;  &amp;lt;/runtime&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
The above configuration tells .NET to use System.Web.Extensions version 1.0.61025 instead of version 2.0.0.0. While the above does pose to be a solution to the problem, it is concerning that this would be needed at all.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113660"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113660" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/113660.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/07/03/113660.aspx</guid>
            <pubDate>Tue, 03 Jul 2007 21:12:30 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/07/03/113660.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/113660.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/113660.aspx</trackback:ping>
        </item>
        <item>
            <title>NHibernate Criteria Queries</title>
            <category>.NET</category>
            <category>NHibernate</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/06/30/113603.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/06/30/NHibernate+Criteria+Queries.aspx"&gt;http://jason.whitehorn.ws/2007/06/30/NHibernate+Criteria+Queries.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://www.nhibernate.org"&gt;NHibernate's&lt;/a&gt; support for criteria queries provides an extremely powerful query feature into an easy to use package. NHibernate has a rather complete manual that covers criteria queries, which you can checkout &lt;a href="http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/querycriteria.html"&gt;here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The NHibernate documentation has a ton of information packed within it, and can be a little overwhelming for those who are new to NHibernate. So, as an argumentation to the documentation for criteria searching, I will provide a really basic overview of how things work.&lt;/p&gt;
&lt;p&gt;The NHibernate session exposes a method called "CreateCriteria", which accepts a Type and returns an ICriteria. This is the starting point for any criteria query. The Type you pass the method, is the same Type that you are querying for. For example, if you have a business object call "Customer" that we want to search for using criteria, you would:&lt;/p&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;ICriteria crit = session.CreateCriteria(typeof(Customer));&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;Now that you have created an ICriteria object to represent your search, you need to start specifying various criteria for the object NHibernate will fetch. This is were the "Add" method comes in handy. &lt;/p&gt;
&lt;p&gt;The Add method accepts any ICriterion object, but to help you along NHibernate provides the "Expression" object which has many static methods to help you form your criteria. Continuing with our running example, if you want to select customers who are older than 21 years of age you would:&lt;/p&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;crit.Add(Expression.Gt("Age", 21));&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;The above code tell NHibernate that the "Age" property of our Customer object needs to be greater than the value 21. In the above manor, you can use the Add method and the Expression object to specify exactly which objects you want to retrieve.&lt;/p&gt;
&lt;p&gt;To actually fetch our objects from the database, you execute the "List" method on the ICriteria object.&lt;/p&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;IList&lt;customer&gt; results = crit.List&lt;customer&gt;();&lt;br /&gt;&lt;/customer&gt;&lt;/customer&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;There are many more capabilities of criteria queries in NHibernate that I have not even touched upon, which you can read more about in the official NHibernate documentation. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113603"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113603" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/113603.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/06/30/113603.aspx</guid>
            <pubDate>Sat, 30 Jun 2007 18:34:44 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/06/30/113603.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/113603.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/113603.aspx</trackback:ping>
        </item>
        <item>
            <title>Parsing RSS From C#</title>
            <category>.NET</category>
            <link>http://geekswithblogs.net/jwhitehorn/archive/2007/06/26/113488.aspx</link>
            <description>&lt;strong&gt;UPDATE (12/17/2007):&lt;/strong&gt; My blog has moved. This post is now located at: &lt;a href="http://jason.whitehorn.ws/2007/06/26/Parsing+RSS+From+C.aspx"&gt;http://jason.whitehorn.ws/2007/06/26/Parsing+RSS+From+C.aspx&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I set out to write a RSS parser in C#. I know that several existing libraries are available for .NET that parse RSS streams, but out of curiosity I wanted to give it a go anyway.&lt;br /&gt;
Before I get started, for those interested in RSS libraries for .NET checkout  &lt;a href="http://www.rssdotnet.com/"&gt;RSS.NET&lt;/a&gt; or  &lt;a href="http://www.perfectxml.com/RSSConnect/"&gt;RSSConnect&lt;/a&gt;, to just name two.&lt;br /&gt;
&lt;br /&gt;
As .NET developers we have some really powerful tools available to us that are built directly into the .NET framework. Take, for example, Serialization. In .NET we can turn an object into an XML resource using the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx"&gt;XmlSerializer&lt;/a&gt; class, provided that the class is &lt;a href="http://msdn2.microsoft.com/en-us/library/system.serializableattribute.aspx"&gt;Serializable&lt;/a&gt;. In fact, the XmlSerializer object will even attempt to populate an object from an XML resource.&lt;br /&gt;
&lt;br /&gt;
Visual Studio ships with a tool called XSD which can turn an XML Schema Definition into a C# class. Knowing that RSS is expressed as an XML resource, I set out to find an XSD for RSS. After some searching I found &lt;a href="http://weblogs.asp.net/wkriebel/archive/2004/03/07/85642.aspx"&gt;this site&lt;/a&gt;, which contains an XSD for RSS that the site's author wrote. For posterity I have placed a mirror of that file on my own site, which you can find &lt;a href="http://whitehorn.ws/files/jason/rss/rss20.xsd"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Before continuing on, I need to pause and look ahead. The XSD that I found did not work out of the box, and I had to make a small modification to get it to work. I removed a reference to the RSS schema namespace from the XSD. The modified XSD can be downloaded from &lt;a href="http://whitehorn.ws/files/jason/rss/RSSv20.xsd"&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now, armed with an XSD, we can have the XSD program make some classes for us. From a command prompt (preferable the "Visual Studio Command Prompt" command prompt) type:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;xsd RSS20.xsd /classes&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Provided that RSS20.xsd is the name of the RSS XSD, and that you are currently in the same directory as RSS20.xsd, the XSD program should output a single file called RSS20.cs. The C# source file that XSD produced contains a class definition for each RSS entity, most notable the root node called "rss".&lt;br /&gt;
&lt;br /&gt;
With classes that represent RSS, we can now use the XmlSerializer object to easily populate an object with RSS data. For example: &lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;     string rssXml = "... your rss data here ...";&lt;br /&gt;     XmlSerializer helper = new XmlSerializer(typeof(rss));&lt;br /&gt;     rss obj = (rss)helper.Deserialize(new StringReader(rssXml));&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
The above code snippet, will create an rss instance called "obj" from raw RSS data. But, you don't want to have to do this everytime you want to parse RSS. Instead, it would be helpful if that logic was encapsulated by the rss object. Fortunately, the classes produced by the XSD program are all partial classes. So, in a separate .cs file, we can re-declare the rss class and expand upon its functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;//declare another portion of the "rss" object.&lt;br /&gt;public partial class rss{&lt;br /&gt;     //add more methods to "rss" here&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Ideally it would be nice to have both a method to turn an RSS stream into an rss object, and a method to output RSS from an rss object. For example:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;public partial class rss{&lt;br /&gt;&lt;br /&gt;        public static rss Parse(string rssXml) {&lt;br /&gt;            //turn an RSS string, into an rss object.&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public override string ToString() {&lt;br /&gt;            //turn the rss object into a RSS string.&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
The above two methods can both be implemented using the XmlSerializer object, as it provides methods to serialize and deserialize and object. I ended up with the following implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;public partial class rss{&lt;br /&gt;&lt;br /&gt;        public static rss Parse(string rssXml) {&lt;br /&gt;            return (rss)Serializer.Deserialize(new StringReader(rssXml));&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public override string ToString() {&lt;br /&gt;            string result;&lt;br /&gt;            using (StringWriter sw = new StringWriter()) {&lt;br /&gt;                Serializer.Serialize(sw, this);&lt;br /&gt;                result = sw.ToString();&lt;br /&gt;            }&lt;br /&gt;            return result;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static XmlSerializer Serializer {&lt;br /&gt;            get {&lt;br /&gt;                if (_serializer == null)&lt;br /&gt;                    _serializer = new XmlSerializer(typeof(rss));&lt;br /&gt;                return _serializer;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        private static XmlSerializer _serializer;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
The above implementation, combined with the output from the XSD program, is a functional RSS parser. The above code can be used to process blog output, or price feeds from your favorite online retailer.&lt;br /&gt;
&lt;br /&gt;
As an added bonus, I wrote two additional methods for rss from those outlined above.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;        //optionally, you can add these two methods to "rss".&lt;br /&gt;        public static rss CreateFrom(Uri location) {&lt;br /&gt;            rss result;&lt;br /&gt;            using (WebClient helper = new WebClient()) {&lt;br /&gt;                string rawRss = helper.DownloadString(location);&lt;br /&gt;                result = Parse(rawRss);&lt;br /&gt;            }&lt;br /&gt;            return result;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public static rss CreateFrom(string location) {&lt;br /&gt;            return CreateFrom(new Uri(location));&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
For those interested, a compiled version of this code can be download from &lt;a href="http://whitehorn.ws/files/jason/rss/net.MarshalByRefObject.Rss.dll"&gt;here&lt;/a&gt;.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113488"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113488" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jwhitehorn/aggbug/113488.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Whitehorn</dc:creator>
            <guid>http://geekswithblogs.net/jwhitehorn/archive/2007/06/26/113488.aspx</guid>
            <pubDate>Wed, 27 Jun 2007 03:07:55 GMT</pubDate>
            <comments>http://geekswithblogs.net/jwhitehorn/archive/2007/06/26/113488.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jwhitehorn/comments/commentRss/113488.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jwhitehorn/services/trackbacks/113488.aspx</trackback:ping>
        </item>
    </channel>
</rss>