ILSpy Versions Save

.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!

v7.0-rc1

3 years ago

General

  • Dark mode! (big thank you to @tom-englert in #2347)
  • Building ILSpy for .NET 5 is now possible (see multitargeting.props.template)
  • Added inline display of CustomDebugInformation table entries in metadata
  • Add metadata tree nodes for blob, guid, string and user string heap

Contributions

  • Performance improvements in DataGrid filter (thanks to @tom-englert)
  • Adjust fitness calculation for destructors (by @MikeFH in #2344)
  • Refactored insertion of search results (by @MikeFH in #2335)
  • Use correct URL format in Search MSDN command (by @yyjdelete in #2343)
  • Warning fixes (by @riQQ in #2345)
  • Fixed ConnectionIdRewritePass (by @wwh1004 in #2327)

Bug fixes

  • 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)
  • And many other fixes, for a full list click here.

v7.0-preview3

3 years ago

General

  • Detect use of csc /deterministic switch
  • Update Ready2Run (see #2279 by @cshung)
  • #2286: Enable server-mode GC in ILSpy
  • Improve assembly resolver API to allow async usage

UI Improvements

  • Search enabled in NuGet packages
  • Enable theming for message boxes (see #2276 by @AustinWise)

Bug fixes

  • #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)
  • And many other fixes, for a full list click here.

v7.0-preview2

3 years ago

New Language Features

  • C# 9.0: record classes
  • C# 9.0: with expressions
  • C# 9.0: primary constructors

General

  • Removed the dependency on Humanizer (see #2232 and #2235)
  • Updated ReadyToRun (see #2238, by @cshung)

UI Improvements

  • Added setting highlight the current line in the code view (see #2224, by @DickvdBrink)
  • Fix #2205: About page should always be opened in a new tab.

Bug fixes

  • 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)
  • And many other fixes, for a full list click here.

v7.0-preview1

3 years ago

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

3 years ago

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

3 years ago

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

3 years ago

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

3 years ago

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

  • Updated Chinese translation (by @maikebing, @Berrysoft, @yyjdelete, see #2066)
  • Fix #2107: Add ScrollViewer around DisplaySettingsPanel

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

3 years ago

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

3 years ago

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)

  • 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 to genpdb
  • #1740: Add LanguageVersion, RemoveDeadCode and RemoveDeadStores switches

ILSpy pwsh cmdlets

  • Show a progress bar during decompilation