Releases: icsharpcode/ILSpy
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.
ILSpy 7.2 Preview 1
New Language Features
- Adjusted pattern detection for Roslyn 3.11
- C# 7.0 pattern matching
- C# 9 covariant returns
Contributions
- Updated ReadyToRun. (by @cshung in #2489)
- Analyzers: Return valid modules only. (by @zvirja in #2496)
- Extensibility: Make SearchTermMatches virtual. (by @beaverden in #2494)
- Support loading compressed Xamarin assemblies. (by @cpraehaus in #2471)
- Fix null check in
BamlDecompilerTypeSystem.HasType
(by @yyjdelete in #2509)
Visual Studio AddIn
- Allow to open ILSpy on project and package references
Enhancements
- Add "Extract package entry" context menu entry for binaries inside bundles/packages.
- Better support for voice commands/keyboard navigation.
- Proper support for long paths in Windows 10 in
WholeProjectDecompiler
. - IL disassembly: Option to show raw offsets and instruction bytes.
- IL disassembly: Show header sizes.
- Add simple public API for
XamlDecompiler
Bug fixes
- #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.
ILSpy 7.1
General
- Adjusted pattern detection for Roslyn 3.10
Cross-platform support
- Fix #2417: ilspycmd is crashing if no valid ICU package is found.
- Fix DotNetCorePathFinder on Unix systems: realpath always returned garbage
- Fix #2358: use current Path.DirectorySeparatorChar instead of hard-coded backslashes.
Contributions
- Support for .NET 6 single-file bundles. (by @vitek-karas in #2373)
- Added .vsconfig. (by @joshuacookdev in #2376)
- Chinese translation updates. (by @maikebing in #2385)
- Fix #2406: for readonly property with only getter, move readonly to property instead of getter (by @yyjdelete in #2408)
- #2409: Styling of windows title bar is now optional. (by @tom-englert in #2412)
- 6a34df5: small bug fix in the metadata explorer UI by @marwie
- Fixed a source generation bug in ReflectionDisassembler: Identifiers containing multiple consecutive dots were not properly escaped. (#2386 by @DarkOoze)
Bug fixes
- #2392: Avoid some redundant casts with the ?: operator.
- #2398: TranslateCondition: truncate condition value if necessary
- #2391: mark method as unsafe when passing null to a parameter of pointer type.
- #2396: Extend the #1903 workaround to unconstrained generic types.
- #2389: missing extern keyword for properties and events.
- #2395: Do not use for->foreach transform if collection is not an array.
- #2390: Add support for generic object initializers.
- #2390: Make sure all unused captured variables are removed even in lambdas.
- #2407: Operator '-' cannot be applied to operand of type 'nuint'
- #2354: decompilation of unary and binary operators with nullable value types.
- And many other fixes, for a full list click here.