<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>Gavin Stevens's Blog</title>
        <link>http://geekswithblogs.net/gavin/Default.aspx</link>
        <description>the ramblings of another developer....</description>
        <language>en-US</language>
        <copyright>Gavin Stevens</copyright>
        <managingEditor>gavin.stevens@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Gavin Stevens's Blog</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/gavin/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Custom XSLT for TRX Test Results</title>
            <link>http://geekswithblogs.net/gavin/archive/2009/08/25/134311.aspx</link>
            <description>&lt;p&gt;VS 2008 requires you have VS 2008 Test Edition to see the results of a Generic Test, this wasn't sufficient with out current project as a lot of developers don't use test edition.  I put together this custom xslt transform to convert the .trx test result file to an html report anyone can view, complete with collapsable sections...&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&lt;br /&gt;
                xmlns:vs="http://microsoft.com/schemas/VisualStudio/TeamTest/2006"&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match="/"&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;
          input.button {&lt;br /&gt;
          color: #fff; background: #0034D0;&lt;br /&gt;
          font-size: .8em;&lt;br /&gt;
          font-weight:bold;&lt;br /&gt;
          font-family: Verdana, Arial, Helvetica, sans-serif;&lt;br /&gt;
          border: solid 1px #ffcf31;&lt;br /&gt;
          }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script language="JavaScript"&amp;gt;&lt;br /&gt;
          function toggleMe(a)&lt;br /&gt;
          {&lt;br /&gt;
          var e=document.getElementById(a);&lt;br /&gt;
          if(!e)return true;&lt;br /&gt;
          if(e.style.display=="none"){&lt;br /&gt;
          e.style.display="block"&lt;br /&gt;
          } else {&lt;br /&gt;
          e.style.display="none"&lt;br /&gt;
          }&lt;br /&gt;
          return true;&lt;br /&gt;
          }&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body style="font-family:Verdana; font-size:10pt"&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Test Results Summary&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;table style="width:700;border:1px solid black;font-family:Verdana; font-size:10pt;"&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td width="150"&amp;gt;&lt;br /&gt;
              &amp;lt;b&amp;gt;Start Date/Time&amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td width="550"&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select="//vs:Times/@start"/&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td width="150"&amp;gt;&lt;br /&gt;
              &amp;lt;b&amp;gt;End Date/Time&amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td width="550"&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select="//vs:Times/@finish"/&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td width="150"&amp;gt;&lt;br /&gt;
              &amp;lt;b&amp;gt;Total Time&amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td width="550"&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select="//vs:Results/vs:TestResultAggregation/@duration"/&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td width="150"&amp;gt;&lt;br /&gt;
              &amp;lt;b&amp;gt;Results&amp;lt;/b&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td width="550"&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select="//vs:TestRun/@name"/&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:call-template name="summary" /&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:call-template name="details" /&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template name="summary"&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;Test Summary&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;table style="width:700;border:1px solid black;font-family:Verdana; font-size:10pt"&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td style="font-weight:bold"&amp;gt;Total&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td style="font-weight:bold"&amp;gt;Failed&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td style="font-weight:bold"&amp;gt;Passed&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td &amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select="//vs:ResultSummary/vs:Counters/@total"/&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td style="background-color:pink;"&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select="//vs:ResultSummary/vs:Counters/@failed"/&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td style="background-color:lightgreen;"&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select="//vs:ResultSummary/vs:Counters/@passed"/&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template name="details"&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;Test Details&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;table style="width:700;border:1px solid black;font-family:Verdana; font-size:10pt;"&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td style="font-weight:bold"&amp;gt;Test Name&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td style="font-weight:bold"&amp;gt;Result&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td style="font-weight:bold"&amp;gt;Duration&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select="//vs:Results/vs:TestResultAggregation/vs:InnerResults/vs:TestResultAggregation"&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:variable name="executionId"&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select="@executionId"/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:attribute name="style"&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Failed'"&amp;gt;background-color:pink;&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Passed'"&amp;gt;background-color:lightgreen;&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;background-color:yellow;&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select="@testName"/&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Failed'"&amp;gt;FAILED&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Passed'"&amp;gt;Passed&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;Inconclusive&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select="@duration"/&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td colspan="3"&amp;gt;&lt;br /&gt;
            &amp;lt;input type="button" class="button" onclick="return toggleMe('{$executionId}')" value="Show Details" /&amp;gt;&lt;br /&gt;
            &amp;lt;div style="display:none" id="{$executionId}"&amp;gt;&lt;br /&gt;
              &amp;lt;table style="width:700;border:1px solid black;font-family:Verdana; font-size:10pt;"&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td colspan="3"&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select="vs:InnerResults/vs:GenericTestResult"&amp;gt;&lt;br /&gt;
                      &amp;lt;table style="width:700;border:1px solid black;font-family:Verdana;font-size:8pt;table-layout:fixed;"&amp;gt;&lt;br /&gt;
                        &amp;lt;tr&amp;gt;&lt;br /&gt;
                          &amp;lt;td width="10"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                          &amp;lt;td&amp;gt;&lt;br /&gt;
                            &amp;lt;b&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select="@testName"/&amp;gt;&lt;br /&gt;
                            &amp;lt;/b&amp;gt;&lt;br /&gt;
                          &amp;lt;/td&amp;gt;&lt;br /&gt;
                        &amp;lt;/tr&amp;gt;&lt;br /&gt;
                        &amp;lt;tr&amp;gt;&lt;br /&gt;
                          &amp;lt;td width="10"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                          &amp;lt;td&amp;gt;&lt;br /&gt;
                            &amp;lt;pre style="word-wrap: break-word"&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select="vs:Output/vs:StdOut"/&amp;gt;&lt;br /&gt;
                            &amp;lt;/pre&amp;gt;&lt;br /&gt;
                          &amp;lt;/td&amp;gt;&lt;br /&gt;
                        &amp;lt;/tr&amp;gt;&lt;br /&gt;
                      &amp;lt;/table&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select="//vs:Results/vs:TestResultAggregation/vs:InnerResults/vs:GenericTestResult"&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:variable name="executionId"&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select="@executionId"/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:attribute name="style"&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Failed'"&amp;gt;background-color:pink;&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Passed'"&amp;gt;background-color:lightgreen;&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;background-color:yellow;&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select="@testName"/&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Failed'"&amp;gt;FAILED&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Passed'"&amp;gt;Passed&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;Inconclusive&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select="@duration"/&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td colspan="3"&amp;gt;&lt;br /&gt;
            &amp;lt;input type="button" class="button" onclick="return toggleMe('{$executionId}')" value="Show Details" /&amp;gt;&lt;br /&gt;
            &amp;lt;div style="display:none" id="{$executionId}"&amp;gt;&lt;br /&gt;
              &amp;lt;table style="width:700;border:1px solid black;font-family:Verdana; font-size:10pt;"&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td colspan="3"&amp;gt;&lt;br /&gt;
                    &amp;lt;table style="width:700;border:1px solid black;font-family:Verdana; font-size:8pt;table-layout:fixed;"&amp;gt;&lt;br /&gt;
                      &amp;lt;tr&amp;gt;&lt;br /&gt;
                        &amp;lt;td width="10"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                      &amp;lt;/tr&amp;gt;&lt;br /&gt;
                      &amp;lt;tr&amp;gt;&lt;br /&gt;
                        &amp;lt;td width="10"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                        &amp;lt;td&amp;gt;&lt;br /&gt;
                          &amp;lt;pre style="word-wrap: break-word"&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:value-of select="vs:Output/vs:StdOut"/&amp;gt;&lt;br /&gt;
                          &amp;lt;/pre&amp;gt;&lt;br /&gt;
                        &amp;lt;/td&amp;gt;&lt;br /&gt;
                      &amp;lt;/tr&amp;gt;&lt;br /&gt;
                    &amp;lt;/table&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select="//vs:Results/vs:TestResultAggregation/vs:InnerResults/vs:UnitTestResult"&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:variable name="executionId"&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:value-of select="@executionId"/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:attribute name="style"&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Failed'"&amp;gt;background-color:pink;&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Passed'"&amp;gt;background-color:lightgreen;&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;background-color:yellow;&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select="@testName"/&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Failed'"&amp;gt;FAILED&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test="@outcome = 'Passed'"&amp;gt;Passed&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;Inconclusive&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select="@duration"/&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td colspan="3"&amp;gt;&lt;br /&gt;
            &amp;lt;input type="button" class="button" onclick="return toggleMe('{$executionId}')" value="Show Details" /&amp;gt;&lt;br /&gt;
            &amp;lt;div style="display:none" id="{$executionId}"&amp;gt;&lt;br /&gt;
              &amp;lt;table style="width:700;border:1px solid black;font-family:Verdana; font-size:10pt;"&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td colspan="3"&amp;gt;&lt;br /&gt;
                    &amp;lt;table style="width:700;border:1px solid black;font-family:Verdana; font-size:8pt;table-layout:fixed;"&amp;gt;&lt;br /&gt;
                      &amp;lt;tr&amp;gt;&lt;br /&gt;
                        &amp;lt;td width="10"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                      &amp;lt;/tr&amp;gt;&lt;br /&gt;
                      &amp;lt;tr&amp;gt;&lt;br /&gt;
                        &amp;lt;td width="10"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                        &amp;lt;td&amp;gt;&lt;br /&gt;
                          &amp;lt;pre style="word-wrap: break-word"&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:value-of select="vs:Output/vs:StdOut"/&amp;gt;&lt;br /&gt;
                          &amp;lt;/pre&amp;gt;&lt;br /&gt;
                        &amp;lt;/td&amp;gt;&lt;br /&gt;
                      &amp;lt;/tr&amp;gt;&lt;br /&gt;
                      &amp;lt;tr&amp;gt;&lt;br /&gt;
                        &amp;lt;td width="10"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                        &amp;lt;td&amp;gt;&lt;br /&gt;
                          &amp;lt;pre style="word-wrap: break-word"&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:value-of select="vs:Output/vs:DebugTrace"/&amp;gt;&lt;br /&gt;
                          &amp;lt;/pre&amp;gt;&lt;br /&gt;
                        &amp;lt;/td&amp;gt;&lt;br /&gt;
                      &amp;lt;/tr&amp;gt;&lt;br /&gt;
                      &amp;lt;tr&amp;gt;&lt;br /&gt;
                        &amp;lt;td width="10"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                        &amp;lt;td&amp;gt;&lt;br /&gt;
                          &amp;lt;pre style="word-wrap: break-word"&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:value-of select="vs:Output/vs:ErrorInfo/vs:Message"/&amp;gt;&lt;br /&gt;
                          &amp;lt;/pre&amp;gt;&lt;br /&gt;
                        &amp;lt;/td&amp;gt;&lt;br /&gt;
                      &amp;lt;/tr&amp;gt;&lt;br /&gt;
                      &amp;lt;tr&amp;gt;&lt;br /&gt;
                        &amp;lt;td width="10"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
                        &amp;lt;td&amp;gt;&lt;br /&gt;
                          &amp;lt;pre style="word-wrap: break-word"&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:value-of select="vs:Output/vs:ErrorInfo/vs:StackTrace"/&amp;gt;&lt;br /&gt;
                          &amp;lt;/pre&amp;gt;&lt;br /&gt;
                        &amp;lt;/td&amp;gt;&lt;br /&gt;
                      &amp;lt;/tr&amp;gt;&lt;br /&gt;
                    &amp;lt;/table&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;You can convert this programatically using the class below, call it like this:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;TrxConverter.Transform(xsltFile, trxFilePathName, htmlFilePathName);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;public static class TrxConverter&lt;br /&gt;
    {&lt;br /&gt;
        public static XslCompiledTransform LoadXsl(string xsltPath)&lt;br /&gt;
        {&lt;br /&gt;
            var transform = new XslCompiledTransform();&lt;br /&gt;
            var settings = new XmlReaderSettings();&lt;br /&gt;
            settings.ProhibitDtd = false;&lt;br /&gt;
            using (XmlReader reader = XmlReader.Create(xsltPath, settings))&lt;br /&gt;
            {&lt;br /&gt;
                var xsltSettings = new XsltSettings();&lt;br /&gt;
                xsltSettings.EnableDocumentFunction = true;&lt;br /&gt;
                transform.Load(reader, xsltSettings, new XmlUrlResolver());&lt;br /&gt;
            }&lt;br /&gt;
            return transform;&lt;br /&gt;
        }&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;        /// &amp;lt;summary&amp;gt;&lt;br /&gt;
        /// &lt;br /&gt;
        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
        /// &amp;lt;param name="input"&amp;gt;The input .trx file&amp;lt;/param&amp;gt;&lt;br /&gt;
        /// &amp;lt;param name="output"&amp;gt;The output .html file&amp;lt;/param&amp;gt;&lt;br /&gt;
        public static void Transform(string xsltPath, string input, string output)&lt;br /&gt;
        {&lt;br /&gt;
            XslCompiledTransform transform = LoadXsl(xsltPath);&lt;br /&gt;
            var writerSettings = new XmlWriterSettings();&lt;br /&gt;
            writerSettings.ConformanceLevel = ConformanceLevel.Auto;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;            using (XmlWriter writer = XmlWriter.Create(output, writerSettings))&lt;br /&gt;
            {&lt;br /&gt;
                var arguments = new XsltArgumentList();&lt;br /&gt;
                //arguments.AddParam("html.stylesheet", String.Empty, "styles.css");&lt;br /&gt;
                transform.Transform(CreateReader(input), arguments, writer);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;        public static XmlReader CreateReader(string pathToTrxFile)&lt;br /&gt;
        {&lt;br /&gt;
            XmlReaderSettings readerSettings = new XmlReaderSettings();&lt;br /&gt;
            readerSettings.ProhibitDtd = false;&lt;br /&gt;
            return XmlReader.Create(pathToTrxFile, readerSettings);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;&lt;br /&gt;
&lt;/font&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134311"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134311" 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/gavin/aggbug/134311.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2009/08/25/134311.aspx</guid>
            <pubDate>Tue, 25 Aug 2009 22:49:51 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/134311.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2009/08/25/134311.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/134311.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/134311.aspx</trackback:ping>
        </item>
        <item>
            <title>Time to Upgrade the certs..</title>
            <link>http://geekswithblogs.net/gavin/archive/2009/05/12/132066.aspx</link>
            <description>&lt;p&gt;Well, I was recently laid off from my Job of 5 years at Sage Software..  Sage has gone through 2 or 3 rounds of layoffs so far, the latest letting go of 500 employees in North America..&lt;/p&gt;
&lt;p&gt;..."To help us better bring our costs in line with revenues, we are reducing staff by about 500 positions across the company, which includes employees as well as open positions that are being closed permanently. "&lt;/p&gt;
&lt;p&gt;So, I've decided to take the opportunity to upgrade my Microsoft Certifications to the latest and greatest..  The last tests I took were in 2004, duting the .net 1.1 release..  Hard to believe it's been so long..&lt;/p&gt;
&lt;p&gt;Here is my current certs:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Microsoft Certification Status&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="0" width="100%"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="3%"&gt; &lt;/td&gt;
            &lt;td width="47%"&gt;&lt;u&gt;&lt;strong&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Credential&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/td&gt;
            &lt;td width="30%"&gt;&lt;u&gt;&lt;strong&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Certification / Version&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/td&gt;
            &lt;td width="2%"&gt; &lt;/td&gt;
            &lt;td width="18%"&gt;&lt;u&gt;&lt;strong&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Date Achieved&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Microsoft Certified Application Developer&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;May 07, 2004&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;For Microsoft .NET&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;May 07, 2004&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Microsoft Certified Solution Developer&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Jun 11, 2001&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;For Microsoft .NET&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Sep 01, 2004&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Microsoft Visual Studio 6.0&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Jun 11, 2001&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Microsoft Certified Professional&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font size="2" face="Verdana, Arial, Helvetica"&gt;Apr 10, 2000&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;So, I'm going to take:&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://www.microsoft.com/learning/en/us/exams/70-553.mspx"&gt;http://www.microsoft.com/learning/en/us/exams/70-553.mspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://www.microsoft.com/learning/en/us/exams/70-554.mspx"&gt;http://www.microsoft.com/learning/en/us/exams/70-554.mspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;These 2 tests will allow me to upgrade my existing MCSD/MCAD to the new MCPD..  After taking these 2 tests I will have to take a few more to upgrade to .NET 3.0-3.5 certs, the MCTS..  I'm not sure right now if I'll go that far, but maybe I should since I'm doing it.  I'll have plenty of time if I'm unemployed..&lt;/p&gt;
&lt;p&gt;These are all very difficult tests, I work fulltime as a contract developer and have for the last 15 years, but there are so many subjects you get tested on that you just don't use everyday..  Hence, it will take alot of studying to get upto speed and feel like I can pass them.  Studying is hard, but you are forced to learn stuff that you should probbly know.  I've scheduled the above 2 tests for June 3rd, June 4th respectively.&lt;/p&gt;
&lt;p&gt;I have yet to fail a Microsoft test, I guess I've studied hard enough in the past to make sure I can pass them.  We'll see how it goes, I'm starting to study now, studying everyday during my lunch hour..&lt;/p&gt;
&lt;p&gt;On a side note, If anyone knows of any contract positions available, please let me know.  I live in Phoenix, Arizona, so something local would be preferable, or something I can do remote word work also.  Thanks!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
06/30/09 Update - Passed the 70-553, tough test...  Going to take the 70-554 next month..&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132066"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=132066" 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/gavin/aggbug/132066.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2009/05/12/132066.aspx</guid>
            <pubDate>Tue, 12 May 2009 18:17:35 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/132066.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2009/05/12/132066.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/132066.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/132066.aspx</trackback:ping>
        </item>
        <item>
            <title>Integrating NUnit test results in Team Build 2008</title>
            <link>http://geekswithblogs.net/gavin/archive/2009/01/05/128377.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;&lt;font face="Arial"&gt;Thanks go out to Maarten Balliauw for this awesome post!!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://blog.maartenballiauw.be/post/2008/11/10/Integrating-NUnit-test-results-in-Team-Build-2008.aspx"&gt;Integrating NUnit test results in Team Build 2008&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This rocks!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128377"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128377" 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/gavin/aggbug/128377.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2009/01/05/128377.aspx</guid>
            <pubDate>Mon, 05 Jan 2009 18:39:09 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/128377.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2009/01/05/128377.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/128377.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/128377.aspx</trackback:ping>
        </item>
        <item>
            <title>Writing a UAC compliant Application</title>
            <link>http://geekswithblogs.net/gavin/archive/2008/08/01/124187.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;I've seen a lot of developers clueless when it comes to UAC in Vista.  The whole point to UAC is give your application the minimum amount of privileges required for it to run.  If you wrote your application, you should have a pretty good idea of what system resources your application needs to access.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;The solution here is not to require your users to "turn off UAC", or to set your application to run in compatibility mode.  This is the biggest reason UAC has gotten such a bad reputation.. its our fault! Most apps shouldn't require full privilege to run (with exceptions of course, depending on the app) Don't claim your application is "Vista-Compliant" because it works if you run it as administrator.  Microsoft is doing a good thing by working to control the privilege an application can have.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;This is a good video done by Chris Corio (Windows Security Team) this will give you a good understanding of UAC.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;a href="http://www.microsoft.com/emea/msdn/spotlight/sessionh.aspx?videoid=326"&gt;http://www.microsoft.com/emea/msdn/spotlight/sessionh.aspx?videoid=326&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;The best advice I have is "Run your app as a standard user" see if everything works as standard.  If it doesn't, why?  What resources are you trying to access that a standard user can't have?  Are you storing things on the file system, outside of the users App Data Context?  Are you writing to the registry?  If your creating WCF endpoints you will have to run as an admin.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Microsoft has a good tool for seeing how an app runs and what it accesses under different privilege levels, the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&amp;amp;displaylang=en"&gt;Vista Application Compatibility Toolkit&lt;/a&gt; this app acts as a startup wrapper around your app to run it in different security modes and find warnings, errors, etc.  It can help you find the parts of your application that are requiring a higher level privilege and help you fix them if necessary.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Take it upon yourself to learn more about UAC, Code Access Security and Vista security.  Vista is a great operating system if people would stop complaining and take a minute to learn why security had to change.  The plague of spyware, malware, adware and the like is being cured... way to go Microsoft!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124187"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124187" 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/gavin/aggbug/124187.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2008/08/01/124187.aspx</guid>
            <pubDate>Fri, 01 Aug 2008 16:02:42 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/124187.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2008/08/01/124187.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/124187.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/124187.aspx</trackback:ping>
        </item>
        <item>
            <title>Should I upgrade my Microsoft Certifications ?</title>
            <link>http://geekswithblogs.net/gavin/archive/2008/07/30/124131.aspx</link>
            <description>&lt;p&gt;I've been debating lately if it's worth the effort to upgrade my Microsoft Certifications to the latest and greatest.&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="https://mcp.microsoft.com/authenticate/validatemcp.aspx"&gt;&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Microsoft Certification Status&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table cellspacing="0" cellpadding="0" width="100%" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="3%"&gt; &lt;/td&gt;
            &lt;td width="47%"&gt;&lt;u&gt;&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Credential&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/td&gt;
            &lt;td width="30%"&gt;&lt;u&gt;&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Certification / Version&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/td&gt;
            &lt;td width="2%"&gt; &lt;/td&gt;
            &lt;td width="18%"&gt;&lt;u&gt;&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Date Achieved&lt;/font&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Microsoft Certified Application Developer&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;May 07, 2004&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;For Microsoft .NET&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;May 07, 2004&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Microsoft Certified Solution Developer&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Jun 11, 2001&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;For Microsoft .NET&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Sep 01, 2004&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Microsoft Visual Studio 6.0&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Jun 11, 2001&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Microsoft Certified Professional&lt;/font&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;&lt;em&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/td&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td valign="top"&gt;&lt;font face="Verdana, Arial, Helvetica" size="2"&gt;Apr 10, 2000&lt;/font&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Interestingly, my Microsoft Partner link shows:&lt;/p&gt;
&lt;ul class="specList"&gt;
    &lt;li&gt;MCPS &lt;/li&gt;
    &lt;li&gt;MCSD &lt;/li&gt;
    &lt;li&gt;MCAD &lt;/li&gt;
    &lt;li&gt;MCNPS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not sure where the MCNPS came from... So, yeah... it's been awhile since I took any tests... I'm certified on .NET 1.1, while 2.0, 3.0 and 3.5 are now out.  To Upgrade:&lt;/p&gt;
&lt;p&gt;Developers who use the Microsoft .NET Framework 2.0 and Microsoft Visual Studio 2005 should consider the following two credentials:&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;table cellspacing="0" cellpadding="0" border="0" class="subbullets"&gt;
    &lt;tbody&gt;
        &lt;tr valign="top"&gt;
            &lt;td class="subbullet"&gt;•&lt;/td&gt;
            &lt;td class="sublink"&gt;&lt;a href="http://www.microsoft.com/learning/mcp/mcts/"&gt;Microsoft Certified Technology Specialist (MCTS)&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr valign="top"&gt;
            &lt;td class="subbullet"&gt;•&lt;/td&gt;
            &lt;td class="sublink"&gt;&lt;a href="http://www.microsoft.com/learning/mcp/mcpd/"&gt;Microsoft Certified Professional Developer (MCPD)&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
These credentials give developers a simpler and more targeted framework to showcase their technical and on-the-job skills.
&lt;p&gt;I have to take 2 exams to upgrade to VS2005:  Exam 70–554 &lt;em&gt;and &lt;/em&gt;Exam 70–553  While I do have the experience, I used VS2005 for several years, I'm now using VS 2008 which I would then need:&lt;/p&gt;
&lt;p&gt;MCPD: Enterprise Application Development 3.5 &lt;em&gt;and &lt;/em&gt;&lt;a href="http://www.microsoft.com/learning/mcp/mcts/vstudio/2008/"&gt;MCTS: .NET Framework 3.5, Windows Forms Applications&lt;/a&gt; &lt;em&gt;and &lt;/em&gt;&lt;a href="http://www.microsoft.com/learning/mcp/mcts/vstudio/2008/"&gt;MCTS: .NET Framework 3.5, ASP.NET Applications&lt;/a&gt; &lt;em&gt;and &lt;/em&gt;&lt;a href="http://www.microsoft.com/learning/mcp/mcts/vstudio/2008/"&gt;MCTS: .NET Framework 3.5, Windows Communication Foundation Applications&lt;/a&gt; &lt;em&gt;and &lt;/em&gt;&lt;a href="http://www.microsoft.com/learning/mcp/mcts/vstudio/2008/"&gt;MCTS: .NET Framework 3.5, ADO.NET Applications&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Is it worth it?  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124131"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124131" 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/gavin/aggbug/124131.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2008/07/30/124131.aspx</guid>
            <pubDate>Wed, 30 Jul 2008 20:43:08 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/124131.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2008/07/30/124131.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/124131.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/124131.aspx</trackback:ping>
        </item>
        <item>
            <title>XMLSerializer and  Unable to cast type to type </title>
            <link>http://geekswithblogs.net/gavin/archive/2007/07/31/114312.aspx</link>
            <description>&lt;font size="2"&gt;
&lt;p&gt;I recently had a strange problem with XMLSerialization throwing the error: There was an error creating the XML Document.  Unable to cast type Configuration to type Configuration&lt;/p&gt;
&lt;p&gt;Here was the simple configuration class:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;font color="#2b91af" size="2"&gt;Serializable&lt;/font&gt;&lt;font size="2"&gt;]&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;class&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;Configuration&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;bool&lt;/font&gt;&lt;font size="2"&gt; Active;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; lastPSM = &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;""&lt;/font&gt;&lt;font size="2"&gt;;&lt;/font&gt; &lt;/p&gt;
&lt;p&gt; }&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size="2"&gt;and the Save method:&lt;/font&gt;&lt;/p&gt;
&lt;font color="#0000ff"&gt;&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;font size="2"&gt;public&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;{&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;XmlSerializer&lt;/font&gt; serial = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;XmlSerializer&lt;/font&gt;(&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;(&lt;font color="#2b91af"&gt;Configuration&lt;/font&gt;));&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;TextWriter&lt;/font&gt; writer = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;StringWriter&lt;/font&gt;();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;serial.Serialize(writer, config);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;.WriteLine(writer.ToString());&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;writer.Close();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size="2"&gt;cant get much easier than that, but everytime i called Serialize I would get the error, so I changed the code to this:&lt;/font&gt;&lt;/p&gt;
&lt;font color="#0000ff"&gt;&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;font size="2"&gt;public&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;{&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;XmlSerializer&lt;/font&gt; serial = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;XmlSerializer&lt;/font&gt;(config.GetType());&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;TextWriter&lt;/font&gt; writer = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;StringWriter&lt;/font&gt;();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;serial.Serialize(writer, config);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;.WriteLine(writer.ToString());&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;writer.Close();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;&lt;font size="2"&gt;Low and behold that fixed it, and now, funny enough, changing the code back to the way it was before works fine now...  Anyone care to share why things like this would happen?  I even tried closing, re-opening studio to make sure something hadn't gotten whacked...  strange I can't make it break now while before I couldnt make it work...&lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;font size="2"&gt;Ahhh the joys of development....&lt;/font&gt;&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114312"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114312" 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/gavin/aggbug/114312.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2007/07/31/114312.aspx</guid>
            <pubDate>Tue, 31 Jul 2007 23:22:10 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/114312.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2007/07/31/114312.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/114312.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/114312.aspx</trackback:ping>
        </item>
        <item>
            <title>.NET State Management, AppDomain, Thread Context</title>
            <link>http://geekswithblogs.net/gavin/archive/2007/07/27/114228.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;Maybe I need to re-subscribe to MSDN magazine or something, it seems there are soooo many things you can learn about programming, there is never enough time..  If you spend all your time programming, you never have time to learn about  new stuff.  And even if you learn a ton, things seem to slip by...  It seems everything most of us developers know is because we had to do something at sometime in the past and had to find a way to do it.  If the ways and means we do things are the correct way, who knows..  If it works, great!!!&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;When you first start programming you start to run into state management and storage issues. You always run into a problem that requires that you store something that something else can make use of.  Say for example you have a list of Cities that you read from a file on disk. So, you can create a new city object, and make a Collection of Cities in your application somewhere to load them into.  As a beginner programmer, I would always start a windows app with some "Control" class which would be my "everything class" something like this:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Public class control&lt;br /&gt;
{&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;private collection cities&lt;br /&gt;
private frmForm1 form1&lt;br /&gt;
private frmForm1 form2&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;private void loadcities(){load the file, store the values in the collection}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;public void GO()&lt;br /&gt;
{&lt;br /&gt;
 loadcities();&lt;br /&gt;
 form1 = new frmForm1(cities);&lt;br /&gt;
 form1.showdialog(); &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt; form2 = new frmForm2(cities, form1.SelectedCity);&lt;br /&gt;
 form2.showdialog();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;While I agree this is pretty bad...  for a beginner long ago, it served its purpose.  I was able to load the city list once and query state on one form from another without having to read/write anything else to the disk, Or store anything anywhere else for that matter.  I found that by creating this "control" class I had a global place that I could store things and something that would know about both forms.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;This type of design leads to a very strictly coupled application.  Nothing can ever change on either form, or in my control class without bad consequences.  Plus you can't develop object oriented, interface based stuff this way...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Web Developers have been lucky since the asp days as they have a global "state bag", ie "session"  they can stick things in while navigating from page to page.  But, as far as I knew there was nothing like this for a windows developer, I would always store state in a scenario like the above example, or stick things in a database or the registry for storage.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Enter the AppDomain and the Thread.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;While I was always aware these objects existed, they didn't seem to be something you mess with that often. I had no idea that you could store things in them and provide a global, or thread specific "state bag".  I can load my cities list and stick it on the Thread Context.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Saving Data to the Thread:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Thread.AllocateNamedDataSlot("CitiesList");&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;LocalDataStoreSlot myData;&lt;br /&gt;
myData=Thread.GetNamedDataSlot("CitiesList");&lt;br /&gt;
Thread.SetData(myData, cities);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Getting it back out:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;LocalDataStoreSlot myData; &lt;br /&gt;
myData=Thread.GetNamedDataSlot("CitiesList");&lt;br /&gt;
Collection cities=(Collection)Thread.GetData(myData); &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Finally, we need to free the data slot that we allocated in the beginning of our application. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Thread.FreeNamedDataSlot("CitiesList");&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;This allows you to take an object and stick it in the Current thread's local storage.  You can also do the same thing with the AppDomain, if you need to access your data with mutiple threads of execution.  Just make sure you lock, unlock the objects when your thread is accessing them so you don't mess up your data by having mutiple thread try to change the values at the same time.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;from MSDN:&lt;br /&gt;
 // appdomain setup information&lt;br /&gt;
        AppDomain currentDomain = AppDomain.CurrentDomain;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        //set predefined system variable application name&lt;br /&gt;
        String dataName = "APP_NAME";&lt;br /&gt;
        String setappname = "MyApplication";&lt;br /&gt;
        currentDomain.SetData(dataName, setappname);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        //Create a new value pair for the appdomain&lt;br /&gt;
        String dataValue = "ADVALUE";&lt;br /&gt;
        Int32 advalue = 6;&lt;br /&gt;
        currentDomain.SetData(dataValue, advalue);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        //get the value specified in the setdata method&lt;br /&gt;
        Console.WriteLine(" ADVALUE is: " + currentDomain.GetData("ADVALUE"));&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        //get system value specified at appdomainsetup&lt;br /&gt;
        Console.WriteLine("System value for application name:" + currentDomain.GetData("APP_NAME"));&lt;/font&gt;&lt;/p&gt;
&lt;font face="Arial"&gt;
&lt;p&gt;&lt;br /&gt;
There are some samples and better descriptions than I can give here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.threading.thread.setdata.aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.threading.thread.setdata.aspx&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://msdn2.microsoft.com/en-us/library/system.appdomain.setdata(vs.71).aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.appdomain.setdata(vs.71).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'm sure alot of you guys know about this stuff, but maybe someone can learn something... &lt;/p&gt;
&lt;p&gt;If any of you more seasoned guys have some best practices for doing this stuff, please feel free to share.&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;
&lt;/font&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114228"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=114228" 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/gavin/aggbug/114228.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2007/07/27/114228.aspx</guid>
            <pubDate>Fri, 27 Jul 2007 18:50:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/114228.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2007/07/27/114228.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/114228.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/114228.aspx</trackback:ping>
        </item>
        <item>
            <title>Virtual Personalities</title>
            <link>http://geekswithblogs.net/gavin/archive/2007/06/11/113154.aspx</link>
            <description>Site Pal Avatars, kinda cool, what do you think? &lt;a onmouseover="window.status='SitePal.com';return true" onmouseout="window.status='';return true" href="http://www.sitepal.com/?&amp;amp;affId=145955&amp;amp;bannerId=0&amp;amp;promotionId=11273"&gt;SitePal.com&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113154"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113154" 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/gavin/aggbug/113154.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2007/06/11/113154.aspx</guid>
            <pubDate>Mon, 11 Jun 2007 17:26:38 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/113154.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2007/06/11/113154.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/113154.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/113154.aspx</trackback:ping>
        </item>
        <item>
            <title>Dynamic Help Configuration in CAB - Custom Builder Strategy</title>
            <link>http://geekswithblogs.net/gavin/archive/2007/06/05/113008.aspx</link>
            <description>&lt;!--CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--&gt;
&lt;link href="/Providers/BlogEntryEditor/FCKeditor/editor/css/fck_editorarea.css" type="text/css" rel="stylesheet" /&gt;
&lt;p&gt;&lt;font size="3"&gt;Well, I just finished up some work in our CAB app to dynamically associate help with specific CAB smartparts.  I thought it was pretty cool in the end to be able to do this with a Builder Strategy and not have to hardcode all of the help references in each component. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="3"&gt;So, there are a few parts to make this work.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://www.mcsdsoftware.com/images/HelpStuff.gif" /&gt;&lt;/p&gt;
&lt;p&gt;The HelpComponent is a serializable type we defined to store help info.&lt;/p&gt;
&lt;p&gt;The Help Provider Service will be used to load our stored HelpConfiguration file.&lt;/p&gt;
&lt;p&gt;The Help Provider Strategy hooks up the help to the smartparts as they are created.&lt;/p&gt;
&lt;p&gt;We also need an interface for the HelpProvider Service:&lt;/p&gt;
&lt;pre&gt;public interface IHelpProviderService&lt;br /&gt;    {&lt;br /&gt;        Dictionary&amp;lt;string, HelpComponent&amp;gt; HelpComponents { get;}&lt;/pre&gt;
&lt;pre&gt;        void InsertItem(string key, HelpComponent item);&lt;br /&gt;        bool Contains(HelpComponent item);&lt;br /&gt;        bool Contains(string key);&lt;/pre&gt;
&lt;pre&gt;    }&lt;/pre&gt;
&lt;pre&gt;Now we define the serializable type:&lt;/pre&gt;
&lt;pre&gt;    public enum HelpNavigator&lt;br /&gt;    {&lt;br /&gt;        AssociateIndex, Find, Index, KeywordIndex, TableOfContents, Topic, TopicId&lt;br /&gt;    }&lt;/pre&gt;
&lt;pre&gt;    [Serializable]&lt;br /&gt;    public class HelpComponent&lt;/pre&gt;
&lt;pre&gt;    {&lt;/pre&gt;
&lt;pre&gt;        private HelpNavigator _navigationType;&lt;br /&gt;        [XmlAttribute]&lt;br /&gt;        public HelpNavigator NavigationType&lt;br /&gt;        {&lt;br /&gt;            get { return _navigationType; }&lt;br /&gt;            set { _navigationType = value; }&lt;br /&gt;        }&lt;/pre&gt;
&lt;pre&gt;        private String _helpNamespace;&lt;br /&gt;        [XmlAttribute]&lt;br /&gt;        public String HelpNamespace&lt;br /&gt;        {&lt;br /&gt;            get { return _helpNamespace; }&lt;br /&gt;            set { _helpNamespace = value; }&lt;br /&gt;        }&lt;/pre&gt;
&lt;pre&gt;        private String _helpKey;&lt;br /&gt;        [XmlAttribute]&lt;br /&gt;        public String HelpKey&lt;br /&gt;        {&lt;br /&gt;            get { return _helpKey; }&lt;br /&gt;            set { _helpKey = value; }&lt;br /&gt;        }&lt;/pre&gt;
&lt;pre&gt;        private String _componentName;&lt;br /&gt;        [XmlAttribute]&lt;br /&gt;        public String ComponentName&lt;br /&gt;        {&lt;br /&gt;            get { return _componentName; }&lt;br /&gt;            set { _componentName = value; }            &lt;br /&gt;        }&lt;br /&gt;       &lt;/pre&gt;
&lt;pre&gt;        public override string ToString()&lt;br /&gt;        {&lt;br /&gt;            if (String.IsNullOrEmpty(_componentName))&lt;br /&gt;            {&lt;br /&gt;                if (base.ParseType() == null)&lt;br /&gt;                    return this.GetType().ToString();&lt;br /&gt;                else&lt;br /&gt;                    return base.ParseType().AssemblyQualifiedName;&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                if (this.ParseType() != null)&lt;br /&gt;                    return _componentName + "::" + this.ParseType().AssemblyQualifiedName;&lt;br /&gt;                else&lt;br /&gt;                    return _componentName;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;
&lt;pre&gt;Ok, so this defines the Serializable type, so we can make an XML file like this:&lt;/pre&gt;
&lt;pre&gt;&lt;font face="Arial"&gt;&amp;lt;HelpConfiguration&amp;gt;&lt;br /&gt;    &amp;lt;HelpComponent TypeName="AdminModule.Editors.NewRelationship, AdminModule" &lt;br /&gt;                 NavigationType="TopicId"&lt;br /&gt;                 HelpKey="722412"&lt;br /&gt;                 HelpNamespace="Help\EntityExplorer.chm"/&amp;gt;&lt;br /&gt;    &amp;lt;HelpComponent TypeName="AdminModule.Editors.NewBusinessRuleStep, AdminModule" &lt;br /&gt;                 NavigationType="TopicId"&lt;br /&gt;                 HelpKey="72248"&lt;br /&gt;                 HelpNamespace="Help\EntityExplorer.chm"/&amp;gt;&lt;br /&gt;&amp;lt;/HelpConfiguration&amp;gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre&gt;So, we build the Help Provider Service to Load the saved HelpConfiguration Data into a Dictionary&lt;/pre&gt;
&lt;pre&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Xml.Serialization;&lt;/pre&gt;
&lt;pre&gt;    public class HelpProviderService : IHelpProviderService&lt;br /&gt;    {&lt;br /&gt;        private Dictionary&amp;lt;string, HelpComponent&amp;gt; helpComponents;&lt;/pre&gt;
&lt;pre&gt;        public Dictionary&amp;lt;string, HelpComponent&amp;gt; HelpComponents&lt;br /&gt;        {&lt;br /&gt;            get { return helpComponents; }&lt;br /&gt;            set {  }&lt;br /&gt;        }&lt;/pre&gt;
&lt;pre&gt;        public void InsertItem(string key, HelpComponent item)&lt;br /&gt;        {&lt;br /&gt;            HelpComponents.Add(key, item);&lt;br /&gt;        }&lt;/pre&gt;
&lt;pre&gt;        public bool Contains(HelpComponent item)&lt;br /&gt;        {&lt;br /&gt;            foreach (KeyValuePair&amp;lt;string, HelpComponent&amp;gt; comp in HelpComponents)&lt;br /&gt;            {&lt;br /&gt;                if (comp.Value == item)&lt;br /&gt;                    return true;&lt;br /&gt;            }&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;        public bool Contains(string key)&lt;br /&gt;        {&lt;br /&gt;            foreach (KeyValuePair&amp;lt;string, HelpComponent&amp;gt; comp in HelpComponents)&lt;br /&gt;            {&lt;br /&gt;                if (comp.Key == key)&lt;br /&gt;                    return true;&lt;br /&gt;            }&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;/pre&gt;
&lt;pre&gt;        public HelpProviderService()&lt;br /&gt;        {&lt;br /&gt;            helpComponents = new Dictionary&amp;lt;string, HelpComponent&amp;gt;();&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;
&lt;p&gt; Now, when smartparts are created in the normal CAB manner:&lt;/p&gt;
&lt;p&gt; &lt;font face="Arial"&gt;_propertyGrid = ModuleWorkItem.SmartParts.AddNew&amp;lt;PropertyGridToolWindow&amp;gt;();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;The Builder Strategy will pick up the creation and dynamically hook-up the help&lt;/p&gt;
&lt;p&gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using Microsoft.Practices.ObjectBuilder;&lt;/p&gt;
&lt;pre&gt;    public class HelpProviderStrategy:BuilderStrategy&lt;br /&gt;    {&lt;br /&gt;        private bool _canConfig;&lt;br /&gt;       &lt;br /&gt;        public HelpProviderStrategy()&lt;br /&gt;        {&lt;br /&gt;        }&lt;/pre&gt;
&lt;pre&gt;        public override object BuildUp(IBuilderContext context, Type typeToBuild, object existing, string idToBuild)&lt;br /&gt;        {&lt;br /&gt;            WorkItem wi = context.Locator.Get&amp;lt;WorkItem&amp;gt;(new DependencyResolutionLocatorKey(typeof(WorkItem), null));&lt;br /&gt;            IHelpProviderService _helpProvider = wi.Services.Get&amp;lt;IHelpProviderService&amp;gt;(false);&lt;br /&gt;            if (_helpProvider != null)&lt;br /&gt;            {&lt;br /&gt;                if (_helpProvider.HelpComponents.Count &amp;gt; _helpcomponents.Count)&lt;br /&gt;                { LoadHelpConfiguration(_helpProvider); }&lt;/pre&gt;
&lt;pre&gt;                Control control = existing as Control;&lt;br /&gt;                if (control != null)&lt;br /&gt;                {&lt;br /&gt;                    AddHelpSupport(control);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            return base.BuildUp(context, typeToBuild, existing, idToBuild);&lt;br /&gt;        }&lt;/pre&gt;
&lt;pre&gt;        private void AddHelpSupport(Control c)&lt;br /&gt;        {&lt;br /&gt;            HelpComponent help = _helpcomponents.Find(&lt;br /&gt;                delegate(HelpComponent searchComponent)&lt;br /&gt;                {&lt;br /&gt;                    return searchComponent.ComponentName == c.Name &amp;amp;&amp;amp; &lt;br /&gt;                        c.GetType().Equals(searchComponent.ParseType());&lt;br /&gt;                });&lt;br /&gt;           &lt;br /&gt;            if (help == null)&lt;br /&gt;            {&lt;br /&gt;                help = _helpcomponents.Find(&lt;br /&gt;                    delegate(HelpComponent searchComponent)&lt;br /&gt;                    {&lt;br /&gt;                        return c.GetType().Equals(searchComponent.ParseType());&lt;br /&gt;                    });&lt;br /&gt;            }&lt;/pre&gt;
&lt;pre&gt;            //Assign Help Provider&lt;br /&gt;            if (help != null)&lt;br /&gt;            {&lt;br /&gt;                HelpProvider provider = _providers[help.HelpNamespace];&lt;br /&gt;                provider.SetHelpKeyword(c, help.HelpKey);&lt;br /&gt;                provider.SetHelpNavigator(c, (System.Windows.Forms.HelpNavigator)Enum.Parse(typeof(System.Windows.Forms.HelpNavigator), help.NavigationType.ToString()));&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;
&lt;pre&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;pre&gt;Don't forget to add the Builder Strategy to you root workitem: &lt;/pre&gt;
&lt;pre&gt;&lt;font face="Arial"&gt;&lt;font face="Arial"&gt;        protected override void InitializeCommonStrategies(Builder builder)&lt;br /&gt;         {&lt;br /&gt;             base.InitializeCommonStrategies(builder);&lt;br /&gt;             ......&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;font face="Arial"&gt;             builder.Strategies.AddNew&amp;lt;HelpProviderStrategy&amp;gt;(BuilderStage.Initialization);&lt;br /&gt;        }&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;font face="Arial"&gt;You may not be able to just copy/paste all the code here and make it work, but if you can follow the example you should get a pretty good idea of how to implement this dynamic help configuration strategy in CAB.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Gavin&lt;/font&gt;&lt;font color="#0000ff" size="1"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113008"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=113008" 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/gavin/aggbug/113008.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2007/06/05/113008.aspx</guid>
            <pubDate>Tue, 05 Jun 2007 18:47:50 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/113008.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2007/06/05/113008.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/113008.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/113008.aspx</trackback:ping>
        </item>
        <item>
            <title>Frustrated with Windows Live Dev team</title>
            <link>http://geekswithblogs.net/gavin/archive/2007/03/13/108680.aspx</link>
            <description>&lt;P&gt;Well, I'm pretty fed up with Microsoft's Windows Live Dev Team.&amp;nbsp; Not that they have really done anything wrong, it's just that they haven't done anything!!! &lt;/P&gt;
&lt;DIV class=BlogPostContent&gt;Add new abilities to the Windows Live Messenger client with the &lt;A href="http://msdn2.microsoft.com/en-us/library/aa905655.aspx"&gt;Messenger Add-in SDK beta&lt;/A&gt;. &lt;/DIV&gt;
&lt;DIV class=BlogPostFooter&gt;Published Friday, June 09, 2006 2:55 PM &lt;/DIV&gt;
&lt;DIV class=BlogPostFooter&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=BlogPostFooter&gt;So, it's almost been a year since MS has put out anything to support development with Messenger.&amp;nbsp; Whats the deal?? To top things off the existing Add-in sdk is crap!&amp;nbsp; While it works, it only give you access to events and methods that a kid would want.&amp;nbsp; Look at this:&lt;/DIV&gt;
&lt;DIV class=BlogPostFooter&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=BlogPostFooter&gt;
&lt;TABLE style="BACKGROUND-COLOR: #cccccc" width="100%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;&lt;B&gt;Event&lt;/B&gt; &lt;/TH&gt;
&lt;TH&gt;&lt;B&gt;Description&lt;/B&gt; &lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;A onclick="javascript:Track('ctl00_LibFrame_ctl11|ctl00_LibFrame_ctl12',this);" href="http://msdn2.microsoft.com/en-us/library/bb229410.aspx"&gt;MessengerClient.IncomingTextMessage Event&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Fires when an add-in receives a text message.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;A onclick="javascript:Track('ctl00_LibFrame_ctl11|ctl00_LibFrame_ctl13',this);" href="http://msdn2.microsoft.com/en-us/library/bb229398.aspx"&gt;MessengerClient.OutgoingTextMessage Event&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Fires when a local user sends a text message to a buddy.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;A onclick="javascript:Track('ctl00_LibFrame_ctl11|ctl00_LibFrame_ctl14',this);" href="http://msdn2.microsoft.com/en-us/library/bb229397.aspx"&gt;MessengerClient.ShowOptionsDialog Event&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Fires when the user accesses Messenger's Options dialog box.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;A onclick="javascript:Track('ctl00_LibFrame_ctl11|ctl00_LibFrame_ctl15',this);" href="http://msdn2.microsoft.com/en-us/library/bb229405.aspx"&gt;MessengerClient.Shutdown Event&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Fires when the Messenger client unloads the add-in.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;A onclick="javascript:Track('ctl00_LibFrame_ctl11|ctl00_LibFrame_ctl16',this);" href="http://msdn2.microsoft.com/en-us/library/bb229394.aspx"&gt;MessengerClient.StatusChanged Event&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Fires when the local user's status or a buddy's status changes.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;DIV class=MTPS_CollapsibleRegion&gt;
&lt;SCRIPT type=text/Javascript&gt;
var ExpCollDivStr = ExpCollDivStr;
ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl176a14754,";
var ExpCollImgStr = ExpCollImgStr;
 ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl17img,";
&lt;/SCRIPT&gt;
&lt;BR&gt;
&lt;DIV class=section id=ctl00_LibFrame_ctl176a14754 style="DISPLAY: block"&gt;
&lt;DIV id=ctl00_LibFrame_ctl17&gt;&lt;A name=sectionToggle3&gt;
&lt;H3 class=subHeading&gt;&lt;!----&gt;&lt;/H3&gt;
&lt;TABLE style="BACKGROUND-COLOR: #cccccc" width="100%" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;&lt;B&gt;Method&lt;/B&gt; &lt;/TH&gt;
&lt;TH&gt;&lt;B&gt;Description&lt;/B&gt; &lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;A onclick="javascript:Track('ctl00_LibFrame_ctl17|ctl00_LibFrame_ctl18',this);" href="http://msdn2.microsoft.com/en-us/library/bb229393.aspx"&gt;MessengerClient.SendActionMessage Method&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Sends an action message to a specified user or buddy.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;A onclick="javascript:Track('ctl00_LibFrame_ctl17|ctl00_LibFrame_ctl19',this);" href="http://msdn2.microsoft.com/en-us/library/bb229404.aspx"&gt;MessengerClient.SendNudgeMessage Method&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Sends a nudge message to a specified user or buddy.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;A onclick="javascript:Track('ctl00_LibFrame_ctl17|ctl00_LibFrame_ctl20',this);" href="http://msdn2.microsoft.com/en-us/library/bb229406.aspx"&gt;MessengerClient.SendTextMessage Method&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;Sends a text message to a specified user or buddy.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;That's all we get???&amp;nbsp; When MS released Live Messenger they added the Verizon Web Call support to the app.&amp;nbsp; While this has been around for almost 6 months, there is still no way for a developer to place a call with messenger from another application.&amp;nbsp; The other thing that really sucks is the current stuff will only fire off if the user's status is set to idle.&amp;nbsp; While this is good for a "Away" plugin, what if you want to do more?&amp;nbsp; You would think that would be an option for a developer to respond to the events when they want to.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I think it would really help MS to open up the Messenger API to allow developers to integrate the ALL the communication functionality in other applications.&amp;nbsp; They are already doing this in Office, so it's obviously something they want to do, but why prevent outside developers from doing the same?&amp;nbsp; Seems it would make Messenger a more viable and necessary application if other apps wanted to use its functionality.&lt;/P&gt;
&lt;P&gt;Just had to vent, maybe MS will get thier crap together now that Vista is out...&amp;nbsp; remains to be seen...&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=108680"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=108680" 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/gavin/aggbug/108680.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2007/03/13/108680.aspx</guid>
            <pubDate>Wed, 14 Mar 2007 01:57:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/108680.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2007/03/13/108680.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/108680.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/108680.aspx</trackback:ping>
        </item>
        <item>
            <title>Vista Business Edition</title>
            <link>http://geekswithblogs.net/gavin/archive/2007/01/30/104975.aspx</link>
            <description>&lt;P&gt;Well, I recently got a new Toshiba Laptop.&amp;nbsp; I bought it in December, so no Vista.&amp;nbsp; It was running Windows Media Center Edition.&amp;nbsp; It's a nice machine, Dual Core, 2GB RAM, etc...&amp;nbsp; So, I decided to put the MSDN copy of Vista Ultimate edition on it.&amp;nbsp; Everything seemed to run fine except for a few issues.&amp;nbsp; I couldn't run a program called IsoBuster, Vista just wouldn't let me open the .exe no matter what I tried.&amp;nbsp; And then there are still compatibility issues for VS 2005, which weren't giving me any warm fuzzies..&amp;nbsp;&amp;nbsp; So, I restored the orginal OS and have been using it with XPMC for the last few weeks....&lt;/P&gt;
&lt;P&gt;Meanwhile, and someone please tell me why they do this...&amp;nbsp; the 200GB hard drive in the laptop could only muster a whopping 4200 RPM...&amp;nbsp; this is why people hate laptops.. does it matter if you put 2GB RAM and a nice dual core if you bottleneck the whole thing with this shitty harddrive???&amp;nbsp; So, I got a new 100GB 7200RPM drive, $150, not bad...&amp;nbsp;&amp;nbsp; at the same time MS sent me my complimentary copy of Vista Business edition for participating in thier Power Together campaign.&amp;nbsp; &lt;A href="http://www.powertogether.com"&gt;http://www.powertogether.com&lt;/A&gt; So, with a new harddrive, and a non-upgradable OS from XPMC to Vista Business.&amp;nbsp; I decided now that MS has "officially" released Vista, they can't leave us developers hanging for too long.&amp;nbsp; So I'm running Vista Business with Visual Studio 2005.&amp;nbsp; I had to download VS2005 SP1 and the VS Vista Update Beta.&amp;nbsp; after all was said and done, I got everything working and compiled our 60 project solution, woohoo. &lt;/P&gt;
&lt;P&gt;I still have to wait for drivers for my U3 smart drive and my fingerprint reader, but hey, nothing is perfect right??&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=104975"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=104975" 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/gavin/aggbug/104975.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2007/01/30/104975.aspx</guid>
            <pubDate>Wed, 31 Jan 2007 02:37:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/104975.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2007/01/30/104975.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/104975.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/104975.aspx</trackback:ping>
        </item>
        <item>
            <title>Microsoft CompositeUI Application Block</title>
            <link>http://geekswithblogs.net/gavin/archive/2006/12/27/102130.aspx</link>
            <description>&lt;FONT size=2&gt;
&lt;P&gt;I started working on a new project a few weeks ago.&amp;nbsp; Were writing a new extensible Shell application with the Microsoft CompositeUI Application Block.&amp;nbsp; I haven't used this block before.&amp;nbsp; Looks like Microsoft rushed this thing out the door.&amp;nbsp; Alot of needed functionality is missing, maybe the goal was to just provide a simple base shell layer and allow developers to extend it to do whatever.&amp;nbsp; I guess thats how it works when they are trying to release a new pattern or practice.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;So it took me a few weeks to wrap my head around this thing. ObjectBuilder was a new concept for me.&amp;nbsp; Pretty cool stuff though it turns out, Dependency Injection is a nice way of sharing global objects and making sure everything is referecing the right things.&amp;nbsp; Here some sample Dependency Injection Code.&lt;/P&gt;
&lt;P&gt;Say you create a new object, and you want it to have a reference a global Selection Service..&amp;nbsp; all you have to do is add this code to your class:&lt;/P&gt;&lt;FONT size=1&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[&lt;FONT color=#008080&gt;SmartPart&lt;/FONT&gt;]&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;partial&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;PropertyGridToolWindow&lt;/FONT&gt; : &lt;FONT color=#008080&gt;UserControl&lt;/FONT&gt;, &lt;FONT color=#008080&gt;ISmartPartInfoProvider&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=2&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#008080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ISelectionService&lt;/FONT&gt; _selectionService;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;FONT color=#008080&gt;ServiceDependency&lt;/FONT&gt;]&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;ISelectionService&lt;/FONT&gt; SelectionService&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;_selectionService = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;_selectionService.SelectionChanged += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(_selectionService_SelectionChanged);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; _selectionService; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3&gt;The cool thing about this, is instead of having to create an overloaded constructor to pass the existing instance of the Selection Service to the new object, Object Builder handles it all for you.&amp;nbsp; When creating the new PropertyGridToolWindow, just have ObjectBuilder do it:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#008080 size=1&gt;
&lt;P&gt;&lt;FONT size=2&gt;PropertyGridToolWindow&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; _propertyGrid;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=3&gt;
&lt;P&gt;&lt;FONT size=2&gt;_propertyGrid = ModuleWorkItem.SmartParts.AddNew&amp;lt;&lt;FONT color=#008080&gt;PropertyGridToolWindow&lt;/FONT&gt;&amp;gt;();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Thats it!&amp;nbsp; Object Builder will automatically set the reference to the Selection Service when the object is created.&lt;/P&gt;
&lt;P&gt;I'll post some more cool things I discover here as I go.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3&gt;Gavin&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102130"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=102130" 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/gavin/aggbug/102130.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2006/12/27/102130.aspx</guid>
            <pubDate>Thu, 28 Dec 2006 01:55:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/102130.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2006/12/27/102130.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/102130.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/102130.aspx</trackback:ping>
        </item>
        <item>
            <title>Posting lost in the sea of information...</title>
            <link>http://geekswithblogs.net/gavin/archive/2006/12/21/101849.aspx</link>
            <description>&lt;P&gt;Why do we do it?&amp;nbsp; Why would I even post this blog in the first place?&amp;nbsp; What does it do for me?&amp;nbsp; Am I posting, sharing some strange introverted thoughts or ideas that I have no-one else to talk to about?&amp;nbsp; What are the chances of anything I say here even being read?&amp;nbsp; You have to ask yourself, If I type and post this blog, and noone ever reads it, will it ever really matter?&amp;nbsp; I guess if I feel better sharing some specific knowledge I have gained doing something in my life then I will post things.&amp;nbsp; But, what purpose does it serve other than me sharing my thoughts or experiences with the world? And who knows if anyone even cares about my thoughts or my expereinces. If my blog didn't exist, and you weren't here reading it, would it really matter?&amp;nbsp; I guess it all depends on your perspective of things.&amp;nbsp; If noone ever wrote a blog, and never posted it for anyone to read, then there would be no blogs and noone reading them, which would, yes, make things different.&amp;nbsp; So I guess on one hand my contribution to the digital world of information does mean something.&amp;nbsp; Obviously I'm in a weird mood today, but does it really matter? Not to you....&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=101849"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=101849" 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/gavin/aggbug/101849.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2006/12/21/101849.aspx</guid>
            <pubDate>Fri, 22 Dec 2006 04:05:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/101849.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2006/12/21/101849.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/101849.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/101849.aspx</trackback:ping>
        </item>
        <item>
            <title>Object Serialization.. someone help me out here.. this is lame</title>
            <link>http://geekswithblogs.net/gavin/archive/2004/08/09/9468.aspx</link>
            <description>&lt;P&gt;I was trying a very simple prototype of manually serializing objects and storing them in a memory stream.&amp;nbsp; Obviously this sample is&amp;nbsp;not&amp;nbsp;the final implementation,&amp;nbsp;it's just a test.&amp;nbsp; So tell me why I get this stupid error....&amp;nbsp; here is the code:&lt;/P&gt;&lt;FONT color=#0000ff size=1&gt;
&lt;P&gt;Imports&lt;/FONT&gt;&lt;FONT size=1&gt; System.Xml.Serialization&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Imports&lt;/FONT&gt;&lt;FONT size=1&gt; System.IO&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Imports&lt;/FONT&gt;&lt;FONT size=1&gt; System.Xml&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=1&gt;Imports&lt;/FONT&gt;&lt;FONT size=1&gt; System.Text&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;
&lt;P&gt;&lt;SERIALIZABLE()&gt;&lt;SERIALIZABLE()&gt;&amp;lt;Serializable()&amp;gt; _&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Public&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Class&lt;/FONT&gt;&lt;FONT size=1&gt; TestObject&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Public&lt;/FONT&gt;&lt;FONT size=1&gt; Firstname &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;As&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Public&lt;/FONT&gt;&lt;FONT size=1&gt; lastname &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;As&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;String&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Public&lt;/FONT&gt;&lt;FONT size=1&gt; DOB &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;As&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Date&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Public&lt;/FONT&gt;&lt;FONT size=1&gt; age &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;As&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Integer&lt;BR&gt;End&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Class&lt;/FONT&gt; 
&lt;P&gt;&lt;/P&gt;&lt;FONT color=#0000ff size=1&gt;&lt;FONT size=1&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Try&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Dim&lt;/FONT&gt;&lt;FONT size=1&gt; oTO &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;As&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;New&lt;/FONT&gt;&lt;FONT size=1&gt; TestObject&lt;BR&gt;oTO.Firstname = "John"&lt;BR&gt;oTO.lastname = "Doe"&lt;BR&gt;oTO.DOB = "02/13/1972"&lt;BR&gt;oTO.age = 32&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=1&gt;'Serialize Object to Memory Stream&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Dim&lt;/FONT&gt;&lt;FONT size=1&gt; oSerializer &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;As&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;New&lt;/FONT&gt;&lt;FONT size=1&gt; XmlSerializer(&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;GetType&lt;/FONT&gt;&lt;FONT size=1&gt;(TestObject))&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Dim&lt;/FONT&gt;&lt;FONT size=1&gt; oMemStream &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;As&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;New&lt;/FONT&gt;&lt;FONT size=1&gt; MemoryStream&lt;BR&gt;oSerializer.Serialize(oMemStream, oTO)&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=1&gt;'Deserialize Object &lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;oTO = &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;CType&lt;/FONT&gt;&lt;FONT size=1&gt;(oSerializer.Deserialize(oMemStream), TestObject)&lt;BR&gt;Console.WriteLine(oTO.Firstname &amp;amp; " " &amp;amp; oTO.lastname)&lt;BR&gt;Console.WriteLine(oTO.DOB &amp;amp; " " &amp;amp; oTO.age)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;&lt;/P&gt;
&lt;P&gt;Catch&lt;/FONT&gt;&lt;FONT size=1&gt; ex &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;As&lt;/FONT&gt;&lt;FONT size=1&gt; Exception&lt;BR&gt;Console.WriteLine(ex.ToString)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;End&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Try&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;End&lt;/FONT&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=1&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Thats it, pretty simple, but I get this error:&lt;/P&gt;&lt;FONT size=1&gt;
&lt;P&gt;System.InvalidOperationException: There is an error in XML document (0, 0). ---&amp;gt; System.Xml.XmlException: The root element is missing.&lt;BR&gt;at System.Xml.XmlTextReader.Read()&lt;BR&gt;at System.Xml.XmlReader.MoveToContent()&lt;BR&gt;at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read4_TestObject()&lt;BR&gt;--- End of inner exception stack trace ---&lt;BR&gt;at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)&lt;BR&gt;at System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream)&lt;/P&gt;&lt;/FONT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=9468"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=9468" 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/gavin/aggbug/9468.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2004/08/09/9468.aspx</guid>
            <pubDate>Mon, 09 Aug 2004 08:39:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/9468.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2004/08/09/9468.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/9468.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/9468.aspx</trackback:ping>
        </item>
        <item>
            <title>Wandering Code</title>
            <link>http://geekswithblogs.net/gavin/archive/2006/02/03/68115.aspx</link>
            <description>&lt;SPAN class=clsSmHead&gt;Wandering Code&lt;/SPAN&gt; 
&lt;H1&gt;Write Mobile Agents In .NET To Roam And Interact On Your Network&lt;/H1&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/06/02/MobileAgents/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/06/02/MobileAgents/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Pretty crazy article....&amp;nbsp; anyone think of any practical uses though ?&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=68115"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=68115" 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/gavin/aggbug/68115.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gavin Stevens</dc:creator>
            <guid>http://geekswithblogs.net/gavin/archive/2006/02/03/68115.aspx</guid>
            <pubDate>Sat, 04 Feb 2006 03:21:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gavin/comments/68115.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gavin/archive/2006/02/03/68115.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gavin/comments/commentRss/68115.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gavin/services/trackbacks/68115.aspx</trackback:ping>
        </item>
    </channel>
</rss>