Skip to content

Releases: icsharpcode/ILSpy

ILSpy 8.0 Preview 2

Compare
Choose a tag to compare
ILSpy 8.0 Preview 2 Pre-release
Pre-release

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

Compare
Choose a tag to compare
ILSpy 8.0 Preview 1 Pre-release
Pre-release

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 target netstandard2.0
  • 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; use await 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

Compare
Choose a tag to compare

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

Compare
Choose a tag to compare

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

Enhancements

  • Assembly resolver: GetReferenceAssemblyPath now picks closest available version
  • #1175: Added inassembly: and innamespace: 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 with int.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 into goto 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

ILSpy 7.2 RC

Compare
Choose a tag to compare

Fixes

ILSpy 7.2 Preview 4

Compare
Choose a tag to compare
ILSpy 7.2 Preview 4 Pre-release
Pre-release

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

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 with int.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

43a22d2
Compare
Choose a tag to compare
ILSpy 7.2 Preview 3 Pre-release
Pre-release

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

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: and innamespace: 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

Compare
Choose a tag to compare
ILSpy 7.2 Preview 2 Pre-release
Pre-release

New Language Features

  • C# 9.0 skip locals init

Contributions

Visual Studio AddIn

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

Compare
Choose a tag to compare
ILSpy 7.2 Preview 1 Pre-release
Pre-release

New Language Features

  • Adjusted pattern detection for Roslyn 3.11
  • C# 7.0 pattern matching
  • C# 9 covariant returns

Contributions

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 into goto 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

Compare
Choose a tag to compare

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

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.