.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
ILSpy 9.x is based on .NET 8.0. All artifacts except the self-contained distribution are built framework-dependent, which means .NET 8.0 or later must be installed prior to starting ILSpy.
MetadataFile
base class for PEFile
IModule.PEFile
is now named IModule.MetadataFile
IFileLoader
API to allow for easier extensibility of supported file formats (see #3191)IProjectFileWriter
and IProjectInfoProvider
APIs are now public (see #3151 and #3191)(ReadOnly)Span<char>
using a compiler-generated hash function.a.GetValueOrDefault(b) -> a ?? b
transform for side-effect-free default values.DynamicLocalVariable
and DefaultNamespace
custom debug information (#3111, @ElektroKill)DetermineEffectiveAccessibility
(#3164, @yzdeveloper)Mono C# compiler 2.6.4
pinned region with array variable (#3110, @ElektroKill)UnknownType
: Ensuring that the FullName of nested unknown types contains the outer type name(s), not just the namespace and nested type name.And many other fixes, for a full list click here.
ILSpy 8.x is based on .NET 6.0. All artifacts except the self-contained distribution are built framework-dependent, which means .NET 6.0.2 or later must be installed prior to starting ILSpy.
not
patterns(ReadOnly)Span<char>
NUGET_PACKAGES
environment variableBlockTransformContext.IndexOfFirstAlreadyTransformedInstruction
, which allows us to track already transformed instructions after a block has been merged into another by ConditionDetection
.NextSetBit
operation to BitSet
to avoid looking at every store bit individually in ReachingDefinitionsVisitor.GetStores()
ILVariableEqualityComparer.GetHashCode
CSharpResolver.LookupSimpleNameOrTypeName
in cases with a large number of local variables.StringBuilder
when constructing tree-node labelsAdd
were skipping some checks in AccessPathElement.IsMethodApplicable
.And many other fixes, for a full list click here.
Release notes for 8.1 apply https://github.com/icsharpcode/ILSpy/releases/tag/v8.1 as this release is a bugfix release only.
Fixed bug #3069 in switch-on-string detection, where complex switches compiled with newer versions of the C# compiler would cause a crash. Other minor fixes included too.
For details please see https://github.com/icsharpcode/ILSpy/compare/v8.1...v8.1.1
ILSpy 8.x 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.
And many other fixes, for a full list click here.
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:
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)global::
(see #2762 by @hexafluoride)IEntityProcessor
to ReflectionDisassembler
(see #2835 by @tom-englert)ApplyAttributeTypeVisitor
(see #2840 by @ElektroKill)using
pattern (see #2841 by @ElektroKill)Unsafe.SizeOf
when taking the size of a managed typePlease see the release notes for Preview1 to RC1 for details or, for a full list of changes click here.
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.
And many other fixes, for a full list click here.
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.
And many other fixes, for a full list click here.
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 or newer minor release must be installed prior to starting ILSpy.
IMPORTANT: If you don't have the .NET Desktop Runtime installed, the .NET bootstrapper (a dialog popping up when you try to run ILSpy) will link you to the .NET Runtime which supports only console apps! Please follow the above link and download the Desktop Runtime.
global::
(see #2762 by @hexafluoride)IEntityProcessor
to ReflectionDisassembler
(see #2835 by @tom-englert)ApplyAttributeTypeVisitor
(see #2840 by @ElektroKill)using
pattern (see #2841 by @ElektroKill)WholeProjectDecompiler
: Fix #2830: Can't decompile project with / in resource name on WindowsWholeProjectDecompiler
: Fix #2850: Make sure that type names longer than 255 characters are handled correctly.And many other fixes, for a full list click here.
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.
ilspycmd
(see #2703 by @superstrom)Unsafe.SizeOf
when taking the size of a managed typeAnd many other fixes, for a full list click here.
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:
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.
net60-windows
(see #2642) and all plugins will have to be migrated to the new platform.
ICSharpCode.Decompiler
engine and NuGet package will continue to target netstandard2.0
LoadedAssembly.WaitUntilLoaded()
was removed, because it leads to bugs; use await LoadedAssembly.GetLoadResultAsync()
insteadilspycmd
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)And many other fixes, for a full list click here.