<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.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>Paulo Morgado : Reflector</title><link>http://msmvps.com/blogs/paulomorgado/archive/tags/Reflector/default.aspx</link><description>Tags: Reflector</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>PowerShell For The .NET Developer</title><link>http://msmvps.com/blogs/paulomorgado/archive/2009/09/18/powershell-for-the-net-developer.aspx</link><pubDate>Fri, 18 Sep 2009 00:03:12 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1724580</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1724580</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1724580</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/09/18/powershell-for-the-net-developer.aspx#comments</comments><description>&lt;p align="justify"&gt;Some time ago I needed to have the &lt;strong&gt;validationKey&lt;/strong&gt; of the &lt;a title="machineKey Element (ASP.NET Settings Schema)" href="http://msdn.microsoft.com/library/w8h3skw9.aspx" target="_blank"&gt;machineKey element&lt;/a&gt; of an &lt;a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; application changed and found out that ASP.NET doesn’t provide a command-line tool (or any other) to do this.&lt;/p&gt;  &lt;p align="justify"&gt;Looking around I found several applications and code samples to do it, but to have a system administrator do this I needed to test and document the application and it was to much work for such task.&lt;/p&gt;  &lt;p align="justify"&gt;I’ve always been a supporter of the idea of &lt;a title="Windows PowerShell" href="http://www.microsoft.com/powershell" target="_blank"&gt;PowerShell&lt;/a&gt; but I never used it my self. Just because I almost always have &lt;a title="Microsoft Visual Studio" href="http://cli.gs/vstudio" target="_blank"&gt;Visual Studio&lt;/a&gt; open and writing a simple console application is quicker and easier than learning PowerShell.&lt;/p&gt;  &lt;p align="justify"&gt;This time I decide that I would do a PowerShell script instead.&lt;/p&gt;  &lt;p align="justify"&gt;In &lt;a title="Microsoft Visual C#" href="http://cli.gs/vcsharp" target="_blank"&gt;C#&lt;/a&gt; I would have done something like this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Program
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;private static string &lt;/span&gt;GenerateKey()
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;buff = &lt;span style="color:blue;"&gt;new byte&lt;/span&gt;[64];
        (&lt;span style="color:blue;"&gt;new &lt;/span&gt;System.Security.Cryptography.&lt;span style="color:#2b91af;"&gt;RNGCryptoServiceProvider&lt;/span&gt;()).GetBytes(buff);
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;sb = &lt;span style="color:blue;"&gt;new &lt;/span&gt;System.Text.&lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;();
        &lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;b &lt;span style="color:blue;"&gt;in &lt;/span&gt;buff)
        {
            sb.AppendFormat(&lt;span style="color:#a31515;"&gt;&amp;quot;{0:X2}&amp;quot;&lt;/span&gt;, b);
        }
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;sb.ToString();
    }

    &lt;span style="color:blue;"&gt;private static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args)
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;path = args[0];
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;config = System.Web.Configuration.&lt;span style="color:#2b91af;"&gt;WebConfigurationManager&lt;/span&gt;.OpenMachineConfiguration(path);
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;systemWeb = config.GetSectionGroup(&lt;span style="color:#a31515;"&gt;&amp;quot;system.web&amp;quot;&lt;/span&gt;) &lt;span style="color:blue;"&gt;as &lt;/span&gt;System.Web.Configuration.&lt;span style="color:#2b91af;"&gt;SystemWebSectionGroup&lt;/span&gt;;
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;machineKey = systemWeb.MachineKey;
        machineKey.ValidationKey = GenerateKey();
        config.Save(System.Configuration.&lt;span style="color:#2b91af;"&gt;ConfigurationSaveMode&lt;/span&gt;.Modified);
    }
}&lt;/pre&gt;

