ILSpy 8.0
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.
Note - none of the following lists are exhaustive except of course the first one:
New Language Features
- C# 10: record structs
- C# 11: Required members
- C# 11: ref fields
- C# 10: Support DefaultInterpolatedStringHandler
- Output attributes on lambda expressions
- Updated pattern detection for Roslyn 4.4.0
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)
- Namespace nesting in ILSpy tree view (based on code provided by @ds5678 in #2667)
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)- Fix the ordering of COM interface methods, properties, and events to appear in their originally defined order (see #2639 by @zhuman)
- 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 crash target framework detection with C++/CLI (see #2698 by @kant2002)
- Add option to always fully qualify type names with
global::
(see #2762 by @hexafluoride) - Fix #2736: ILSpy decides to fully qualify type name when it is not necessary (see #2789 by @ElektroKill)
- Add progress reporting to PortablePdbWriter (see #2802 by @andrewcrawley)
- 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)
- 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)
- Make return duplication in ControlFlowSimplification less aggressive (see #2972 by @ElektroKill)
- Show a dark title bar when a dark theme in ILSpy is selected (see #2948 by @tom-englert)
- Consider constructor type when lifting decimal constants (see #2953 by @ElektroKill)
- Extend EliminateRedundantTryFinally in ReduceNestingTransform (see #2959 by @ElektroKill)
Enhancements
- Move Settings to ILSpyX (see #2869). Additionally, many platform-independent APIs have been moved to ICSharpCode.ILSpyX since Preview1. ILSpyX is published as a standalone NuGet package for others to reuse.
- Performance optimization of analyzers (see #2643)
- Various performance improvements in the type system and decompiler engine. (see #2766 and #2754)
- #2684: Iteratively unhide compiler-generated code, if it is referenced by user-code
- Support native ints in "Combine bit.and into shift" transform
- #2780: Show embedded resource size
- Use
Unsafe.SizeOf
when taking the size of a managed type
Bug fixes
Please see the release notes for Preview1 to RC1 for details or, for a full list of changes click here.