Releases: icsharpcode/ILSpy
Releases · icsharpcode/ILSpy
ILSpy 6.0
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
asstruct
(#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 involvingSpan<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)
- Ready2Run (by @cshung see https://github.com/icsharpcode/ILSpy/wiki/ILSpy.ReadyToRun)
- 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
- ReadyToRun: Optional output of UnwindInfo (#2043 by @edkazcarlson)
- ReadyToRun: Using import cell name to describe callees (#1991 by @cshung)
- ReadyToRun: Decorate the ready to run disassembly with DebugInfoBounds (#1987 by @cshung)
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 togenpdb
- #1740: Add LanguageVersion, RemoveDeadCode and RemoveDeadStores switches
ILSpy pwsh cmdlets
- Show a progress bar during decompilation
ILSpy 6.0 RC1
New Language Features
- Decompile
calli
instructions using C# 9.0 function pointer syntax - Improved support for Unsafe intrinsics
Enhancements
- ReadyToRun: Optional output of UnwindInfo (#2043 by @edkazcarlson)
Bug fixes
- And many other fixes, for a full list click here
ILSpy 6.0 Preview 4
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
intotry
block when doing so changes the semantics of afinally
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
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
UI Improvements
- Ready2Run (by @cshung see https://github.com/icsharpcode/ILSpy/wiki/ILSpy.ReadyToRun)
- Metadata Explorer (see https://github.com/icsharpcode/ILSpy/wiki/Metadata-Explorer)
- Assembly list dropdown in toolbar, enhanced assembly list management
- Add "Reset to defaults" in Options dialog
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
asstruct
(#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 involvingSpan<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 togenpdb
ILSpy 6.0 Preview 1
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
- 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
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
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
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
ILSpy 5.0
New Language Features
- C# 8.0: Nullable Reference Types
- C# 7.3:
unmanaged
generic constraint - C# 7.3 Indexing movable fixed buffers: Fixed buffers can be indexed into without first being pinned.
- Use Unsafe intrinsics to represent IL operations that cannot be expressed in C#.
- C# 7.0 Generalized async return types
- C# 7.0 Local functions (#1586)
- C# 7.0 Throw expressions (#1600)
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 particularref
/in
extension methods andin
parameters.
- Improved decompilation of
- 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
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.