New Language Features
- C# 9.0: record classes
- C# 9.0: with expressions
- C# 9.0: primary constructors
- Support for .NET 5 custom calling conventions
- Improved support for Unsafe-intrinsics
UI Improvements
- Dark mode (@tom-englert in #2347)
- .NET bundles and Nuget packages are now directly embedded in the tree view
- Search enabled in NuGet packages
- Added setting highlight the current line in the code view (see #2224, by @DickvdBrink)
- Simple UI language switching support
General
- Support for .NET bundles (see #2191)
- Detect use of csc /deterministic switch
- Improve assembly resolver API to allow async usage
- #2286: Enable server-mode GC in ILSpy
- Building ILSpy for .NET 5 is now possible (see multitargeting.props.template)
- Improved project/solution decompilation (see #2186, by @wwh1004)
- Updated ReadyToRun (see #2238 & #2279, by @cshung)
- Added inline display of CustomDebugInformation table entries in metadata
- Add metadata tree nodes for blob, guid, string and user string heap
- Performance improvements in DataGrid filter (by @tom-englert)
- Adjust fitness calculation for destructors (by @MikeFH in #2344)
- Refactored insertion of search results (by @MikeFH in #2335)
- Align dependencies with Roslyn 3.8.0, see #2173 (affects ICSharpCode.Decompiler NuGet package users)
- Removed the dependency on Humanizer (see #2232 and #2235)
Bug fixes
- Fix #2192: Add support for VB.NET delegate construction
- Fix #2195: foreach loop conversion accidentally removes end container labels
- Fix #2197: .NET 5 RC2: "Analyze/Used By" throws BadImageFormatException
- Fix #2196: Add support for extern local functions.
- Fix #1079: CSharpFormattingOptions.AutoPropertyFormatting has no effect
- Fix #2222: switch-expression does not support implicit conversions.
- #2241: Fix possible NRE in TypeProvider.GetTypeFromReference
- Fix #2233: ResourcesFileTreeNode no longer creates child nodes for BAML files
- Fix #2230: do not emit directly consecutive null propagation operators
- Fix #603: Single element arrays should not span multiple lines
- Fixed crash when loading DLLs with invalid sections in their
.deps.json
(see #2227, by @bernd5) - #2278: Implement support for CSharpBinderFlags.InvokeSimpleName
- #2280: Add additional checks to GenerateVariableName
- #2275: Fix exception when assembly does not contain proper MetadataVersion.
- #2260: Fix switch(string) transform: handle empty cases where the C# compiler optimizes out the
if
- #2288: Fix decompilation of nullable lifting in expression trees (by @wwh1004)
- PDBGen: Ignore duplicated ILFunctions (see 5a8b488)
- #2314: ILSpy incorrectly resolves a runtime dependency when dll is present in both WindowsDesktop.App and NETCore.App
- #1648 and #2133: Use simple assembly names for KnownThings to allow the resolver to use the relative framework version
- #2349: Use proper ExpressionType with DynamicCompoundAssign.
- #1512: XmlDocumentationProvider Unable to load some XML files to have special characters
- #2342: Do not generate empty names for foreach loop variables.
- #2340: Do not traverse assemblies with load errors in AssemblyList.GetAllAssemblies()
- #2356: Can't navigate if switch language in Analyze panel
- Improved decompilation of rethrow/throw and finally blocks in async methods. (see #1749, #2339 and #2353)