v6.4.0
CRITICAL SECURITY WARNING
This release of dnSpyEx addresses the many newfound vulnerabilities in .NET 6. Updating is highly recommended!
See https://github.com/dotnet/announcements/issues issues 250 and 252-261
New features:
- All distributions of dnSpyEx now support resolving Windows shortcut files (
*.lnk
) when they are dragged onto the assembly explorer. - Extended the export to project feature by adding support for unpacking multi-element resources back to
.resx
source files - Introduce two additional options to the Save Module dialog. (
AddMvidSection
andForceBigColumns
) - Added a new menu command to copy the full name of any metadata member.
- Add support for horizontal scrolling with the shift key in the text and hex editors.
- Add support for multiline copy and paste to the text editor.
- Added support for
.url
shortcut files and modified the code to recursively resolve shortcuts until a target file is reached. - ILSpy Decompiler:
- Display custom attributes defined on interface implementations in the IL disassembly
- Add
IL with C#
decompiler language which annotates the IL disassembly with comments showing the higher level C# statements above the IL code responsible for them. - Show field initial value for simple primitive types in a comment located above the field declaration.
- Added a new decompiler option to disable the insertion of unnecessary parenthesis.
- Reworked BAML disassembler:
- Heavily improved syntax highlighting and other editor features like indent guides and brace pair highlighting.
- Add local jump to reference for BAML attribute, type, etc. declaration records.
- Add support for dnSpy's number tooltips in the disassembler.
- Introduce tooltips for type, assembly, property, and resource references.
- Improved performance and memory efficiency.
Improvements and bug fixes:
- Fixed regular non-publish .NET 6 debug and release dnSpy builds, they no longer crash on startup and now also use the correct x86 icon when applicable.
- Fixed a commonly occurring
NullReferenceException
when editing event definitions using the assembly editor component. - Improved Chinese translation by @Wenveo
- Fixed incorrect handling of
__arglist
parameter in the Edit in C#/Edit in VB options. - Fix incorrect display of
VarArg
andNativeVarArg
in the signature editing dialog. - Properly handle
Unmanaged
calling convention across the dnSpyEx code base. - Fixed incorrect escaping behavior when displaying strings found in embedded resources.
- Refresh search results when the scope of the search operation is changed (e.g. a different file is selected and the search mode is set to the selected file)
- Fixed C# and VB tooltips for types with uninstantiated generic parameter signatures.
- Escape Hangul Filler characters and other similar whitespace characters that were previously not escaped across the dnSpyEx UI.
- Use reference assemblies for the compiler in the Edit in C#/Edit in VB options to fix issues with incorrect assembly references being emitted when editing .NET Standard or .NET Core assemblies.
- Added a workaround for a bug in WPF
WindowChromeWorker
that causedOverflowException
to be thrown for invalid hittest window messages. - Correctly set the available options based on the window state in the Windows Alt + Space menu.
- Improved .NET Standard assembly resolution to prioritize exact version match over the latest available version.
- Fixed a bug that resulted in the ability of the user to infinitely scroll horizontally.
- Fix an issue in the new RESX writer which resulted in incorrectly generated RESX for resources with user serialized types.
- ILSpy Decompiler:
- Fixed multiple NRE's that occurred when decompiling heavily obfuscated property metadata.
- Fixed an issue that caused incorrect
dynamic
types to be introduced for method parameters. - Improved type inference for
calli
instructions as well as stores toreadonly
auto-properties. - Fixed several issues relating to the decompilation of member names containing a
.
character. - Display custom attributes in the same order that they appear in metadata by default.
- Improved performance and memory efficiency.
- Debugger:
- Fixed certain expressions in the Watch and Locals window being incorrectly syntax highlighted.
- Fixed a bug that prevented the
Show Raw Locals
option from working when the Roslyn EE failed to initialize due to invalid metadata. - Fixed a bug that prevented the
DebuggerDisplayAttribute
evaluator from working as intended. - Several improvements to the built-in IL interpreter and function evaluator aimed at improving performance and accuracy.
- Fixed type name parsing issues which lead to the debugger incorrectly resolving custom attributes, security declarations, and some marshal blobs.
- Improve the
Show in memory
command for objects in the locals and watch windows. - Improve the display of method names in the
Call stack
window.__arglist
,dynamic
,nint
,nuint
and tuple element names are now properly displayed. - Added an anti-anti-debug option to prevent the malicious use of NtRaiseHardError to trigger kernel faults (blue screens of death).
- Added an anti-anti-debug option to prevent the detection of the debugger using a call to
CloseHandle
with an invalid handle. - Update Roslyn debugger intrinsic handling to match what is expected by Roslyn 4.6.0
- CorDebug:
- Improved loading of dynamic modules (fixed issues with thread safety and added code to fetch more metadata from the CorDebug API)
- Fallback to COM-based metadata reading when the in-memory metadata is corrupted (e.g. anti-dumping protection)
- Display COM error code when the debugger fails to start.
- Made the timeout for CoreCLR debugger initialization configurable.
- Display the HRESULT when attaching the CoreCLR debugger fails.
- Improve support for debugging of single file bundle files which do not contain the required debugging components by trying to load them from the locally installed .NET installations.
- Mono:
- Improved loading of obfuscated modules when debugging
- Fixed several issues related to the resolution of method definitions on newer debugger protocol versions
- Fixed an unhandled
AggregateException
when connecting to a Unity debuggee (by @UlyssesWu). - Display the IP and port used to connect to the debuggee in the output window.
- Improve loading of metadata from in-memory modules.
- BAML decompiler:
- Fixed resolution of
PresentationFramework
when it was referenced using its special ID0xFFFF
. - Lazily resolve known XAML types, properties, and other members to increase performance.
- Improve extraction of BAML connection ID information to work without all dependency assemblies and in other edge cases.
- Fixed an issue that resulted in dnSpy introducing markup extensions in cases where they were not syntactically valid.
- Properly place markup extension arguments containing spaces in single quotes.
- Fix issues regarding incorrect or missing escaping from markup extensions.
- Fixed crashes caused by the UI's WPF markup extension parser when it encountered invalid syntax.
- Fix a bug that caused XAML paths to lack a
Z
character at the end. - Improved support for markup extensions where their classes inherit from generic classes.
- Improved support for nested types within XAML markup extensions.
- Fixed resolution of
Dependency updates:
- Updated Rosyn compiler to 4.6.0
- Updated VS MEF to 17.6.17
- Updated Newtonsoft.Json to 13.0.3
- Updated Iced to 1.19.0
New Contributors
- @Wenveo made their first contribution in #164
- @glenn-slayden made their first contribution in #188
- @UlyssesWu made their first contribution in #190
- @CptMoore made their first contribution in #206
Full Changelog: v6.3.0...v6.4.0
Thanks to everyone for reporting issues, opening pull requests, and supporting the project through other means! This release would not have been possible otherwise :P A special thanks goes out to all my current and past GitHub Sponsors for supporting this project and me working on it!