Source code is great -- when you have it. But in this not-so-perfect world, organizations often lose or forget about source code once an application is rolled out (which is another reason for version control). It only becomes an issue when problems arise or changes are requested. I was presented with such a situation on a recent project.
The client had DLLs along with some configuration files. I calmed their fears and reached for my favorite compiler -- RedGate's .NET Reflector -- only to realize it is no longer free. I don't fault RedGate for wanting to make a profit, and I'm kind of happy the company went that route because it forced me to look elsewhere and discover dotPeek. I was soon wading through the code behind the code. (Note: You're viewing reverse engineered source code and not the true or original source code when working with a tool like dotPeek.)
More than a peek
The initial screen presented when installing dotPeek. (See an enlarged view of this image.)
via dotPeek is easy. You load the questionable file(s) -- it
supports DLLs, EXEs, Windows 8 metadata files, and more -- and take a look at the
decompiled source code.
Figure B shows dotPeek opened the first time after
installation. Figure C shows the options for opening and viewing files
and directories. You can open a
file from file system or the GAC
as well as browse a directory.
The dotPeek tool opened the first time post installation. (See an enlarged view of this image.)
Files are easily opened via the File menu.
With dotPeek installed and loaded, you can easily load compiled files for a closer look inside. Figure D shows the log4net.dll file loaded. The dotPeek interface lists the DLL name with references, resources, and namespaces listed underneath -- each is expandable. The namespace is expanded to reveal a list of its classes; double-click on the class name to look at its source code.
Figure E shows the context menu (right-click on name) available for classes. The Find Usages option in Figure E is useful because it allows you to explore when and where it is used within the decompiled source code. Another interesting feature just added to the current release is the Export To Project option (Figure C), which allows you to export generated source code to a Visual Studio project -- kind of completing or reversing the circle of life with a development project -- starting at decompilation and ending at an actual project. In addition, you can load symbols from a source server when available (for example, download from Microsoft).
Working with a DLL in dotPeek. (See an enlarged view of the image.)
There are a number of options for working with decompiled source. (See an enlarged view of the image.)
My impressions of dotPeek
Overall, I like the whole user experience of dotPeek. It has the look and feel of a development IDE, and those who are fans of ReSharper will love it. It loads quickly, and installation is a breeze (without any add-on hassles like Google toolbar). It offers simple navigation, and searching is only a click away. Find Usages is a great option to get a feel for how something may be used. The Go to options, Go to Declaration and Go to Implementation, are valuable when navigating unknown code.
On the downside, dotPeek only offers C# code. No matter what you decompile, it generates C#. While I am a C# developer who only occasionally dabbles in VB.NET, it seems like the VB.NET options could be useful (especially for VB.NET developers).
I am still in the honeymoon phase with dotPeek, so we'll see if my impression of the tool changes over time.
Rearranging the toolbox
While I have my top three development tools, there are a number of other items needed for the not-so-common tasks (like dealing with situations where the source code is unavailable), with dotPeek replacing .NET Reflector in my toolbox. I have used dotPeek on a couple projects, and it is easy to use and delivers everything I need. With a company like JetBrains behind it, I hope dotPeek continues to improve and maintains that attractive price tag.If you're a fan of dotPeek or an alternative like .NET Reflector or even JustDecompile, let us know in the discussion.
Tony Patton has worn many hats over his 15+ years in the IT industry while witnessing many technologies come and go. He currently focuses on .NET and Web Development while trying to grasp the many facets of supporting such technologies in a production environment on a daily basis.