All Versions
20
Latest Version
Avg Release Cycle
32 days
Latest Release
1228 days ago

Changelog History
Page 1

  • v7.0-preview1 Changes

    November 16, 2020

    ๐Ÿ‘€ Important note for consumers of our ICSharpCode.Decompiler NuGet package: we have aligned our dependencies with Roslyn 3.8.0, see #2173

    ๐Ÿ†• New Language Features

    • โž• Add support for .NET 5 custom calling conventions.
    • ๐Ÿ‘Œ Improved support for Unsafe-intrinsics

    ๐Ÿ’ป UI Improvements

    • ๐Ÿ“ฆ .NET bundles and Nuget packages are now directly embedded in the tree view.

    General

    • ๐Ÿ‘Œ Improved project/solution decompilation (see #2186, by @wwh1004)
    • ๐Ÿ‘Œ Support for .NET bundles (see #2191)
    • ๐Ÿ‘Œ Supports code generated by Roslyn 3.8.0

    ๐Ÿ› 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.
    • ๐Ÿ›  And many other fixes, for a full list click here.
  • v6.2.1 Changes

    October 12, 2020

    ๐Ÿ›  This is a bugfix release.

    • #2177: PDB Generation is confused by enhanced using statements
    • #2183: Incorrect version in binding redirect for AvalonEdit
    • #2174: Some compilers produce display class ctors with unused local variables
    • #2182: Do not inline switch value, in case variable is reused.
    • #2180: Restrict the (uint?)-1 special case to casts to integer types.
    • #2185: Fix MemberIsHidden-check for local function display structs
  • v6.2 Changes

    September 24, 2020

    ๐Ÿ†• New Language Features

    • C# 7.0: Deconstruction
    • C# 8.0: await foreach
    • C# 8.0: Disposable ref structs
    • C# 8.0: Enhanced using statements
    • C# 8.0: switch expressions
    • C# 9.0: init accessors
    • ๐Ÿ‘€ C# 9.0: function pointers (see #2150)
    • C# 9.0: foreach with GetEnumerator extension methods
    • C# 9.0: Lambda parameter discards

    General

    • โž• Add an option to enable aggressive inlining of expressions
    • โž• Add option for string.Concat decompilation
    • โž• Add an option to always qualify member references (by @Pathoschild, see #2114)
    • ๐Ÿ‘€ ReadyToRun: Variable tracking in output (by @edkazcarlson, see #2067)
    • โšก๏ธ ReadyToRun: Optimized debug info output (by @cshung, see #2113)
    • ๐Ÿ‘€ Work on unifying the code formatting (see #2128)
    • โฌ†๏ธ Tests upgraded to Roslyn 3.8.0-3.final

    ๐Ÿ’ป UI Improvements

    • ๐Ÿ‘Œ Improve performance of Metadata DataGridCell (see #2151)
    • ๐Ÿ›  Fix #2107: Add ScrollViewer around DisplaySettingsPanel
    • ๐Ÿ“‡ Metadata: Improvements/fixes by @srutzky, see #2134, #2135, #2145, #2147 and #2153
    • โšก๏ธ Updated Chinese translation

    ๐Ÿ› Bug fixes

    • ๐Ÿ›  Fix #2129: be more flexible about the initialization order for the async state machine
    • ๐Ÿ›  Fix #2140: ILSpy 6.2p1 no longer respects "use discards" setting
    • ๐Ÿ›  Fix #2139: ArgumentOutOfRangeException for some xmldoc
    • ๐Ÿ›  Fix #2039: Code generated by VB's On Error Resume Next causes "unassigned variable" compile errors
    • ๐Ÿ›  Fix #2156: range syntax not being detected correctly in some cases
    • BAML decompiler: #2109 and #2106
    • ๐Ÿ›  Fix #2086: Check that window belongs to ILSpy before sending it a WM_COPYDATA message.
    • ๐Ÿ›  Fix #2090: ignore mscorlib references without public key token, when trying to resolve mscorlib. This will automatically fallback to .NET 4.0's mscorlib.dll.
    • ๐Ÿ“Œ #1292: Fix some more problems with pinned locals.
    • ๐Ÿ›  Fix #1555: Eliminate value-type temporaries emitted by mcs on field reads.
    • ๐Ÿ›  Fix #2056: "remove branch into body" must be executed before the clone cleanup
    • ๐Ÿ›  Fix #2101: reset removeExtraLoad flag if keepAssignmentBefore is set; implement simple case-de-duplication: abort if there are any duplicate cases.
    • ๐Ÿ›  Fix #2100: 'value'-named auto property could not be recognized correctly.
    • ๐Ÿ›  Fix #1441: Decompose flags enum values starting from the value with the highest Hamming Weight (popcount).
  • v6.2-preview2 Changes

    September 18, 2020

    ๐Ÿ†• New Language Features

    • ๐Ÿ‘€ C# 9.0: function pointers (see #2150)
    • C# 9.0: foreach with GetEnumerator extension methods

    General

    • ๐Ÿ“‡ Metadata: Improvements/fixes by @srutzky, see #2134, #2135, #2145, #2147 and #2153
    • ๐Ÿ‘Œ Improve performance of Metadata DataGridCell (see #2151)
    • โšก๏ธ Updated Chinese translation (see #2160)
    • โž• Add option for string.Concat decompilation
    • โฌ†๏ธ Tests upgraded to Roslyn 3.8.0-3.final

    ๐Ÿ› Bug fixes

    • ๐Ÿ›  Fix #2129: be more flexible about the initialization order for the async state machine
    • ๐Ÿ›  Fix #2140: ILSpy 6.2p1 no longer respects "use discards" setting
    • ๐Ÿ›  Fix #2139: ArgumentOutOfRangeException for some xmldoc
    • ๐Ÿ›  Fix #2039: Code generated by VB's On Error Resume Next causes "unassigned variable" compile errors
    • ๐Ÿ›  Fix #2156: range syntax not being detected correctly in some cases
    • BAML decompiler: #2109 and #2106
  • v6.2-preview1 Changes

    August 31, 2020

    ๐Ÿ†• New Language Features

    • C# 7.0: Deconstruction
    • C# 8.0: await foreach
    • C# 8.0: Disposable ref structs
    • C# 8.0: Enhanced using statements
    • C# 8.0: switch expressions
    • C# 9.0: init accessors
    • C# 9.0: Lambda parameter discards

    General

    • โž• Add an option to enable aggressive inlining of expressions.
    • โž• Add an option to always qualify member references (by @Pathoschild, see #2114)
    • ๐Ÿ‘€ ReadyToRun: Variable tracking in output (by @edkazcarlson, see #2067)
    • โšก๏ธ ReadyToRun: Optimized debug info output (by @cshung, see #2113)
    • ๐Ÿ‘€ Work on unifying the code formatting (see #2128)

    ๐Ÿ’ป UI Improvements

    ๐Ÿ› Bug fixes

    • ๐Ÿ›  Fix #2086: Check that window belongs to ILSpy before sending it a WM_COPYDATA message.
    • ๐Ÿ›  Fix #2090: ignore mscorlib references without public key token, when trying to resolve mscorlib. This will automatically fallback to .NET 4.0's mscorlib.dll.
    • ๐Ÿ“Œ #1292: Fix some more problems with pinned locals.
    • ๐Ÿ›  Fix #1555: Eliminate value-type temporaries emitted by mcs on field reads.
    • ๐Ÿ›  Fix #2056: "remove branch into body" must be executed before the clone cleanup
    • ๐Ÿ›  Fix #2101: reset removeExtraLoad flag if keepAssignmentBefore is set; implement simple case-de-duplication: abort if there are any duplicate cases.
    • ๐Ÿ›  Fix #2100: 'value'-named auto property could not be recognized correctly.
    • ๐Ÿ›  Fix #1441: Decompose flags enum values starting from the value with the highest Hamming Weight (popcount).
    • ๐Ÿ›  And many other fixes, for a full list click here.
  • v6.1 Changes

    July 28, 2020

    ๐Ÿ†• New Language Features

    • C# 9.0: Native ints
    • C# 9.0: Attributes on local functions

    General

    • ๐Ÿ“‡ ILSpy now uses System.Reflection.Metadata 1.8.1

    ๐Ÿ’ป UI Improvements

    • Assembly List UX: double-click selects list and dismisses dialog
    • Base types treenode: Create a flat list of nodes containing all base types instead of just the direct base types

    ๐Ÿ› Bug fixes

    • ๐Ÿ›  Fix #2050: Ref local variable is inlined incorrectly, changing the exception behavior
    • ๐Ÿ›  Fix #1903: un-inline argument of unsupported isinst instructions.
    • ๐Ÿ›  Fix #2073: Ensure the startOffsetVar actually appears in the expected instruction, not somewhere else.
    • ๐Ÿ›  Fix #2068: ILSpy can't find referenced library even though it's open
    • ๐Ÿ›  And many other fixes, for a full list click here.
  • v6.0 Changes

    July 07, 2020

    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
    • 0๏ธโƒฃ 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
  • v6.0-rc1 Changes

    June 29, 2020

    ๐Ÿ†• 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
  • v6.0-preview4 Changes

    June 17, 2020

    ๐Ÿ†• 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.
  • v6.0-preview3 Changes

    April 18, 2020

    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.