<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://mattonsoftware.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>mattonsoftware.com : .NET, Tools</title><link>http://mattonsoftware.com/archive/tags/.NET/Tools/default.aspx</link><description>Tags: .NET, Tools</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>PPUtil: A Utility for Publisher Policy Generation</title><link>http://mattonsoftware.com/archive/2007/03/11/pputil-a-utility-for-publisher-policy-generation.aspx</link><pubDate>Sun, 11 Mar 2007 09:23:00 GMT</pubDate><guid isPermaLink="false">6209d34a-f29a-4dc5-b4bf-33cf47346ec7:685</guid><dc:creator>matt</dc:creator><slash:comments>32</slash:comments><comments>http://mattonsoftware.com/comments/685.aspx</comments><wfw:commentRss>http://mattonsoftware.com/commentrss.aspx?PostID=685</wfw:commentRss><description>&lt;p&gt;The &lt;a href="http://msdn2.microsoft.com/en-us/library/dz32563a.aspx" class=""&gt;conventional method&lt;/a&gt;
of creating publisher policy (PP) assemblies becomes cumbersome when
dealing with many assemblies, and many earlier versions of assemblies&lt;sup&gt;&lt;a href="http://mattonsoftware.com/archive/2007/03/11/pputil-a-utility-for-publisher-policy-generation.aspx#FOOTNOTE_1" class="" title="Footnote 1" target="_self"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;PPUtil is a configuration-based utility for generating PP for many
assemblies/versions. This tool was authored using .NET 2.0, however,
the resultant PP assemblies can be used with .NET 1.0/1.1-compiled
assemblies.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Binaries: &lt;a href="http://mattonsoftware.com/source/PPUtil_Binaries_v1_0_0_0.zip" class=""&gt;PPUtil_Binaries_v1_0_0_0.zip&lt;/a&gt; &lt;br&gt;&lt;/li&gt;&lt;li&gt;Source: &lt;a href="http://mattonsoftware.com/source/PPUtil_Source_v1_0_0_0.zip" class=""&gt;PPUtil_Source_v1_0_0_0.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/" rel="license"&gt;Creative Commons Attribution 3.0 License&lt;/a&gt;.&lt;br&gt;
&lt;p&gt;&lt;b&gt;Usage&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;PPUtil configurationFile outputDirectory&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Common Usage Scenarios&amp;nbsp;&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Redirect a specific earlier version of an assembly to a later version;&lt;/li&gt;&lt;li&gt;Redirect a range of earlier versions of an assembly to a later version.&lt;/li&gt;&lt;/ul&gt;
In both scenarios, resolution of the redirection for the earlier assembly
versions is limited to major/minor version combinations i.e. build and revision numbers are not considered. This is due to the design of the
publisher policy mechanism itself.&amp;nbsp; &lt;p&gt;&lt;b&gt;Configuration Examples&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Redirect a specific earlier version of an assembly to a later version&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Use the oldVersion attribute of the bindingRedirect element to
specify the specific earlier version to redirect from. The major/minor
component of the oldVersion will typically correspond to the
oldMajorMinorVersion attribute of the publisherPolicy element.&lt;br&gt;&lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicy&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;assemblies&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;assembly&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;SampleAssembly&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;publicKeyToken&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;baa3201a127d8068&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;strongNameKeyPath&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;SampleKey.snk&lt;/span&gt;"&lt;span style="color:blue;"&gt; &amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt; &lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicies&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicy&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;oldMajorMinorVersion&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1.0.0.0&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt; &lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;bindingRedirect&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;color:red;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;oldVersion&lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;color:blue;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;=&lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;"&lt;span style="color:blue;"&gt;1.0.0.0&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;newVersion&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1.1.0.0&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt; &lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicy&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicies&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;assembly&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;br&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;assemblies&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp; &lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&lt;/span&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicy&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;/span&gt; &lt;/p&gt;
&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;i&gt;Redirect a range of earlier versions of an assembly to a later version&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Use the oldLowestVersion and oldHighestVersion attributes of the
bindingRedirect element to specify the range of earlier versions to
redirect from.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicy&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;assemblies&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;assembly&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;SampleAssembly&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; publicKeyToken&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;baa3201a127d8068&lt;/span&gt;"&lt;span&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;strongNameKeyPath&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;SampleKey.snk&lt;/span&gt;"&lt;span&gt; &amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicies&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicy&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;oldMajorMinorVersion&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;2.0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;2.0.0.0&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;bindingRedirect&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;color:red;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;oldLowestVersion&lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;color:blue;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;=&lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;"&lt;span style="color:blue;"&gt;2.0.0.0&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;color:red;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;color:red;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;oldHighestVersion&lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;color:blue;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;=&lt;/span&gt;&lt;span style="background:lime none repeat scroll 0% 50%;font-size:10pt;font-family:'Courier New';-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;"&lt;span style="color:blue;"&gt;2.1.0.9&lt;/span&gt;"&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;newVersion&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;2.2.0.0&lt;/span&gt;"&lt;span&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicy&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicies&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;assembly&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;assemblies&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;span&gt;&lt;br&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;publisherPolicy&lt;/span&gt;&amp;gt;&lt;/p&gt;
&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;
&lt;p&gt;&lt;b&gt;Tips&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The provided configuration file must include a configuration
section declaration for the publisherPolicy configuration section, as
follows. The utility will also detect the absence of this declaration
and prompt the user accordingly.&lt;/li&gt;&lt;/ul&gt;

