<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>VS2008 / .NET 3.5</title>
        <link>http://geekswithblogs.net/SoftwareDoneRight/category/7416.aspx</link>
        <description>Issues related to Visual Studio 2008 and .NET 3.5 (Orcas)</description>
        <language>en-US</language>
        <copyright>ChrisD</copyright>
        <managingEditor>chris@wtfsolutions.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Iterating Static Fields / Properties</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/07/09/iterating-static-fields--properties.aspx</link>
            <description>&lt;p&gt;Often during development I end up with "Constants" classes, classes of constant or static values that I want design time Visual Studio intellisense support for, and run-time domain checking. &lt;/p&gt;  &lt;p&gt;Consider the following class:&lt;/p&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;public static class&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Constants     &lt;br /&gt;  &lt;/span&gt;{    &lt;br /&gt;       &lt;span style="color: blue"&gt;public static class&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ClaimTypes     &lt;br /&gt;      &lt;/span&gt;{    &lt;br /&gt;           &lt;span style="color: blue"&gt;internal static string&lt;/span&gt;ClaimTypeNameSpace = &lt;span style="color: #a31515"&gt;"http://schemas.wtfsolutions.com/2008/07/claims/profile/"&lt;/span&gt;;    &lt;br /&gt;           &lt;span style="color: blue"&gt;public static string&lt;/span&gt;FirstName = ClaimTypeNameSpace + &lt;span style="color: #a31515"&gt;"firstname"&lt;/span&gt;;    &lt;br /&gt;           &lt;span style="color: blue"&gt;public static string&lt;/span&gt;LastName = ClaimTypeNameSpace + &lt;span style="color: #a31515"&gt;"lastname"&lt;/span&gt;;    &lt;br /&gt;           &lt;span style="color: blue"&gt;public static string&lt;/span&gt;DateOfBirth = ClaimTypeNameSpace + &lt;span style="color: #a31515"&gt;"dateofbirth"&lt;/span&gt;;    &lt;br /&gt;           &lt;span style="color: blue"&gt;public static string&lt;/span&gt;FavoriteColor = ClaimTypeNameSpace + &lt;span style="color: #a31515"&gt;"favoritecolor"&lt;/span&gt;;    &lt;br /&gt;       }    &lt;br /&gt;    &lt;br /&gt;   }&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;This class is handy at design time.  When I type "&lt;strong&gt;Constants.ClaimTypes."&lt;/strong&gt; up pops an intellisense list of the valid claim types for my application. &lt;/p&gt;  &lt;p&gt;The problem with this list is that you can't iterate through it at runtime, ensuring the value of a variable is in the valid ClaimType domain of values.  Ideally I'd like to be able to do this: &lt;font color="#ff0000"&gt;** THIS DOES NOT WORK ***&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color: blue"&gt;private bool &lt;/span&gt;validateClaimType(&lt;span style="color: blue"&gt;string &lt;/span&gt;claimType)      &lt;br /&gt;{      &lt;br /&gt;    &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Constants&lt;/span&gt;.&lt;span style="color: #2b91af"&gt;ClaimTypes&lt;/span&gt;.Contains(claimType);      &lt;br /&gt;}      &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Fortunately, we can use reflection to build a runtime dictionary of the field name and field values&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&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; staticFieldsToList(&lt;span style="color: #2b91af"&gt;Type &lt;/span&gt;targetType)
{
    &lt;span style="color: blue"&gt;var &lt;/span&gt;list = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&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;(&lt;span style="color: #2b91af"&gt;StringComparer&lt;/span&gt;.OrdinalIgnoreCase);
    &lt;span style="color: blue"&gt;var &lt;/span&gt;fields = targetType.GetFields(BindingFlags.Public | BindingFlags.Static);
    &lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;field &lt;span style="color: blue"&gt;in &lt;/span&gt;fields)
        list.Add(field.Name, field.GetValue(&lt;span style="color: blue"&gt;null&lt;/span&gt;) &lt;span style="color: blue"&gt;as string&lt;/span&gt;);
    &lt;span style="color: blue"&gt;return &lt;/span&gt;list;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;and validate our claim type as follows: &lt;font color="#ff0000"&gt;** THIS WORKS **&lt;/font&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private bool &lt;/span&gt;validateClaimType(&lt;span style="color: blue"&gt;string &lt;/span&gt;claimType)
{
    &lt;span style="color: blue"&gt;return &lt;/span&gt;staticFieldsToList(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Constants&lt;/span&gt;.&lt;span style="color: #2b91af"&gt;ClaimTypes&lt;/span&gt;)).ContainsValue(claimType);
}&lt;/pre&gt;

  &lt;p&gt;In my real application I store the dictionary to a static field to avoid multiple reflection-based calls, but for the purposes of demonstrating functionality, the above code reflects the static class each call. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; The best of both worlds, design-time IDE support and run-time domain validation.  &lt;/p&gt;

