ILSpy is the open-source .NET assembly browser and decompiler!

ILSpy

ILSpy

  -  3.9 MB  -  Open Source
  • Latest Version

    ILSpy 8.2.0.7535 LATEST

  • Review by

    Daniel Leblanc

  • Operating System

    Windows XP64 / Vista64 / Windows 7 64 / Windows 8 64 / Windows 10 64 / Windows 11

  • User Rating

    Click to vote
  • Author / Product

    ILSpy Team / External Link

  • Filename

    ILSpy_binaries_8.2.0.7535-x64.zip

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.

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.

The application can render IL, C#, and IL code with the code in C#. If you are rendering C#, your choice ranges between C# 1.0 / VS .NET and C# 7.2 / VS 2017. You’ll have the ability to view references, resources, tables, and conduct information extraction to a file.

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.

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.

Features and Highlights
  • Decompilation to C#
  • Whole-project decompilation (csproj, not sln!)
  • Search for types/methods/properties (substring)
  • Hyperlink-based type/method/property navigation
  • Base/Derived types of navigation, history
  • BAML to XAML decompiler
  • Extensible via plugins (MEF)
Note: Requires .NET Framework.

  • ILSpy 8.2.0.7535 Screenshots

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

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

What's new in this version:

New Language Features:
- C# 7.1 Pattern matching with generics
- C# 8.0 Recursive patterns
- C# 9.0 Relational patterns
- C# 9.0 not patterns
- C# 10.0 static abstract members in interfaces
- C# 11.0 switch on (ReadOnly)Span<char>

Enhanced:
- add support for the NUGET_PACKAGES environment variable

Performance:
- Avoid processing already-transformed blocks by introducing - BlockTransformContext.IndexOfFirstAlreadyTransformedInstruction, which allows us to track already transformed instructions after a block has been merged into another by ConditionDetection.
- Add NextSetBit operation to BitSet to avoid looking at every store bit individually in - ReachingDefinitionsVisitor.GetStores()
- Fix ILVariableEqualityComparer.GetHashCode
- Improve performance of CSharpResolver.LookupSimpleNameOrTypeName in cases with a large number of local variables
- Eliminate recursion in some parts of the decompiler engine
ILSpy UI: -- sub-optimal use of StringBuilder when constructing tree-node labels

Fixed:
- Handler blocks of exception filter blocks do not have a header
- unaligned.stobj cannot be transformed into inline assignment
- extension methods named Add were skipping some checks in AccessPathElement.IsMethodApplicable.
- MetadataModule.ResolveEntity() returning null for System.IntPtr when C# 11 native integers are enabled
- VS2017-2019 addin didn't properly match subdirectory structure of 2022 addin
- Missing type information in lambda expressions