<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>ApiChange</title><link>http://apichange.codeplex.com/project/feeds/rss</link><description>ApiChange is the Swiss army knife for inspecting your assemblies from the command line. Now you can do basic operations like diff, who uses &amp;#40;method, field, event, ...&amp;#41; and more utility methods. This tool is for everybody who wants to control their Api usage and consistency.</description><item><title>New Post: DiffPrinter.Print internal?</title><link>http://apichange.codeplex.com/discussions/247099</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;Yes it is an error that the class is public. I did not want to make the diff format static for all times from now on. You can of course copy the code of DiffPrinter which is rather simple. I am sure there are better ways to represent a diff but it does the job.&lt;/p&gt;
&lt;p&gt;
&lt;div style="color: black; background-color: white;"&gt;
&lt;pre&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; DiffPrinter
    {
        TextWriter Out;

        &lt;span style="color: gray;"&gt;///&lt;/span&gt; &lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Print diffs to console&lt;/span&gt;
        &lt;span style="color: gray;"&gt;///&lt;/span&gt; &lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; DiffPrinter()
        {
            Out = Console.Out;
        }

        &lt;span style="color: gray;"&gt;///&lt;/span&gt; &lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Initializes a new instance of the &amp;lt;see cref="DiffPrinter"/&amp;gt; class.&lt;/span&gt;
        &lt;span style="color: gray;"&gt;///&lt;/span&gt; &lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color: gray;"&gt;///&lt;/span&gt; &lt;span style="color: gray;"&gt;&amp;lt;param name="outputStream"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The output stream to print the change diff.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color: blue;"&gt;public&lt;/span&gt; DiffPrinter(TextWriter outputStream)
        {
            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (outputStream == &lt;span style="color: blue;"&gt;null&lt;/span&gt;)
            {
                &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span style="color: #a31515;"&gt;"outputStream"&lt;/span&gt;);
            }

            Out = outputStream;
        }

        &lt;span style="color: blue;"&gt;internal&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Print(AssemblyDiffCollection diff)
        {
            PrintAddedRemovedTypes(diff.AddedRemovedTypes);

            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (diff.ChangedTypes.Count &amp;gt; 0)
            {
                &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; typeChange &lt;span style="color: blue;"&gt;in&lt;/span&gt; diff.ChangedTypes)
                {
                    PrintTypeChanges(typeChange);
                }
            }
        }

        &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; PrintTypeChanges(TypeDiff typeChange)
        {
            Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t"&lt;/span&gt; + typeChange.TypeV1.Print());
            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (typeChange.HasChangedBaseType)
            {
                Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\tBase type changed: {0} -&amp;gt; {1}"&lt;/span&gt;, 
                    typeChange.TypeV1.IsNotNull( () =&amp;gt; 
                        typeChange.TypeV1.BaseType.IsNotNull( () =&amp;gt; typeChange.TypeV1.BaseType.FullName)),
                    typeChange.TypeV2.IsNotNull(()=&amp;gt; 
                        typeChange.TypeV2.BaseType.IsNotNull( () =&amp;gt; typeChange.TypeV2.BaseType.FullName))
                );
            }

            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (typeChange.Interfaces.Count &amp;gt; 0)
            {
                &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; addedItf &lt;span style="color: blue;"&gt;in&lt;/span&gt; typeChange.Interfaces.Added)
                {
                    Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t+ interface: {0}"&lt;/span&gt;, addedItf.ObjectV1.FullName);
                }
                &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; removedItd &lt;span style="color: blue;"&gt;in&lt;/span&gt; typeChange.Interfaces.Removed)
                {
                    Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t- interface: {0}"&lt;/span&gt;, removedItd.ObjectV1.FullName);
                }
            }

            &lt;span style="color: blue;"&gt;foreach&lt;/span&gt;(&lt;span style="color: blue;"&gt;var&lt;/span&gt; addedEvent &lt;span style="color: blue;"&gt;in&lt;/span&gt; typeChange.Events.Added)
            {
                Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t+ {0}"&lt;/span&gt;, addedEvent.ObjectV1.Print());
            }

            &lt;span style="color: blue;"&gt;foreach&lt;/span&gt;(&lt;span style="color: blue;"&gt;var&lt;/span&gt; remEvent &lt;span style="color: blue;"&gt;in&lt;/span&gt; typeChange.Events.Removed)
            {
                Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t- {0}"&lt;/span&gt;, remEvent.ObjectV1.Print());
            }

            &lt;span style="color: blue;"&gt;foreach&lt;/span&gt;(&lt;span style="color: blue;"&gt;var&lt;/span&gt; addedField &lt;span style="color: blue;"&gt;in&lt;/span&gt; typeChange.Fields.Added)
            {
                Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t+ {0}"&lt;/span&gt;, addedField.ObjectV1.Print(FieldPrintOptions.All));
            }

            &lt;span style="color: blue;"&gt;foreach&lt;/span&gt;(&lt;span style="color: blue;"&gt;var&lt;/span&gt; remField &lt;span style="color: blue;"&gt;in&lt;/span&gt; typeChange.Fields.Removed)
            {
                Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t- {0}"&lt;/span&gt;, remField.ObjectV1.Print(FieldPrintOptions.All));
            }

            &lt;span style="color: blue;"&gt;foreach&lt;/span&gt;(&lt;span style="color: blue;"&gt;var&lt;/span&gt; addedMethod &lt;span style="color: blue;"&gt;in&lt;/span&gt; typeChange.Methods.Added)
            {
                Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t+ {0}"&lt;/span&gt;, addedMethod.ObjectV1.Print(MethodPrintOption.Full));
            }

            &lt;span style="color: blue;"&gt;foreach&lt;/span&gt;(&lt;span style="color: blue;"&gt;var&lt;/span&gt; remMethod &lt;span style="color: blue;"&gt;in&lt;/span&gt; typeChange.Methods.Removed)
            {
                Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t- {0}"&lt;/span&gt;, remMethod.ObjectV1.Print(MethodPrintOption.Full));
            }
        }

        &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; PrintAddedRemovedTypes(DiffCollection&amp;lt;Mono.Cecil.TypeDefinition&amp;gt; diffCollection)
        {
            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (diffCollection.RemovedCount &amp;gt; 0)
            {
                Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\tRemoved {0} public type/s"&lt;/span&gt;, diffCollection.RemovedCount);
                &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; remType &lt;span style="color: blue;"&gt;in&lt;/span&gt; diffCollection.Removed)
                {
                    Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t- {0}"&lt;/span&gt;, remType.ObjectV1.Print());
                }
            }

            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (diffCollection.AddedCount &amp;gt; 0)
            {
                Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\tAdded {0} public type/s"&lt;/span&gt;, diffCollection.AddedCount);
                &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; addedType &lt;span style="color: blue;"&gt;in&lt;/span&gt; diffCollection.Added)
                {
                    Out.WriteLine(&lt;span style="color: #a31515;"&gt;"\t\t+ {0}"&lt;/span&gt;, addedType.ObjectV1.Print());
                }
            }
        }
    }
