The open-source .NET assembly browser and decompiler!

ILSpy

ILSpy

  -  4.3 MB  -  Open Source
  • Latest Version

    ILSpy 9.0.0.7889 LATEST

  • Review by

    Daniel Leblanc

  • Operating System

    Windows 7 64 / Windows 8 64 / Windows 10 64 / Windows 11

  • User Rating

    Click to vote
  • Author / Product

    ILSpy Team / External Link

  • Filename

    ILSpy_Installer_9.0.0.7889-x64.msi

ILSpy is a .NET decompiler for Windows PC that supports PDB generation, ReadyToRun, metadata, and more – compatible across platforms!

Are you a .NET developer? Do you like dissecting applications and finding specific information about them? If so, then you’ll want an application like ILSpy which can analyze programs developed in .NET and inspect every one of their components. By doing this, you can determine how the program was assembled originally.

ILSpy is a better tool than its competitors because it is free and easy to use. It is also an open-source program that requires no installation. Since it is a portable application, you can run it off a USB flash drive, external hard drive, or personal computer just the same.

Features and Highlights
  • Decompilation to C#
  • Whole-project decompilation
  • Search for types/methods/properties
  • Hyperlink-based type/method/property navigation
  • Base/Derived types navigation, history
  • Assembly metadata explorer
  • BAML to XAML decompiler
  • ReadyToRun binary support for .NET Core
  • Extensible via plugins
  • Additional features in DEBUG builds
Find .NET Assemblies

When you launch the application, the main window is laid out clearly and features 2 panes. The first pane lets you view the .NET assemblies in a tree. That way, you can view a selection item more closely. You can inspect WINMD, DLL, and EXE files this way too. GAC data can get loaded, and you can open Nuget packages too.

Rendering Code

The application is designed for viewing purposes only. For this reason, file modifications are not possible. However, you can use a search function to find specific members, types, fields, methods, events, properties, metadata tokens, or constants.

You can configure many decompiler settings, including debug symbol variable names, eliminating dead code, eliminating side effect code, and member definition expansion following decompilation. Also, several instances are allowed, and the font is customizable.

PROS
  • Open-source and free to use
  • Supports multiple .NET versions
  • User-friendly interface
  • Fast decompilation process
  • Active development and community support
CONS
  • Limited debugging features
  • Basic search functionality
  • Occasional decompilation errors
  • Less comprehensive than paid tools
  • No cross-platform support
Conclusion

Overall, ILSpy allows decompiling .NET assemblies to be quite simple. It is easy for developers to modify the existing code and use it for their own purposes because it is an open-source program.

Note: Requires .NET Framework.

  • ILSpy 9.0.0.7889 Screenshots

    The images below have been resized. Click on them to view the screenshots in full size.

    ILSpy 9.0.0.7889 Screenshot 1
  • ILSpy 9.0.0.7889 Screenshot 2
  • ILSpy 9.0.0.7889 Screenshot 3
  • ILSpy 9.0.0.7889 Screenshot 4
  • ILSpy 9.0.0.7889 Screenshot 5

What's new in this version:



New Language Features:
- Add support for C# 12 primary constructors.
- Add support for C# 12 'ref readonly' parameters
- Added support for switch on (ReadOnly)Span<char> using a compiler-generated hash function.
    - Added new a.GetValueOrDefault(b) -> a ?? b transform for side-effect-free default values.
- Support types that provide DisposeAsync without implementing IAsyncDisposable.
- Updated pattern detection to Roslyn 4.12

Enhancements:
- Added support for reading WebCIL assemblies (IL embedded in WASM)
- Added support for reading standalone ECMA-335 metadata (portable PDB and other metadata blobs)
- #3118: Add "Clear assembly list" menu item.
- #2893: Add option to disable automatic assembly loading.
- Allow implicit conversions in switch
- IL output: Add indentation level to make it easier to see custom attributes belonging to interface implementations.
- IL output: Print metadata token of custom attribute.
- Replace native interop CommandLineToArgvW with parsing in Process.Unix.cs from System.Diagnostics.Process #3201
- Natural Sort without interop #3196
- AOT and x-plat changes #3203
- Allow running tests on ARM64
- Alow collecting analyzers annotated with ExportAnalyzerAttribute
- Use ref readonly locals for readonly.ldelema
- Support new resources format in ResourcesFile/ResXResourceWriter
- Include newobj, initobj and call instructions in TypeInstantiatedByAnalyzer
- Add comment regarding .constraint prefix expressed as cast in C#
- Fix loading a DLL that contains byte sequences matching ZIP central directory
- Use Microsoft.Sbom.Targets in NuGets #3346

Contributions:
- Diagramming feature by @h0lg
- Various WPF-related refactorings by @tom-englert
- High DPI fixes by @CreateAndInject
- TreeView: Add referenced types, members and exported types under references
- Adjust colors of AvalonEdit built-in highlightings for dark themes
- Add support for Mono C# compiler 2.6.4 pinned region with array variable
- Add smooth scrolling to settings panels and DecompilerTextView
- Ignore empty version directories of dotnet
- Missing DecompilerSettings by @naratteu
- Fix metadata display of DynamicLocalVariable and DefaultNamespace custom debug information
- Read and use tuple element names and dynamic type information from PDBs
- Bugfix: infinite loop in DetermineEffectiveAccessibility
- Decompiler Settings: Checkbox in group header does not reflect state of the group
- Fix Derived Types Node always being empty

Performance:
- Activate Dynamic Adaptation To Application Sizes (DATAS)
- RDP hardware acceleration
- Performance: Initialize ToolPanes in DockWorkspace.InitializeLayout() instead of the property getter to avoid WPF seeing them in InitializeComponent() and rendering all panes docked at the right before the layout is properly initialized.

Breaking Changes:
- ICSharpCode.Decompiler: Added MetadataFile base class for PEFile
- ICSharpCode.Decompiler: IModule.PEFile is now named IModule.MetadataFile
- ICSharpCode.Decompiler/ILSpyX: Added IFileLoader API to allow for easier extensibility of supported file formats
- ILSpy: Split BAML decompiler into library and add-in
- ILSpy/ILSpyX: Moved non-UI analyzer API to ILSpyX
- ICSharpCode.Decompiler: IProjectFileWriter and IProjectInfoProvider APIs are now public
- @file support with breaking changes to command line options #3205
- New single instance handling #3212
- Remove IsRef, IsOut and IsIn flags from IParameter
- Replace ParameterModifiers with ReferenceKind

Fixed:
- Ignoring resources with the same name as a namespace
- Fix bug in UnknownType: Ensuring that the FullName of nested unknown types contains the outer type name(s), not just the namespace and nested type name
- Always using SHA1 for public key tokens
- Fix ILSpy for ZIP files/VSIX with bundle signatures: Enabling ILSpy to open ZIP files and VSIX packages containing bundle signatures
- Omit package entries from the treeview that denote the directory
- Exception when analyzing source of library with global assembly attributes
- Remove GetAlternativeName and instead reuse existing names, if there are no conflicts.
- Bug when trying to read a bundle/archive file
- Support primitive types in Expression.Constant(object) pattern in Expression Trees
- Ensure using directives are added for extension methods in higher level patterns such as: foreach -> GetEnumerator(), collection initializer -> Add() and deconstruction -> Deconstruct()
- Ignore exceptions while decoding sequence point blobs
- Unnecessary uint casts/conversions for certain bitwise operations
- Filter out copy-constructor only if it's an actual record type
- KeyDownEvent field reference was replaced with KeyDown event reference
- Make ILSpy ready for .NET 10
- switch-value conversion was losing its target type