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
InlineArrays
- #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
|