We want to thank all contributors, who provided fixes in this release: @Chicken-Bones, @ashmind and @cshung!
And we want to thank all testers, who provided feedback and tested very thoroughly, especially @greenozon, @mmusu3 and @tamlin-mike for their ongoing support!
New Language Features
- C# 1.0/2.0 overloaded &&/|| operators
- C# 4.0 optional arguments
- C# 7.1 reference assemblies: ILSpy will show a warning if you are looking at a reference assembly
- C# 7.2 non-trailing named arguments
Improved Pattern Detection
- C# 6.0 string interpolation with FormattableString/IFormattable
Misc
- Experimental PDBgen (no lambda support, no yield/async state machines; very basic C#)
- New IAnalyzer API
- Added IDocumentationProvider: allows providing XML doc comments from custom sources
- Added IDebugInfoProvider: allows providing debug info (variable names and sequence points)
Contributions
- Chicken-Bones: Improved block ordering in ConditionDetection (#1218)
- ashmind: Decimal constant improvements (#1236)
- cshung: Bug fix for #1224 (#1243)
Improvements & Bugfixes
- Decompilation of invalid IL
- Improved decompilation of C++/CLI constructs
- Improved stability of analyzers
Architectural Changes
For ILSpy 4 we replace Mono.Cecil with System.Reflection.Metadata. The wiki entry on SRM deals at length with information that is important to addin writers, the background story and some of the performance/memory improvements you as a user of ILSpy can expect.
Our goal for this version given the underlying architectual changes is as follows: "As good or better as ILSpy 3.2 in terms of decompilation quality, stability, performance and memory usage."