No Source? No PDB? No Problem, ILSpy!
Doing the math, yeah, we've been following ILSpy for six+ years. That's like a century in Internet Years...
So, does that mean ILSpy faded away? Got lost in all those years?
Nope! ILSpy is very alive and very well, with active (as in within the last two hours of my writing this) work on v3.
Given how long it's been since we last covered ILSpy, I think a review is in order...
ILSpy is the open-source .NET assembly browser and decompiler.
- Assembly browsing
- IL Disassembly
- Support C# 5.0 “async”
- Decompilation to C#
- Supports lambdas and ‘yield return’
- Shows XML documentation
- Decompilation to VB
- Saving of resources
- Save decompiled assembly as .csproj
- Search for types/methods/properties (substring)
- Hyperlink-based type/method/property navigation
- Base/Derived types navigation
- Navigation history
- BAML to XAML decompiler
- Save Assembly as C# Project
- Find usage of field/method
- Extensible via plugins (MEF)
- Assembly Lists
So 3.0? It's available on GitHub, both in source form, binary and even vsix!
What's new compared to Preview 1?
- (Partial) support for nullables, foreach, using
- New: Open assembly from Nuget package
- A lot of small-ish fixes
- The VSIX is here! And it supports output from netstandard and netcore projects.
- The -alpha4 Nuget package corresponds to this release.
This is a preview release! Framework requirements: .NET 4.6.1 or higher.
Language support status can be found in issue #829, please note that this is a live issue and might have changed after this preview has been published. Notable missing feature compared to older versions: nullables. (only fully implemented features have a checkmark in the status issue). Before opening an issue ("X doesn't decompile correctly") please go check with issue #829!
New: support for .NET Standard and .NET Core assemblies.
Missing: decompile to VB. Contributions welcome because we concentrate solely on C#.
Architectural changes are documented in the wiki (Note: roadmap not up to date as of this release). Important points to note (design goals): the decompiler should always create semantically correct and compilable code.
And of course the repo;
Check it out in action, ILSpy opening ILSpy... :)