&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;&lt;/div&gt;</description><author>alois</author><pubDate>Tue, 05 Apr 2011 21:07:45 GMT</pubDate><guid isPermaLink="false">New Post: DiffPrinter.Print internal? 20110405090745P</guid></item><item><title>Updated Wiki: WhoUsesMethod</title><link>http://apichange.codeplex.com/wikipage?title=WhoUsesMethod&amp;version=5</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Purpose&lt;/h1&gt;This is one of the most popular commands to find all callers of one or many methods. To make it easy you do not have to enter the full method declaration and type name at the command line. Instead a query approach is used to select from a set of assemblies a set of types and from there a set of methods which are matched against the respective file, type and method query. Once the exact type reference is resolved you can search with the -in clause a set of assemblies for callers of the previously found methods.&lt;br /&gt;
&lt;h1&gt;Parameters&lt;/h1&gt;-WhousesMethod &amp;lt;typemethodquery&amp;gt; &amp;lt;declaring file/s&amp;gt; -in &amp;lt;using file/s&amp;gt;&lt;br /&gt;or &lt;br /&gt;-wm &amp;lt;typemethodquery&amp;gt; &amp;lt;declaring file/s&amp;gt; -in &amp;lt;using file/s&amp;gt;&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Example&lt;/h1&gt;Who is using the Stopwatch Seek Method within the .Net Framework?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ApiChange -whousesmethod &amp;quot;Stopwatch(* Start())&amp;quot; $net2dir\System.dll -in $net2 -excel&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=125457" alt="Excel&amp;#32;output" title="Excel&amp;#32;output" /&gt;&lt;br /&gt;&lt;br /&gt;The expression &amp;quot;Stopwatch(* Start())&amp;quot; is a combined type and method query. The first is a type query. It can be a fully qualified type name or only the type name. The match is done case insensitive. It is generally of the form &lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;&amp;lt;Visibility&amp;gt; &amp;lt;ClrType&amp;gt; &amp;lt;TypeName&amp;gt;&lt;/b&gt;&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Visibility can be &lt;b&gt;public&lt;/b&gt; | &lt;b&gt;internal&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;ClrType can be &lt;b&gt;class&lt;/b&gt; | &lt;b&gt;interface&lt;/b&gt; | &lt;b&gt;struct&lt;/b&gt; | &lt;b&gt;enum&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;TypeName is the full qualified type name or a partial name or only a namespace query. The string after the last . is treated as the actual type name.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Valid Type Queries are
&lt;ul&gt;&lt;li&gt;System.Diagnostics.Stopwatch&lt;/li&gt;
&lt;li&gt;Stopwatch&lt;/li&gt;
&lt;li&gt;stopwatch&lt;/li&gt;
&lt;li&gt;stopw*&lt;/li&gt;
&lt;li&gt;System.*.Stopwatch&lt;/li&gt;
&lt;li&gt;public class *&lt;/li&gt;&lt;/ul&gt;
...&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Tue, 05 Apr 2011 20:52:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: WhoUsesMethod 20110405085201P</guid></item><item><title>New Post: DiffPrinter.Print internal?</title><link>http://apichange.codeplex.com/discussions/247099</link><description>&lt;div style="line-height: normal;"&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;I've tried to use the DiffPrinter from my project directly. However, its Print method is internal. Why? The DiffPrinter itself is public but has no public methods - rather useless. Or am I missing something?&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;/div&gt;</description><author>dradovic</author><pubDate>Tue, 22 Feb 2011 18:19:40 GMT</pubDate><guid isPermaLink="false">New Post: DiffPrinter.Print internal? 20110222061940P</guid></item><item><title>Reviewed: ApiChange v1.0.0.1 with improved tracing (Feb 22, 2011)</title><link>http://apichange.codeplex.com/releases/view/49256#ReviewBy-dradovic</link><description>Rated 5 Stars &amp;#40;out of 5&amp;#41; - Does exactly the job that I was looking for&amp;#33; We will include in our automatic testing to check that we did not break an API accidentally.&amp;#10;&amp;#10;Thank you very much for sharing this&amp;#33;&amp;#33;&amp;#33;</description><author>dradovic</author><pubDate>Tue, 22 Feb 2011 17:08:25 GMT</pubDate><guid isPermaLink="false">Reviewed: ApiChange v1.0.0.1 with improved tracing (Feb 22, 2011) 20110222050825P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://apichange.codeplex.com/documentation?version=14</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Installation&lt;/h1&gt;The zip file can be deployed anywhere via XCopy deployment. No Installation steps are required. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;.NET Framework 3.5&lt;/li&gt;
&lt;li&gt;Windows XP or better.&lt;/li&gt;
&lt;li&gt;(optional) MS Excel 2003 or better if you want to have Excel output.&lt;/li&gt;
&lt;li&gt;(optional) symchk.exe in your path if you want to use the pdb download functionality. symchk.exe is part of the Windbg package.&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Command Reference&lt;/h1&gt;&lt;h2&gt;Query And Search&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoUsesMethod&amp;referringTitle=Documentation"&gt;Who Uses Method&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoUsesType&amp;referringTitle=Documentation"&gt;Who Uses Type&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoImplementsInterface&amp;referringTitle=Documentation"&gt;Who Implements Interface&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhousesField&amp;referringTitle=Documentation"&gt;Who Uses Field&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhousesEvent&amp;referringTitle=Documentation"&gt;Who Uses Event&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoUsesString&amp;referringTitle=Documentation"&gt;Who Uses String Literal&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoReferences&amp;referringTitle=Documentation"&gt;Who References This Assembly&amp;#63;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Utility Commands&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=Diff&amp;referringTitle=Documentation"&gt;Api Diff Between Assemblies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=Corflags&amp;referringTitle=Documentation"&gt;Get PE Infos &amp;#40;32&amp;#47;64 bit, Managed C&amp;#43;&amp;#43;&amp;#63;&amp;#41;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=GetPdbs&amp;referringTitle=Documentation"&gt;Download Pdbs From Symbol Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=ShowStrongName&amp;referringTitle=Documentation"&gt;Show Strong Name&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=ShowRebuildTargets&amp;referringTitle=Documentation"&gt;Show Affected Assemblies&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Supporters&lt;/h2&gt;ApiChange has been designed with top performance in mind. With the YourKit Memory and Performance profiler no glaring &lt;br /&gt;performance inefficiencies can hide in its code base.&lt;br /&gt;&lt;br /&gt;YourKit is kindly supporting open source projects with its full-featured Java Profiler.&lt;br /&gt;YourKit, LLC is the creator of innovative and intelligent tools for profiling .NET and Java applications. Take a look at YourKit&amp;#39;s leading software products:&lt;br /&gt;&lt;a href="http://www.yourkit.com/.net/profiler/index.jsp" class="externalLink"&gt;YourKit .NET Profiler&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://www.yourkit.com/java/profiler/index.jsp" class="externalLink"&gt;YourKit Java Profiler&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;First steps&lt;/h1&gt;Start ApiChange.exe from the directory where you did unzip it. It is recommended to set the Console window width to &lt;b&gt;300 characters&lt;/b&gt; to see the command line help nicely formatted..&lt;br /&gt;&lt;br /&gt;The command line syntax is a bit awkward but powerful. It is basically a pipeline of queries to find the relevant things. The file selection is done by file queries the type and method selection is done by type and method queries. Most commands are of the form&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ApiChange &amp;lt;Find Something&amp;gt; -in &amp;lt;Search for matches in these files&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The &amp;lt;Find Something&amp;gt; is a fuzzy query to select one or more types or methods from one or more assemblies. If you see a cryptic command line like &lt;br /&gt;
&lt;h4&gt;ApiChange -whousesmethod &amp;quot;String(* IndexOf(*))&amp;quot; gac:\mscorlib.dll -in $net35 -excel&lt;/h4&gt;
&lt;br /&gt;you can read it like this:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Load mscorlib.dll from the Global Assembly Cache. This is a file query which you will see very often.&lt;/li&gt;
&lt;li&gt;Load from mscorlib all types which match as type name String. It is actually a type query which can be fuzzy.&lt;/li&gt;
&lt;li&gt;For each type match select any overload of IndexOf. I have inserted * as placeholders for return type and method arguments to get all overloads.&lt;/li&gt;&lt;/ol&gt;
&lt;br /&gt;The following example shows you can track the usage of all String.Index method calls inside the .NET Framework. From there it is easy to make pivot tables to get valuable insights how the code base is really structured and where the hot users are located.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=124845" alt="Example&amp;#32;Excel&amp;#32;Output" title="Example&amp;#32;Excel&amp;#32;Output" /&gt; &lt;br /&gt;&lt;br /&gt;Once you have this list you can generate a graph which assembly uses the String.IndexOf methods most of the time:&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=124847" alt="String.IndexOf&amp;#32;Usage" title="String.IndexOf&amp;#32;Usage" /&gt;&lt;br /&gt;&lt;br /&gt;Now you can get all sort of interesting things out. E.g. you can check how the overload usage distribution of the String.IndexOf methods is&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=124846" alt="String&amp;#32;IndexOf&amp;#32;Distribution" title="String&amp;#32;IndexOf&amp;#32;Distribution" /&gt;&lt;br /&gt;
&lt;h3&gt;Source File/Line Number&lt;/h3&gt;
When you have the pdbs for the assemblies at hand the tool will try to resolve the file and line information for all found matches so you can directly junp to your source file from the excel output:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=124981" alt="Source&amp;#32;Code&amp;#32;Links" title="Source&amp;#32;Code&amp;#32;Links" /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Examples:&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;Download the pdbs for the given binaries from Microsoftsymbol server.
&lt;ul&gt;&lt;li&gt;    ApiChange -getpdbs $net2 c:\net2pdbs&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Who references System.dll
&lt;ul&gt;&lt;li&gt; ApiChange -whoreferences $net2dir\System.dll -in $net2&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Who references System.Configuration.dll located in the GAC.
&lt;ul&gt;&lt;li&gt; ApiChange -whoreferences gac:\system.configuration.dll -in C:\Windows\Microsoft.NET\Framework\v2.0.50727\*.dll&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Check after building a dll into the NewDll folder for breaking changes and list all affected targets which need potentially a rebuild.
&lt;ul&gt;&lt;li&gt;   ApiChange -showrebuildtargets -new NewBuild\*.dll -old v1.0\*.dll -searchin v1.0\*.dll -cwd \ProjectDir&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Find all users of e.g an enum type. It can find practically all enum usage locatons (if,switch case, ...). Locations where the enum is casted to e.g. an int cannot be found (e.g. int v=(int) xxx) because the compiler assigns simply the value to it.
&lt;ul&gt;&lt;li&gt;   ApiChange -whousestype &amp;quot;public enum System.IO.FileShare&amp;quot; $net2dir\mscorlib.dll -in $net2 -excel&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Check who is using all non constant public fields. Note: Const fields are never used directly. The compiler embeds the const value directly into the target location which makes it impossible to track the usage of const values inside IL code. Instead a source code search should be performed. In case of enums you can track their usage with a -whousestype query to find all enum instance declarations.
&lt;ul&gt;&lt;li&gt;   ApiChange -whousesfield &amp;quot;*(public !const * *)&amp;quot; $net2dir\mscorlib.dll -in $net2 -excel&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Search for subscribers/unsubscribers from all public types with public events. To check for imbalances you can add the -imbalance switch.
&lt;ul&gt;&lt;li&gt;   ApiChange -whousesevent &amp;quot;public *(public event * *)&amp;quot; GAC:\System.Windows.Forms.dll -in $net2 -excel&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Search for users of the null string constant. It does search simply for null as substring (case insensitive) in all string constants in all files.
&lt;ul&gt;&lt;li&gt;   ApiChange -ws null -in $net2 -excel&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Thu, 09 Sep 2010 14:04:10 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20100909020410P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://apichange.codeplex.com/documentation?version=13</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Installation&lt;/h1&gt;The zip file can be deployed anywhere via XCopy deployment. No Installation steps are required. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;.NET Framework 3.5&lt;/li&gt;
&lt;li&gt;Windows XP or better.&lt;/li&gt;
&lt;li&gt;(optional) MS Excel 2003 or better if you want to have Excel output.&lt;/li&gt;
&lt;li&gt;(optional) symchk.exe in your path if you want to use the pdb download functionality. symchk.exe is part of the Windbg package.&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Command Reference&lt;/h1&gt;&lt;h2&gt;Query And Search&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoUsesMethod&amp;referringTitle=Documentation"&gt;Who Uses Method&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoUsesType&amp;referringTitle=Documentation"&gt;Who Uses Type&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoImplementsInterface&amp;referringTitle=Documentation"&gt;Who Implements Interface&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhousesField&amp;referringTitle=Documentation"&gt;Who Uses Field&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhousesEvent&amp;referringTitle=Documentation"&gt;Who Uses Event&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoUsesString&amp;referringTitle=Documentation"&gt;Who Uses String Literal&amp;#63;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=WhoReferences&amp;referringTitle=Documentation"&gt;Who References This Assembly&amp;#63;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Utility Commands&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=Diff&amp;referringTitle=Documentation"&gt;Api Diff Between Assemblies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=Corflags&amp;referringTitle=Documentation"&gt;Get PE Infos &amp;#40;32&amp;#47;64 bit, Managed C&amp;#43;&amp;#43;&amp;#63;&amp;#41;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=GetPdbs&amp;referringTitle=Documentation"&gt;Download Pdbs From Symbol Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=ShowStrongName&amp;referringTitle=Documentation"&gt;Show Strong Name&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apichange.codeplex.com/wikipage?title=ShowRebuildTargets&amp;referringTitle=Documentation"&gt;Show Affected Assemblies&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Supporters&lt;/h2&gt;ApiChange has been designed with top performance in mind. With the YourKit Memory and Performance profiler no glaring &lt;br /&gt;performance inefficiencies can hide in its code base.&lt;br /&gt;&lt;br /&gt;YourKit is kindly supporting open source projects with its full-featured Java Profiler.&lt;br /&gt;YourKit, LLC is the creator of innovative and intelligent tools for profiling .NET and Java applications. Take a look at YourKit&amp;#39;s leading software products:&lt;br /&gt;&amp;lt;a href=&amp;quot;http://www.yourkit.com/.net/profiler/index.jsp&amp;quot;&amp;gt;YourKit .NET Profiler&amp;lt;/a&amp;gt; and &amp;lt;a href=&amp;quot;http://www.yourkit.com/java/profiler/index.jsp&amp;quot;&amp;gt;YourKit Java Profiler&amp;lt;/a&amp;gt;.&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;First steps&lt;/h1&gt;Start ApiChange.exe from the directory where you did unzip it. It is recommended to set the Console window width to &lt;b&gt;300 characters&lt;/b&gt; to see the command line help nicely formatted..&lt;br /&gt;&lt;br /&gt;The command line syntax is a bit awkward but powerful. It is basically a pipeline of queries to find the relevant things. The file selection is done by file queries the type and method selection is done by type and method queries. Most commands are of the form&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ApiChange &amp;lt;Find Something&amp;gt; -in &amp;lt;Search for matches in these files&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The &amp;lt;Find Something&amp;gt; is a fuzzy query to select one or more types or methods from one or more assemblies. If you see a cryptic command line like &lt;br /&gt;
&lt;h4&gt;ApiChange -whousesmethod &amp;quot;String(* IndexOf(*))&amp;quot; gac:\mscorlib.dll -in $net35 -excel&lt;/h4&gt;
&lt;br /&gt;you can read it like this:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Load mscorlib.dll from the Global Assembly Cache. This is a file query which you will see very often.&lt;/li&gt;
&lt;li&gt;Load from mscorlib all types which match as type name String. It is actually a type query which can be fuzzy.&lt;/li&gt;
&lt;li&gt;For each type match select any overload of IndexOf. I have inserted * as placeholders for return type and method arguments to get all overloads.&lt;/li&gt;&lt;/ol&gt;
&lt;br /&gt;The following example shows you can track the usage of all String.Index method calls inside the .NET Framework. From there it is easy to make pivot tables to get valuable insights how the code base is really structured and where the hot users are located.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=124845" alt="Example&amp;#32;Excel&amp;#32;Output" title="Example&amp;#32;Excel&amp;#32;Output" /&gt; &lt;br /&gt;&lt;br /&gt;Once you have this list you can generate a graph which assembly uses the String.IndexOf methods most of the time:&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=124847" alt="String.IndexOf&amp;#32;Usage" title="String.IndexOf&amp;#32;Usage" /&gt;&lt;br /&gt;&lt;br /&gt;Now you can get all sort of interesting things out. E.g. you can check how the overload usage distribution of the String.IndexOf methods is&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=124846" alt="String&amp;#32;IndexOf&amp;#32;Distribution" title="String&amp;#32;IndexOf&amp;#32;Distribution" /&gt;&lt;br /&gt;
&lt;h3&gt;Source File/Line Number&lt;/h3&gt;
When you have the pdbs for the assemblies at hand the tool will try to resolve the file and line information for all found matches so you can directly junp to your source file from the excel output:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=124981" alt="Source&amp;#32;Code&amp;#32;Links" title="Source&amp;#32;Code&amp;#32;Links" /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Examples:&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;Download the pdbs for the given binaries from Microsoftsymbol server.
&lt;ul&gt;&lt;li&gt;    ApiChange -getpdbs $net2 c:\net2pdbs&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Who references System.dll
&lt;ul&gt;&lt;li&gt; ApiChange -whoreferences $net2dir\System.dll -in $net2&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Who references System.Configuration.dll located in the GAC.
&lt;ul&gt;&lt;li&gt; ApiChange -whoreferences gac:\system.configuration.dll -in C:\Windows\Microsoft.NET\Framework\v2.0.50727\*.dll&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Check after building a dll into the NewDll folder for breaking changes and list all affected targets which need potentially a rebuild.
&lt;ul&gt;&lt;li&gt;   ApiChange -showrebuildtargets -new NewBuild\*.dll -old v1.0\*.dll -searchin v1.0\*.dll -cwd \ProjectDir&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Find all users of e.g an enum type. It can find practically all enum usage locatons (if,switch case, ...). Locations where the enum is casted to e.g. an int cannot be found (e.g. int v=(int) xxx) because the compiler assigns simply the value to it.
&lt;ul&gt;&lt;li&gt;   ApiChange -whousestype &amp;quot;public enum System.IO.FileShare&amp;quot; $net2dir\mscorlib.dll -in $net2 -excel&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Check who is using all non constant public fields. Note: Const fields are never used directly. The compiler embeds the const value directly into the target location which makes it impossible to track the usage of const values inside IL code. Instead a source code search should be performed. In case of enums you can track their usage with a -whousestype query to find all enum instance declarations.
&lt;ul&gt;&lt;li&gt;   ApiChange -whousesfield &amp;quot;*(public !const * *)&amp;quot; $net2dir\mscorlib.dll -in $net2 -excel&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Search for subscribers/unsubscribers from all public types with public events. To check for imbalances you can add the -imbalance switch.
&lt;ul&gt;&lt;li&gt;   ApiChange -whousesevent &amp;quot;public *(public event * *)&amp;quot; GAC:\System.Windows.Forms.dll -in $net2 -excel&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;Search for users of the null string constant. It does search simply for null as substring (case insensitive) in all string constants in all files.
&lt;ul&gt;&lt;li&gt;   ApiChange -ws null -in $net2 -excel&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Thu, 09 Sep 2010 14:02:10 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20100909020210P</guid></item><item><title>Updated Release: ApiChange v1.0.0.1 with improved tracing (Jul 19, 2010)</title><link>http://apichange.codeplex.com/releases/view/49256</link><description>&lt;div class="wikidoc"&gt;Contains improved tracing functionality and API to automatically trace exceptions on method leave as well as the ability to inject faults into your product code without the need to change any product code.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Sat, 24 Jul 2010 16:00:20 GMT</pubDate><guid isPermaLink="false">Updated Release: ApiChange v1.0.0.1 with improved tracing (Jul 19, 2010) 20100724040020P</guid></item><item><title>Released: ApiChange v1.0.0.1 with improved tracing (Jul 19, 2010)</title><link>http://apichange.codeplex.com/releases/view/49256</link><description>&lt;div&gt;Contains improved tracing functionality and API to automatically trace exceptions on method leave as well as the ability to inject faults into your product code without the need to change any product code.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;</description><author></author><pubDate>Sat, 24 Jul 2010 16:00:20 GMT</pubDate><guid isPermaLink="false">Released: ApiChange v1.0.0.1 with improved tracing (Jul 19, 2010) 20100724040020P</guid></item><item><title>Updated Release: ApiChange v1.0.0.1 with improved tracing (Jul 19, 2010)</title><link>http://apichange.codeplex.com/releases/view/49256</link><description>&lt;div class="wikidoc"&gt;Contains improved tracing functionality and API to automatically trace exceptions on method leave as well as the ability to inject faults into your product code without the need to change any product code.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Mon, 19 Jul 2010 21:12:58 GMT</pubDate><guid isPermaLink="false">Updated Release: ApiChange v1.0.0.1 with improved tracing (Jul 19, 2010) 20100719091258P</guid></item><item><title>Released: ApiChange v1.0.0.1 with improved tracing (Jul 19, 2010)</title><link>http://apichange.codeplex.com/releases/view/49256</link><description>&lt;div&gt;Contains improved tracing functionality and API to automatically trace exceptions on method leave as well as the ability to inject faults into your product code without the need to change any product code.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;</description><author></author><pubDate>Mon, 19 Jul 2010 21:12:58 GMT</pubDate><guid isPermaLink="false">Released: ApiChange v1.0.0.1 with improved tracing (Jul 19, 2010) 20100719091258P</guid></item><item><title>Source code checked in, #76c98b8c7311</title><link>http://apichange.codeplex.com/SourceControl/changeset/changes/76c98b8c7311</link><description>Incremented version number</description><author>Alois Kraus</author><pubDate>Mon, 19 Jul 2010 21:12:16 GMT</pubDate><guid isPermaLink="false">Source code checked in, #76c98b8c7311 20100719091216P</guid></item><item><title>Source code checked in, #b2b2f0f8ced2</title><link>http://apichange.codeplex.com/SourceControl/changeset/changes/b2b2f0f8ced2</link><description>Added possiblity to inject faults as aspect of tracing to remove the need to alter product code for fault injection.</description><author>Alois Kraus</author><pubDate>Mon, 19 Jul 2010 21:04:14 GMT</pubDate><guid isPermaLink="false">Source code checked in, #b2b2f0f8ced2 20100719090414P</guid></item><item><title>Source code checked in, #bab74b26ceb8</title><link>http://apichange.codeplex.com/SourceControl/changeset/changes/bab74b26ceb8</link><description>Introduced Exception Severity to enable application wide first chance exception tracing without the need to enable full tracing for all methods.</description><author>Alois Kraus</author><pubDate>Mon, 05 Jul 2010 20:36:18 GMT</pubDate><guid isPermaLink="false">Source code checked in, #bab74b26ceb8 20100705083618P</guid></item><item><title>Source code checked in, #d2442550cbd2</title><link>http://apichange.codeplex.com/SourceControl/changeset/changes/d2442550cbd2</link><description>Added pointer offsets for 64 bit platforms to get the last thrown exception in all .NET Framework versions from the current thread.</description><author>Alois Kraus</author><pubDate>Mon, 05 Jul 2010 19:42:50 GMT</pubDate><guid isPermaLink="false">Source code checked in, #d2442550cbd2 20100705074250P</guid></item><item><title>Source code checked in, #c394c5fc3e74</title><link>http://apichange.codeplex.com/SourceControl/changeset/changes/c394c5fc3e74</link><description>Added Exception tracing on method leave.</description><author>Alois Kraus</author><pubDate>Sun, 04 Jul 2010 17:59:17 GMT</pubDate><guid isPermaLink="false">Source code checked in, #c394c5fc3e74 20100704055917P</guid></item><item><title>Updated Wiki: Home</title><link>http://apichange.codeplex.com/wikipage?version=10</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Mission&lt;/h1&gt;&lt;h2&gt;&lt;b&gt;This tool is the swiss army knife for developers who want to know whats inside their binaries and who is using it.&lt;/b&gt;&lt;/h2&gt;You can query your code with a simple command line interface and print the matches to console or pipe it directly to excel to generate nice reports or Pivot tables. If you have the pdbs for your binaries at hand you can directly jump from excel to the matching lines into your code!&lt;br /&gt;&lt;br /&gt;The following example shows how you can track the usage of all String.Index method calls inside the .NET Framework. From the excel output you can create pivot tables to get valuable insights how the code base is really structured (e.g. who is using what method how often).&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ApiChange&amp;DownloadId=124849" alt="Example&amp;#32;Output" title="Example&amp;#32;Output" /&gt;&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://apichange.codeplex.com/documentation?referringTitle=Home"&gt;Documentation&lt;/a&gt; for more information how you can query your code base.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Sat, 12 Jun 2010 19:24:40 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100612072440P</guid></item><item><title>Updated Wiki: ShowRebuildTargets</title><link>http://apichange.codeplex.com/wikipage?title=ShowRebuildTargets&amp;version=2</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Purpose&lt;/h1&gt;This command does help incremental builds to build only the necessary targets. If you have your own build system (not MSBuild) this could be interesting.&lt;br /&gt;
&lt;h1&gt;Parameters&lt;/h1&gt;&lt;b&gt;-ShowrebuildTargets -new &amp;lt;file/s&amp;gt; -old &amp;lt;file/s&amp;gt; [-old2 &amp;lt;file/s&amp;gt;] -searchin &amp;lt;file/s&amp;gt;&lt;/b&gt;&lt;br /&gt;Diff the new files old versus old files. If breaking changes are found search in all -searchin files for affected targets which should be rebuilt.&lt;br /&gt;The file to compare is first searched in the -old file list and then in the -old2 file list.&lt;br /&gt;
&lt;h1&gt;Example &lt;/h1&gt;
&lt;b&gt;ApiChange -showrebuildtargets -new NewBuild\*.dll -old v1.0\*.dll -searchin v1.0\*.dll -cwd \ProjectDir&lt;/b&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Tue, 08 Jun 2010 21:06:14 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ShowRebuildTargets 20100608090614P</guid></item><item><title>Updated Wiki: ShowRebuildTargets</title><link>http://apichange.codeplex.com/wikipage?title=ShowRebuildTargets&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Purpose&lt;/h1&gt;This command does help incremental builds to build only the necessary targets. If you have your own build system (not MSBuild) this could be interesting.&lt;br /&gt;
&lt;h1&gt;Parameters&lt;/h1&gt;&lt;b&gt;-ShowrebuildTargets -new &amp;lt;file/s&amp;gt; -old &amp;lt;file/s&amp;gt; [-old2 &amp;lt;file/s&amp;gt;] -searchin &amp;lt;file/s&amp;gt;&lt;/b&gt;&lt;br /&gt;Diff the new files old versus old files. If breaking changes are found serach in all -searchin files for affected targets which should be rebuilt.&lt;br /&gt;The file to compare is first searched in the -old file list and then in the -old2 file list.&lt;br /&gt;
&lt;h1&gt;Example &lt;/h1&gt;
&lt;b&gt;ApiChange -showrebuildtargets -new NewBuild\*.dll -old v1.0\*.dll -searchin v1.0\*.dll -cwd \ProjectDir&lt;/b&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Tue, 08 Jun 2010 21:05:51 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ShowRebuildTargets 20100608090551P</guid></item><item><title>Updated Wiki: ShowStrongName</title><link>http://apichange.codeplex.com/wikipage?title=ShowStrongName&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Purpose&lt;/h1&gt;Display the strong name of an assembly.&lt;br /&gt;
&lt;h1&gt;Parameters&lt;/h1&gt;-ShowstrongName &amp;lt;file/s&amp;gt;&lt;br /&gt;                        Display the strong name of the assembly files&lt;br /&gt;
&lt;h1&gt;Example&lt;/h1&gt;
Display the strong name of all .NET Framework assemblies.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ApicCange -sn $net2&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Accessibility, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;AspNetMMCExt, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;cscompmgd, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;IEExecRemote, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;IEHost, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;IIEHost, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;Microsoft.Build.Framework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;Microsoft.Build.Engine, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;Microsoft.Build.Utilities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;Microsoft.Build.VisualJSharp, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;Microsoft.Build.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;Microsoft.VisualBasic.Compatibility.Data, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;Microsoft.VisualBasic.Compatibility, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&lt;br /&gt;...&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Tue, 08 Jun 2010 21:02:53 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ShowStrongName 20100608090253P</guid></item><item><title>Updated Wiki: GetPdbs</title><link>http://apichange.codeplex.com/wikipage?title=GetPdbs&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Purpose&lt;/h1&gt;Download with the symchk command for all binaries the correct symbols beside the binaries. You need to have symchk.exe in your path to make this command work. *Note: You need the 32/64 bit version of symchk depending on your binaries.&lt;br /&gt;
&lt;h1&gt;Parameters&lt;/h1&gt;&lt;b&gt;-GetPdbs &amp;lt;file/s&amp;gt; [PdbStoreDirectory]&lt;/b&gt;&lt;br /&gt;If the pdb store directory is omitted the pdbs are downloaded beside the binary. Default is Microsoft (http://msdl.microsoft.com/download/symbols).&lt;br /&gt;You need to set the environment variable %SYMSERVER% to use a different one.&lt;br /&gt;
&lt;h1&gt;Example&lt;/h1&gt;
Download the pdbs for the given binaries from Microsoftsymbol server.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ApiChange -getpdbs $net2 c:\net2pdbs&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Start downloading symbols.&lt;br /&gt;Estimated download time 1:03 minutes for 159 files from symbol server&lt;br /&gt;...&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>Alois</author><pubDate>Tue, 08 Jun 2010 21:00:15 GMT</pubDate><guid isPermaLink="false">Updated Wiki: GetPdbs 20100608090015P</guid></item></channel></rss>