Releases: icsharpcode/ILSpy
ILSpy 8.0 Preview 4
ILSpy 8 is based on .NET 6.0 compared to .NET Framework 4.7.2 for the previous generations of ILSpy. All artifacts except the self-contained distribution are built framework-dependent, which means .NET 6.0.2 must be installed prior to starting ILSpy.
Contributions
- More themes - Light/Dark are the original ones, R# & VS Code added (see #2906 and #2931 by @ltrzesniewski)
- Improve selected text highlighting (see #2938 by @Konctantin)
- Add support for record structs in CSharpAmbience (see #2911 by @ElektroKill)
- Add support for Visual Basic Yield Return state machine decompilation (see #2874 by @ElektroKill)
- Fix ResXResourceWriter support for MemoryStream resource element (see #2895 by @ElektroKill)
- Use .interfaceimpl type syntax (see #2903 by @ltrzesniewski)
- Fix empty parameter names in delegate declarations (see #2912 by @ElektroKill)
- Support disassembling ReadyToRun binaries compiled using composite mode (see #2944 by @cshung)
Enhancements
- Move Settings to ILSpyX (see #2869)
- Move all code related to single instance logic to separate class (see #2871)
Bug fixes
- Fix #2933: TwoLetterISOLanguageName is insufficient for loading localized documentation.
- Fix #2915: inassembly search filter is case sensitive and automatically suggests the wrong term
- Fix #2922: System.ArgumentOutOfRangeException when decompiling a function
And many other fixes, for a full list click here.
ILSpy 8.0 Preview 3
ILSpy 8 is based on .NET 6.0 compared to .NET Framework 4.7.2 for the previous generations of ILSpy. All artifacts except the self-contained distribution are built framework-dependent, which means .NET 6.0.2 or newer minor release must be installed prior to starting ILSpy.
IMPORTANT: If you don't have the .NET Desktop Runtime installed, the .NET bootstrapper (a dialog popping up when you try to run ILSpy) will link you to the .NET Runtime which supports only console apps! Please follow the above link and download the Desktop Runtime.
New Language Features
- C# 11: Required members
- Updated pattern detection for Roslyn 4.4.0
Contributions
- Add option to always fully qualify type names with
global::
(see #2762 by @hexafluoride) - Refresh ready to run for .NET 7 (see #2774 by @cshung)
- Fix #2736: ILSpy decides to fully qualify type name when it is not necessary (see #2789 by @ElektroKill)
- Fix initialization of FakeProperty with setter (see #2792 by @exyi)
- Add progress reporting to PortablePdbWriter (see #2802 by @andrewcrawley)
- Include assembly name in decompiled code (see #2810 by @miloush)
- Add
IEntityProcessor
toReflectionDisassembler
(see #2835 by @tom-englert) - Fix dynamic type index calculation in
ApplyAttributeTypeVisitor
(see #2840 by @ElektroKill) - Add support for another
using
pattern (see #2841 by @ElektroKill) - Fix debug assertion regarding using directives (see #2843 by @ElektroKill)
- Add support for VB cached delegate initialization (see #2844 by @ElektroKill)
- Add support for VB auto events (see #2845 by @ElektroKill)
- Add support for lock statements within yield return state machines (see #2846 by @ElektroKill)
- Add support for VB async state-machines (see #2853 by @ElektroKill)
- Enable various passing ignored tests (see #2852 and #2854 by @ElektroKill)
- Improve support for post-increment/decrement on pointers (see #2856 by @ElektroKill)
Enhancements
- Various performance improvements in the type system and decompiler engine. (see #2766 and #2754)
- Support native ints in "Combine bit.and into shift" transform
- #2780: Show embedded resource size
Bug fixes
- Fix #2759: Some characters cause rendering issues in the tree view causing ILSpy to freeze. Also ignore embedded resources with an invalid offset, treat them as having zero byte length.
- Fix #2763: Improve decompilation of switch-on-enum by preserving enum type information when inlining local variables into SwitchInstruction.Value.
- PDB generation: Use row ID instead of token in AsyncDebugInfo blob.
- Fix #2806: Do not use implicitly typed out variables, if argument and parameter types do not match exactly.
- #2823: Introduce IType.GetDefinitionOrUnknown() to allow better detection of async state-machines involving unknown types.
- Fix #2825: Missing whitespace after new()
- Fix #2827: Allow users to enter search queries that match our prefixes.
WholeProjectDecompiler
: Fix #2830: Can't decompile project with / in resource name on Windows- Fix #2831: Popup/Tooltip scaling on multi-monitor multi-DPI setups.
WholeProjectDecompiler
: Fix #2850: Make sure that type names longer than 255 characters are handled correctly.
And many other fixes, for a full list click here.
ILSpy 8.0 Preview 2
ILSpy 8 is based on .NET 6.0 compared to .NET Framework 4.7.2 for the previous generations of ILSpy. All artifacts except the self-contained distribution are built framework-dependent, which means .NET 6.0 must be installed prior to starting ILSpy.
New Language Features
- C# 11: ref fields
- C# 10: record structs
- C# 10: Support DefaultInterpolatedStringHandler
- Updated pattern detection for Roslyn 4.3.0
- Output attributes on lambda expressions
Contributions
- Allow user to provide ID when generating a PDB (see #2678 by @andrewcrawley)
- Assume conventionally named unresolved method references are properties or events (see #2677 by @fowl2)
- Add EnableWindowsTargeting propery to csprojs targeting net6.0-windows (see #2752 by @clin1234)
- Reduce allocations in TransformArrayInitializers (see #2731 by @ElektroKill)
- Fix allowed language versions in
ilspycmd
(see #2703 by @superstrom) - Fix crash target framework detection with C++/CLI (see #2698 by @kant2002)
Enhancements
- #2684: Iteratively unhide compiler-generated code, if it is referenced by user-code
- Use
Unsafe.SizeOf
when taking the size of a managed type - #2718: Move XAML files that have an x:Class declaration next to their C# counterparts when using WholeProjectDecompiler
Bug fixes
- #2691: Do not use AssemblyDefintion.GetAssemblyName(). This fails in culture-invariant mode (ilspycmd) when trying to work with satellite assemblies, because System.Reflection.AssemblyName tries to retrieve CultureInfo of the assembly culture
- #2733: Ignore bad metadata when trying to resolve ResolutionScope
- #2741: CallBuilder produces invalid invocation target when disambiguating calls to protected methods
And many other fixes, for a full list click here.
ILSpy 8.0 Preview 1
ILSpy 8 is based on .NET 6.0 compared to .NET Framework 4.7.2 for the previous generations of ILSpy. All artifacts except the self-contained distribution are built framework-dependent, which means .NET 6.0 must be installed prior to starting ILSpy. This is true for:
- the installer
- the framework-dependent zip
- the VSIXs
Functionality is supposed to be unchanged and fully functional in this release compared to 7.2. If something works in 7.2 but not 8.0-preview1, please file a bug.
Breaking Changes
- ILSpy 8.0 will target
net60-windows
(see #2642) and all plugins will have to be migrated to the new platform.- Note: The
ICSharpCode.Decompiler
engine and NuGet package will continue to targetnetstandard2.0
- Note: The
- Platform-independent APIs will be moved to ICSharpCode.ILSpyX, currently that includes (but is not limited to):
- LoadedAssembly and AssemblyList APIs
- PdbProvider APIs
LoadedAssembly.WaitUntilLoaded()
was removed, because it leads to bugs; useawait LoadedAssembly.GetLoadResultAsync()
instead- The MSIX project has been removed and the installer introduced in 7.x will take its place in the Microsoft Store going forward (at RC/RTM).
Contributions
ilspycmd
received support for the "nested directories" option on project export. (see #2636 by @GreyXor)ilspycmd
support for generating a solution from multiple projects (based on code provided by @marwie in #2364)- Namespace nesting in ILSpy tree view (based on code provided by @ds5678 in #2667)
- Fix the ordering of COM interface methods, properties, and events to appear in their originally defined order (see #2639 by @zhuman)
Enhancements
- Performance optimization of analyzers (see #2643)
Bug fixes
- #2634: target expressions of delegate references were not decompiled correctly
- #2632: Make sure that changing the setting "ExpandMemberDefinitions" has an effect when refreshing a decompiled view.
- #2629: Indentation of method-call chains.
- #2653: ILSpy reports wrong visibility for overridden protected internal properties if located in another assembly.
- #2610: Explicitly qualify members in TemplateBindings.
- #2655: TranslateArrayInitializer crashes with out of order array init
And many other fixes, for a full list click here.
ILSpy 7.2.1
Enhancements
- Improved handling of nullability annotations on types involved in implicit conversions.
- Improved detection of pinned regions.
Bug fixes
- #2640: Invalid implicit enum value for unordered items
- #2646: Missing values for enums with skipped or duplicate items
- #2664: Fix NRE in ScopeSearchToAssembly.
- #2637: Add missing Microsoft.Win32.Registry dependency to nuspec.template
- #2582: Assertion when using named arguments in a constrained call
- #2654: Ignore custom attributes on parameter where SequenceNumber is out-of-range.
- See full list of fixes here.
ILSpy 7.2
New Language Features
- C# 7.0 pattern matching
- C# 8.0 stackalloc in nested contexts
- C# 9.0 skip locals init
- C# 9 covariant returns
- C# 10 file-scoped
namespace
declarations - C# 10
abstract static
interface members - Updated pattern detection for Roslyn 4.0
- Updated pattern detection for Mono C# compiler 5.x
- Updates pattern detection for Roslyn 3.11
Contributions
- Introduce MSI-based installer (by @Rpinski in #2558)
- ILSpyCmd: Added support for single-file bundles (by @Freakness109 in #2499)
- Support loading compressed Xamarin assemblies (by @cpraehaus in #2471)
- BAML decompiler: Add missing
x:Static
(by @wwh1004 and @bert2 in #2536) - Various improvements in pattern detection for records (by @yyjdelete in #2476)
- Add TypeDefinitionDocuments to custom debug information data (by @davidwengier in #2578)
- Fix
MainWindow.OpenLink
for net6.0 (by @yyjdelete in #2585) - Fix loading icons embedded as resources (by @AustinWise in #2595)
- Use Trace.Listeners instead of Debug.Listeners (by @yyjdelete in #2555)
- Updated ReadyToRun. (by @cshung in #2489)
- Analyzers: Return valid modules only (by @zvirja in #2496)
- Extensibility: Make SearchTermMatches virtual (by @beaverden in #2494)
- Fix null check in
BamlDecompilerTypeSystem.HasType
(by @yyjdelete in #2509) - Updated Chinese translation (by @nyerst in #2606)
Enhancements
- Assembly resolver: GetReferenceAssemblyPath now picks closest available version
- #1175: Added
inassembly:
andinnamespace:
search predicates - #2298: Allow to change the DecompilerTextView's font size through scrolling.
- #2404: Cache decompilation results when switching tabs
- Better support for voice commands/keyboard navigation
- Proper support for long paths in Windows 10 in
WholeProjectDecompiler
. - #2608: Support for submenu items
- Added hyperlinks to metadata explorer tables
- Add simple public API for
XamlDecompiler
- Improved performance of LoadedAssembly.GetTargetFrameworkId, LoadedAssembly.GetRuntimePackAsync and others
- #2368: Dim namespaces containing only
internal
types - Improved window menu
- Added "Copy results" menu item to Analyzer
- #2550 and #2551: Fix tab and focus handling
- #2330: Added an option to toggle namespace sub-directory support in project export
- Added ETW instrumentation to the decompiler for performance measurements
- Added
DecompilerTypeSystem.CreateAsync
to allow asynchronous initialization - #2522: Support backticks in fully-qualified names when searching for type
- #2520: The matched pairs are hardly visible in the dark theme
- Add "Extract package entry" context menu entry for binaries inside bundles/packages
- IL disassembly: Option to show raw offsets and instruction bytes
- IL disassembly: Show header sizes
Bug fixes
- Dirkster99/AvalonDock#324 Navigator window a11y fixes
- #2579: Use "ILSpyInstance" mutex to wait until the first ILSpy instance is ready to receive
WM_COPYDATA
- #2615: Overflow check did not work reliably due to fp rounding error
- #2612: Decompilation of
newarr
withint.MaxValue
causes OOME - #2622: Fix crash in ExpressionBuilder when decompiling object initializer composed of readonly properties
- #2533: Various bugfixes in pinned-region detection.
- #2547 and #2495: Improved decompilation of VB.NET decimal constants.
- #2544: Do not produce syntax errors with interpolated strings
- #2545: LINQ does not support null-forgiving operator, suppress transform.
- #2541: Add explicit unchecked() around non-constant cast of constant to
nint
- #2518: "Other resources" section in resource files was not properly displayed
- #2534: Handle default implementations of properties and events in interfaces
- #2458, #2459: Fixed various correctness issues in IL code generated by C++/CLI
- #2530: Stability fixes in pattern matching detection
- #2378: Stability fixes in deconstruction detection
- #2379: This fixes an issue where
return
statements within try-blocks could turn intogoto
statements - #2052: BAML-to-XAML: Resolve namespaces of properties
- #1858 and #2188: Improved decompilation of display-classes
- #2424: Suppress the string==null special-case within the string class itself
- #2092: aggressively inline code in compiler-generated lambdas and expression trees
- And many other fixes, for a full list click here
ilspycmd
- Removed .NET Core 2.1 TFM, added .NET 6.0 TFM
Visual Studio AddIn
- Allow to open ILSpy on project and package references
- We now have an addin for VS2022 https://marketplace.visualstudio.com/items?itemName=SharpDevelopTeam.ILSpy2022 that is separate from the legacy addin.
ILSpy 7.2 RC
Fixes
- #2623 Failed to start in zh-Hans
- Dirkster99/AvalonDock#324 Navigator window a11y fixes
ILSpy 7.2 Preview 4
Note: ILSpy_binaries_7.2.0.6841-preview4_Fix_zhCN_Start.zip is a quick fix for #2623 - please use when experiencing start crashes on a Chinese system.
New Language Features
- C# 8.0: stackalloc in nested contexts
Contributions
- Add TypeDefinitionDocuments to custom debug information data (by @davidwengier in #2578)
- Fix
MainWindow.OpenLink
for net6.0 (by @yyjdelete in #2585) - Fix loading icons embedded as resources. (by @AustinWise in #2595)
- Updated Chinese translation. (by @nyerst in #2606)
Enhancements
- Updated AvalonEdit and other Nuget packages
- Added hyperlinks to metadata explorer tables
- Assembly resolver: GetReferenceAssemblyPath now picks closest available version
- Improved performance of LoadedAssembly.GetTargetFrameworkId, LoadedAssembly.GetRuntimePackAsync and others
- #2368: Dim namespaces containing only
internal
types - Improved window menu
- #2608: Support for submenu items
- Added "Copy results" menu item to Analyzer
Bug fixes
- #2579: Use "ILSpyInstance" mutex to wait until the first ILSpy instance is ready to receive
WM_COPYDATA
. - #2615: Overflow check did not work reliably due to fp rounding error.
- #2612: Decompilation of
newarr
withint.MaxValue
causes OOME. - #2622: Fix crash in ExpressionBuilder when decompiling object initializer composed of readonly properties.
- And many other fixes, for a full list click here.
ILSpy 7.2 Preview 3
New Language Features
- Updated pattern detection for Roslyn 4.0
- Updated pattern detection for Mono C# compiler 5.x
- C# 10 file-scoped
namespace
declarations - C# 10
abstract static
interface members
Contributions
- Use Trace.Listeners instead of Debug.Listeners (by @yyjdelete in #2555)
- Introduce MSI-based installer (by @Rpinski in #2558)
ilspycmd
- Removed .NET Core 2.1 TFM, added .NET 6.0 TFM
Enhancements
- #2404: Cache decompilation results when switching tabs.
- #2550 and #2551: Fix tab and focus handling.
- #2330: Added an option to toggle namespace sub-directory support in project export.
- #1175: Added
inassembly:
andinnamespace:
search predicates
Bug fixes
- #2533: Various bugfixes in pinned-region detection.
- #2547 and #2495: Improved decompilation of VB.NET decimal constants.
- #2544: Do not produce syntax errors with interpolated strings
- #2545: LINQ does not support null-forgiving operator, suppress transform.
- #2541: Add explicit unchecked() around non-constant cast of constant to
nint
- And many other fixes, for a full list click here.
ILSpy 7.2 Preview 2
New Language Features
- C# 9.0 skip locals init
Contributions
- Various improvements in pattern detection for records (by @yyjdelete in #2476)
- ILSpyCmd: Added support for single-file bundles (by @Freakness109 in #2499)
- BAML decompiler: Add missing
x:Static
(by @wwh1004 and @bert2 in #2536)
Visual Studio AddIn
- We now have an addin for VS2022 https://marketplace.visualstudio.com/items?itemName=SharpDevelopTeam.ILSpy2022 that is separate from the legacy addin. If you had ILSpy installed in a preview version of VS2022, please uninstall the old version and install this new one.
Enhancements
- Added ETW instrumentation to the decompiler for performance measurements.
- Added
DecompilerTypeSystem.CreateAsync
to allow asynchronous initialization. - #2522: Support backticks in fully-qualified names when searching for type
- #2520: The matched pairs are hardly visible in the dark theme
- #2298: Allow to change the DecompilerTextView's font size through scrolling.
Bug fixes
- #2518: "Other resources" section in resource files was not properly displayed
- #2534: Handle default implementations of properties and events in interfaces
- #2458, #2459: Fixed various correctness issues in IL code generated by C++/CLI.
- #2530: Stability fixes in pattern matching detection
- #2378: Stability fixes in deconstruction detection
- And many other fixes, for a full list click here.