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.