&lt;p&gt;I love it when a plan comes together.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123702"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123702" 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/SoftwareDoneRight/aggbug/123702.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/07/09/iterating-static-fields--properties.aspx</guid>
            <pubDate>Thu, 10 Jul 2008 02:27:50 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/123702.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/07/09/iterating-static-fields--properties.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/123702.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/123702.aspx</trackback:ping>
        </item>
        <item>
            <title>Clean Up WCF Clients : The Right Way</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/05/23/clean-up-wcf-clients--the-right-way.aspx</link>
            <description>&lt;p&gt;As I've done more and more WCF work recently, I've noticed an intermittent problem running my unit tests. &lt;/p&gt; &lt;p&gt;The host seemingly hangs for no obvious reason.  Eventually the connection times out and produces the following in the service log:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;System.ServiceModel.CommunicationObjectAbortedException, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Stopping the host and client and re-running the test allows it to pass without issue.  &lt;/p&gt; &lt;p&gt;The problem is related to the way I managed my WCF channels and client proxies.  In my code I make use of the ChannelFactory&amp;lt;T&amp;gt; object to create my wcf channels dynamically from my configuration information, like the following:&lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;pre class="csharpcode"&gt;       &lt;span class="preproc"&gt;#region&lt;/span&gt; IdentityService Proxy
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IIdentityService _identitySvc;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IIdentityService identitySvc
        {
            get
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (_identitySvc == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    var factory = &lt;span class="kwrd"&gt;new&lt;/span&gt; ChannelFactory&amp;lt;IIdentityService&amp;gt;(&lt;span class="str"&gt;"IdentityService"&lt;/span&gt;);
                    _identitySvc = factory.CreateChannel();
                }
                &lt;span class="kwrd"&gt;return&lt;/span&gt; _identitySvc;
            }

        }
        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="preproc"&gt;&lt;/span&gt; &lt;/pre&gt;