&lt;p align="justify"&gt;How would it be in PowerShell? As simple as this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;function GenerateKey
&lt;/span&gt;&lt;span style="color:black;"&gt;{
    [&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Byte&lt;/span&gt;&lt;span style="color:black;"&gt;[]]&lt;/span&gt;&lt;span style="color:purple;"&gt;$buff &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0..63
    (&lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;new-object &lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Security.Cryptography.RNGCryptoServiceProvider&lt;/span&gt;&lt;span style="color:black;"&gt;).&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;GetBytes&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;$buff&lt;/span&gt;&lt;span style="color:black;"&gt;)
    &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;new-object &lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Text.StringBuilder&lt;/span&gt;&lt;span style="color:black;"&gt;(128)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;$i &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0&lt;/span&gt;&lt;span style="color:blue;"&gt;; &lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;$i &lt;/span&gt;&lt;span style="color:red;"&gt;-lt &lt;/span&gt;&lt;span style="color:purple;"&gt;$buff&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;Length&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;; &lt;/span&gt;&lt;span style="color:purple;"&gt;$i&lt;/span&gt;&lt;span style="color:red;"&gt;++&lt;/span&gt;&lt;span style="color:black;"&gt;)
    {
        &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;AppendFormat&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;{0:X2}&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:purple;"&gt;$buff&lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:purple;"&gt;$i&lt;/span&gt;&lt;span style="color:black;"&gt;])
    }
    &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;ToString&lt;/span&gt;&lt;span style="color:black;"&gt;()
}

