Releases: icsharpcode/ILSpy
Release list
ILSpy 11.1
Want to learn how we built the Avalonia port of ILSpy? Join us October 6th for Move over, WPF! Avalonia for X-Plat Desktop Apps (with a lot of AI help)
A major focus of this release was to find the small (and not so small) bugs of the decompiler via a revamp of our testing by adding two new tools that allow mass-testing (for more information see TestTools/README.md):
nugetfuzz: downloads packages from nuget.org and runs them through a DEBUG build ofilspycmd(sanity checks/assertions enabled). It records: crash, assertion fail, warnings in the decompiler output (as comment "IL_<nnnn>: ...") as well as any residue of compiler-generated identifiers in C# code (hints at missing language feature/pattern support).decompdiff: runs an assembly through two different versions of the decompiler (driven viailspycmd) and calculates a diff of the generated source code.
You should see better decompilation results as an effect of this push and the general push of fixing previously reported decompiler bugs by users.
New Language Features
- PR #4014: Emit C# 7.1 default literals where the context supplies the type
- PR #3930: Decompile C# 14 implicit span conversions (first-class span types)
- PR #3975: Fix #3624: decompile semi-auto properties with the C# 14 field keyword
User Interface
- PR #4039: Fix five Avalonia UI regressions: mouse navigation, derived types, Enter, Delete, Analyze in the Analyzer pane
- PR #4056: Fix #4054: Accept drops from sources that do not permit the Move effect
- PR #4150: Fix #4146: keep Options section names readable on hover
- PR #3998: Fix #3996: edit the display font size in points, not pixels
- PR #4154: Fix #3526: show WPF resource entry names unescaped
- PR #4139: Scroll a node's new children into view when it is expanded
- PR #4129: Reject the name of an existing list in the assembly list prompt
- PR #4116: Fix #2093: find a navigation target in a reference assembly too
- PR #4117: Empty the panes when the assembly list is cleared
- PR #4044: Fix #4040: Compose accessibility and static overlays onto search result icons
- PR #4025: Fix package search and navigation follow-ups from #4023
- PR #3997: Fix #3993, #3994: main-menu shortcuts and dark-mode hover tooltips
- PR #4002: Give dark-theme syntax colors a perceptual contrast floor
- PR #3989: Prevent double dark conversion of syntax colors
- PR #3988: Keep the editor zoom separate from the configured font size
Contributions
- PR #4133: Remove the delegate cache left by a discarded method-group conversion — @dualfroz, thank you!
- PR #4134: Recognize a VB exception filter's type test — @dualfroz, thank you!
- PR #4053: Handle unresolved value-type call targets — @sonyps5201314, thank you!
- PR #4022: Improve floating-point fraction and negative constant reconstruction — @SychicBoy, thank you!
- PR #3897: Fix #3894: keep lambda parameter typing consistent — @sailro, thank you!
- PR #3888: Fix #3853: infer scoped locals from ref safety — @sailro, thank you!
- PR #3887: Model scoped and UnscopedRef lifetimes in the type system — @sailro, thank you!
- PR #3980: Keep instance-dependent assignments in constructors — @sailro, thank you!
Performance
- PR #4156: Keep the UI responsive while searching and drawing reference nodes
- PR #4106: Read the file system once per reference closure, not per reference
- PR #4023: Search inside packages without stalling, and navigate to what it finds
Enhancements
- PR #4158: Invent a syntax for
ldtoken. - PR #4147: Share the lookup and overload-resolution stages
- PR #4144: Share one escalation loop across the member-reference builders
- PR #4091: Split StackType.O into StackType.Obj+StackType.VT
- PR #4113: Remove ITypeReference
- PR #4090: Extend InferType() to every ILInstruction
- PR #4089: Always pass the type system into InferType().
- PR #4085: Pass the compilation to ILInstruction.CheckInvariant
- PR #4077: Improvements for type inference
- PR #4075: Infer the C# type of ldlen
- PR #4064: Expand nested conditional operators back into if-else
- PR #4062: Detect local functions renamed by obfuscators
- PR #4070: Drop isReferenceType when erasing unknown types
- PR #4071: Improve types for variables generated from stack slots
- PR #4068: Type inference for switch-expressions
- PR #4065: Insert casts in switch expression to ensure a best common type exists
- PR #4047: Bound every .resources length against the remaining stream before allocating
- PR #4048: Never size bundle entry decompression from the manifest's declared size
- PR #4046: Cap LightJson parser nesting depth to prevent stack overflow
- PR #4006: Tidy up the resolve-result hierarchy and document the tuple-cast rule
- PR #4005: Merge tuple element names during type inference
- PR #4008: Make ThisResolveResult an ILVariableResolveResult of the this parameter
- PR #3974: Extend UseLambdaSyntax to emit statement lambdas
ILSpyCmd
- PR #4101: Fix #3154: accept single-file bundles as ilspycmd input
- PR #4063: Accept member IDs without a signature in --navigateto
Documentation
- PR #4112: Update Unix/Mac setup guidance
- PR #4067: Add code review guidance and require Assisted-by on every agent commit
- PR #4051: Require spec references and design sign-off for engine changes
- PR #3999: Fix #3664: Move ipynb to Verso and adapt to v11 API surface
Testing / Infrastructure
- PR #4161: Rule out non-Framework processes without reading their modules
- PR #4131: Make every nugetfuzz finding traceable to the assembly it came from
- PR #4128: Report compiler-generated names leaking into decompiled output
- PR #4125: September 2026 NuGet Updates
- PR #4115: decompdiff: build both sides by default, add --no-build
- PR #4104: Fix decompdiff bad diffs
- PR #4097: Wait for the resolved dependencies, not for the application to go idle
- PR #4088: Widen decompdiff reference probing and prune unfixable misses
- PR #4087: Report field naming violations as suggestions
- PR #4081: Fix #4079: make stable Roslyn restorable from the solution directory
- PR #4083: Synchronize headless UI tests on idle and hit-tested clicks
- PR #4078: Run decompdiff against git refs, and build a corpus from nuget's most-downloaded packages
- PR #4069: Update NuGet packages; adapt to Dock.Serializer.SystemTextJson 12.1.0.6
- PR #4074: Bind each corpus assembly against its own reference-assembly pack
- PR #4073: Wait for the click target instead of counting frames
- PR #4060: Pin the deconstruction shapes the transform has to keep matching
- PR #4050: #2764: Add regression test for duplicate assembly references
- PR #4032: Tie the .NET Framework fixture host to the test host's lifetime
- PR #4033: Use server GC for the decompiler test suite (workstation GC on the shared Windows CI runner)
- PR #4035: Render a frame while the headless UI tests wait
- PR #4029: Walk the whole decompiler pipeline in the Debug Steps pane
- PR #4013: Add ILAst output to ilspycmd debug builds
- PR #4012: Stop ILSpy.Tests from retaining every test's app graph (15 GB -> 0.7 GB)
- PR #4020: Add TestTools with the nugetfuzz and decompdiff corpus tools
- PR #4009: Aim the tree-gesture pointer tests at a hit-testable row
- PR #4007: Fix pre-commit hook failure when package source mapping is active
- PR #3991: Cover the field-keyword name collisions with fixtures
- PR #3982: Remove UI tests that only restate the code they cover
Bug Fixes
- PR #4162: Fix #3316: keep unresolved plain XAML properties plain
- PR #4119: Fix #2372: report a field's address loads on their own
- PR #4043: Fix #3282: leave out trailing optional arguments in indexer accesses
- PR #4132: Fix #3320: detect dynamic await in pre-Roslyn state machines
- PR #4130: Look past comment placeholders when matching statement sequences
- PR #4127: Ignore nullability when comparing backing field and property type of auto properties
- PR #4124: Fix #2823 and add a PDB verification mode to nugetfuzz
- PR #4111: Fix #3568: read a record's member order off its generated members
- PR #4110: Fix #2930: follow references past the ones a document's assembly names
- PR #4109: Fix #2919: keep a settings file that cannot be parsed
- PR #4108: Fix the parts of #2253 that still reproduce
- PR #4105: Fix #2080: resolve GAC references onto the installed version
- PR #4103: #3315, #2253: make exported WPF projects build without hand edits
- PR #4102: Fix #3315: make exported WPF projects reproduce their resources
- PR #4100: Fix #3008: local function forwarding a display class loses its scope
- PR #4098: Fix #2054: repair a chain of type forwarders that cycles
- PR #4096: Fix two BAML bugs that make the decompiled XAML unwritable
- PR #4057: Fix uncompilable lambda parameter lists
- PR #4086: Parenthesize a ref-conditional assignment target
- PR #4084: Fix the C# 14 field keyword being printed next to a surviving backing field
- PR #4080: Fix #3714: declare a local function in its innermost capture scope
- PR #4072: Fix #3704: keep the static type of a dynamic call target
- PR #4021: Add an async/await pattern test suite and fix the await operand conversions it found
- PR #4024: Avoid using query expressions if there's indications that lambda parameter types cannot be omitted.
- PR #3964: Delay exceptions when copy-propagating an address into a StObj target
- PR #3920: Fix #1142: recover enum members for out-of-range constant operands
- PR #3995: Report a call as unresolvable when nothing matched at all
- PR #4000: Fix #3729: recognize value-type ctor call on unresolved declaring type
- PR #4001: Print the init-only marker after the set keyword again
- PR #3973: Fix the remaining deconstruction issues
For a full list of changes click here.
This releas...
ILSpy 11.0
The major news item of this release cycle is us porting ILSpy from WPF to Avalonia. With this port, ILSpy is now available on Linux and Mac in addition to Windows. Do note that there is no longer a WPF frontend, it was entirely removed in favor of the new Avalonia one.
Aside from this already major UI work, a few other long-standing UI features from our wish list made it into ILSpy:
- File / Open from NuGet feed
- File / Open from running process (all platforms!)
- Window / Bookmarks (full-featured bookmarks implementation for the decompiled C# view)
- View / Options / Display / Show Omnibar (breadcrumb/search bar feature at the top of decompiled code)
A second focus area was improving the ilspycmd story for agentic development. Download numbers for our dotnet tool took off in the last quarter of 2025, and agents like Claude are the reason for that (downloads are now exceeding 70k/week). Given we are using Claude as well, we found a few areas lacking that needed improvement, especially to save on token spend:
- PR #3924: ilspycmd: add --member for single-member decompilation
- PR #3801: Fix #3797: resolve ilspycmd -t type names with fuzzy matching
- PR #3951: Add --dump-table metadata dump mode to ilspycmd
Together with list/extract embedded resources, decompile BAML to XAML which shipped in 10.1, we now have a good set of optimized options for the most common scenarios in skills and tool calling available for you.
A part of this initiative was hardening:
- PR #3843: Bound XamarinCompressedFileLoader against crafted XALZ headers
- PR #3842: Bound WebCilFile section access against mapped-view length
- PR #3841: Harden BAML reader against crafted-resource crashes
- PR #3840: Bound .rsrc resource-tree parsing against crafted input
- PR #3838: Guard against OOB read when bundle signature is at file start
The third pillar of this release is fixing long-standing annoyances and in general investing in tech debt, eg fuzzing our decompiler engine with NuGet packages. A lot (!) of the changes detailled in the release notes for preview 1 and rc deal with exactly those many small to big improvements.
Finally, we'd like to point out one retirement: the VS2017/2019 add-in has been removed, we continue to support VS2022-2026.
What is new since RC?
- PR #3976: Fix #3451: qualify an explicit implementation as the type implements it
- PR #3971: Fix #3510: keep exporting a project when a member cannot be decompiled
- PR #3969: Keep null-conditional LINQ chains in method syntax — @sailro, thank you!
- PR #3970: Generate DecompilerSettings boilerplate from [DecompilerSetting] attributes
- PR #3967: Keep ref-returning switches as statements — @sailro, thank you!
- PR #3950: Reconstruct nested deconstruction designations
- PR #3956: Fix #3952: decompile VB.NET anonymous types and queries to valid C#
- PR #3959: Fix overflow approximating fractions of large negative constants
- PR #3960: Fix overflow computing the element count of a multi-dim array initializer
- PR #3961: Recognize a protected copy constructor on a sealed record
- PR #3958: Fix crash decompiling reference assemblies with stripped method bodies
- PR #3955: Fix #3954: name the entry point of a top-level program 'Main'
For a full list of changes click here.
This release is based on .NET 10.0. Please make sure that you have it installed on your machine beforehand.
Note for Mac users: see https://github.com/icsharpcode/ILSpy/wiki/Build-Artifacts#running-the-macos-artifact because the ILSpy.app is neither signed nor notarized.
ILSpy 11.0 Release Candidate
This release is based on .NET 10.0. Please make sure that you have it installed on your machine beforehand.
Note for Mac users: see https://github.com/icsharpcode/ILSpy/wiki/Build-Artifacts#running-the-macos-artifact because the ILSpy.app is neither signed nor notarized.
New Features
- PR #3936: Add "Open from running process" dialog
- PR #3951: Add --dump-table metadata dump mode to ilspycmd
- PR #3924: ilspycmd: add --member for single-member decompilation
User Interface
- PR #3932: Metadata row details: full-width layout and a decompiler-styled editor for text blobs
- PR #3927: Fix #2879: show stored FieldList/MethodList values for memberless types
- PR #3922: Fix #749: toggle a member's fold together with its documentation
- PR #3923: Fix #781: click highlights member references, Ctrl+Click navigates
- PR #3918: Fix #633: Overrides analysis and this/base keyword navigation
- PR #3906: Show hover tooltips for dynamic member accesses
Enhancements
- PR #3933: Convert float/double += 1 into increment and decrement expressions
- PR #3926: Generate and resolve xml doc ID strings at the metadata level
- PR #3917: Represent VB.NET parameterized properties as accessor methods in C# output
- PR #3899: Don't undo the compiler's &&-to-& optimization
- PR #3889: Reimplement cross-platform single-instance handling
- PR #3904: Proper event tracing for ICSharpCode.Decompiler and ICSharpCode.ILSpyX
- PR #3902: Beautify enum declarations by referencing previously declared members
Testing / Infrastructure
- PR #3943: Do not pass /shared to compilers that cannot reach a compiler server
- PR #3941: Skip redundant push builds for branches with an open PR
- PR #3928: Add pretty test for C# 13 ref struct interfaces / allows ref struct
- PR #3919: Preserve Debug Steps tree state across filter sessions
- PR #3914: Support Roslyn 1.x/2.x compiler configurations in tests on non-Windows
- PR #3915: Revive TypeInferenceTests from NRefactory and cover the C# standard inference rules
- PR #3912: Revive NRefactory conversion tests and cover all of C# standard chapter 10
- PR #3907: Generate version-info files with CRLF on all platforms
Contributions
- PR #3903: Provide a WholeProjectDecompiler constructor with no default parameter values — @ds5678, thank you!
- PR #3934: Publicize
IProjectFileWriterimplementations — @ds5678, thank you! - PR #3910: Fix #3909: emit nullable override disambiguators — @sailro, thank you!
- PR #3911: Fix #3908: use the async iterator element type for yield — @sailro, thank you!
- PR #3896: Fix #3895: keep byref-like ToString in string concatenation — @sailro, thank you!
- PR #3893: Fix #3892: preserve unsafe for pointer constructors — @sailro, thank you!
Bug Fixes
- PR #3949: Fix #3803: Crash on nested deconstruction of custom structs
- PR #3947: Fix #3230: do not emit base-list interfaces the base list cannot name
- PR #3948: Fix #3652: Apostrophe in identifiers must not start a char literal
- PR #3929: Fix #2032: avoid propagating mutated SROA fields
- PR #3942: Fix #3938: nested-type members must not inherit ExtensionInfo
- PR #3916: Fix #1603: recognize foreach over enumerators that cannot be disposable
- PR #3905: Fix #1638: identify renamed yield state machine members via method impls
- PR #3898: Fix #3891: don't reduce nesting when there is no else block
- PR #3886: Fix #3858: Detect automatic events on the ILAst instead of the C# AST
ILSpy 11.0 Preview 1
Warning
We DO NOT own the domain ilspy[.]org See #3709
Download ILSpy only from GitHub Releases!
This release is based on .NET 10.0. Please make sure that you have it installed on your machine beforehand.
Note for Mac users: see https://github.com/icsharpcode/ILSpy/wiki/Build-Artifacts#running-the-macos-artifact because the ILSpy.app is neither signed nor notarized.
Avalonia Cross Platform Port
- PR #3755: Avalonia 12 Port and Removal of the WPF UI
- PR #3759: Metadata explorer cleanup, flags-filter fixes, and WPF row-details parity
- PR #3766: Round-trip the legacy WPF SessionSettings shape
- PR #3768: Build, test, and package ILSpy on Linux and macOS in CI
- PR #3861: Show text-based resources inline with syntax highlighting
- PR #3875: Avalonia 12.1
- PR #3876: Keep BAML decompilation working when WPF assemblies are missing
New Features
- PR #3847: Unpack !AvaloniaResources into per-file resource tree nodes
- PR #3801: Fix #3797: resolve ilspycmd -t type names with fuzzy matching
- PR #3789: Add a bookmarks feature for the decompiled C# view
- PR #3786: Add omnibar breadcrumb and search bar above the decompiled code
- PR #3769: Make the override modifier a link to the overridden member
- PR #3762: Add Open from NuGet feed dialog for browsing and opening packages
User Interface
- PR #3857: Fix #2078: Generic local functions not highlighted properly
- PR #3855: Fix #3845: Add option to expand XML documentation comments
- PR #3814: Toggle the fold under the right-click, not at the caret
- PR #3812: Syntax-colour analyzer signatures with bold type names (#2164)
Enhancements
- PR #3872: Decompile await on dynamic expressions
- PR #3837: Fix #3804: decompile foreach over inline array
- PR #3791: Fix #3777: decompile runtime async without a separate C# 15 setting
- PR #3843: Bound XamarinCompressedFileLoader against crafted XALZ headers
- PR #3842: Bound WebCilFile section access against mapped-view length
- PR #3841: Harden BAML reader against crafted-resource crashes
- PR #3816: Allow overriding an assembly's target framework for reference resolution
- PR #3840: Bound .rsrc resource-tree parsing against crafted input
- PR #3838: Guard against OOB read when bundle signature is at file start
- PR #3818: Display the IL 'tail.' prefix in C# output
- PR #3808: Migrate the VS extension to an SDK-style VSIX (dotnet build) and retire the VS2017/2019 add-in
- PR #3802: Fix #3799 and three related stackalloc initializer decompilation defects
- PR #3780: Compute public-key tokens with a managed SHA-1
Documentation
Testing / Infrastructure
- PR #3771: Run the decompiler test suite on Linux
- PR #3788: Use cross-platform separators for the FSharp.Core.dll test path
- PR #3807: Adopt SDK default Compile items in Decompiler and Decompiler.Tests
- PR #3815: Verify generated PDBs against the compiler's breakpoint map (PdbGen fixtures previously passed vacuously)
- PR #3836: Don't assert decompiled local types match the signature
- PR #3839: Add fine-grained debug steps with highlighting for C# and ILAst
- PR #3849: Set OpenSSL SHA1 flag in build scripts
- PR #3859: Add test coverage for untested corners of implemented language features
- PR #3874: Upload TestCases folder as artifact when CI tests fail
Contributions
- PR #3851: Fix #3850: recover ReadOnlySpan array literals from the legacy lazy cache — @sailro, thank you!
- PR #3878: Handle negative dictionary capacity in string switch transform — @ds5678, thank you!
- PR #3828: Fix #3826: wrap an overflowing constant subexpression in unchecked() — @sailro, thank you!
- PR #3831: Fix #3825: reconstruct async iterators with [EnumeratorCancellation] and await in finally — @sailro, thank you!
- PR #3830: Fix #3827: keep the while-loop for a ref local used after the loop (avoid an uninitialized hoisted ref decl) — @sailro, thank you!
- PR #3823: Fix #3821: keep ref-struct conditional as if/return, not ?. / ?? (CS8978) — @sailro, thank you!
- PR #3822: Fix #3820: decompile dynamic ~ as ~x instead of an unsupported-opcode error — @sailro, thank you!
- PR #3796: Fix decompiler tests project inside VS — @DoctorKrolic, thank you!
- PR #3787: dev: fix editorconfig parsing on some editors — @mochaaP, thank you!
- PR #3879: Fix the "Use nested namespace structure" option — @ds5678, thank you!
Bug Fixes
- PR #3881: Reject negative char index in the length-and-char string switch
- PR #3866: Fix #3475: Emit 'true ? null : new { ... }' for null of anonymous type
- PR #3864: Fix #3860: Avoid 'out var' if the variable recurs in the argument list
- PR #3873: Fix dynamic event-assignment decompilation leaking is-event opcode
- PR #3863: Simplify hoisted null-guard fold to reference-type constructor chains
- PR #3852: Fix #3824: fold a hoisted argument null-guard at the ILAst level
- PR #3832: Fix #3754: omit async stepping info for runtime-async methods
- PR #3806: Fix Export NullReferenceException for images/resourcexsd.baml
- PR #3792: Fix #3774: keep field initializers when decompiling a static ctor alone
- PR #3790: Skip missing session assemblies when navigating on launch
- PR #3776: Escape reserved Windows device names in output file names
For a full list of changes click here.
ILSpy 10.1.1
ILSpy 10.1
Warning
We DO NOT own the domain ilspy[.]org See #3709
Download ILSpy only from GitHub Releases!
This release is based on .NET 10.0. Please make sure that you have it installed on your machine beforehand.
New Language Features
- .NET 11: runtime-async support. See also Runtime libraries are now compiled with runtime-async. Implemented via #3731
Enhancements
- #3730: List/extract embedded resources, decompile BAML to XAML in ilspycmd. This was added to address existing workarounds for decompilation skills.
- #3732: Reduce build warnings: lift IDisposable, fix CS9336 precedence bug, dispose evicted assemblies
Bug fixes
- Fix #3734: Search pane flickers when navigating to search result in large assembly
- Fix #3705: Code window is empty when select a .baml and refresh
For a full list of changes click here.
ILSpy 10.0.1
Warning
We DO NOT own the domain ilspy[.]org See #3709
Download ILSpy only from GitHub Releases!
This release is based on .NET 10.0. Please make sure that you have it installed on your machine beforehand.
Bug fixes
- Fix #3723: InvalidCastException when navigating to Metadata -> Tables -> 00 Module node
- Fix #3718: Incorrect current line, when click on ResolutionScope link in 01 TypeRef table
- Fix #3711: InvalidCastException when "Loading..." node is selected
- Fix #3703: Primary constructor is public
Enhancements
- #3715: Add CompilerOptions.UseRoslyn4_14_0
- #3713: Use releaseTag with fallback to downloadUrl in updates.xml
- #3695: .NET 11 for Tests
For a full list of changes click here.
ILSpy 10.0
Warning
We DO NOT own the domain ilspy dot org See #3709
Download ILSpy only from GitHub Releases!
This release is based on .NET 10.0. Please make sure that you have it installed on your machine beforehand.
New Language Features
- C# 13:
allows ref structconstraint - C# 14:
extensionmembers - #3467: C# 12
InlineArrays - Update pattern detection to Roslyn 5.0 RTM
- #3500: Added .NET 10 as test target
User Interface
- Dedicated UI and Decompiler APIs for C# 14 extensions #3680
- Navigate visible history (see #3591 by @miloush)
- Removed translations (see #3648)
- #3521: Add API to set an initially highlighted entity after navigation
- Improve WordBreak in CustomDialog (see #3535 by @CreateAndInject)
- Use AssemblyWarning when AssemblyReference load faulted (see #3013 by @workgroupengineering)
- Refactoring of EntityToString API (see #3635)
Enhancements
CSharpConversions: General improvements, fixing various missing rules for C# up to version 9.- #3344: Support
ckfiniteIL opcode in decompiler - #3563: Disassembler: Add support for ildasm /caverbal format
- Detection of records and primary constructors: various bugfixes and improvements. (Special thanks to @sonyps5201314 and @mmusu3)
- #3519: Add API diff feature. Please see the PR for how this feature works.
- #3494: Add dynamic ILSpy settings options to ILSpyCmd
- #3489: Make
WholeProjectDecompiler.CreateDecompilerprotected virtual to make the decompilation pipeline extensible.
Contributions
- Allow extracting multiple package entries (see #3508 by @CreateAndInject)
- Render operating system name as well as architecture if present (see #3653 by @MatthewSteeples)
- Improve decompilation of unmanaged function pointers (see #3620 by @ds5678)
- Improve decompilation of pre-increment operators (see #3472 by @ds5678)
- Support batch PDB generation (see #3619 by @sonyps5201314)
TargetFrameworkandTargetServicesAPIs are now public (see #3501 by @nikitalita)- Allow creating a MetadataFile with a MetadataReader / MetadataStringDecoder (see #3487 by @lordmilko)
- Add configuration option to check for overflow and underflow (see #3484 by @ds5678)
- Support disassembling single file bundle for ILSpy (see #3398 by @cshung)
- Refactor for cross platform port (see #3641by @lextm)
- Fix
inerroneously being applied tothis(see #3682 by @nikitalita) - Update TransformCollectionAndObjectInitializers to check for init-only properties (see #3678 by @nikitalita)
- Fix PowerShell PostBuild failing when solution path contains spaces (see #3669 by @Myself-Bloons)
- Replace FileVersionInfo.GetVersionInfo with DecompilerVersionInfo.Version constant (see #3667 by @MattParkerDev)
- Support
allows ref structconstraint (see #3537 by @jjonescz) - Allow passing an
IDecompilerTypeSystemrather than aDecompilerTypeSystemtoCSharpDecompiler(see #3529 by @lordmilko) - Add
DecompilerSettings.ExpandParamsArguments(see #3534 by @MSchmoecker) - Add
DecompilerSettings.AlwaysMoveInitializer: Always move initializer from static constructor to field initializer (see #3540 by @miloush) - Fix #3462: Scrolling with scroll wheel breaks after using file search (see #3538 by @tom-englert)
- Fixes for primary constructors (see #3614 by @mmusu3)
- Improve inlining of boxed values (see #3587 by @ds5678)
- List name first in ILSpy title for multiple instances (see #3589 by @miloush)
- Improve Framework Id detection (see #3581 by @ds5678)
- Enable detection of .NET version without TargetFrameworkAttribute (see #3580 by @ds5678)
- Do not create object initializers for tuples (see #3579 by @ds5678)
- Fix lower case type name conflicting with variable name (see #3572 by @ds5678)
- Fix regression in decompiling local functions with default parameters (see #3560 by @ds5678)
- Copy-propagate the stack slot for collection initializers (see #3554 by @ds5678)
- Normalize UTF-8 BOM Marks and ps1 Indention (see #3546 by @petercrabtree)
- Minor Dev Environment Fixes (.editorconfig cleanup, typo fix, .gitignore tweak) (see #3544 by @petercrabtree)
- Replace GeneratePdbForAssembly with GeneratePdbForAssemblies to improve user experience and remove redundant code. (see #3630 by @sonyps5201314)
- Fix the issue where PDBs generated by ILSpy do not match (see #3629 by @sonyps5201314)
- Do not use ObservableObject when ObservableObjectBase is sufficient. (see #3644 by @tom-englert)
- Add an option to not transform
Activator.CreateInstance<T>()tonew T()(see #3497 by @DoctorKrolic) - Fix stack overflow exception in CSharpResolver (see #3471 by @ds5678)
- Handle explicit optional parameter after default parameter (see #3470 by @ds5678)
- Fix disassembler output, correcting
flag(NUM)toflags(NUM)(see #3473 by @hez2010) - Fix null reference exception when writing resource files (see #3474 by @ds5678)
- Fix SDK-style (modern) inter-project references (see #3502 by @petercrabtree)
- Fix incorrect method match for static methods with instance signature (see #3504 by @MSchmoecker)
API Clean-up
- Removed legacy
UnresolvedUsingScope - Renamed
ResolvedUsingScopetoUsingScope - Removed legacy
ToTypeReference - Removed
ITypeReferenceand implementations
Performance
- #3486: Remove XML serialization from DecompilerSettings in ILSpy
Bug fixes
- Fix #3655: ExtractPackageEntryContextMenuEntry
- Fix #3684: Hide compiler-generated base-class forwarding accessor methods
- Fix #3674: Incorrect derived types shown, when generic type inherit from non-generic type with the same name.
- Fix #3671: TransformCollectionAndObjectInitializers mistakenly included trailing variable initialization.
- Fix #3524: Property without backing field cannot have an initializer.
- Fix #3512: Local function name collides with local variable name
- Fix #2165: DeclareVariables step must update ResolveResult annotation when using out var.
- Fix #3518 by replacing
FixLoneIsInstwith an inlining restriction. - Fix #3465: Operator '>' cannot be applied to operands of type 'X' and 'X'
- Fix #3468: Try harder to avoid ref locals if
UseRefLocalsForAccurateOrderOfEvaluationis not enabled. - Fix #3323: Simplify cleanup in AwaitInFinallyTransform, ensuring that we do not miss any containers.
- Fix #1873: Clear ILRange in CopyPropagation
- Fix #1789: missing hyperlink for
MethodGroupResolveResult. - Fix #3476: Scroll position not restored when navigating back
- Fix #3545: Covariant return not detected for abstract override property
- Fix #3549: Do not crash on encountering nil tokens.
- Fix #3543: Missing parentheses around field assignment expression in list initializers
- DebugDirectoryTreeNode: AddressOfRawData and PointerToRawData columns should use hex display.
- DebugDirectoryTreeNode: PointerToRawData was always showing 0 and AddressOfRawData was showing the wrong value.
- Fix #3577: Properly infer the switch governing type and preserve conversions
- Fix #3626: Do not emit named arguments for bool constants, if it causes the call to become ambiguous.
- Fix #3612: WholeProjectDecompiler.CleanUpName does not count bytes on Unix.
- Fix #3464: Missing cast in interpolated string
- Fix #3482: Drag and Drop is no longer working in the Assemblies tree view.
- Fix #3492: Do not crash, if field used by
RuntimeHelpers.InitializeArrayis malformed.
And many other fixes, for a full list click here.
ILSpy 10.0 Preview 3
This preview release is based on .NET 10.0. Please make sure that you have it installed on your machine beforehand.
Enhancements
- Dedicated UI and Decompiler APIs for C# 14 extensions #3680
Contributions
- Fix
inerroneously being applied tothis(see #3682 by @nikitalita) - Update TransformCollectionAndObjectInitializers to check for init-only properties (see #3678 by @nikitalita)
- Fix PowerShell PostBuild failing when solution path contains spaces (see #3669 by @Myself-Bloons)
- Replace FileVersionInfo.GetVersionInfo with DecompilerVersionInfo.Version constant (see #3667 by @MattParkerDev)
- Render operating system name as well as architecture if present (see #3653 by @MatthewSteeples)
- Refactor for cross platform port (see #3641by @lextm)
Bug Fixes
- Fix #3655: ExtractPackageEntryContextMenuEntry
- Fix #3684: Hide compiler-generated base-class forwarding accessor methods
- Fix #3674: Incorrect derived types shown, when generic type inherit from non-generic type with the same name.
- Fix #3671: TransformCollectionAndObjectInitializers mistakenly included trailing variable initialization.
For a full list of changes click here.
ILSpy 10.0 Preview 2
This preview release is based on .NET 10.0. Please make sure that you have it installed on your machine beforehand.
New Language Features
- Update pattern detection to Roslyn 5.0 RTM
- C# 13:
allows ref structconstraint - C# 14:
extensionmembers
Enhancements
CSharpConversions: General improvements, fixing various missing rules for C# up to version 9.- #3344: Support
ckfiniteIL opcode in decompiler - #3563: Disassembler: Add support for ildasm /caverbal format
- Detection of records and primary constructors: various bugfixes and improvements. (Special thanks to @sonyps5201314 and @mmusu3)
User Interface
- #3521: Add API to set an initially highlighted entity after navigation
- Navigate visible history (see #3591 by @miloush)
- Improve WordBreak in CustomDialog (see #3535 by @CreateAndInject)
- Use AssemblyWarning when AssemblyReference load faulted (see #3013 by @workgroupengineering)
- Refactoring of EntityToString API (see #3635)
- Removed translations (see #3648)
Contributions
- Allow extracting multiple package entries (see #3508 by @CreateAndInject)
- Support
allows ref structconstraint (see #3537 by @jjonescz) - Allow passing an
IDecompilerTypeSystemrather than aDecompilerTypeSystemtoCSharpDecompiler(see #3529 by @lordmilko) - Add
DecompilerSettings.ExpandParamsArguments(see #3534 by @MSchmoecker) - Add
DecompilerSettings.AlwaysMoveInitializer: Always move initializer from static constructor to field initializer (see #3540 by @miloush) - Improve decompilation of unmanaged function pointers (see #3620 by @ds5678)
- Improve decompilation of pre-increment operators (see #3472 by @ds5678)
- Fix #3462: Scrolling with scroll wheel breaks after using file search (see #3538 by @tom-englert)
- Support batch PDB generation (see #3619 by @sonyps5201314)
- Fixes for primary constructors (see #3614 by @mmusu3)
- Improve inlining of boxed values (see #3587 by @ds5678)
- List name first in ILSpy title for multiple instances (see #3589 by @miloush)
- Improve Framework Id detection (see #3581 by @ds5678)
- Enable detection of .NET version without TargetFrameworkAttribute (see #3580 by @ds5678)
- Do not create object initializers for tuples (see #3579 by @ds5678)
- Fix lower case type name conflicting with variable name (see #3572 by @ds5678)
- Fix regression in decompiling local functions with default parameters (see #3560 by @ds5678)
- Copy-propagate the stack slot for collection initializers (see #3554 by @ds5678)
- Normalize UTF-8 BOM Marks and ps1 Indention (see #3546 by @petercrabtree)
- Minor Dev Environment Fixes (.editorconfig cleanup, typo fix, .gitignore tweak) (see #3544 by @petercrabtree)
- Replace GeneratePdbForAssembly with GeneratePdbForAssemblies to improve user experience and remove redundant code. (see #3630 by @sonyps5201314)
- Fix the issue where PDBs generated by ILSpy do not match (see #3629 by @sonyps5201314)
- Do not use ObservableObject when ObservableObjectBase is sufficient. (see #3644 by @tom-englert)
API Clean-up
- Removed legacy
UnresolvedUsingScope - Renamed
ResolvedUsingScopetoUsingScope - Removed legacy
ToTypeReference - Removed
ITypeReferenceand implementations
Bug fixes
- Fix #3524: Property without backing field cannot have an initializer.
- Fix #3512: Local function name collides with local variable name
- Fix #2165: DeclareVariables step must update ResolveResult annotation when using out var.
- Fix #3518 by replacing
FixLoneIsInstwith an inlining restriction. - Fix #3465: Operator '>' cannot be applied to operands of type 'X' and 'X'
- Fix #3468: Try harder to avoid ref locals if
UseRefLocalsForAccurateOrderOfEvaluationis not enabled. - Fix #3323: Simplify cleanup in AwaitInFinallyTransform, ensuring that we do not miss any containers.
- Fix #1873: Clear ILRange in CopyPropagation
- Fix #1789: missing hyperlink for
MethodGroupResolveResult. - Fix #3476: Scroll position not restored when navigating back
- Fix #3545: Covariant return not detected for abstract override property
- Fix #3549: Do not crash on encountering nil tokens.
- Fix #3543: Missing parentheses around field assignment expression in list initializers
- DebugDirectoryTreeNode: AddressOfRawData and PointerToRawData columns should use hex display.
- DebugDirectoryTreeNode: PointerToRawData was always showing 0 and AddressOfRawData was showing the wrong value.
- Fix #3577: Properly infer the switch governing type and preserve conversions
- Fix #3626: Do not emit named arguments for bool constants, if it causes the call to become ambiguous.
- Fix #3612: WholeProjectDecompiler.CleanUpName does not count bytes on Unix.
And many other fixes, for a full list click here.