First, there was ILDASM, and it was good. Then there was Anakrino, and it was better. Then, there was Reflector and it seemed as if the world of .NET class browsing and decompilation had reached its zenith. From time to time I found something new to surprise and delight me. Reflector was fast, useful and showed a depth of features and progressive refinement that meant I never had to think twice about what tool to use for a .NET class browser (like the one in visual studio? You’ve got to be kidding!) Then red-gate bought reflector from Lutz (the original author) and I was a little un-easy. Red-Gate were (and are?) well regarded in the SQL Server tools space, and their head honcho Neil Davidson was often doing good things in the microISV community. Bugs started to creep in (like one time it perpetually wanted to update, and then crashed on update), and it tried to up-sell me to the ‘Pro’ version, with features I didn’t really think I needed. Then on February 2nd 2011 Red-Gate announced that reflector would no-longer be free. The developer reaction was as swift as it was vehement. To paraphrase a friend of mine (who was talking about timesheets at the time I think) it wasn’t so much the money that he objected to, but the lying. Some people say you can’t put a price on trust, but red-gate did – $35. Red-Gate had said quite clearly when they took over the reigns of reflector that they intended to continue to make it available for free, and had reneged on that commitment. There were some dissenting voices that pointed out that I spend more than $35 on coffee some days (which is completely untrue, the most I’ve ever spent on coffee in one day has got to be only about $30…totally fucking different).
I, like many other developers started canvassing around for a replacement to reflector. In the ensuing weeks a number of free and commercial applications were announced looking to step into the power vacuum left by reflector, many of them based on the excellent work done by the MONO project with their Cecil decompiler.
In no particular order we have:
and many others
Shortly afterwards red-gate reversed some of their decisions regarding reflector, but the damage had been done, the cat was out of the bag, wheels had been set in motion, and a million other clichés that you’d normally avoid like the plague meant that the whole house of cards was ready to fall like dominoes, or something like that.
ILSpy Goes Metro
In case you hadn’t guessed from the title I chose ILSpy, figuring that I was less likely to find myself in the same predicament I currently found myself in if I chose something that I could hack on myself. ILSpy works much like reflector does, and I was soon browsing inheritance hierarchies with glee, except for a few small UI warts that kind of annoyed me with ILSpy. No matter, I thought, I have the source code, I know C# and have some familiarity with WPF. I’m sure I can manage.
This is what the main-line official build of ILSpy looks like
One thing led to another, and this is now what my custom build of ILSpy looks like.
The great thing about ILSpy is, it is really easy to hack on. The other developers (which I’ve never spoken to or communicated with, so I’m basing this purely on the source code) seem more interested in building real features than adding UI accoutrements and pushing pixels (which is really my strong suit). Special thanks must go out to Paul Jenkins and his MahApps.Metro control templates (I see now that I should upgrade to 0.3). Thanks also to Derek Orr and Mike Wise for some UI suggestions, some of which I haven’t had time to implement yet. The Metro Design Language may not be to everyone’s tastes, and to those people I say “sod off”.