[&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Reflection.Assembly&lt;/span&gt;&lt;span style="color:black;"&gt;]::&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;LoadWithPartialName&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;System.Web&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)
&lt;/span&gt;&lt;span style="color:purple;"&gt;$config &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Web.Configuration.WebConfigurationManager&lt;/span&gt;&lt;span style="color:black;"&gt;]::&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;OpenWebConfiguration&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;em&gt;&amp;lt;path&amp;gt;&lt;/em&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)
&lt;/span&gt;&lt;span style="color:purple;"&gt;$systemWeb &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;$config&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;GetSectionGroup&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;system.web&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;;
&lt;/span&gt;&lt;span style="color:purple;"&gt;$machineKey &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;$systemWeb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;MachineKey
&lt;/span&gt;&lt;span style="color:purple;"&gt;$machineKey&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;ValidationKey&lt;/span&gt;&lt;span style="color:red;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;GenerateKey
&lt;/span&gt;&lt;span style="color:purple;"&gt;$config&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;save&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Wonder how I got from no knowledge of PowerShell to this? Simple. Something that every real &lt;a title="Microsoft .NET Framework" href="https://www.microsoft.com/net/" target="_blank"&gt;.NET&lt;/a&gt; developer has and loves: &lt;a title=".NET Reflector" href="http://www.red-gate.com/products/reflector/" target="_blank"&gt;.NET Reflector&lt;/a&gt; (with a &lt;a title="PowerShellLanguage" href="http://reflectoraddins.codeplex.com/Wiki/View.aspx?title=PowerShellLanguage" target="_blank"&gt;PowerShell add-in&lt;/a&gt;, of course).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1724580" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Reflector/default.aspx">Reflector</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>redgate .NET Reflector 5.1.5.0 Released</title><link>http://msmvps.com/blogs/paulomorgado/archive/2009/03/30/redgate-net-reflector-5-1-5-0-released.aspx</link><pubDate>Mon, 30 Mar 2009 22:47:35 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1683080</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1683080</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1683080</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2009/03/30/redgate-net-reflector-5-1-5-0-released.aspx#comments</comments><description>&lt;p align="justify"&gt;Today &lt;a title="redgate - ingeniously simple tools" href="http://www.red-gate.com/" target="_blank"&gt;redgate&lt;/a&gt; released version 5.1.5.0 of &lt;a title=".NET Reflector" href="http://cli.gs/netReflector" target="_blank"&gt;.NET Reflector&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;It was a bumpy release. Early today, at work, as soon as &lt;a title="antsprofiler twitter" href="http://twitter.com/antsprofiler" target="_blank"&gt;@antsprofiler&lt;/a&gt; was announced the deployment of the new version I tried to upgrade and was offered an upgrade to the version 5.1.4.0 over and over again.&lt;/p&gt;  &lt;p align="justify"&gt;Early tonight, at home, when I tried to upgrade I was offered to upgrade to 5.1.5.0.&lt;/p&gt;  &lt;p align="justify"&gt;The funny thing is that, if I try to run it from &lt;strong&gt;C:\Program Files&lt;/strong&gt; I get a UAC dialog the mentions &lt;strong&gt;Reflector 5.1.3&lt;/strong&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Just moved to my &lt;strong&gt;&lt;a title="Adobe Reader Fails To Upgrade/Install" href="http://msmvps.com/blogs/paulomorgado/archive/2009/03/30/adobe-reader-fails-to-upgrade-install.aspx" target="_blank"&gt;C:\Program Files (Utils)&lt;/a&gt;&lt;/strong&gt; and it all works fine.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1683080" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/redgate/default.aspx">redgate</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Reflector/default.aspx">Reflector</category></item><item><title>Lutz Roeder’s .NET Reflector Is Now Red Gate’s .NET Reflector</title><link>http://msmvps.com/blogs/paulomorgado/archive/2008/08/20/lutz-roeder-s-net-reflector-is-now-red-gate-s-net-reflector.aspx</link><pubDate>Wed, 20 Aug 2008 22:34:29 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1645285</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1645285</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1645285</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2008/08/20/lutz-roeder-s-net-reflector-is-now-red-gate-s-net-reflector.aspx#comments</comments><description>&lt;a&gt;&lt;/a&gt;  &lt;p&gt;Let’s face it, if you don’t know &lt;a title=".NET Framework Developer Center" href="http://msdn.microsoft.com/netframework/" target="_blank"&gt;.NET&lt;/a&gt; Reflector, you can never claim to be a .NET developer.&lt;/p&gt; &lt;a&gt;&lt;/a&gt;  &lt;p&gt;Today &lt;a title="redgate - ingeniously simple tools" href="http://www.red-gate.com/" target="_blank"&gt;Red Gate&lt;/a&gt; announced the acquisition of Lutz Roeder’s .NET Reflector.&lt;/p&gt; &lt;a&gt;&lt;/a&gt;  &lt;p&gt;On &lt;a title=".NET Reflector" href="http://reflector.red-gate.com/" target="_blank"&gt;.NET Reflector&lt;/a&gt;’s page, Red Gate states that “will continue to &lt;strong&gt;maintain a free version for the benefit of the community&lt;/strong&gt;”.&lt;/p&gt; &lt;a&gt;&lt;/a&gt;  &lt;p&gt;You can read an &lt;a title="The Future of Reflector" href="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/" target="_blank"&gt;interview&lt;/a&gt; with Lutz Roeder and James Moore (general manager of .NET Developer Tools at Red Gate) at &lt;a title="simple-talk - SQL Server and .NET put simply" href="http://www.simple-talk.com/" target="_blank"&gt;simple-talk&lt;/a&gt;.&lt;/p&gt; &lt;a&gt;&lt;/a&gt;  &lt;p&gt;James doesn’t know yet how to improve &lt;a title="Reflector for .NET" href="http://www.aisto.com/roeder/dotnet/" target="_blank"&gt;Reflector&lt;/a&gt;, but I do. Reflector needs a major improvement on UI usability and performance. Let’s see if I can come up with a list:&lt;/p&gt; &lt;a&gt;&lt;/a&gt;  &lt;ul&gt;   &lt;li&gt;For me, search as you type is not a good idea as it is in Reflector. &lt;/li&gt;    &lt;li&gt;Still in the search theme, search as you type would be nice for the active code window. &lt;/li&gt;    &lt;li&gt;I cannot understand why changing any of the options fires a total repaint and lost of the view of the active code item. &lt;/li&gt;    &lt;li&gt;Settings like code, documentation and number formatting should possible to change on the fly with a simple toolbar click. &lt;/li&gt; &lt;/ul&gt; &lt;a&gt;&lt;/a&gt;  &lt;p&gt;I’m sure Red Gate is more than capable of taking good care of .NET Reflector.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1645285" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Tools/default.aspx">Tools</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/redgate/default.aspx">redgate</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Reflector/default.aspx">Reflector</category></item><item><title>.NET Reflector 5.1.2.0 Released</title><link>http://msmvps.com/blogs/paulomorgado/archive/2008/05/19/net-reflector-5-1-2-0-released.aspx</link><pubDate>Sun, 18 May 2008 23:38:29 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1624207</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/rsscomments.aspx?PostID=1624207</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/paulomorgado/commentapi.aspx?PostID=1624207</wfw:comment><comments>http://msmvps.com/blogs/paulomorgado/archive/2008/05/19/net-reflector-5-1-2-0-released.aspx#comments</comments><description>&lt;p&gt;Get it from &lt;a title="Reflector for .NET" href="http://www.aisto.com/roeder/dotnet/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1624207" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/SoftDev/default.aspx">SoftDev</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Tools/default.aspx">Tools</category><category domain="http://msmvps.com/blogs/paulomorgado/archive/tags/Reflector/default.aspx">Reflector</category></item></channel></rss>