diff --git a/BuildTools/sort-resx.ps1 b/BuildTools/sort-resx.ps1
new file mode 100644
index 000000000..d85d46849
--- /dev/null
+++ b/BuildTools/sort-resx.ps1
@@ -0,0 +1,18 @@
+$ErrorActionPreference = "Stop";
+
+[Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq") | Out-Null
+
+Write-Host "Sorting .resx files...";
+
+Get-ChildItem -Include *.resx -Recurse | foreach ($_) {
+ Write-Host $_.FullName;
+
+ $doc = [System.Xml.Linq.XDocument]::Load($_.FullName);
+ $descendants = [System.Linq.Enumerable]::ToArray($doc.Descendants("data"));
+
+ [System.Xml.Linq.Extensions]::Remove($descendants);
+ $ordered = [System.Linq.Enumerable]::OrderBy($descendants, [System.Func[System.Xml.Linq.XElement,string]] { param ($e) $e.Attribute("name").Value }, [System.StringComparer]::Ordinal);
+ $doc.Root.Add($ordered);
+ $doc.Save($_.FullName);
+}
+
diff --git a/ILSpy.ReadyToRun/Properties/Resources.resx b/ILSpy.ReadyToRun/Properties/Resources.resx
index 67b36ef54..8c6d1ce8c 100644
--- a/ILSpy.ReadyToRun/Properties/Resources.resx
+++ b/ILSpy.ReadyToRun/Properties/Resources.resx
@@ -117,16 +117,16 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- ReadyToRun
-
Disassembly Format
-
- Show Unwind Info
+
+ ReadyToRun
Show Debug Info
+
+ Show Unwind Info
+
\ No newline at end of file
diff --git a/ILSpy.ReadyToRun/Properties/Resources.zh-Hans.resx b/ILSpy.ReadyToRun/Properties/Resources.zh-Hans.resx
index f13237c18..9430c8a3d 100644
--- a/ILSpy.ReadyToRun/Properties/Resources.zh-Hans.resx
+++ b/ILSpy.ReadyToRun/Properties/Resources.zh-Hans.resx
@@ -117,12 +117,12 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- ReadyToRun
-
反汇编格式
+
+ ReadyToRun
+
显示调试信息
diff --git a/ILSpy/ILSpy.csproj b/ILSpy/ILSpy.csproj
index c19321de3..197bd9ed7 100644
--- a/ILSpy/ILSpy.csproj
+++ b/ILSpy/ILSpy.csproj
@@ -844,7 +844,14 @@
-
+
+
+
+ powershell -NoProfile -ExecutionPolicy Bypass -File BuildTools/sort-resx.ps1
+
+
+
+
diff --git a/ILSpy/Properties/Resources.resx b/ILSpy/Properties/Resources.resx
index adb29448e..32fc39d61 100644
--- a/ILSpy/Properties/Resources.resx
+++ b/ILSpy/Properties/Resources.resx
@@ -117,796 +117,796 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Navigation
+
+ About
-
- Back
+
+ Add preconfigured list...
-
- Forward
+
+ Add shell integration
-
- _Check for Updates
+
+ This will add "{0}" to the registry at "HKCU\Software\Classes\dllfile\shell\Open with ILSpy\command" and "HKCU\Software\Classes\exefile\shell\Open with ILSpy\command" to allow opening .dll and .exe files from the Windows Explorer context menu.
+
+Do you want to continue?
-
- _Help
+
+ |All Files|*.*
-
- _File
+
+ Allow multiple instances
-
- Open
+
+ Always use braces
-
- DEBUG -- Disassemble All
+
+ Analyze
-
- E_xit
+
+ Assemblies
-
- Exit
+
+ Assembly
-
- Save
+
+ The directory is not empty. File will be overwritten.
+Are you sure you want to continue?
-
- _Open...
+
+ Project Directory not empty
-
- Open from _GAC...
+
+ Automatically check for updates every week
-
- Manage assembly _lists...
+
+ Back
-
- Reload all assemblies
+
+ Base Types
-
- DEBUG -- Decompile All
+
+ C_lone
-
- DEBUG -- Decompile 100x
+
+ Cancel
-
- Generate portable PDB
+
+ Entity could not be resolved. Cannot analyze entities from missing assembly references. Add the missing reference and try again.
-
- Reload all assemblies
+
+ Cannot create PDB file for {0}, because it does not contain a PE Debug Directory Entry of type 'CodeView'.
-
- _Reload
+
+ Check again
-
- _Remove Assemblies with load errors
+
+ Check for updates
-
- Remove
+
+ Checking...
-
- _Save Code...
+
+ Close
-
- _Show debug steps
+
+ Collapse all tree nodes
-
- _View
+
+ Copy
-
- Sort assembly _list by name
+
+ Copy error message
-
- View
+
+ Copy FQ Name
-
- Sort assembly list by name
+
+ Create
-
- _Collapse all tree nodes
+
+ Culture
-
- Collapse all tree nodes
+
+ DEBUG -- Decompile All
-
- Name
+
+ DEBUG -- Decompile 100x
-
- Value (as string)
+
+ DEBUG -- Disassemble All
-
- Type
+
+ DEBUG -- Dump PDB as XML
-
- String Table
+
+ Debug Steps
-
- Value
+
+ Debug this step
-
- Use variable names from debug symbols, if available
+
+ Decompile
-
- Show info from debug symbols, if available
+
+ Decompile to new tab
-
- Show XML documentation in decompiled code
+
+ Decompiler
-
- Enable folding on all blocks in braces
+
+ Allow extension 'Add' methods in collection initializer expressions
-
- Remove dead and side effect free code
+
+ Use 'ref' extension methods
-
- Insert using declarations
+
+ Always cast targets of explicit interface implementation calls
-
+
+ Always show enum member values
+
+
Always use braces
-
- Expand member definitions after decompilation
+
+ Apply Windows Runtime projections on loaded assemblies
-
- Font
+
+ Array initializer expressions
-
- Other options
+
+ Decompile async IAsyncEnumerator methods
-
- Show line numbers
+
+ Decompile ?. and ?[] operators
-
- Show metadata tokens
+
+ Decompile anonymous methods/lambdas
-
- Enable word wrap
+
+ Decompile anonymous types
-
- Sort results by fitness
+
+ Decompile async methods
-
- Allow multiple instances
+
+ Decompile automatic events
-
- Cancel
+
+ Decompile automatic properties
-
- OK
+
+ Decompile await in catch/finally blocks
-
- Search
+
+ Decompile C# 1.0 'public unsafe fixed int arr[10];' members
-
- Search for t:TypeName, m:Member or c:Constant; use exact match (=term), 'should not contain' (-term) or 'must contain' (+term); use /reg(ular)?Ex(pressions)?/ or both - t:/Type(Name)?/...
+
+ Decompile [DecimalConstant(...)] as simple literal values
-
- _Search for:
+
+ Decompile enumerators (yield return)
-
- Location
+
+ Decompile expression trees
-
- Decompiling...
+
+ Decompile use of the 'dynamic' type
-
- Copy
+
+ Detect awaited using and foreach statements
-
- Editor
+
+ Detect foreach statements
-
- Toggle All Folding
+
+ Detect lock statements
-
- Folding
+
+ Detect switch on string
-
- Resources file (*.resources)|*.resources|Resource XML file|*.resx
+
+ Detect tuple comparisons
-
- _Remove
+
+ Detect using statements
-
- _Load Dependencies
+
+ Dictionary initializer expressions
-
- Dependencies
+
+ Transform to do-while, if possible
-
- _Add To Main List
+
+ F#-specific options
-
- _Open Containing Folder
+
+ Transform to for, if possible
-
- Shell
+
+ Include XML documentation comments in the decompiled code
-
- _Open Command Line Here
+
+ Insert using declarations
-
- Copy FQ Name
+
+ Introduce local functions
-
- Loading...
+
+ Introduce static local functions
-
- Copy error message
+
+ IsByRefLikeAttribute should be replaced with 'ref' modifiers on structs
-
- Derived Types
+
+ IsReadOnlyAttribute should be replaced with 'readonly'/'in' modifiers on structs/parameters
-
- References
+
+ IsUnmanagedAttribute on type parameters should be replaced with 'unmanaged' constraints
-
- Resources
+
+ Use nint/nuint types
-
- _About
+
+ Nullable reference types
-
- ILSpy version
+
+ Object/collection initializer expressions
-
- Automatically check for updates every week
+
+ Other
-
- Check for updates
+
+ Ranges
-
- Checking...
+
+ Read-only methods
-
- You are using the latest release.
+
+ Remove dead and side effect free code (use with caution!)
-
- Version {0} is available.
+
+ Remove dead stores (use with caution!)
-
- Download
+
+ Remove optional arguments, if possible
-
- You are using a nightly build newer than the latest release.
+
+ Separate local variable declarations and initializers (int x = 5; -> int x; x = 5;), if possible
-
- Show public, private and internal
+
+ Show info from debug symbols, if available
-
- Show public, private and internal
+
+ Use discards
-
- Stand by...
+
+ Use expression-bodied member syntax for get-only properties
-
- Status
+
+ Use extension method syntax
-
- A new ILSpy version is available.
+
+ Use implicit conversions between tuple types
-
- No update for ILSpy found.
+
+ Use implicit method group conversions
-
- Check again
+
+ Use LINQ expression syntax
-
- Searching...
+
+ Use lambda syntax, if possible
-
- Search aborted, more than 1000 results found.
+
+ Use lifted operators for nullables
-
- Search...
+
+ Use named arguments
-
- Display Code
+
+ Use non-trailing named arguments
-
- Save Code
+
+ Use out variable declarations
-
- |All Files|*.*
+
+ Use pattern-based fixed statement
-
- Open Explorer
+
+ Use new SDK style format for generated project files (*.csproj)
-
- Select All
+
+ Use stackalloc initializer syntax
-
- Toggle Folding
+
+ Use string interpolation
-
- Analyze
+
+ Use throw expressions
-
- Enter a list name:
+
+ Use tuple type syntax
-
- Create
+
+ Use variable names from debug symbols, if available
-
- New list
+
+ VB-specific options
-
- Select assemblies to open:
+
+ The settings selected below are applied to the decompiler output in combination with the selection in the language drop-down. Selecting a lower language version in the drop-down will deactivate all selected options of the higher versions. Note that some settings implicitly depend on each other, e.g.: LINQ expressions cannot be introduced without first transforming static calls to extension method calls.
-
- Nuget Package Browser
+
+ Decompiling...
-
- Open From GAC
+
+ Dependencies
-
- _Search:
+
+ Derived Types
-
- Reference Name
+
+ Display
-
- Version
+
+ Display Code
-
- Public Key Token
+
+ Font:
-
- Manage Assembly Lists
+
+ Download
-
- Select a list:
+
+ E_xit
-
- _New
+
+ Editor
-
- _Open
+
+ Enable folding on all blocks in braces
-
- _Delete
+
+ Enable word wrap
-
- _Reset
+
+ Enter a list name:
-
- Options
+
+ Exit
-
- _Options...
+
+ Expand member definitions after decompilation
-
- Display
+
+ Expand using declarations after decompilation
-
- Decompiler
+
+ Folding
-
- Misc
+
+ Font
-
- Font:
+
+ Forward
-
- Size:
+
+ Generate portable PDB
-
- Debug Steps
+
+ Generation complete in {0} seconds.
-
- UseFieldSugar
+
+ Generation was cancelled.
-
- UseLogicOperationSugar
+
+ Go to token
-
- ShowILRanges
-
-
- ShowChildIndexInBlock
-
-
- Show state before this step
+
+ Hide empty metadata tables from tree view
-
- Show state after this step
+
+ Highlight matching braces
-
- Debug this step
+
+ ILSpyAboutPage.txt
-
- Warning: This assembly is marked as 'reference assembly', which means that it only contains metadata and no executable code.
+
+ ILSpy version
-
- Warning: Some assembly references could not be resolved automatically. This might lead to incorrect decompilation of some parts,
+
+ A new ILSpy version is available.
-
- for ex. property getter/setter access. To get optimal decompilation results, please manually add the missing references to the list of loaded assemblies.
+
+ Indent size:
-
- Show assembly load log
+
+ Indentation
-
- Other Resources
+
+ Insert using declarations
-
- Use tabs instead of spaces
+
+ Are you sure that you want to delete the selected assembly list?
-
- Show metadata tokens in base 10
+
+ A list with the same name was found.
-
- Expand using declarations after decompilation
+
+ Are you sure that you want to remove all assembly lists and recreate the default assembly lists?
Load assemblies that were loaded in the last instance.
-
- Indentation
-
-
- Indent size:
+
+ Loading...
-
- Tab size:
+
+ Location
-
- Search (Ctrl+Shift+F or Ctrl+E)
+
+ Manage Assembly Lists
-
- Show all types and members
+
+ Manage assembly _lists...
-
- Other
+
+ Misc
-
- Show _all types and members
+
+ Name
-
- The settings selected below are applied to the decompiler output in combination with the selection in the language drop-down. Selecting a lower language version in the drop-down will deactivate all selected options of the higher versions. Note that some settings implicitly depend on each other, e.g.: LINQ expressions cannot be introduced without first transforming static calls to extension method calls.
+
+ Navigation
-
- Decompile enumerators (yield return)
+
+ Navigation failed because the target is hidden or a compiler-generated class.\n
+Please disable all filters that might hide the item (i.e. activate "View > Show internal types and members") and try again.
-
- Decompile anonymous methods/lambdas
+
+ New list
-
- Decompile anonymous types
+
+ New Tab
-
- Use lambda syntax, if possible
+
+ Nuget Package Browser
-
- Decompile expression trees
+
+ OK
-
- Decompile use of the 'dynamic' type
+
+ Open
-
- Decompile async methods
+
+ Open Explorer
-
- Decompile await in catch/finally blocks
+
+ Open From GAC
-
- Decompile [DecimalConstant(...)] as simple literal values
+
+ Open from _GAC...
-
- Decompile C# 1.0 'public unsafe fixed int arr[10];' members
+
+ _Delete
-
- Use lifted operators for nullables
+
+ _Open
-
- Decompile ?. and ?[] operators
+
+ Options
-
- Decompile automatic properties
+
+ Other
-
- Decompile automatic events
+
+ Other options
-
- Detect using statements
+
+ Other Resources
-
- Other
+
+ Portable PDB|*.pdb|All files|*.*
-
- Always use braces
+
+ for ex. property getter/setter access. To get optimal decompilation results, please manually add the missing references to the list of loaded assemblies.
-
- Detect foreach statements
+
+ Public Key Token
-
- Detect lock statements
+
+ R_ename
-
- Detect switch on string
+
+ Reference Name
-
- Insert using declarations
+
+ References
-
- Use extension method syntax
+
+ Reload all assemblies
-
- Use LINQ expression syntax
+
+ Reload all assemblies
-
- Use implicit method group conversions
+
+ Remove
-
- Always cast targets of explicit interface implementation calls
+
+ Remove dead and side effect free code
-
- Use variable names from debug symbols, if available
+
+ Remove shell integration
-
- Array initializer expressions
+
+ This will remove "{0}" from the registry at "HKCU\Software\Classes\dllfile\shell\Open with ILSpy\command" and "HKCU\Software\Classes\exefile\shell\Open with ILSpy\command".
+
+Do you want to continue?
-
- Object/collection initializer expressions
+
+ Rename list
-
- Dictionary initializer expressions
+
+ Reset to defaults
-
- Allow extension 'Add' methods in collection initializer expressions
+
+ Do you really want to load the default settings for the active page?
-
- Use string interpolation
+
+ Resources file (*.resources)|*.resources|Resource XML file|*.resx
-
- Include XML documentation comments in the decompiled code
+
+ Save
-
- Use expression-bodied member syntax for get-only properties
+
+ Save Code
-
- Use out variable declarations
+
+ Search...
-
- Use discards
+
+ Search aborted, more than 1000 results found.
-
- IsByRefLikeAttribute should be replaced with 'ref' modifiers on structs
+
+ Search (Ctrl+Shift+F or Ctrl+E)
-
- IsReadOnlyAttribute should be replaced with 'readonly'/'in' modifiers on structs/parameters
+
+ Search Microsoft Docs...
-
- IsUnmanagedAttribute on type parameters should be replaced with 'unmanaged' constraints
+
+ Search
-
- Use stackalloc initializer syntax
+
+ Searching...
-
- Use tuple type syntax
+
+ Select All
-
- Use implicit conversions between tuple types
+
+ Select assemblies to open:
-
- Detect tuple comparisons
+
+ Select a list of assemblies
-
- Use named arguments
+
+ Select language to decompile to
-
- Use non-trailing named arguments
-
-
- Remove optional arguments, if possible
-
-
- Introduce local functions
+
+ Select a list:
-
- Nullable reference types
+
+ Select PDB...
-
- Show info from debug symbols, if available
+
+ Select version of language to output
-
- VB-specific options
+
+ Shell
-
- F#-specific options
+
+ Show all types and members
-
- Remove dead and side effect free code (use with caution!)
+
+ Show assembly load log
-
- Apply Windows Runtime projections on loaded assemblies
+
+ ShowChildIndexInBlock
-
- Search Microsoft Docs...
+
+ Show XML documentation in decompiled code
-
- Entity could not be resolved. Cannot analyze entities from missing assembly references. Add the missing reference and try again.
+
+ ShowILRanges
-
- Use throw expressions
+
+ Show info from debug symbols, if available
-
- Use 'ref' extension methods
+
+ Show public, private and internal
-
- The directory is not empty. File will be overwritten.
-Are you sure you want to continue?
+
+ Show line numbers
-
- Project Directory not empty
+
+ Show metadata tokens
-
- Highlight matching braces
+
+ Show metadata tokens in base 10
-
- Select language to decompile to
+
+ Show only public types and members
-
- Select version of language to output
+
+ Show state after this step
-
- Remove dead stores (use with caution!)
+
+ Show state before this step
-
- Always show enum member values
+
+ Show _all types and members
-
- Show only public types and members
+
+ Show public, private and internal
Show only _public types and members
-
- Assembly
+
+ Size:
-
- Decompile to new tab
+
+ Sort assembly list by name
-
- Decompile async IAsyncEnumerator methods
+
+ Sort assembly _list by name
-
- Read-only methods
+
+ Sort results by fitness
-
- Detect awaited using and foreach statements
+
+ Stand by...
-
- About
+
+ Status
-
- Assemblies
+
+ String Table
-
- _Close all documents
+
+ Tab size:
-
- _Reset layout
+
+ Toggle All Folding
-
- _Window
+
+ Type
-
- Use pattern-based fixed statement
+
+ No update for ILSpy found.
-
- Transform to do-while, if possible
+
+ UseFieldSugar
-
- Transform to for, if possible
+
+ UseLogicOperationSugar
-
- Separate local variable declarations and initializers (int x = 5; -> int x; x = 5;), if possible
+
+ Use tabs instead of spaces
-
- Reset to defaults
+
+ You are using the latest release.
-
- Do you really want to load the default settings for the active page?
+
+ You are using a nightly build newer than the latest release.
-
- Select a list of assemblies
+
+ Value
-
- Close
+
+ Value (as string)
-
- C_lone
+
+ Use variable names from debug symbols, if available
-
- Are you sure that you want to delete the selected assembly list?
+
+ Version
-
- A list with the same name was found.
+
+ Version {0} is available.
-
- Are you sure that you want to remove all assembly lists and recreate the default assembly lists?
+
+ View
-
- Introduce static local functions
+
+ Visual Studio Solution file|*.sln|All files|*.*
-
- Hide empty metadata tables from tree view
+
+ Warning: This assembly is marked as 'reference assembly', which means that it only contains metadata and no executable code.
-
- Navigation failed because the target is hidden or a compiler-generated class.\n
-Please disable all filters that might hide the item (i.e. activate "View > Show internal types and members") and try again.
+
+ Warning: Some assembly references could not be resolved automatically. This might lead to incorrect decompilation of some parts,
-
- Add shell integration
+
+ Search for t:TypeName, m:Member or c:Constant; use exact match (=term), 'should not contain' (-term) or 'must contain' (+term); use /reg(ular)?Ex(pressions)?/ or both - t:/Type(Name)?/...
-
- This will add "{0}" to the registry at "HKCU\Software\Classes\dllfile\shell\Open with ILSpy\command" and "HKCU\Software\Classes\exefile\shell\Open with ILSpy\command" to allow opening .dll and .exe files from the Windows Explorer context menu.
-
-Do you want to continue?
+
+ _Close all documents
-
- Remove shell integration
+
+ _Reset layout
-
- This will remove "{0}" from the registry at "HKCU\Software\Classes\dllfile\shell\Open with ILSpy\command" and "HKCU\Software\Classes\exefile\shell\Open with ILSpy\command".
-
-Do you want to continue?
+
+ _About
-
- Ranges
+
+ _Add To Main List
-
- Add preconfigured list...
+
+ _Check for Updates
-
- R_ename
+
+ _Collapse all tree nodes
-
- Rename list
+
+ _File
-
- Culture
+
+ _Help
-
- New Tab
+
+ _Load Dependencies
-
- Use new SDK style format for generated project files (*.csproj)
+
+ _New
-
- Use nint/nuint types
+
+ _Open...
-
- Base Types
+
+ _Open Command Line Here
-
- DEBUG -- Dump PDB as XML
+
+ _Open Containing Folder
-
- ILSpyAboutPage.txt
+
+ _Options...
-
- Select PDB...
+
+ _Reload
-
- Portable PDB|*.pdb|All files|*.*
+
+ _Remove
-
- Decompile
+
+ _Remove Assemblies with load errors
-
- Go to token
+
+