&lt;blockquote&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;configuration&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;configSections&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;section&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;color:red;font-family:'Courier New';"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;publisherPolicy&lt;/span&gt;"&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;span style="color:red;"&gt; type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;PublisherPolicyTool.Configuration.PublisherPolicyConfigurationSection, PPUtil&lt;/span&gt;"&lt;span&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;configSections&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;br&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;color:maroon;font-family:'Courier New';"&gt;configuration&lt;/span&gt;&amp;gt; &lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/blockquote&gt;

&lt;ul&gt;&lt;li&gt;The PP assembly itself is versioned. When there are multiple
versions of a&amp;nbsp;PP assembly available, the version with the highest
number is used. In .NET 1.0/1.1 a bug exists in the assembly loader
whereby when determining the&amp;nbsp;PP assembly with the highest number, &lt;a href="http://blogs.msdn.com/junfeng/archive/2005/12/16/504555.aspx" class=""&gt;the version numbers are sorted in alphabetic order, rather than numeric order&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;The same strong name key used to sign the assembly the PP applies to must be used to sign the PP assembly;&lt;/li&gt;&lt;li&gt;When GACing a PP assembly, the generated PP configuration file must reside in the same folder as the PP assembly;&lt;/li&gt;&lt;li&gt;To diagnose binding issues, the binding resolution can be traced using fuslogw or &lt;a href="http://blogs.msdn.com/suzcook/archive/2003/05/29/57120.aspx" class=""&gt;output to disk by modifying registry values&lt;/a&gt;;&lt;/li&gt;&lt;/ul&gt;
&lt;b&gt;Acknowledgments&lt;/b&gt; 
&lt;p&gt;The idea of using the managed assembly builder APIs for PP generation was derived from &lt;a href="http://weblogs.asp.net/okloeten/archive/2004/02/24/79143.aspx" class=""&gt;Omers publisher policy generation sample&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Footnotes&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class="" title="FOOTNOTE_1" name="FOOTNOTE_1"&gt;&lt;/a&gt;1:
Generating&amp;nbsp;PP involves specifying the old version (major and minor
version number resolution) of an assembly that the binding policy
within the PP assembly will be applied to. The old version corresponds
to an earlier version of an assembly that is referenced by dependent
assemblies. &lt;br&gt;&lt;/p&gt;&lt;img src="http://mattonsoftware.com/aggbug.aspx?PostID=685" width="1" height="1"&gt;</description><category domain="http://mattonsoftware.com/archive/tags/.NET/default.aspx">.NET</category><category domain="http://mattonsoftware.com/archive/tags/Tools/default.aspx">Tools</category><category domain="http://mattonsoftware.com/archive/tags/PublisherPolicy/default.aspx">PublisherPolicy</category></item><item><title>LibCheck: Highlight Public API Differences Between Assembly Revisions</title><link>http://mattonsoftware.com/archive/2006/09/28/21.aspx</link><pubDate>Thu, 28 Sep 2006 13:50:00 GMT</pubDate><guid isPermaLink="false">6209d34a-f29a-4dc5-b4bf-33cf47346ec7:21</guid><dc:creator>matt</dc:creator><slash:comments>1528</slash:comments><comments>http://mattonsoftware.com/comments/21.aspx</comments><wfw:commentRss>http://mattonsoftware.com/commentrss.aspx?PostID=21</wfw:commentRss><description>&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=4b5b7f29-1939-4e5b-a780-70e887964165&amp;amp;displaylang=en"&gt;LibCheck&lt;/a&gt; is an assembly comparison tool that:&lt;br&gt;&lt;br&gt;&lt;i&gt;"... allows you to compare two versions of an assembly, and determine the differences. The tool reports the differences as a combination of 'removed' and 'added' APIs."&lt;/i&gt;&lt;br&gt;&lt;br&gt;The comparison results present:&lt;br&gt;&lt;ul&gt;&lt;li&gt;"removed" items: the original member has been either removed or modified;&lt;/li&gt;&lt;li&gt;"added" items: member has been added to the new version, or is a modified form of an original member;&lt;/li&gt;&lt;li&gt;breaking changes highlighted in red.&lt;/li&gt;&lt;/ul&gt;The following example compares two versions of an assembly.&lt;br&gt;&lt;br&gt;&lt;b&gt;Generating Metadata for Comparison&lt;/b&gt;&lt;br&gt;&lt;br&gt;libcheck.exe -store &lt;i&gt;AssemblyName FolderNameToStoreResults &lt;/i&gt;-full &lt;i&gt;FolderContainingAssembly&lt;/i&gt;&lt;br&gt;&lt;br&gt;For example:&lt;br&gt;&lt;br&gt;&amp;nbsp; libcheck.exe -store HelloWorld.dll 1.0.0.0 -full C:\HelloWorldV1\&lt;br&gt;&lt;br&gt;&amp;nbsp; libcheck.exe -store HelloWorld.dll 2.0.0.0 -full C:\HelloWorldV2\&lt;br&gt;&lt;br&gt;&lt;b&gt;Performing the Comparison&lt;/b&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; libcheck.exe -compare &lt;i&gt;FolderContainingFirstStoreResults FolderContainingSecondStoreResults &lt;/i&gt;&lt;br&gt;&lt;br&gt;For example:&lt;br&gt;&lt;br&gt;&amp;nbsp; libcheck.exe -compare 1.0.0.0 2.0.0.0 &lt;br&gt;&lt;br&gt;Here is an &lt;a HREF="/examples/libcheck/APIChanges1.0.0.0to2.0.0.0.html"&gt;example comparison report&lt;/a&gt;.&lt;br&gt;&lt;img src="http://mattonsoftware.com/aggbug.aspx?PostID=21" width="1" height="1"&gt;</description><category domain="http://mattonsoftware.com/archive/tags/.NET/default.aspx">.NET</category><category domain="http://mattonsoftware.com/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Debugging Production Applications using ADPlus</title><link>http://mattonsoftware.com/archive/2006/09/21/debugging-production-applications-using-adplus.aspx</link><pubDate>Fri, 22 Sep 2006 03:02:00 GMT</pubDate><guid isPermaLink="false">6209d34a-f29a-4dc5-b4bf-33cf47346ec7:20</guid><dc:creator>matt</dc:creator><slash:comments>931</slash:comments><comments>http://mattonsoftware.com/comments/20.aspx</comments><wfw:commentRss>http://mattonsoftware.com/commentrss.aspx?PostID=20</wfw:commentRss><description>&lt;p&gt;ADPlus is used to take snapshots of processes in&amp;nbsp;environments where development-time debugging tools are not available e.g. Production server farms, end-users workstations. ADPlus is a Visual Basic&amp;nbsp;script provided as part of the Debugging Tools for Windows&amp;nbsp;that wraps the CDB debugger. &lt;/p&gt;

