Skip to content

Releases: icsharpcode/ILSpy

ILSpy 6.0

07 Jul 17:00
Compare
Choose a tag to compare

Major Changes of Note

  • ILSpy 6.0 sports a multi-tab docking interface
  • ILSpy 6.0 comes with a new Metadata Explorer
  • ILSpy 6.0 has new icons for high-DPI support
  • ILSpy 6.0 requires at least .NET 4.7.2 (v5.0 required .NET 4.6.2)

New Language Features

  • C# 8.0: Indexing and Slices (Ranges)
  • C# 7.0: Changes to syntactic disambiguation of generic identifiers
  • C# 7.3 pattern-based fixed statement
  • C# 8.0 Default Interface Methods
  • C# 8.0 Async streams (currently not covering await foreach)
  • C# 8.0 await using
  • C# 8.0 Readonly members
  • Decompile calli instructions using C# 9.0 function pointer syntax
  • Improved support for Unsafe intrinsics
  • Support for generic and static local functions

UI Improvements

  • Docking and multi tab support (see #1725 and #1801)
  • Metadata Explorer (see https://github.com/icsharpcode/ILSpy/wiki/Metadata-Explorer)
  • Assembly list dropdown in toolbar, enhanced assembly list management
  • Show target frameworks next to the assembly version in the tree-view
  • Using the middle mouse button to click on tree nodes and links will open the decompilation result in a new tab.
  • "Select PDB" context menu: allows to change the PDB file resolved by ILSpy or pick one from a different location
  • Added a "Debug Metadata Explorer" node for portable PDBs
  • Use XAML for icons (high DPI)
  • New icons (based on VS 2017 icon pack) (#1704 thanks to @Rpinski)
  • RichText Tooltips (#1654)
  • Add "Open with ILSpy" entry to the Windows Explorer context menu on exe and dll files (via Options/Misc)
  • Empty metadata tables can now be hidden from the tree view
  • Folding for XAML output (thanks to @jogibear9988)
  • Add "Reset to defaults" in Options dialog
  • Dynamic assembly list generation for target framework

Improvements & Bugfixes

  • Project export: Added an option to allow SDK-style format for project files. (#2031 by @dymanoid)
  • Solution and project decompilation: Add missing ProjectTypeGuids
  • Add search features (thanks to @miloush and @sailro)
  • #1498: Remove Fusion API usage: Use standard file enumeration instead. This should enable us to use the GAC even with restricted access, as only the LIST permission is required.
  • Fix DotNetCorePathFinder to properly support netstandard2.1
  • Fix multi-module support
  • Updated links to MS Docs (#2030 by @AustinWise)
  • Improve ReduceNestingTransform by considering nested containers (#1880 by @Chicken-Bones)
  • Analyzers: Added "Implements interface"-Analyzer (#2028 by @dymanoid)
  • Analyzer follow type forwarders (#1846 by @yyjdelete)
  • The decompiler now supports Scalar Replacement Of Aggregates, which by default only works on display-classes and display-structs. There is an option to make it affect all instances and uses of plain types containing fields only. NOTE: It is still in preview stage. You can activate it when using a debug build.
  • Added support for null-propagation on unconstrained generic expressions
  • Added support for [module: NullablePublicOnly]
  • Enhanced assembly resolution to distinguish target frameworks and use the correct references in case there are multiple versions of framework assemblies loaded.
  • Better decompilation of local functions, pinned regions and display-classes
  • Disassembler: actually make use of the cancellation token
  • Support VB Select Case on string
  • Display System.Void as struct (#1835 by @yyjdelete)
  • Properly decompile auto events with tuples
  • Do not change accessibility of non-transformed local functions
  • Improve drag&drop support (#1860)
  • Fix bug in stackalloc initializer detection involving Span<decimal> (see #1855 by @yyjdelete)
  • Added struct constructor initializer pattern
  • DotNetCorePathFinder: Various bug fixes when working with .net core assemblies
  • Transform post-increment on float/double (#1769 thanks to @Chicken-Bones)
  • Fix extra minus sign when formatting -0 on .NET Core 3.0 (#1790 thanks to @Chicken-Bones)
  • Fix sealed modifier on interface methods with no body (#1792 thanks to @Chicken-Bones)
  • Fix NullReferenceException when foreach decompilation is turned off (#1754 thanks to @davidwengier)
  • Fixed performance problem when using an assembly from a MemoryStream (#1763 thanks to @yyjdelete)

Ready2Run (R2R)

PDB Generation

  • Improved sequence points of try-catch statements
  • Improved generation of sequence points (#1967 by @jacdavis)
  • PDB generation: Use correct sequence points in LINQ expressions and many smallish bug fixes

dotnet ilspycmd Tool

  • New option: usepdb (for improved variable naming)
  • Breaking change: option debuginfo renamed to genpdb
  • #1740: Add LanguageVersion, RemoveDeadCode and RemoveDeadStores switches

ILSpy pwsh cmdlets

  • Show a progress bar during decompilation

ILSpy 6.0 RC1

29 Jun 15:01
Compare
Choose a tag to compare

New Language Features

  • Decompile calli instructions using C# 9.0 function pointer syntax
  • Improved support for Unsafe intrinsics

Enhancements

Bug fixes

  • And many other fixes, for a full list click here

ILSpy 6.0 Preview 4

17 Jun 09:49
Compare
Choose a tag to compare
ILSpy 6.0 Preview 4 Pre-release
Pre-release

New Language Features

  • C# 8.0: Indexing and Slices (Ranges)

New Features

  • TEMPORARILY REMOVED #2013 (comment): Added the capability to extract self-contained executables (PublishSingleFile)
  • Project export: Added an option to allow SDK-style format for project files. (#2031 by @dymanoid)
  • Dynamic assembly list generation for target framework
  • Analyzers: Added "Implements interface"-Analyzer (#2028 by @dymanoid)

UI Improvements

  • Using the middle mouse button to click on tree nodes and links will open the decompilation result in a new tab.
  • IL/IL with C#/ReadyToRun: Add metadata token hyperlinks to type, field, property and event declarations.
  • IL/IL with C#/ReadyToRun: Add rich-text tooltips
  • Show target frameworks next to the assembly version in the tree-view

Enhancements

  • ReadyToRun: Using import cell name to describe callees (#1991 by @cshung)
  • ReadyToRun: Decorate the ready to run disassembly with DebugInfoBounds (#1987 by @cshung)
  • Improve ReduceNestingTransform by considering nested containers (#1880 by @Chicken-Bones)
  • The decompiler now supports Scalar Replacement Of Aggregates, which by default only works on display-classes and display-structs. There is an option to make it affect all instances and uses of plain types containing fields only. NOTE: It is still in preview stage. You can activate it when using a debug build.
  • Added support for null-propagation on unconstrained generic expressions
  • Added support for [module: NullablePublicOnly]
  • Enhanced assembly resolution to distinguish target frameworks and use the correct references in case there are multiple versions of framework assemblies loaded.
  • Updated links to MS Docs (#2030 by @AustinWise)
  • #1498: Remove Fusion API usage: Use standard file enumeration instead. This should enable us to use the GAC even with restricted access, as only the LIST permission is required.

PDB generation

  • Improved sequence points of try-catch statements

Bug fixes

  • Fix #1946: Don't move return into try block when doing so changes the semantics of a finally block.
  • Fix #1992: Analyzer fails to find usages of a type when it is used as a type argument
  • Workaround dotnet/roslyn#43659 in decompiled code.
  • And many other fixes, for a full list click here.

ILSpy 6.0 Preview 3

18 Apr 08:25
Compare
Choose a tag to compare
ILSpy 6.0 Preview 3 Pre-release
Pre-release

An administrative note first: we re-licensed the last part that came from SharpDevelop - the tree view component. It happened more for consistency in the repository than any other reason. You can find the discussions at #1904.

New Language Features

  • C# 7.0: Changes to syntactic disambiguation of generic identifiers

UI Improvements

  • Add "Open with ILSpy" entry to the Windows Explorer context menu on exe and dll files (via Options/Misc)
  • Added a "Debug Metadata Explorer" node for portable PDBs
  • Empty metadata tables can now be hidden from the tree view
  • "Select PDB" context menu: allows to change the PDB file resolved by ILSpy or pick one from a different location
  • Various stability fixes

Enhancements

  • ReadyToRun: Fix #1889 Indexing the methods
  • ReadyToRun: Avoid eager parsing (#1934 by @cshung)
  • Better decompilation of local functions, pinned regions and display-classes
  • Solution and project decompilation: Add missing ProjectTypeGuids

PDB generation

  • Improved generation of sequence points (#1967 by @jacdavis)
  • PDB generation: Use correct sequence points in LINQ expressions and many smallish bug fixes

Bug fixes

  • Fix multi-module support
  • Disassembler: actually make use of the cancellation token
  • And many other fixes, for a full list click here.

ILSpy pwsh cmdlets

  • Show a progress bar during decompilation

Fixes and improvements for SharpLab

  • Do not run ProxyCallReplacer if async state machines are not transformed.
  • Do not show readonly modifier on structs, if the IsReadonlyAttribute is preserved.
  • Provide a setting to desugar X? into Nullable for value types.

ILSpy 6.0 Preview 2

08 Jan 09:56
72b9cdc
Compare
Choose a tag to compare
ILSpy 6.0 Preview 2 Pre-release
Pre-release

UI Improvements

New Language Features

  • Support for generic and static local functions
  • C# 7.3 pattern-based fixed statement

Enhancements

  • Support VB Select Case on string
  • Analyzer follow type forwarders (#1846 by @yyjdelete)

Bug fixes

  • Display System.Void as struct (#1835 by @yyjdelete)
  • Properly decompile auto events with tuples
  • Do not change accessibility of non-transformed local functions
  • Improve drag&drop support (#1860)
  • Fix bug in stackalloc initializer detection involving Span<decimal> (see #1855 by @yyjdelete)
  • Fix DotNetCorePathFinder to properly support netstandard2.1

dotnet ilspycmd Tool

  • New option: usepdb (for improved variable naming)
  • Breaking change: option debuginfo renamed to genpdb

ILSpy 6.0 Preview 1

02 Dec 13:22
Compare
Choose a tag to compare
ILSpy 6.0 Preview 1 Pre-release
Pre-release

BREAKING CHANGES / IN DEVELOPMENT

  • The main new UI feature is a multi-tab docking interface. Please put it to the test and report bugs!
  • ILSpy 6.0 will require at least .NET 4.7.2 (v5.0 required .NET 4.6.2)

New Language Features

New Features

Decompiler Engine Improvements & Bugfixes

  • Added struct constructor initializer pattern
  • DotNetCorePathFinder: Various bug fixes when working with .net core assemblies
  • Transform post-increment on float/double (#1769 thanks to @Chicken-Bones)
  • Fix extra minus sign when formatting -0 on .NET Core 3.0 (#1790 thanks to @Chicken-Bones)
  • Fix sealed modifier on interface methods with no body (#1792 thanks to @Chicken-Bones)
  • Fix NullReferenceException when foreach decompilation is turned off (#1754 thanks to @davidwengier)
  • Fixed performance problem when using an assembly from a MemoryStream (#1763 thanks to @yyjdelete)

UI Improvements

  • New icons (based on VS 2017 icon pack) (#1704 thanks to @Rpinski)
  • Use XAML for icons (high DPI)
  • Docking and multi tab support (see #1725 and #1801)
  • RichText Tooltips (#1654)
  • Folding for XAML output (thanks to @jogibear9988)

dotnet ilspycmd Tool

  • #1740: Add LanguageVersion, RemoveDeadCode and RemoveDeadStores switches

ILSpy 5.0.2

02 Nov 16:59
Compare
Choose a tag to compare

This is a bug fix release.

  • Fix crash while resolving .NET core references
  • Respect language settings in display class transformation
  • Use specialized generic types if a specialized variable is captured
  • Stack overflow when decompiling a bool -> bool? conversion
  • Expand using declarations setting was not saved

ILSpy 5.0.1

07 Oct 07:03
Compare
Choose a tag to compare

This is a bug fix release.

  • VSIX: Fixes for reference assemblies, type navigation
  • PDBgen: Fix for sequence points generation
  • Add support for null propagation on array access: arr?[i]
  • Additional smaller fixes and improvements

ILSpy 5.0

19 Sep 17:03
Compare
Choose a tag to compare

ILSpy 5.0

New Language Features

New Features

  • Decompile a set of assemblies to a solution (#1550 by @dymanoid)
  • New BAML Decompiler
  • MSIX for Microsoft Store: @onovotny added build support (including Azure Pipelines).
  • Generate VS Windows Forms Designer-compliant code if a method is identified as Windows Forms InitializeComponent
  • Added new RemoveDeadStores option.
  • Added new AlwaysShowEnumMemberValues option.

Decompiler Engine Improvements & Bugfixes

  • Improved stability of decompiler and disassembler on invalid metadata tokens.
  • Improved decompilation in case not all types/references are available.
  • Added switch-on-string pattern for empty string case.
  • Add support for ReadOnlySpan<T> initialization pattern
  • Improved decompilation of ref readonly delegates and return types.
    • Improved decompilation of ref typed expressions, in particular ref/in extension methods and in parameters.
  • Improved support for Mono yield return state machines and closure types.
  • Improved decompilation of LINQ queries
  • PDB generator now can emit "method stepping information" for async #1422

Improvements & Bugfixes

  • Many minor bug and stability fixes.
  • Improved performance in ILInlining step
  • VSIX: Fix issue of missing dependencies

UI Improvements

  • Avoid blocking the UI when waiting on assembly load while restoring the saved position in the treeview
  • Support obfuscated names in treeview and search #1359
  • Escape non-printable characters in IL view
  • Rework C# decompiler options dialog (unify language settings panel)
  • Make indentation of decompiled code configurable.
  • Chinese translation by @maikebing (#1299) screenshots
  • Small improvements in search panel by @mcpiroman (#1476)
  • Show error message if an entity cannot be analyzed instead of crashing.
  • Improved linking in the decompiler view:
    • method group / delegate references
    • the constructor of an attribute is reachable, by clicking on the open/close parenthesis.
    • fixed fields are now properly linked
  • Added matching bracket highlighting
  • Updated to AvalonEdit 6.0 Preview

dotnet ilspycmd Tool

  • Add -d|-debuginfo option See Demo app
  • Add -r|-referencepath option

Architectural Changes

  • We dropped support for all TFMs except netstandard2.0 #1416
  • Reactivate many tests from old decompiler

Known issues & limitations

  • C# 8.0 nullable reference types metadata only supports the latest format. Note that this is a breaking change and assemblies generated by older preview versions of C# 8 are not supported. (See #1619 (comment))
  • Generic local functions are not yet supported (#1588)
  • "Open assembly from GAC" may require administrator privileges (#1498)
  • Matching bracket highlighting does not yet support all language features that introduce new syntax.

ILSpy 5.0 RC1

09 Sep 07:14
Compare
Choose a tag to compare

New Language Features

Improvements & Bugfixes

  • Added new RemoveDeadStores option.
  • Added switch-on-string pattern for empty string case.
  • Improved decompilation in case not all types/references are available.
  • Many minor bug and stability fixes.