&lt;p&gt;The client proxy produced implements the typed interface "IIdentityService" in the above example.  It natively supports no operations for channel management and cleanup.  However, failing to clean up the client proxy may cause channel timeouts and resource blocking on the server. So channel cleanup is important, but if its not implemented in the client proxy, how do you manage it?&lt;/p&gt;
&lt;p&gt;The secret lies in the casting.  The transparent proxy produced implements a number of useful interfaces.  For our purposes we care about IDisposable and IClientChannel. When we're done with the proxy,  we must close the channel and dispose of it.  I've seen some examples like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (IClientChannel client = (IClientChannel)channelFactory.CreateChannel())
{
    IIdentityService proxy = (IIdentityService)client;
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;This is Bad.&lt;/font&gt;&lt;/strong&gt;  Yes, you are disposing of the channel resource, but you haven't closed the wcf channel, you've only disposed of your handle to it.  You must explicitly call close then dispose on the proxy like so:&lt;/p&gt;&lt;pre class="csharpcode"&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (_identitySvc != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
             {
                 ((IClientChannel)_identitySvc).Close();
                 ((IDisposable)_identitySvc).Dispose();
                 _identitySvc = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
             }&lt;/pre&gt;&lt;pre class="csharpcode"&gt; &lt;/pre&gt;
&lt;p&gt;Optionally, since IClientChannel implements IDisposable, you could call ((IClientChannel) proxy).Dispose().  If you prefer, and your design allows, you can still use the using statement, just be sure to add try/catch blocks and call the close() method on the casted proxy before the closing brace. I tend to have static references to my proxy classes so I have to explicitly call close() and dispose() when I complete my WCF operation.&lt;/p&gt;
&lt;p&gt;Now that I'm properly cleaning up my proxies, my WCF services run all my tests without hanging.&lt;/p&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]&gt;&lt;/style&gt;

&lt;style type="text/css"&gt;&lt;![CDATA[csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
]]&gt;&lt;/style&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122354"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122354" 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/SoftwareDoneRight/aggbug/122354.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/05/23/clean-up-wcf-clients--the-right-way.aspx</guid>
            <pubDate>Fri, 23 May 2008 21:12:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/122354.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/05/23/clean-up-wcf-clients--the-right-way.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/122354.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/122354.aspx</trackback:ping>
        </item>
        <item>
            <title>Developing Windows Services</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/05/10/developing-windows-services.aspx</link>
            <description>&lt;p&gt;I've been developing and debugging a windows service for my current project. Working with a Windows service is very much like working with a console app, with the startup and shutdown logic separated into the servicebase's start and stop methods. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;u&gt;Debugging a Windows Service&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Unlike a console app, however Visual studio can't run a windows service and automatically attach the debugger (no Run-with-Debugger (F5) support).  Not to fear, its easily enough to attach the debugger to the windows service.  In my case, my service was starting and stopping right away, with no opportunity to attach the visual studio debugger to the running service.  Instead I added this handy dandy line of code to the constructor of the service class:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;pre class="code"&gt;            &lt;span style="color: blue"&gt;#if &lt;/span&gt;DEBUG
             Debugger.Launch(); 
            &lt;span style="color: blue"&gt;#endif 
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;when the service starts, Windows prompts you to attach a debugger. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/SoftwareDoneRight/WindowsLiveWriter/DevelopingWindowsServices_A343/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/SoftwareDoneRight/WindowsLiveWriter/DevelopingWindowsServices_A343/image_thumb.png" width="226" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Select the debugger of choice and step through your windows service. &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;u&gt;Removing and Reinstalling a Windows Service&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;I ran into a problem attempting to uninstall  and reinstall my windows service.  I was able to delete the service fine, but when I attempted to reinstall the windows service I received a "The Specified Service has been marked for deletion" exception.&lt;/p&gt;

&lt;p&gt;Microsoft recommends rebooting to solve this problem; a solution that is not very conducive to a development cycle.  Fortunately I stumbled upon a easier solution. &lt;/p&gt;

&lt;p&gt;It seems that when the windows service list is visible (Start-&amp;gt;Control Panel-&amp;gt;Administrative -&amp;gt; Services), the list of windows services is cached and locked resulting in the "The Specified Service has been marked for deletion" exception.  The fix, &lt;strong&gt;close the services dialog.&lt;/strong&gt;  With the dialog closed, I was able to re-install the windows service without issue. &lt;/p&gt;

&lt;p&gt;I've switched my process to starting and stopping the service using Net Start/ Net Stop batch files.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122039"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122039" 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/SoftwareDoneRight/aggbug/122039.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/05/10/developing-windows-services.aspx</guid>
            <pubDate>Sat, 10 May 2008 15:48:56 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/122039.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/05/10/developing-windows-services.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/122039.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/122039.aspx</trackback:ping>
        </item>
        <item>
            <title>QuickTip: Case Insensitive Dictionaries</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/04/30/quicktip-case-insensitive-dictionaries.aspx</link>
            <description>&lt;p&gt;I've often thought about making my own implementation of a Dictionary&amp;lt;K,V&amp;gt; where the key values are case insensitive.&lt;/p&gt;  &lt;p&gt;Its been one of those things on my ever-growing to-do list. I usually end up casting the key values to all uppercase and try to encapsulate all my calls the the dictionary with my own logic that performs the case conversion.  A case insensitive dictionary would avoid all that nastiness. &lt;/p&gt;  &lt;p&gt;Sometimes it's helpful to read the tooltip overloads. As I coded a new dictionary instance today, I stumbled upon the &lt;/p&gt;  &lt;p&gt;&lt;font color="#000080"&gt;Dictionary&amp;lt;(Of &amp;lt;(TKey, TValue&amp;gt;)&amp;gt;) Constructor (IEqualityComparer&amp;lt;(Of &amp;lt;(TKey&amp;gt;)&amp;gt;))&lt;/font&gt; overload.   &lt;/p&gt;  &lt;p&gt;Apparently I can pass my own equality comparer into the constructor which tells the dictionary how to compare key values.   Could it really be that easy?&lt;/p&gt;  &lt;p&gt;Yep, it exactly that easy.  To make my dictionary&amp;lt;string,string&amp;gt; use case insensitive keys, declare the dictionary as follows:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#000080"&gt;Dictionary&amp;lt;string, string&amp;gt; argList = new Dictionary&amp;lt;string, string&amp;gt;(StringComparer.CurrentCultureIgnoreCase);&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now  args["Test"] and args["TEST"] return the same item from my dictionary.&lt;/p&gt;  &lt;p&gt;I love it when I can mark things done on my to-do list without actually having to do any work. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121790"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121790" 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/SoftwareDoneRight/aggbug/121790.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/04/30/quicktip-case-insensitive-dictionaries.aspx</guid>
            <pubDate>Wed, 30 Apr 2008 19:28:01 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/121790.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/04/30/quicktip-case-insensitive-dictionaries.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/121790.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/121790.aspx</trackback:ping>
        </item>
        <item>
            <title>QuickTip: Debugging VBS Files with CScript.exe and Visual Studio</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/04/14/quicktip-debugging-vbs-files-with-cscript.exe-and-visual-studio.aspx</link>
            <description>&lt;p&gt;This is another one of those "Posted here for &lt;strong&gt;MY&lt;/strong&gt; convenience" tips.&lt;/p&gt;  &lt;p&gt;You can use the Visual Studio Debugger to debug a .vbs (vbscript) file executed with cScript.exe by using the //X flag at the command line.   &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;To debug MyTest.vbs &lt;/p&gt;    &lt;p&gt;&lt;font color="#000080"&gt;cscript.exe MyTest.vbs //X&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The //X will set a breakpoint and invoke the "select a debugger"  dialog where you can choose Visual Studio and step into your vbs code.  I haven't found a way to directly edit from the debugger however, so I end up having to debug, break execution, fix my bug and restart the vbs script file again to see my changes. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121228"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121228" 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/SoftwareDoneRight/aggbug/121228.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/04/14/quicktip-debugging-vbs-files-with-cscript.exe-and-visual-studio.aspx</guid>
            <pubDate>Mon, 14 Apr 2008 15:26:15 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/121228.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/04/14/quicktip-debugging-vbs-files-with-cscript.exe-and-visual-studio.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/121228.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/121228.aspx</trackback:ping>
        </item>
        <item>
            <title>QuickTip: Performing work on a new thread using anonymous delegates</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/04/07/quicktip-performing-work-on-a-new-thread-using-anonymous-delegates.aspx</link>
            <description>&lt;p&gt;I know this is available other places on the web, but I'm posting it here because I often have to search for it.  This tip is more for my benefit than others :)&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Program
{
   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main()
   {
      Thread t = &lt;span class="kwrd"&gt;new&lt;/span&gt; Thread(&lt;span class="kwrd"&gt;delegate&lt;/span&gt;() { 
         SayName(&lt;span class="str"&gt;"Lou"&lt;/span&gt;,&lt;span class="str"&gt;"Costello"&lt;/span&gt;);
         });
      t.Start();
   }

   &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SayName(&lt;span class="kwrd"&gt;string&lt;/span&gt; firstName, &lt;span class="kwrd"&gt;string&lt;/span&gt; lastName)
  {
        Console.WriteLine(firstName + &lt;span class="str"&gt;" "&lt;/span&gt; + lastName);
  }
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121108"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121108" 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/SoftwareDoneRight/aggbug/121108.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/04/07/quicktip-performing-work-on-a-new-thread-using-anonymous-delegates.aspx</guid>
            <pubDate>Tue, 08 Apr 2008 00:39:33 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/121108.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/04/07/quicktip-performing-work-on-a-new-thread-using-anonymous-delegates.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/121108.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/121108.aspx</trackback:ping>
        </item>
        <item>
            <title>QuickTip: Turn off CSS Validation Errors</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/03/17/quicktip-turn-off-css-validation-errors.aspx</link>
            <description>&lt;p&gt;I'm working on a prototype of a Single Sign On (SSO) solution for a web portal using Windows Cardspace as the authentication mechanism.  This means I've spent my weekend  developing web sites which may explain my foul mood. &lt;/p&gt;  &lt;p&gt;I was applying some color attributes to some of my UI controls which rendered fine, but generated compiler errors because they were failing CSS Validation.  Since it renders without issue (even between browsers), I'm not sure why its an error at all.  In any event these errors were preventing me from continuing with my SSO server work.  Fortunately we can specify how to treat CSS validation errors during a build in visual studio. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Go to Tools -&amp;gt; Options -&amp;gt; Text Editor -&amp;gt; HTML -&amp;gt; Validation &lt;/p&gt;    &lt;p&gt;2. Uncheck the Show Error option&lt;/p&gt;    &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/SoftwareDoneRight/WindowsLiveWriter/QuickTipTurnoffCSSValidationErrors_B794/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="213" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/SoftwareDoneRight/WindowsLiveWriter/QuickTipTurnoffCSSValidationErrors_B794/image_thumb.png" width="373" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;3. Click OK&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120599"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120599" 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/SoftwareDoneRight/aggbug/120599.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/03/17/quicktip-turn-off-css-validation-errors.aspx</guid>
            <pubDate>Mon, 17 Mar 2008 21:03:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/120599.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/03/17/quicktip-turn-off-css-validation-errors.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/120599.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/120599.aspx</trackback:ping>
        </item>
        <item>
            <title>QuickTip: Clean up Visual Studio's Recent Project List</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/02/17/quicktip-clean-up-visual-studios-recent-project-list.aspx</link>
            <description>&lt;p&gt;We recently revised the organizational structure of some source code, and as a result projects now resided in new locations on disk.  I've a big fan of the MRU list, and make use of it often in visual studio (both via the File-&amp;gt;Recent Project/Solution menu option and the quick links available on the VS start page).  The reorganization of my code base orphaned this links.  I was unable to locate a UI for managing this list within visual studio, but did locate the source of these lists in my window's registry. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt; &lt;/p&gt;    &lt;p&gt;HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\ProjectMRUList&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Open RegEdit (or your favorite registry editor), migrate to the above locate and modify/delete the MRU list presented within. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;It's the small things that speed along the work day, don't you think?&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119711"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119711" 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/SoftwareDoneRight/aggbug/119711.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/02/17/quicktip-clean-up-visual-studios-recent-project-list.aspx</guid>
            <pubDate>Mon, 18 Feb 2008 03:47:05 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/119711.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/02/17/quicktip-clean-up-visual-studios-recent-project-list.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/119711.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/119711.aspx</trackback:ping>
        </item>
        <item>
            <title>.NET 3.5 Certification Exam Beta is Still Available</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/25/.net-3.5-certification-exam-beta-is-still-available.aspx</link>
            <description>&lt;p&gt;&lt;img height="160" src="http://www.ekampf.com/blog/content/binary/WinFX.png" width="160" align="left" /&gt; Microsoft has extended the deadline for the .NET 3.5 technologies certification exam betas.  There are certification tests available for WCF, WPF and Windows Workflow.  You can take the exams for free, if you pass they will count towards your overall MS certification.  Interested?  Read more about it &lt;a href="http://blogs.msdn.com/trika/archive/2008/01/14/wpf-wcf-workflow-beta-exams-extended.aspx"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118913"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118913" 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/SoftwareDoneRight/aggbug/118913.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/25/.net-3.5-certification-exam-beta-is-still-available.aspx</guid>
            <pubDate>Fri, 25 Jan 2008 18:57:32 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/118913.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/25/.net-3.5-certification-exam-beta-is-still-available.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/118913.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/118913.aspx</trackback:ping>
        </item>
        <item>
            <title>HowTo: Set up your project for Window's Workflow (C# style)</title>
            <link>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/19/howto-set-up-your-project-for-windows-workflow-c-style.aspx</link>
            <description>&lt;p&gt;Any C#  project can contain Workflow definitions.  They're just code file and/or XAML files.  The trick is getting Visual Studio to recognize the project as supporting worfklows for design-time support and compilation.&lt;/p&gt;  &lt;p&gt;To enable a project for Windows Workflow,:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open the project in visual studio.  &lt;/li&gt;    &lt;li&gt;If you're using source control check out the project file so it becomes writable &lt;/li&gt;    &lt;li&gt;In the Solution Explorer, right click and select &lt;strong&gt;Unload Project&lt;/strong&gt; .  The project tree will disappear from the solution explorer and is replaced with a single node of the project name followed by the phrase &lt;strong&gt;(Unloaded). &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Right click on the unloaded project node in the Solution Explorer again, and select Edit Project.  This will open the project file in Visual Studio. The project file is just an XML file, so we can edit it manually. &lt;/li&gt;    &lt;li&gt;Find the entry named &lt;strong&gt;&amp;lt;ProjectTypeGuids&amp;gt;&lt;/strong&gt; and make sure it includes these id's &lt;/li&gt;    &lt;ul&gt;     &lt;ul&gt;       &lt;li&gt;&lt;i&gt;&amp;lt;ProjectTypeGuids&amp;gt;{14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}&amp;lt;/ProjectTypeGuids&amp;gt;&lt;/i&gt;&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;This tells visual studio its a C# project and a workflow project.  Both are necessary to get design time support in your visual studio project.  If you forget to include these project guid's you'll like end with an error like this when you try to edit a workflow file&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;&lt;i&gt;&lt;font color="#004080"&gt;The service 'System.Workflow.ComponentModel.Design.IIdentifierCreationService' must be installed for this operation to succeed. Ensure that this service is available.&lt;/font&gt;&lt;/i&gt;&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Finally we have to tell Visual Studio to include the workflow compilation build targets for MSBuild when the project compiles.  Add the following entry to your project's xml file inside the &lt;strong&gt;&amp;lt;Project&amp;gt;&lt;/strong&gt; node&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;&lt;i&gt;&amp;lt;Import Project="$(MSBuildExtensionsPath)\Microsoft\Windows Workflow Foundation\v3.0\Workflow.Targets" /&amp;gt;&lt;/i&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Save and close the project xml file.&lt;/li&gt;    &lt;li&gt;Right click on the project node in the Solution Explorer again and select &lt;strong&gt;Reload Project&lt;/strong&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Your project is now Workflow-capable.  You should be able to edit and compile Windows Workflow files.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118696"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118696" 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/SoftwareDoneRight/aggbug/118696.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>ChrisD</dc:creator>
            <guid>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/19/howto-set-up-your-project-for-windows-workflow-c-style.aspx</guid>
            <pubDate>Sat, 19 Jan 2008 16:31:08 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/SoftwareDoneRight/comments/118696.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/19/howto-set-up-your-project-for-windows-workflow-c-style.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/SoftwareDoneRight/comments/commentRss/118696.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/SoftwareDoneRight/services/trackbacks/118696.aspx</trackback:ping>
        </item>
    </channel>
</rss>