This preview release is based on preview 6 of .NET 10.0. Please make sure that you have it installed on your machine beforehand.
New Language Features
- #3467: C# 12
InlineArray
s
- #3500: Added .NET 10 as test target
- #3500: Added minimal language feature support to successfully detect new code patterns used in .NET 10
Enhancements
- #3519: Add API diff feature. Please see the PR for how this feature works, and in the collapsed region at the end of the release notes how such an API diff report could look like (full file is attached to release as ICSharpCode.Decompiler9.1to10Preview1Changes_ApiDiff.md).
- #3494: Add dynamic ILSpy settings options to ILSpyCmd
- #3489: Make
WholeProjectDecompiler.CreateDecompiler
protected virtual to make the decompilation pipeline extensible.
Contributions
- Add configuration option to check for overflow and underflow (see #3484 by @ds5678)
- Allow creating a MetadataFile with a MetadataReader / MetadataStringDecoder (see #3487 by @lordmilko)
- Add an option to not transform
Activator.CreateInstance<T>()
to new T()
(see #3497 by @DoctorKrolic)
TargetFramework
and TargetServices
APIs are now public (see #3501 by @nikitalita)
- Support disassembling single file bundle for ILSpy (see #3398 by @cshung)
- Fix stack overflow exception in CSharpResolver (see #3471 by @ds5678)
- Handle explicit optional parameter after default parameter (see #3470 by @ds5678)
- Fix disassembler output, correcting
flag(NUM)
to flags(NUM)
(see #3473 by @hez2010)
- Fix null reference exception when writing resource files (see #3474 by @ds5678)
- Fix SDK-style (modern) inter-project references (see #3502 by @petercrabtree)
- Fix incorrect method match for static methods with instance signature (see #3504 by @MSchmoecker)
Performance
- #3486: Remove XML serialization from DecompilerSettings in ILSpy
Bug fixes
- Fix #3464: Missing cast in interpolated string
- Fix #3482: Drag and Drop is no longer working in the Assemblies tree view.
- Fix #3492: Do not crash, if field used by
RuntimeHelpers.InitializeArray
is malformed.
And many other fixes, for a full list click here.
ICSharpCode.Decompiler Assembly Changes (API diff)
Changed Types
ICSharpCode.Decompiler.DecompilerSettings
Member
| Type
| Operation
|
Clone() : DecompilerSettings
| Method
| Removed
|
ParamsCollections : bool
| Property
| Added
|
UseObjectCreationOfGenericTypeParameter : bool
| Property
| Added
|
InlineArrays : bool
| Property
| Added
|
CheckForOverflowUnderflow : bool
| Property
| Added
|
Clone() : DecompilerSettings
| Method
| Added
|
ICSharpCode.Decompiler.Solution.SolutionCreator
Member
| Type
| Operation
|
WriteSolutionFile(string, IEnumerable<ProjectItem>) : void
| Method
| Removed
|
WriteSolutionFile(string, List<ProjectItem>) : void
| Method
| Added
|
ICSharpCode.Decompiler.Semantics.Conversion
Member
| Type
| Operation
|
InlineArrayConversion : Conversion
| Field
| Added
|
ICSharpCode.Decompiler.TypeSystem.KnownAttribute
Member
| Type
| Operation
|
ParamCollection : KnownAttribute
| Field
| Added
|
InlineArray : KnownAttribute
| Field
| Added
|
ICSharpCode.Decompiler.TypeSystem.TypeSystemOptions
Member
| Type
| Operation
|
ParamsCollections : TypeSystemOptions
| Field
| Added
|
ICSharpCode.Decompiler.TypeSystem.TypeSystemExtensions
Member
| Type
| Operation
|
IsArrayInterfaceType(this IType) : bool
| Method
| Added
|
IsInlineArrayType(this IType) : bool
| Method
| Added
|
GetInlineArrayLength(this IType) : int?
| Method
| Added
|
GetInlineArrayElementType(this IType) : IType
| Method
| Added
|
IsDefaultValueAssignmentAllowed(this IParameter) : bool
| Method
| Added
|
ICSharpCode.Decompiler.Metadata.MetadataFile
Member
| Type
| Operation
|
MetadataFile(MetadataFileKind, string, MetadataReaderProvider, MetadataReaderOptions, int, bool)
| Constructor
| Removed
|
MetadataFile(MetadataFileKind, string, MetadataReaderProvider, MetadataReaderOptions, int, bool, MetadataStringDecoder?)
| Constructor
| Added
|
MetadataFile(MetadataFileKind, string, MetadataReader, int, bool)
| Constructor
| Added
|
ICSharpCode.Decompiler.Metadata.PEFile
Member
| Type
| Operation
|
PEFile(string, PEStreamOptions, MetadataReaderOptions)
| Constructor
| Removed
|
PEFile(string, Stream, PEStreamOptions, MetadataReaderOptions)
| Constructor
| Removed
|
PEFile(string, PEReader, MetadataReaderOptions)
| Constructor
| Removed
|
PEFile(string, PEStreamOptions, MetadataReaderOptions, MetadataStringDecoder?)
| Constructor
| Added
|
PEFile(string, Stream, PEStreamOptions, MetadataReaderOptions, MetadataStringDecoder?)
| Constructor
| Added
|
PEFile(string, PEReader, MetadataReaderOptions, MetadataStringDecoder?)
| Constructor
| Added
|
ICSharpCode.Decompiler.IL.OpCode
Member
| Type
| Operation
|
LdElemaInlineArray : OpCode
| Field
| Added
|
ICSharpCode.Decompiler.IL.Block
Member
| Type
| Operation
|
GetContainingStatement(ILInstruction) : ILInstruction?
| Method
| Added
|
ICSharpCode.Decompiler.IL.ILInstruction
Member
| Type
| Operation
|
Extract(ILTransformContext) : ILVariable
| Method
| Removed
|
MatchLdElemaInlineArray(out IType?, out ILInstruction?) : bool
| Method
| Added
|
Extract(ILTransformContext) : ILVariable?
| Method
| Added
|
ICSharpCode.Decompiler.CSharp.LanguageVersion
Member
| Type
| Operation
|
CSharp13_0 : LanguageVersion
| Field
| Added
|
ICSharpCode.Decompiler.CSharp.OutputVisitor.InsertParenthesesVisitor
Member
| Type
| Operation
|
VisitInterpolation(Interpolation) : void
| Method
| Added
|
ICSharpCode.Decompiler.CSharp.ProjectDecompiler.IProjectInfoProvider
Member
| Type
| Operation
|
CheckForOverflowUnderflow : bool
| Property
| Added
|
Added Types
ICSharpCode.Decompiler.IL.LdElemaInlineArray
Member
| Type
| Operation
|
ArraySlot : SlotInfo
| Property
| Added
|
IndicesSlot : SlotInfo
| Property
| Added
|
Type : IType
| Property
| Added
|
Array : ILInstruction
| Property
| Added
|
Indices : InstructionCollection<ILInstruction>
| Property
| Added
|
ResultType : StackType
| Property
| Added
|
IsReadOnly : bool
| Property
| Added
|
DirectFlags : InstructionFlags
| Property
| Added
|
LdElemaInlineArray(IType, ILInstruction, params ILInstruction[])
| Constructor
| Added
|
Clone() : ILInstruction
| Method
| Added
|
WriteTo(ITextOutput, ILAstWritingOptions) : void
| Method
| Added
|
AcceptVisitor(ILVisitor) : void
| Method
| Added
|
AcceptVisitor<T>(ILVisitor<T>) : T
| Method
| Added
|
AcceptVisitor<C,T>(ILVisitor<C,T>, C) : T
| Method
| Added
|
ICSharpCode.Decompiler.CSharp.ProjectDecompiler.TargetFramework
Member
| Type
| Operation
|
Identifier : string
| Property
| Added
|
Moniker : string
| Property
| Added
|
VersionString : string
| Property
| Added
|
VersionNumber : int
| Property
| Added
|
Profile : string
| Property
| Added
|
IsPortableClassLibrary : bool
| Property
| Added
|
TargetFramework(string, int, string)
| Constructor
| Added
|
ICSharpCode.Decompiler.CSharp.ProjectDecompiler.TargetServices
Member
| Type
| Operation
|
DetectTargetFramework(MetadataFile) : TargetFramework
| Method
| Added
|
GetPlatformName(PEFile) : string
| Method
| Added
|
DetectTargetFrameworkNET20(MetadataFile, IAssemblyResolver, TargetFramework) : TargetFramework
| Method
| Added
|