Well, all 50 Reflector 7 VS Pro licences have been sent off to their new owners. Thank you to everyone who entered and to those of you who didn’t, well it may have been worth your while to jot down some notes. First some stats about the giveaway.

The giveaway started on Friday Feb 11 and was publicized almost exclusively by twitter and those reading my RSS feed. Key people like Scott Hanselman and Jon Skeet retweeted its existence which helped no end, with 804 day 1 page views to the giveaway entry by the end of play. Chris Alcock was also kind enough to point out the giveaway the following Monday leading to another spike in interest of 204 page views that day. In total, there were some 1990 page views between start and finish of the giveaway with 1866 unique views according to Google Analytics.

So nearly 2000 people read about it and yet only sixty (yes, 60) people entered. You missed a great chance here everyone.

So What Is It Used For?

From those entries received, it seems that the most popular use for reflector is trying to figure out how Microsoft’s own code works. As one entrant wrote,

I am a SharePoint Developer.  ‘nuff said.

Indeed, this was not the only SharePoint developer entering the giveaway, although it was definitely the most succinct. Here’s a full list of those DLLs and applications that were mentioned in entries.

  • .NET Framework (unspecified) – 16
  • Non-MS Third Party Components – 9
  • ASP.NET – 7
  • SharePoint – 2
  • MS Dynamics – 2
  • WCF - 1
  • WPF – 1
  • Surface SDK – 1
  • Expression Blend – 1
  • Azure SDK 1.3 - 1
  • PowerGUI - 1
  • Telerik Sitefinity – 1
  • nHibernate – 1
  • MS Commerce Server – 1
  • MS Unlocker for WinPhone7 \ ChevronWP7 Unlocker – 1

Granted sixty people isn’t very representative of all developers out there, but maybe Microsoft are realising there is actually a call for good API docs and in-depth articles on how stuff works. I noticed that the ADO.NET team mentioned this apropos the forthcoming release of Entity Framework 4.1

We’ve held off on extensively documenting the CTPs because the API surface has been changing so much. RC will have intellisense and online documentation.

Something that Microsoft.Web.Helpers could do with for sure.

But figuring out a third-party DLL isn’t the only reason for using reflector. A number of you replied that Reflector had saved the day after a hard drive crash or disaster by source control failure of some kind. CW for example wrote,

I walked in to a new job a couple of years ago, within a few days I noticed that they had an issue with version control. There were 3 VSS databases and some other guy had decided to use CVS – just to add to the mix.

It became clear that the ‘old’ developers were happy with VSS and when it got a bit slow or crashed too much they would just setup a new VSS databases do some copy / paste of files and carry on. The CVS guy knew this was all bad and was trying to force everyone to ditch VSS and move to CVS. To add to the fun people had not used labels in VSS and there was also a culture of checking-in weeks or months after something was put into prod.

So – trying to work out where the current production code was held – or IF it was even held was a nightmare. Luckily for me everything was C# and they had not obfuscated any code.

Reflector to the rescue – every time I needed to make a change in production to something I had not worked on before I would reflect the current production binaries and then compare with what I could find in VSS or CVS. Even 3 years later I am still finding odd bits of code that I need to reflect – none of this would have been possible without Reflector.

Several entries also highlighted one or several of the plug-ins that Reflector now has via http://reflectoraddins.codeplex.com/ and the integration into Visual Studio that the recent Pro versions of Reflector have included.

Reflector has also used in a couple of more innovative ways by entrants.

  • It disassembles IL code back into C#, so a few developers use it to translate their VB code into C#.
  • As an obfuscation check. If Reflector crashes while trying to disassemble a DLL’s code, the developer takes it to mean that they have a good level of obfuscation applied to their code to hide it from casually prying eyes.

And to conclude, here is a list of useful projects that reflector has influenced and helped: