PSA We DO NOT own the domain ilspy dot org See #3709
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.