&lt;p&gt;Snapshots of processes&amp;nbsp;taken with ADPlus are analysed using the Windows Debugger (WinDbg). Managed processes in particular are analysed using SOS.dll, which contains extensions to WinDbg for debugging managed processes.&lt;/p&gt;&lt;p&gt;Practical applications include taking snapshots of&amp;nbsp;WinForms and
ASP.NET&amp;nbsp;processes to interrogate unhandled exceptions, memory
utilisation, resource contention etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installing Debugging Tools for Windows in Target Environment&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx"&gt;debugging tools&lt;/a&gt;; 
&lt;/li&gt;&lt;li&gt;XCOPY deploy to target environment; 
&lt;/li&gt;&lt;li&gt;Create a folder to store snapshots; 
&lt;/li&gt;&lt;li&gt;Set CScript as the default scripting engine (required by ADPlus, also requires Windows Script Host 5.6 or higher, interrogate version using CSCRIPT /? command)&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote dir="ltr"&gt;
&lt;p&gt;CSCRIPT /H:CScript&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Taking a Snapshop using ADPlus&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The following&amp;nbsp;examples demonstrate&amp;nbsp;taking a snapshot of a WinForms process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Via process id&lt;br&gt;ADPlus.vbs -c ADPlus_Config.xml -p 968&lt;br&gt;
&lt;/li&gt;&lt;li&gt;Via process name&lt;br&gt;ADPlus.vbs -c ADPlus_Config.xml -pn HelloWorldGUI.exe&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Note that ADPlus will warn that the _NT_SYMBOL_PATH environment variable is not set. This is ok&amp;nbsp;as the environment variable&amp;nbsp;is not required for taking snapshots, however, it is required for analysing the snapshot later.&lt;/p&gt;
&lt;p&gt;The following example ADPlus_Config.xml file configures ADPlus for Hang mode (hang mode instructs ADPlus to take the&amp;nbsp;snapshot immediately,&amp;nbsp;crash mode is another option that attaches the debugger to the process, then waits for process to exit before generating the snapshot):&lt;/p&gt;
&lt;p&gt;&amp;lt;ADPlus&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Settings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RunMode&amp;gt;&lt;strong&gt;HANG&lt;/strong&gt;&amp;lt;/RunMode&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Option&amp;gt;Quiet&amp;lt;/Option&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;OutputDir&amp;gt; &lt;strong&gt;C:\Snapshots&lt;/strong&gt; &amp;lt;/OutputDir&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Settings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Load sos.dll --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;PreCommands&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Cmd&amp;gt; .load C:\Program Files\Debugging Tools for Windows\clr10\sos.dll &amp;lt;/Cmd&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/PreCommands&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Exceptions&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Do a unique mini dump with full heap on every --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- first chance exception.&amp;nbsp;--&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Config&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Code&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AllExceptions&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Code&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Actions1&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FullDump;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Actions1&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ReturnAction1&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ReturnAction1&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Config&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Exceptions&amp;gt;&lt;br&gt;&amp;lt;/ADPlus&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using WinDBG and SOS.dll&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install debugging tools; 
&lt;/li&gt;&lt;li&gt;Add installation location to PATH environment variable; 
&lt;/li&gt;&lt;li&gt;Create a folder to store symbols; 
&lt;/li&gt;&lt;li&gt;Add new environment variable, referencing the symbols folder:&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote dir="ltr"&gt;
&lt;p&gt;Name: _NT_SYMBOL_PATH&lt;br&gt;Value: SRV*&lt;strong&gt;c:\temp\symbols&lt;/strong&gt;* &lt;a href="http://msdl.microsoft.com/download/symbols"&gt;http://msdl.microsoft.com/download/symbols&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This setting is used by WinDbg to dynamically download symbols (pdb files) on demand.&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Launch WinDbg.exe; 
&lt;/li&gt;&lt;li&gt;Open the snapshot using File --&amp;gt;&amp;nbsp;Open Crash Dump; 
&lt;/li&gt;&lt;li&gt;Load SOS.dll by entering the following command: &lt;/li&gt;&lt;/ul&gt;
&lt;blockquote dir="ltr"&gt;
&lt;p&gt;.load C:\Program Files\Debugging Tools for Windows\clr10\sos.dll&lt;/p&gt;&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;Useful WinDbg/SOS.dll commands are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;!help (all available commands)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!help &amp;lt;functionname&amp;gt; (help on provided function)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!clrstack (shows managed stack)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!dae (dumps all managed exceptions, noting that instances of ExecutionEngineException, StackOverflowException and OutOfMemoryException&amp;nbsp; are normal)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!EEStack (shows full stack trace, including managed and unmanaged calls)&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div&gt;!do (dump object, including fields) &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Further Information&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q286350"&gt;How to use ADPlus to troubleshoot "hangs" and "crashes"&lt;/a&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/DBGrm.asp"&gt;Production Debugging for .NET Framework Applications&lt;/a&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/05/03/Bugslayer/"&gt;Mini Dump Snapshots and the New SOS&lt;/a&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://blogs.msdn.com/tess/archive/2005/11/30/498297.aspx"&gt;Tips on Debugging Managed Exceptions with ADPlus and WinDbg&lt;/a&gt;&lt;/p&gt;&lt;img src="http://mattonsoftware.com/aggbug.aspx?PostID=20" width="1" height="1"&gt;</description><category domain="http://mattonsoftware.com/archive/tags/.NET/default.aspx">.NET</category><category domain="http://mattonsoftware.com/archive/tags/Tools/default.aspx">Tools</category><category domain="http://mattonsoftware.com/archive/tags/Debugging/default.aspx">Debugging</category></item></channel></rss>