If you've been a loyal Reflector user, you've probably been exposed to the debacle surrounding RedGate's decision to no longer offer a free version. Since then, the race has begun for a replacement with a provider that would stand by their promises to the community. Mono has an ongoing free alternative, which has been available for a long time. However, other vendors are stepping up to the plate, with their own offerings.
If Not Reflector, Then What?
One of these vendors is Telerik. In their recent Q1 2011 release of JustCode, Telerik offers a decompilation utility rivaling what we've become accustomed to in Reflector. Not only does Telerik offer a usable replacement, but they've (in my opinion), produced a product that integrates more naturally with visual Studio than any other product ever has. Telerik's decompilation process is so easy that the accompanying demo in this post is blindingly short (except for the presence of verbose narrative).
If you want to follow along with this demo, you'll need to have Telerik JustCode installed. If you don't have JustCode yet, you can buy it or download a trial at the Telerik Web site .
A Tall Tale; Prove It!
With JustCode, you can view code in the .NET Framework or any other 3rd party library (that isn't well obfuscated). This demo depends on LINQ to Twitter, which you can download from CodePlex.com and create a reference or install the package online as described in my previous post on NuGet. Regardless of the method, you'll have a project with a reference to LINQ to Twitter. Use a Console Project if you want to follow along with this demo.
Note: If you've created a Console project, remember to ensure that the Target Framework is set to .NET Framework 4. The default is .NET Framework 4 Client Profile, which doesn't work with LINQ to Twitter. You can check by double-clicking the Properties folder on the project and inspecting the Target Framework setting.
Next, you'll need to add some code to your program that you want to inspect. Here, I add code to instantiate a TwitterContext, which is like a LINQ to SQL DataContext, but works with Twitter:
var l2tCtx = new TwitterContext();
If you're following along add the code above to the Main method, which will look similar to this:
using LinqToTwitter;
namespace NuGetInstall
{
class Program
{
static void Main(string[] args)
{
var l2tCtx = new TwitterContext();
}
}
}
The code above doesn't really do anything, but it does give something that I can show and demonstrate how JustCode decompilation works.
Once the code is in place, click on TwitterContext and press the F12 (Go to Definition) key. As expected, Visual Studio opens a metadata file with prototypes for the TwitterContext class. Here's the result:
Opening a metadata file is the normal way that Visual Studio works when navigating to the definition of a type where you don't have the code. The scenario with TwitterContext happens because you don't have the source code to the file. Visual Studio has always done this and you can experiment by selecting any .NET type, i.e. a string type, and observing that Visual Studio opens a metadata file for the .NET String type. The point I'm making here is that JustCode works the way Visual Studio works and you'll see how this can make your job easier.
In the previous figure, you only saw prototypes associated with the code. i.e. Notice that the default constructor is empty. Again, this is normal because Visual Studio doesn't have the ability to decompile code. However, that's the purpose of this post; showing you how JustCode fills that gap.
To decompile code, right click on TwitterContext in the metadata file and select JustCode Navigate -> Decompile from the context menu. The shortcut keys are Ctrl+1. After a brief pause, accompanied by a progress window, you'll see the metadata expand into full decompiled code. Notice below how the default constructor now has code as opposed to the empty member prototype in the original metadata:
And Why is This So Different?
Again, the big deal is that Telerik JustCode decompilation works in harmony with the way that Visual Studio works. The navigate to functionality already exists and you can use that, along with a simple context menu option (or shortcut key) to transform prototypes into decompiled code.
Telerik is filling the the Reflector/Red Gate gap by providing a supported alternative to decompiling code. Many people, including myself, used Reflector to decompile code when we were stuck with buggy libraries or insufficient documentation. Now we have an alternative that's officially supported by a company with an excellent track record for customer (developer) service, Telerik. Not only that, JustCode has several other IDE productivity tools that make the deal even sweeter.
Joe