<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Mike Bouck's RAM</title>
  <link rel="alternate" type="text/html" href="http://blog.gatosoft.com/" />
  <link rel="self" href="http://blog.gatosoft.com/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2006-04-18T23:25:47.3409919-07:00</updated>
  <author>
    <name>Mike Bouck</name>
  </author>
  <subtitle />
  <id>http://blog.gatosoft.com/</id>
  <generator uri="http://www.dasblog.net" version="1.8.5223.2">DasBlog</generator>
  <entry>
    <title>Taking the ClickPain out of ClickOnce</title>
    <link rel="alternate" type="text/html" href="http://blog.gatosoft.com/PermaLink,guid,d0a0dd1e-c9ac-4fa9-a408-615454d49702.aspx" />
    <id>http://blog.gatosoft.com/PermaLink,guid,d0a0dd1e-c9ac-4fa9-a408-615454d49702.aspx</id>
    <published>2006-04-01T01:11:29.982-07:00</published>
    <updated>2006-04-18T23:25:47.3409919-07:00</updated>
    <category term="ClickOnce" label="ClickOnce" scheme="dasBlog" />
    <category term="Code" label="Code" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">The <a href="http://msdn2.microsoft.com/en-us/library/t71a733d.aspx">ClickOnce</a> support
   in Visual Studio 2005 is nice and easy but falls-down in number of areas:<br /><br /><ol><li>
         The application manifest (i.e. the "stuff" that comprises your app) is determined
         by walking the project references of your Windows app.  What this means is that
         if you have deployment artifacts that are non-reference content or late-bound loaded
         assemblies then the default ClickOnce mechanism in Visual Studio will <b>not</b> pick
         them up. 
      </li><li>
         Oftentimes the versioning scheme for your assemblies is driven by your build process
         and ideally you'd want the ClickOnce version number to be in-sync with your assembly
         version.  The Visual Studio ClickOnce mechanism has a very limited versioning
         scheme that is completely decoupled from assembly versioning and is inaccessible outside
         of the IDE. 
      </li><li>
         For enterpirse scenarios, it is very common to have a segmented network dedicated
         for specific functions (e.g. development, test, production).  In this scenario
         the Windows app has to be designed such that certain information (e.g. connection
         strings, web service urls, etc.) are pushed-into environment-specific configuration
         files.  The deploy process then involves indicating what environment the built
         bits should be pushed into and then the appropriate configuration files are pulled-in
         by the deploy process.  In this way the same set of bits may be "promoted" from
         dev to test and finally to production.  The default Visual Studio ClickOnce mechanism
         has no notion of nor capability of dealing with environment-specific information.<br /></li></ol><br />
   For the uninitiated there are four ways to create a ClickOnce deploy package:<br />
     
   <br /><ol><li>
         Via the Window app's Publish property page in Visual Studio (easiest but essentially
         unuseable for apps of even moderate complexity for the reasons listed above). 
      </li><li>
         Via <a href="http://msdn2.microsoft.com/en-us/library/xc3tc5xx.aspx">mage.exe</a> (command-line
         utility). 
      </li><li>
         Via <a href="http://msdn2.microsoft.com/en-us/library/xc3tc5xx.aspx">mageui.exe</a> (Windows
         app). 
      </li><li>
         Via MSBuild (using the <a href="http://msdn2.microsoft.com/en-us/library/6wc2ccdc.aspx"><i>GenerateApplicationManifest</i></a>, <a href="http://msdn2.microsoft.com/en-us/library/3k2t34e7%28VS.80%29.aspx"><i>GenerateDeploymentManifest</i></a>, <i><a href="http://msdn2.microsoft.com/en-us/library/ms164294%28VS.80%29.aspx">GenerateBootstrapper</a></i>and <a href="http://msdn2.microsoft.com/en-us/library/ms164304%28VS.80%29.aspx"><i>SignFile</i></a> tasks).<br /></li></ol>
     
   <br />
   Note that despite the chosen method, everything eventually calls the MSBuild tasks.
   So, for the cleanest solution you should just cut straight to the chase and call the
   MSBuild tasks, right? Ah, but here's the rub -- you have to determine what your application
   manifest is and feed this list to the <i>GenerateApplicationManifest </i>task via
   an <a href="http://msdn2.microsoft.com/en-us/library/ms171453.aspx"><i>ItemGroup</i></a>.
   You really don't want to have this fixed list that you have to maintain but rather
   have the application manifest dynamically generated for you. <i><b>This is the real
   value of mage.exe which you can point to a directory and it will build-up the app
   manifest for you.</b></i> Where mage is less than useful is generating the deployment
   manifest but you can just use the MSBuild task to do this instead. 
   <br />
       <br />
   This <a href="http://blog.gatosoft.com/content/binary/ClickOnceDeployTest.zip">sample</a> demonstrates
   how to use mage.exe in conjunction with the ClickOnce MSBuild tasks to resolve the
   deficiencies with the Visual Studio approach.  The sample consists of a simple
   Windows app which displays a value stored externally in the application's App.config
   file.  Note that in this sample there are three versions of this file (stored
   under the Config directory) -- a "development" version, a "qa" (i.e. test) version,
   and a "production" version.  They are structurally identical, the only varying
   bits are the values.  There is also a satellite class library that is late-bound
   instantiated and invoked when a button is pressed on the app.  There is no reference
   to this assembly from the Windows app.<br /><br />
   In my shop we run the deploy scripts seperately from the build scripts but you could
   easily tack this on to the end of your build process if so desired.  Have fun!<br /><a href="http://blog.gatosoft.com/content/binary/ClickOnceDeployTest.zip"></a><img width="0" height="0" src="http://blog.gatosoft.com/aggbug.ashx?id=d0a0dd1e-c9ac-4fa9-a408-615454d49702" /></div>
    </content>
  </entry>
  <entry>
    <title>Programatically Registering SoapExtensions Redux</title>
    <link rel="alternate" type="text/html" href="http://blog.gatosoft.com/PermaLink,guid,85e0d0d0-ac6d-4afa-a43f-40f4ed784a45.aspx" />
    <id>http://blog.gatosoft.com/PermaLink,guid,85e0d0d0-ac6d-4afa-a43f-40f4ed784a45.aspx</id>
    <published>2005-07-31T13:10:42-07:00</published>
    <updated>2005-07-31T13:13:31.8721229-07:00</updated>
    <category term="Code" label="Code" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p class="MsoNormal">
            <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">I’m using a number of <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebservicesprotocolssoapextensionclasstopic.asp">SoapExtension</a>s
         in my current project and had a need to register them dynamically on the client side;
         Christian Weyer blogged about a <a href="http://weblogs.asp.net/cweyer/archive/2003/08/07/22929.aspx">solution</a> using
         reflection which injects the extension into the in-memory config.  This works
         great for .NET 1.x, but I’m all over .NET 2.0 code these days!  Unfortunately,
         dynamically registering SoapExtensions gets no easier in 2.0, but fortunately hacking
         the in-memory config does:</span>
          </p>
          <span style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">
            <p>
              <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         &lt;summary&gt;</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         Programatically registers a &lt;see cref="SoapExtension"/&gt; at runtime with the
         specified</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         &lt;see cref="SoapExtensionTypeElement.Priority"/&gt; and &lt;see cref="SoapExtensionTypeElement.Group"/&gt;
         settings.</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         &lt;/summary&gt;</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         &lt;param name="type"&gt;The &lt;see cref="Type"/&gt; of the &lt;see cref="SoapExtension"/&gt;
         to register.&lt;/param&gt;</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         &lt;param name="priority"&gt;</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         A value that indicates the relative order in which this SOAP extension runs when multiple
         SOAP extensions are</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         specified. Within each group the priority attribute distinguishes the overall relative
         priority of the SOAP </span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         extension. A lower priority number indicates a higher priority for the SOAP extension.
         The lowest possible </span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         value for the priority attribute is 1.</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         &lt;/param&gt;</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         &lt;param name="group"&gt;</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         The relative priority group (e.g. Low or High) in which this SOAP extension runs when
         multiple SOAP extensions </span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         are configured to run.</span>
                <br />
                <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">///
         &lt;/param&gt;</span>
                <br />
         [ReflectionPermission(SecurityAction.Demand, Unrestricted <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">true</span>)]<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">static</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">void</span> RegisterSoapExtension(Type
         type, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">int</span> priority,
         PriorityGroup group)<br />
         {<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   if</span> (!type.IsSubclassOf(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">typeof</span>(SoapExtension)))<br />
            {<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">      throw</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> ArgumentException(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Type
         must be derived from SoapException."</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"type"</span>);<br />
            }<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   if</span> (priority
         &lt; 1)<br />
            {<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">      throw</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> ArgumentOutOfRangeException(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"priority"</span>,
         priority, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Priority
         must be greater or equal to 1."</span>);<br />
            }<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //
         get the current web services settings...</span><br />
            WebServicesSection wss <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> WebServicesSection.Current;<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //
         set SoapExtensionTypes collection to read/write...</span><br />
            FieldInfo readOnlyField <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">typeof</span>(System.Configuration.ConfigurationElementCollection).GetField(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"bReadOnly"</span>,
         BindingFlags.NonPublic <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">|</span> BindingFlags.Instance);<br />
            readOnlyField.SetValue(wss.SoapExtensionTypes, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">false</span>);<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //
         inject SoapExtension...</span><br />
            wss.SoapExtensionTypes.Add(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> SoapExtensionTypeElement(type,
         priority, group));<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //
         set SoapExtensionTypes collection back to readonly and clear modified flags...</span><br />
            MethodInfo resetModifiedMethod <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">typeof</span>(System.Configuration.ConfigurationElement).GetMethod(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"ResetModified"</span>,
         BindingFlags.NonPublic <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">|</span> BindingFlags.Instance);<br />
            resetModifiedMethod.Invoke(wss.SoapExtensionTypes, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">null</span>);<br />
            MethodInfo setReadOnlyMethod <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">typeof</span>(System.Configuration.ConfigurationElement).GetMethod(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"SetReadOnly"</span>,
         BindingFlags.NonPublic <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">|</span> BindingFlags.Instance);<br />
            setReadOnlyMethod.Invoke(wss.SoapExtensionTypes, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">null</span>);<br />
         }</span>
            </p>
          </span>
        </div>
        <img width="0" height="0" src="http://blog.gatosoft.com/aggbug.ashx?id=85e0d0d0-ac6d-4afa-a43f-40f4ed784a45" />
      </div>
    </content>
  </entry>
  <entry>
    <title>WeakReference Cache</title>
    <link rel="alternate" type="text/html" href="http://blog.gatosoft.com/PermaLink,guid,8f40858f-a670-4ccf-a413-ab9954320b25.aspx" />
    <id>http://blog.gatosoft.com/PermaLink,guid,8f40858f-a670-4ccf-a413-ab9954320b25.aspx</id>
    <published>2005-05-02T09:12:59.9868731-07:00</published>
    <updated>2005-08-03T20:52:12.1221229-07:00</updated>
    <category term="Code" label="Code" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <span id="SampleInfoControl_LabelDescription">
            <font face="Tahoma" color="#000000">There
      is a fundamental problem with <em>System.Web.Caching.Cache</em> -- what if your application
      is not a web application and you need some general-purpose cache functionality (e.g.
      middle-tier logic)? Since there is no equivilent "System.Caching.Cache" class I decided
      to </font>
            <a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=e4d699ec-17ce-47ec-95c0-55beb09b1e31">
              <font face="Tahoma" color="#0000ff">write
      one</font>
            </a>
            <font face="Tahoma" color="#000000"> using weak references that has
      no dependency on <em>System.Web.dll</em>.</font>
          </span>
        </p>
        <img width="0" height="0" src="http://blog.gatosoft.com/aggbug.ashx?id=8f40858f-a670-4ccf-a413-ab9954320b25" />
      </div>
    </content>
  </entry>
  <entry>
    <title>GDN Queued Component Utilities</title>
    <link rel="alternate" type="text/html" href="http://blog.gatosoft.com/PermaLink,guid,4891f8ba-47af-4bbe-a52b-80dfb22a452e.aspx" />
    <id>http://blog.gatosoft.com/PermaLink,guid,4891f8ba-47af-4bbe-a52b-80dfb22a452e.aspx</id>
    <published>2005-05-02T09:06:51.5806231-07:00</published>
    <updated>2005-05-02T09:06:51.5806231-07:00</updated>
    <category term="Code" label="Code" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <!--StartFragment -->
        <span id="SampleInfoControl_LabelDescription">
          <font face="Arial">Contains
   several useful classes that fill-in some holes with the current BCL Queued Components
   (QC) implementation. Functionality includes automatic queue moniker construction,
   QC session management (both synchronous and asynchronous), a QC exception handler
   base class, a QC custom config section handler, a managed wrapper class for the COM+ <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cossdk/html/fd455679-b2b3-487f-8494-9ea296ce2c89.asp">Message
   Mover</a> object, and an object wrapper to marshal .NET serializable types in queued
   interface calls. Full source code, documentation and samples are provided.  Download
   it <a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=3537C3CE-8E80-46AF-BAF7-7D919E320607">here</a>.</font>
        </span>
        <img width="0" height="0" src="http://blog.gatosoft.com/aggbug.ashx?id=4891f8ba-47af-4bbe-a52b-80dfb22a452e" />
      </div>
    </content>
  </entry>
  <entry>
    <title>XML Visualizer for Visual Studio .NET 2003 (XMLVIZ)</title>
    <link rel="alternate" type="text/html" href="http://blog.gatosoft.com/PermaLink,guid,d296c5d9-4a75-4dd3-92e2-abd2c82810e3.aspx" />
    <id>http://blog.gatosoft.com/PermaLink,guid,d296c5d9-4a75-4dd3-92e2-abd2c82810e3.aspx</id>
    <published>2005-05-01T21:56:15.3931231-07:00</published>
    <updated>2005-05-01T22:12:16.6118731-07:00</updated>
    <category term="Code" label="Code" scheme="dasBlog" />
    <content type="html">&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;I was intrigued,
   as many were, with &lt;a href="http://www.codeproject.com/csharp/DSWatch.asp"&gt;Mohammed
   Barqawi's DataSet QwickWatch&lt;/a&gt; add-in&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt; over
   on &lt;a href="http://www.codeproject.com/"&gt;The Code Project&lt;/a&gt;.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;thought
   of leveraging the expression evaluator to populate a form for visualization &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;purposes
   during a debugging session was compelling and, over the holidays, I &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;decided
   to see how far I could take the idea.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;As
   it turns-out, it is actually &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;quite
   amazing how much you can do with strings and an &lt;font face="Courier New"&gt;AppDomain.CurrentDomain.Load()&lt;/font&gt; &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;call!&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Once
   I had this nut cracked, everything else fell-together pretty quickly &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;and
   after a few weeks of furious coding and a small round of beta testing, I &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;decided
   to release the &lt;a href="http://workspaces.gotdotnet.com/xmlviz"&gt;XML Visualizer for
   Visual Studio .NET 2003&lt;/a&gt; (XMLVIZ) to a (much!) &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;larger
   audience.&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;
   &lt;o:p&gt;
      &lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;font color=#000000&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;WHAT DOES
   XMLVIZ DO?&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;Basically, XMLVIZ
   allows you to visualize most XML and XML-backed data sources during &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;runtime
   a la &lt;a href="http://msdn.microsoft.com/vcsharp/default.aspx?pull=/library/en-us/dnvs05/html/SimpleVisualizerCreation.asp"&gt;Whidbey's
   "debugger visualizers"&lt;/a&gt;.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The difference
   is you don't have to wait &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;for
   VS.NET 2005 because XMLVIZ will work with your copy of VS.NET 2003 today!&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;XMLVIZ &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;is
   implemented as a VS.NET add-in and, once installed, is activated by highlighting &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;any
   supported, initialized type instance during a debugging session, right-clicking on &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;the
   selection to bring-up the context menu, and selecting the "XML Visualizer" menu item.&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;The
   add-in will then grab the XML out of the selected target instance and display it on &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;a
   modal dialog along with the schema (if available).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;For
   ADO.NET types, the data is &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;also
   bound to a grid to allow navigation, row-filtering, and row version inspection. &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;
   &lt;o:p&gt;
      &lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;font color=#000000&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;font color=#000000&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;WHAT TYPES
   CAN I VISUALIZE?&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;Currenly XMLVIZ
   supports the following types (including derived types thereof):&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;
   &lt;o:p&gt;
      &lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
   &lt;/o:p&gt;
   &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;DataSet,&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;DataTable (including
   detached tables), 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;DataRow/DataRow[]/DataRowCollection
   (attached rows only), 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;DataView (including
   DataViews over detached tables), 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;DataRowView/DataRowView[]
   (attached rows only), 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;DataViewManager, 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;Exception,&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;XPathNavigator, 
   &lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;types implementing
   IXPathNavigable,&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;well-formed XML
   in strings,&lt;o:p&gt;&lt;/o:p&gt;
   &lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;any XML-serializable
   type&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;To give you a
   better idea, here are&amp;nbsp;some screenshots of XMLVIZ in action:&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;font color=#000000&gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"&gt;
   &lt;img src="http://www.gotdotnet.com/workspaces/customization/images.aspx?fileId=2a2fcc60-8503-4b0e-b097-f3780746f0ce&amp;amp;id=01f2f983-298f-4167-b52a-d11b76f3ea62&amp;amp;flg=1"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.gotdotnet.com/workspaces/customization/images.aspx?fileId=6e40a00c-234f-4ef8-bb42-74a61a96b480&amp;amp;id=01f2f983-298f-4167-b52a-d11b76f3ea62&amp;amp;flg=1"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.gotdotnet.com/workspaces/customization/images.aspx?fileId=ee20eae8-245b-4051-aa47-127d8e13ed3c&amp;amp;id=01f2f983-298f-4167-b52a-d11b76f3ea62&amp;amp;flg=1"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.gotdotnet.com/workspaces/customization/images.aspx?fileId=e3894545-4041-4245-beea-1b95d49bf876&amp;amp;id=01f2f983-298f-4167-b52a-d11b76f3ea62&amp;amp;flg=1"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.gotdotnet.com/workspaces/customization/images.aspx?fileId=52e4b733-90b2-46d1-8569-c295fc50f1f3&amp;amp;id=01f2f983-298f-4167-b52a-d11b76f3ea62&amp;amp;flg=1"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.gotdotnet.com/workspaces/customization/images.aspx?fileId=43853110-028e-4dfd-a1ed-d8f71ac31431&amp;amp;id=01f2f983-298f-4167-b52a-d11b76f3ea62&amp;amp;flg=1"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.gotdotnet.com/workspaces/customization/images.aspx?fileId=0d6989d7-15bb-4312-b267-262e88eb7054&amp;amp;id=01f2f983-298f-4167-b52a-d11b76f3ea62&amp;amp;flg=1"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.gotdotnet.com/workspaces/customization/images.aspx?fileId=f2511ba6-56e5-40f1-85fa-ddf0c8b63f09&amp;amp;id=01f2f983-298f-4167-b52a-d11b76f3ea62&amp;amp;flg=1"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.gatosoft.com/aggbug.ashx?id=d296c5d9-4a75-4dd3-92e2-abd2c82810e3" /&gt;</content>
  </entry>
</feed>