Browse Source

Merge branch 'christophwille/roslyn5test' of https://github.com/icsharpcode/ILSpy into christophwille/roslyn5test

pull/3517/head
Christoph Wille 5 months ago
parent
commit
2a6b31ea4f
  1. 2
      .github/workflows/build-frontends.yml
  2. 4
      .github/workflows/build-ilspy.yml
  3. 2
      .github/workflows/codeql-analysis.yml
  4. 2
      .github/workflows/generate-bom.yml
  5. 2
      .github/workflows/scorecard.yml
  6. 2
      BuildTools/pre-commit
  7. 33
      Directory.Packages.props
  8. 10
      ICSharpCode.BamlDecompiler/packages.lock.json
  9. 4
      ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
  10. 17
      ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
  11. 17
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpandParamsArgumentsDisabled.cs
  12. 19
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/OptionalArgumentsDisabled.cs
  13. 5
      ICSharpCode.Decompiler/CSharp/CallBuilder.cs
  14. 19
      ICSharpCode.Decompiler/DecompilerSettings.cs
  15. 23
      ICSharpCode.Decompiler/Humanizer/StringHumanizeExtensions.cs
  16. 273
      ICSharpCode.Decompiler/Humanizer/Vocabularies.cs
  17. 298
      ICSharpCode.Decompiler/Humanizer/Vocabulary.cs
  18. 3
      ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj
  19. 2
      ICSharpCode.Decompiler/Properties/DecompilerVersionInfo.template.cs
  20. 6
      ICSharpCode.Decompiler/packages.lock.json
  21. 337
      ICSharpCode.ILSpyCmd/packages.lock.json
  22. 20
      ICSharpCode.ILSpyX/packages.lock.json
  23. 2
      ILSpy.BamlDecompiler.Tests/ILSpy.BamlDecompiler.Tests.csproj
  24. 2
      ILSpy.Tests/ILSpy.Tests.csproj
  25. 4
      ILSpy/Controls/CustomDialog.cs
  26. 9
      ILSpy/Properties/Resources.Designer.cs
  27. 3
      ILSpy/Properties/Resources.resx

2
.github/workflows/build-frontends.yml

@ -14,7 +14,7 @@ jobs: @@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
fetch-depth: 0
persist-credentials: false

4
.github/workflows/build-ilspy.yml

@ -26,7 +26,7 @@ jobs: @@ -26,7 +26,7 @@ jobs:
- run: mkdir -p $env:StagingDirectory
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
submodules: true
fetch-depth: 0
@ -45,7 +45,7 @@ jobs: @@ -45,7 +45,7 @@ jobs:
- name: Install dotnet-format
env:
DOTNET_FORMAT_VERSION: 10.0.100-preview.6.25358.103
DOTNET_FORMAT_VERSION: 10.0.100-preview.7.25380.108
DOTNET_FORMAT_SOURCE: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-transport/nuget/v3/index.json
run: dotnet tool install -g dotnet-format --version "${{env.DOTNET_FORMAT_VERSION}}" --add-source "${{env.DOTNET_FORMAT_SOURCE}}"

2
.github/workflows/codeql-analysis.yml

@ -25,7 +25,7 @@ jobs: @@ -25,7 +25,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 0
persist-credentials: false

2
.github/workflows/generate-bom.yml

@ -14,7 +14,7 @@ jobs: @@ -14,7 +14,7 @@ jobs:
steps:
- name: Checkout
run: git config --global core.autocrlf true
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
submodules: true
persist-credentials: false

2
.github/workflows/scorecard.yml

@ -24,7 +24,7 @@ jobs: @@ -24,7 +24,7 @@ jobs:
steps:
- name: "Checkout code"
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
persist-credentials: false

2
BuildTools/pre-commit

@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
set -eu
DOTNET_FORMAT_VERSION=10.0.100-preview.6.25358.103
DOTNET_FORMAT_VERSION=10.0.100-preview.7.25380.108
DOTNET_FORMAT_SOURCE="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-transport/nuget/v3/index.json"
DOTNET_PATH="$LOCALAPPDATA/ICSharpCode/ILSpy/dotnet-format-$DOTNET_FORMAT_VERSION"
if [ ! -d "$DOTNET_PATH" ]; then

33
Directory.Packages.props

@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
<PackageVersion Include="DataGridExtensions" Version="2.6.0" />
<PackageVersion Include="DiffLib" Version="2025.0.0" />
<PackageVersion Include="Dirkster.AvalonDock.Themes.VS2013" Version="4.72.1" />
<PackageVersion Include="ILCompiler.Reflection.ReadyToRun.Experimental" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="ILCompiler.Reflection.ReadyToRun.Experimental" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="Iced" Version="1.21.0" />
<PackageVersion Include="K4os.Compression.LZ4" Version="1.3.8" />
<PackageVersion Include="McMaster.Extensions.CommandLineUtils" Version="4.1.1" />
@ -19,32 +19,33 @@ @@ -19,32 +19,33 @@
<PackageVersion Include="Microsoft.DiaSymReader.Converter.Xml" Version="1.1.0-beta2-22171-02" />
<PackageVersion Include="Microsoft.DiaSymReader" Version="1.4.0" />
<PackageVersion Include="Microsoft.DiaSymReader.Native" Version="17.0.0-beta1.21524.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageVersion Include="Microsoft.NETCore.ILAsm" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="Microsoft.NETCore.ILDAsm" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="Microsoft.Sbom.Targets" Version="4.0.3" />
<PackageVersion Include="Microsoft.NETCore.ILAsm" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="Microsoft.NETCore.ILDAsm" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="Microsoft.Sbom.Targets" Version="4.1.0" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="1.7.3" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="1.8.2" />
<PackageVersion Include="Microsoft.Testing.Extensions.VSTestBridge" Version="1.8.2" />
<PackageVersion Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.135" />
<PackageVersion Include="Mono.Cecil" Version="0.11.6" />
<PackageVersion Include="NSubstitute" Version="5.3.0" />
<PackageVersion Include="NSubstitute.Analyzers.CSharp" Version="1.0.17" />
<PackageVersion Include="NUnit" Version="4.3.2" />
<PackageVersion Include="NUnit3TestAdapter" Version="5.1.0-alpha.3" />
<PackageVersion Include="NUnit" Version="4.4.0" />
<PackageVersion Include="NUnit3TestAdapter" Version="5.1.0" />
<PackageVersion Include="NuGet.Protocol" Version="6.14.0" />
<PackageVersion Include="PowerShellStandard.Library" Version="5.1.1" />
<PackageVersion Include="Shouldly" Version="4.3.0" />
<PackageVersion Include="System.Composition.AttributedModel" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="System.Collections.Immutable" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="System.Composition.AttributedModel" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="System.Collections.Immutable" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="System.Memory" Version="4.6.3" />
<PackageVersion Include="System.Reflection.Metadata" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="System.Resources.Extensions" Version="10.0.0-preview.6.25358.103" />
<PackageVersion Include="System.Reflection.Metadata" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="System.Resources.Extensions" Version="10.0.0-preview.7.25380.108" />
<PackageVersion Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" />
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="9.0.7" />
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="9.0.8" />
<PackageVersion Include="TomsToolbox.Composition.MicrosoftExtensions" Version="2.22.1" />
<PackageVersion Include="TomsToolbox.Wpf.Composition" Version="2.22.0" />
<PackageVersion Include="TomsToolbox.Wpf.Composition.AttributedModel" Version="2.22.1" />

10
ICSharpCode.BamlDecompiler/packages.lock.json

@ -4,9 +4,9 @@ @@ -4,9 +4,9 @@
"net10.0": {
"Microsoft.Sbom.Targets": {
"type": "Direct",
"requested": "[4.0.3, )",
"resolved": "4.0.3",
"contentHash": "xwHbbj9gLj1HZzLVEM2UpQM7ZY7FkiEs/nRkt6G1H7mR/14aNhjsskRoI7K7CezHJA4cASsGxTvqorbUXTI1TQ=="
"requested": "[4.1.0, )",
"resolved": "4.1.0",
"contentHash": "GidfeSVHFtNwZSbD2wmwWiUiGkVdND8QR1z21WpFa+/47Mi3YiDkAzsWF02wXrMx2Xd8j3QSfKOUY1JtnF+7uw=="
},
"TomsToolbox.Composition.Analyzer": {
"type": "Direct",
@ -23,13 +23,13 @@ @@ -23,13 +23,13 @@
},
"System.Collections.Immutable": {
"type": "CentralTransitive",
"requested": "[10.0.0-preview.6.25358.103, )",
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "9.0.0",
"contentHash": "QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w=="
},
"System.Reflection.Metadata": {
"type": "CentralTransitive",
"requested": "[10.0.0-preview.6.25358.103, )",
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "9.0.0",
"contentHash": "ANiqLu3DxW9kol/hMmTWbt3414t9ftdIuiIU7j80okq2YzAueo120M442xk1kDJWtmZTqWQn7wHDvMRipVOEOQ=="
}

4
ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj

@ -74,7 +74,7 @@ @@ -74,7 +74,7 @@
<PackageReference Include="NUnit" />
<PackageReference Include="Shouldly" />
<PackageReference Include="Microsoft.Testing.Extensions.TrxReport" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Microsoft.Testing.Extensions.VSTestBridge" />
<PackageReference Include="System.Memory" />
<PackageReference Include="Mono.Cecil" />
<PackageReference Include="Microsoft.NETCore.ILAsm" />
@ -146,6 +146,7 @@ @@ -146,6 +146,7 @@
<Compile Include="TestCases\ILPretty\Issue3442.cs" />
<Compile Include="TestCases\ILPretty\Issue3466.cs" />
<Compile Include="TestCases\ILPretty\Issue3524.cs" />
<Compile Include="TestCases\Pretty\ExpandParamsArgumentsDisabled.cs" />
<Compile Include="TestCases\Pretty\ExtensionProperties.cs" />
<None Include="TestCases\ILPretty\Issue3504.cs" />
<Compile Include="TestCases\ILPretty\MonoFixed.cs" />
@ -251,6 +252,7 @@ @@ -251,6 +252,7 @@
<Compile Include="TestCases\Pretty\ConstantsTests.cs" />
<Compile Include="TestCases\Pretty\CS73_StackAllocInitializers.cs" />
<Compile Include="TestCases\Pretty\OptionalArguments.cs" />
<Compile Include="TestCases\Pretty\OptionalArgumentsDisabled.cs" />
<Compile Include="TestCases\Pretty\CustomShortCircuitOperators.cs" />
<Compile Include="TestCases\Pretty\ReduceNesting.cs" />
<Compile Include="TestCases\Pretty\InterfaceTests.cs" />

17
ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs

@ -599,6 +599,17 @@ namespace ICSharpCode.Decompiler.Tests @@ -599,6 +599,17 @@ namespace ICSharpCode.Decompiler.Tests
await RunForLibrary(cscOptions: cscOptions);
}
[Test]
public async Task OptionalArgumentsDisabled([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
await RunForLibrary(
cscOptions: cscOptions,
configureDecompiler: settings => {
settings.OptionalArguments = false;
}
);
}
[Test]
public async Task Comparisons([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
@ -617,6 +628,12 @@ namespace ICSharpCode.Decompiler.Tests @@ -617,6 +628,12 @@ namespace ICSharpCode.Decompiler.Tests
await RunForLibrary(cscOptions: cscOptions);
}
[Test]
public async Task ExpandParamsArgumentsDisabled([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
await RunForLibrary(cscOptions: cscOptions, configureDecompiler: settings => settings.ExpandParamsArguments = false);
}
[Test]
public async Task Issue1080([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{

17
ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpandParamsArgumentsDisabled.cs

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
using System;
namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{
public class ExpandParamsArgumentsDisabled
{
public void Test()
{
MethodWithParams(Array.Empty<int>());
MethodWithParams(new int[1] { 5 });
}
public void MethodWithParams(params int[] b)
{
}
}
}

19
ICSharpCode.Decompiler.Tests/TestCases/Pretty/OptionalArgumentsDisabled.cs

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{
public class OptionalArgumentsDisabled
{
public void Test()
{
MixedArguments("123", 0, 0);
OnlyOptionalArguments(0, 0);
}
public void MixedArguments(string msg, int a = 0, int b = 0)
{
}
public void OnlyOptionalArguments(int a = 0, int b = 0)
{
}
}
}

5
ICSharpCode.Decompiler/CSharp/CallBuilder.cs

@ -967,9 +967,10 @@ namespace ICSharpCode.Decompiler.CSharp @@ -967,9 +967,10 @@ namespace ICSharpCode.Decompiler.CSharp
}
else
{
firstOptionalArgumentIndex = -2;
if (firstOptionalArgumentIndex != -1)
firstOptionalArgumentIndex = -2;
}
if (parameter.IsParams && i + 1 == callArguments.Count && argumentToParameterMap == null)
if (expressionBuilder.settings.ExpandParamsArguments && parameter.IsParams && i + 1 == callArguments.Count && argumentToParameterMap == null)
{
// Parameter is marked params
// If the argument is an array creation, inline all elements into the call and add missing default values.

19
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -1703,6 +1703,25 @@ namespace ICSharpCode.Decompiler @@ -1703,6 +1703,25 @@ namespace ICSharpCode.Decompiler
}
}
bool expandParamsArguments = true;
/// <summary>
/// Gets/Sets whether to expand <c>params</c> arguments by replacing explicit array creation
/// with individual values in method calls.
/// </summary>
[Category("C# 1.0 / VS .NET")]
[Description("DecompilerSettings.ExpandParamsArguments")]
public bool ExpandParamsArguments {
get { return expandParamsArguments; }
set {
if (expandParamsArguments != value)
{
expandParamsArguments = value;
OnPropertyChanged();
}
}
}
bool localFunctions = true;
/// <summary>

23
ICSharpCode.Decompiler/Humanizer/StringHumanizeExtensions.cs

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
namespace Humanizer.Inflections;
using CharSpan = System.ReadOnlySpan<System.Char>;
/// <summary>
/// Contains extension methods for humanizing string values.
/// </summary>
internal static class StringHumanizeExtensions
{
internal static unsafe string Concat(CharSpan left, CharSpan right)
{
var result = new string('\0', left.Length + right.Length);
fixed (char* pResult = result)
{
left.CopyTo(new(pResult, left.Length));
right.CopyTo(new(pResult + left.Length, right.Length));
}
return result;
}
internal static unsafe string Concat(char left, CharSpan right) =>
Concat(new CharSpan(&left, 1), right);
}

273
ICSharpCode.Decompiler/Humanizer/Vocabularies.cs

@ -1,149 +1,154 @@ @@ -1,149 +1,154 @@
using System;
using System.Threading;
namespace Humanizer.Inflections
namespace Humanizer.Inflections;
/// <summary>
/// Container for registered Vocabularies. At present, only a single vocabulary is supported: Default.
/// </summary>
internal static class Vocabularies
{
static readonly Lazy<Vocabulary> Instance = new(BuildDefault, LazyThreadSafetyMode.PublicationOnly);
/// <summary>
/// Container for registered Vocabularies. At present, only a single vocabulary is supported: Default.
/// The default vocabulary used for singular/plural irregularities.
/// Rules can be added to this vocabulary and will be picked up by called to Singularize() and Pluralize().
/// At this time, multiple vocabularies and removing existing rules are not supported.
/// </summary>
internal static class Vocabularies
{
private static readonly Lazy<Vocabulary> Instance;
static Vocabularies()
{
Instance = new Lazy<Vocabulary>(BuildDefault, LazyThreadSafetyMode.PublicationOnly);
}
public static Vocabulary Default => Instance.Value;
/// <summary>
/// The default vocabulary used for singular/plural irregularities.
/// Rules can be added to this vocabulary and will be picked up by called to Singularize() and Pluralize().
/// At this time, multiple vocabularies and removing existing rules are not supported.
/// </summary>
public static Vocabulary Default => Instance.Value;
private static Vocabulary BuildDefault()
{
var _default = new Vocabulary();
_default.AddPlural("$", "s");
_default.AddPlural("s$", "s");
_default.AddPlural("(ax|test)is$", "$1es");
_default.AddPlural("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)us$", "$1i");
_default.AddPlural("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)$", "$1es");
_default.AddPlural("(buffal|tomat|volcan|ech|embarg|her|mosquit|potat|torped|vet)o$", "$1oes");
_default.AddPlural("([dti])um$", "$1a");
_default.AddPlural("sis$", "ses");
_default.AddPlural("(?:([^f])fe|([lr])f)$", "$1$2ves");
_default.AddPlural("(hive)$", "$1s");
_default.AddPlural("([^aeiouy]|qu)y$", "$1ies");
_default.AddPlural("(x|ch|ss|sh)$", "$1es");
_default.AddPlural("(matr|vert|ind|d)ix|ex$", "$1ices");
_default.AddPlural("(^[m|l])ouse$", "$1ice");
_default.AddPlural("^(ox)$", "$1en");
_default.AddPlural("(quiz)$", "$1zes");
_default.AddPlural("(buz|blit|walt)z$", "$1zes");
_default.AddPlural("(hoo|lea|loa|thie)f$", "$1ves");
_default.AddPlural("(alumn|alg|larv|vertebr)a$", "$1ae");
_default.AddPlural("(criteri|phenomen)on$", "$1a");
static Vocabulary BuildDefault()
{
var _default = new Vocabulary();
_default.AddSingular("s$", "");
_default.AddSingular("(n)ews$", "$1ews");
_default.AddSingular("([dti])a$", "$1um");
_default.AddSingular("(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$", "$1sis");
_default.AddSingular("([^f])ves$", "$1fe");
_default.AddSingular("(hive)s$", "$1");
_default.AddSingular("(tive)s$", "$1");
_default.AddSingular("([lr]|hoo|lea|loa|thie)ves$", "$1f");
_default.AddSingular("(^zomb)?([^aeiouy]|qu)ies$", "$2y");
_default.AddSingular("(s)eries$", "$1eries");
_default.AddSingular("(m)ovies$", "$1ovie");
_default.AddSingular("(x|ch|ss|sh)es$", "$1");
_default.AddSingular("(^[m|l])ice$", "$1ouse");
_default.AddSingular("(o)es$", "$1");
_default.AddSingular("(shoe)s$", "$1");
_default.AddSingular("(cris|ax|test)es$", "$1is");
_default.AddSingular("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)i$", "$1us");
_default.AddSingular("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)es$", "$1");
_default.AddSingular("^(ox)en", "$1");
_default.AddSingular("(matr|d)ices$", "$1ix");
_default.AddSingular("(vert|ind)ices$", "$1ex");
_default.AddSingular("(quiz)zes$", "$1");
_default.AddSingular("(buz|blit|walt)zes$", "$1z");
_default.AddSingular("(alumn|alg|larv|vertebr)ae$", "$1a");
_default.AddSingular("(criteri|phenomen)a$", "$1on");
_default.AddSingular("([b|r|c]ook|room|smooth)ies$", "$1ie");
_default.AddPlural("$", "s");
_default.AddPlural("s$", "s");
_default.AddPlural("(ax|test)is$", "$1es");
_default.AddPlural("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)us$", "$1i");
_default.AddPlural("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)$", "$1es");
_default.AddPlural("(buffal|tomat|volcan|ech|embarg|her|mosquit|potat|torped|vet)o$", "$1oes");
_default.AddPlural("([dti])um$", "$1a");
_default.AddPlural("sis$", "ses");
_default.AddPlural("(?:([^f])fe|([lr])f)$", "$1$2ves");
_default.AddPlural("(hive)$", "$1s");
_default.AddPlural("([^aeiouy]|qu)y$", "$1ies");
_default.AddPlural("(x|ch|ss|sh)$", "$1es");
_default.AddPlural("(matr|vert|ind|d)(ix|ex)$", "$1ices");
_default.AddPlural("(^[m|l])ouse$", "$1ice");
_default.AddPlural("^(ox)$", "$1en");
_default.AddPlural("(quiz)$", "$1zes");
_default.AddPlural("(buz|blit|walt)z$", "$1zes");
_default.AddPlural("(hoo|lea|loa|thie)f$", "$1ves");
_default.AddPlural("(alumn|alg|larv|vertebr)a$", "$1ae");
_default.AddPlural("(criteri|phenomen)on$", "$1a");
_default.AddIrregular("person", "people");
_default.AddIrregular("man", "men");
_default.AddIrregular("human", "humans");
_default.AddIrregular("child", "children");
_default.AddIrregular("sex", "sexes");
_default.AddIrregular("glove", "gloves");
_default.AddIrregular("move", "moves");
_default.AddIrregular("goose", "geese");
_default.AddIrregular("wave", "waves");
_default.AddIrregular("die", "dice");
_default.AddIrregular("foot", "feet");
_default.AddIrregular("tooth", "teeth");
_default.AddIrregular("curriculum", "curricula");
_default.AddIrregular("database", "databases");
_default.AddIrregular("zombie", "zombies");
_default.AddIrregular("personnel", "personnel");
//Fix #789
_default.AddIrregular("cache", "caches");
_default.AddSingular("s$", "");
_default.AddSingular("(n)ews$", "$1ews");
_default.AddSingular("([dti])a$", "$1um");
_default.AddSingular("(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$", "$1sis");
_default.AddSingular("([^f])ves$", "$1fe");
_default.AddSingular("(hive)s$", "$1");
_default.AddSingular("(tive)s$", "$1");
_default.AddSingular("([lr]|hoo|lea|loa|thie)ves$", "$1f");
_default.AddSingular("(^zomb)?([^aeiouy]|qu)ies$", "$2y");
_default.AddSingular("(s)eries$", "$1eries");
_default.AddSingular("(m)ovies$", "$1ovie");
_default.AddSingular("(x|ch|ss|sh)es$", "$1");
_default.AddSingular("(^[m|l])ice$", "$1ouse");
_default.AddSingular("(?<!^[a-z])(o)es$", "$1");
_default.AddSingular("(shoe)s$", "$1");
_default.AddSingular("(cris|ax|test)es$", "$1is");
_default.AddSingular("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)i$", "$1us");
_default.AddSingular("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)es$", "$1");
_default.AddSingular("^(ox)en", "$1");
_default.AddSingular("(matr|d)ices$", "$1ix");
_default.AddSingular("(vert|ind)ices$", "$1ex");
_default.AddSingular("(quiz)zes$", "$1");
_default.AddSingular("(buz|blit|walt)zes$", "$1z");
_default.AddSingular("(alumn|alg|larv|vertebr)ae$", "$1a");
_default.AddSingular("(criteri|phenomen)a$", "$1on");
_default.AddSingular("([b|r|c]ook|room|smooth)ies$", "$1ie");
//Fix 975
_default.AddIrregular("ex", "exes", matchEnding: false);
_default.AddIrregular("person", "people");
_default.AddIrregular("man", "men");
_default.AddIrregular("human", "humans");
_default.AddIrregular("child", "children");
_default.AddIrregular("sex", "sexes");
_default.AddIrregular("glove", "gloves");
_default.AddIrregular("move", "moves");
_default.AddIrregular("goose", "geese");
_default.AddIrregular("wave", "waves");
_default.AddIrregular("foot", "feet");
_default.AddIrregular("tooth", "teeth");
_default.AddIrregular("curriculum", "curricula");
_default.AddIrregular("database", "databases");
_default.AddIrregular("zombie", "zombies");
_default.AddIrregular("personnel", "personnel");
_default.AddIrregular("cache", "caches");
_default.AddIrregular("ex", "exes", matchEnding: false);
_default.AddIrregular("is", "are", matchEnding: false);
_default.AddIrregular("was", "were", matchEnding: false);
_default.AddIrregular("that", "those", matchEnding: false);
_default.AddIrregular("this", "these", matchEnding: false);
_default.AddIrregular("bus", "buses", matchEnding: false);
_default.AddIrregular("die", "dice", matchEnding: false);
_default.AddIrregular("tie", "ties", matchEnding: false);
_default.AddIrregular("lens", "lenses");
_default.AddIrregular("clove", "cloves");
_default.AddIrregular("valve", "valves");
_default.AddIrregular("explosive", "explosives");
_default.AddIrregular("is", "are", matchEnding: false);
_default.AddIrregular("that", "those", matchEnding: false);
_default.AddIrregular("this", "these", matchEnding: false);
_default.AddIrregular("bus", "buses", matchEnding: false);
_default.AddIrregular("staff", "staff", matchEnding: false);
_default.AddIrregular("training", "training", matchEnding: false);
_default.AddUncountable("staff");
_default.AddUncountable("training");
_default.AddUncountable("equipment");
_default.AddUncountable("information");
_default.AddUncountable("corn");
_default.AddUncountable("milk");
_default.AddUncountable("rice");
_default.AddUncountable("money");
_default.AddUncountable("species");
_default.AddUncountable("series");
_default.AddUncountable("fish");
_default.AddUncountable("sheep");
_default.AddUncountable("deer");
_default.AddUncountable("aircraft");
_default.AddUncountable("oz");
_default.AddUncountable("tsp");
_default.AddUncountable("tbsp");
_default.AddUncountable("ml");
_default.AddUncountable("l");
_default.AddUncountable("water");
_default.AddUncountable("waters");
_default.AddUncountable("semen");
_default.AddUncountable("sperm");
_default.AddUncountable("bison");
_default.AddUncountable("grass");
_default.AddUncountable("hair");
_default.AddUncountable("mud");
_default.AddUncountable("elk");
_default.AddUncountable("luggage");
_default.AddUncountable("moose");
_default.AddUncountable("offspring");
_default.AddUncountable("salmon");
_default.AddUncountable("shrimp");
_default.AddUncountable("someone");
_default.AddUncountable("swine");
_default.AddUncountable("trout");
_default.AddUncountable("tuna");
_default.AddUncountable("corps");
_default.AddUncountable("scissors");
_default.AddUncountable("means");
_default.AddUncountable("mail");
_default.AddUncountable("pliers");
_default.AddUncountable("sheers");
_default.AddUncountable("clothes");
_default.AddUncountable("apparatus");
_default.AddUncountable("chassis");
_default.AddUncountable("debris");
_default.AddUncountable("equipment");
_default.AddUncountable("information");
_default.AddUncountable("corn");
_default.AddUncountable("milk");
_default.AddUncountable("rice");
_default.AddUncountable("money");
_default.AddUncountable("species");
_default.AddUncountable("series");
_default.AddUncountable("fish");
_default.AddUncountable("sheep");
_default.AddUncountable("deer");
_default.AddUncountable("aircraft");
_default.AddUncountable("oz");
_default.AddUncountable("tsp");
_default.AddUncountable("tbsp");
_default.AddUncountable("ml");
_default.AddUncountable("l");
_default.AddUncountable("water");
_default.AddUncountable("waters");
_default.AddUncountable("semen");
_default.AddUncountable("sperm");
_default.AddUncountable("bison");
_default.AddUncountable("grass");
_default.AddUncountable("hair");
_default.AddUncountable("mud");
_default.AddUncountable("elk");
_default.AddUncountable("luggage");
_default.AddUncountable("moose");
_default.AddUncountable("offspring");
_default.AddUncountable("salmon");
_default.AddUncountable("shrimp");
_default.AddUncountable("someone");
_default.AddUncountable("swine");
_default.AddUncountable("trout");
_default.AddUncountable("tuna");
_default.AddUncountable("corps");
_default.AddUncountable("scissors");
_default.AddUncountable("means");
_default.AddUncountable("mail");
//Fix 1132
_default.AddUncountable("metadata");
return _default;
}
return _default;
}
}

298
ICSharpCode.Decompiler/Humanizer/Vocabulary.cs

@ -1,178 +1,220 @@ @@ -1,178 +1,220 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Text.RegularExpressions;
namespace Humanizer.Inflections
namespace Humanizer.Inflections;
#nullable enable
/// <summary>
/// A container for exceptions to simple pluralization/singularization rules.
/// Vocabularies.Default contains an extensive list of rules for US English.
/// At this time, multiple vocabularies and removing existing rules are not supported.
/// </summary>
internal class Vocabulary
{
internal Vocabulary()
{
}
readonly List<Rule> plurals = [];
readonly List<Rule> singulars = [];
readonly HashSet<string> uncountables = new(StringComparer.CurrentCultureIgnoreCase);
readonly Regex letterS = new("^([sS])[sS]*$");
/// <summary>
/// A container for exceptions to simple pluralization/singularization rules.
/// Vocabularies.Default contains an extensive list of rules for US English.
/// At this time, multiple vocabularies and removing existing rules are not supported.
/// Adds a word to the vocabulary which cannot easily be pluralized/singularized by RegEx, e.g. "person" and "people".
/// </summary>
internal class Vocabulary
/// <param name="singular">The singular form of the irregular word, e.g. "person".</param>
/// <param name="plural">The plural form of the irregular word, e.g. "people".</param>
/// <param name="matchEnding">True to match these words on their own as well as at the end of longer words. False, otherwise.</param>
public void AddIrregular(string singular, string plural, bool matchEnding = true)
{
internal Vocabulary()
if (matchEnding)
{
var singularSubstring = singular.Substring(1);
var pluralSubString = plural.Substring(1);
AddPlural($"({singular[0]}){singularSubstring}$", $"$1{pluralSubString}");
AddSingular($"({plural[0]}){pluralSubString}$", $"$1{singularSubstring}");
}
else
{
AddPlural($"^{singular}$", plural);
AddSingular($"^{plural}$", singular);
}
}
private readonly List<Rule> _plurals = new List<Rule>();
private readonly List<Rule> _singulars = new List<Rule>();
private readonly List<string> _uncountables = new List<string>();
/// <summary>
/// Adds an uncountable word to the vocabulary, e.g. "fish". Will be ignored when plurality is changed.
/// </summary>
/// <param name="word">Word to be added to the list of uncountables.</param>
public void AddUncountable(string word) =>
uncountables.Add(word);
/// <summary>
/// Adds a word to the vocabulary which cannot easily be pluralized/singularized by RegEx, e.g. "person" and "people".
/// </summary>
/// <param name="singular">The singular form of the irregular word, e.g. "person".</param>
/// <param name="plural">The plural form of the irregular word, e.g. "people".</param>
/// <param name="matchEnding">True to match these words on their own as well as at the end of longer words. False, otherwise.</param>
public void AddIrregular(string singular, string plural, bool matchEnding = true)
/// <summary>
/// Adds a rule to the vocabulary that does not follow trivial rules for pluralization, e.g. "bus" -> "buses"
/// </summary>
/// <param name="rule">RegEx to be matched, case insensitive, e.g. "(bus)es$"</param>
/// <param name="replacement">RegEx replacement e.g. "$1"</param>
public void AddPlural(string rule, string replacement) =>
plurals.Add(new(rule, replacement));
/// <summary>
/// Adds a rule to the vocabulary that does not follow trivial rules for singularization, e.g. "vertices/indices -> "vertex/index"
/// </summary>
/// <param name="rule">RegEx to be matched, case insensitive, e.g. ""(vert|ind)ices$""</param>
/// <param name="replacement">RegEx replacement e.g. "$1ex"</param>
public void AddSingular(string rule, string replacement) =>
singulars.Add(new(rule, replacement));
/// <summary>
/// Pluralizes the provided input considering irregular words
/// </summary>
/// <param name="word">Word to be pluralized</param>
/// <param name="inputIsKnownToBeSingular">Normally you call Pluralize on singular words; but if you're unsure call it with false</param>
[return: NotNullIfNotNull(nameof(word))]
public string? Pluralize(string? word, bool inputIsKnownToBeSingular = true)
{
if (word == null)
{
if (matchEnding)
{
AddPlural("(" + singular[0] + ")" + singular.Substring(1) + "$", "$1" + plural.Substring(1));
AddSingular("(" + plural[0] + ")" + plural.Substring(1) + "$", "$1" + singular.Substring(1));
}
else
{
AddPlural($"^{singular}$", plural);
AddSingular($"^{plural}$", singular);
}
return null;
}
/// <summary>
/// Adds an uncountable word to the vocabulary, e.g. "fish". Will be ignored when plurality is changed.
/// </summary>
/// <param name="word">Word to be added to the list of uncountables.</param>
public void AddUncountable(string word)
var s = LetterS(word);
if (s != null)
{
_uncountables.Add(word.ToLower());
return s + "s";
}
/// <summary>
/// Adds a rule to the vocabulary that does not follow trivial rules for pluralization, e.g. "bus" -> "buses"
/// </summary>
/// <param name="rule">RegEx to be matched, case insensitive, e.g. "(bus)es$"</param>
/// <param name="replacement">RegEx replacement e.g. "$1"</param>
public void AddPlural(string rule, string replacement)
var result = ApplyRules(plurals, word, false);
if (inputIsKnownToBeSingular)
{
_plurals.Add(new Rule(rule, replacement));
return result ?? word;
}
/// <summary>
/// Adds a rule to the vocabulary that does not follow trivial rules for singularization, e.g. "vertices/indices -> "vertex/index"
/// </summary>
/// <param name="rule">RegEx to be matched, case insensitive, e.g. ""(vert|ind)ices$""</param>
/// <param name="replacement">RegEx replacement e.g. "$1ex"</param>
public void AddSingular(string rule, string replacement)
var asSingular = ApplyRules(singulars, word, false);
var asSingularAsPlural = ApplyRules(plurals, asSingular, false);
if (asSingular != null &&
asSingular != word &&
asSingular + "s" != word &&
asSingularAsPlural == word &&
result != word)
{
_singulars.Add(new Rule(rule, replacement));
return word;
}
/// <summary>
/// Pluralizes the provided input considering irregular words
/// </summary>
/// <param name="word">Word to be pluralized</param>
/// <param name="inputIsKnownToBeSingular">Normally you call Pluralize on singular words; but if you're unsure call it with false</param>
/// <returns></returns>
public string Pluralize(string word, bool inputIsKnownToBeSingular = true)
{
var result = ApplyRules(_plurals, word, false);
return result!;
}
if (inputIsKnownToBeSingular)
{
return result ?? word;
}
/// <summary>
/// Singularizes the provided input considering irregular words
/// </summary>
/// <param name="word">Word to be singularized</param>
/// <param name="inputIsKnownToBePlural">Normally you call Singularize on plural words; but if you're unsure call it with false</param>
/// <param name="skipSimpleWords">Skip singularizing single words that have an 's' on the end</param>
[return: NotNullIfNotNull(nameof(word))]
public string? Singularize(string? word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false)
{
if (word == null)
{
return null;
}
var s = LetterS(word);
if (s != null)
{
return s;
}
var asSingular = ApplyRules(_singulars, word, false);
var asSingularAsPlural = ApplyRules(_plurals, asSingular, false);
if (asSingular != null && asSingular != word && asSingular + "s" != word && asSingularAsPlural == word && result != word)
{
return word;
}
var result = ApplyRules(singulars, word, skipSimpleWords);
return result;
if (inputIsKnownToBePlural)
{
return result ?? word;
}
/// <summary>
/// Singularizes the provided input considering irregular words
/// </summary>
/// <param name="word">Word to be singularized</param>
/// <param name="inputIsKnownToBePlural">Normally you call Singularize on plural words; but if you're unsure call it with false</param>
/// <param name="skipSimpleWords">Skip singularizing single words that have an 's' on the end</param>
/// <returns></returns>
public string Singularize(string word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false)
// the Plurality is unknown so we should check all possibilities
var asPlural = ApplyRules(plurals, word, false);
if (asPlural == word ||
word + "s" == asPlural)
{
var result = ApplyRules(_singulars, word, skipSimpleWords);
if (inputIsKnownToBePlural)
{
return result ?? word;
}
// the Plurality is unknown so we should check all possibilities
var asPlural = ApplyRules(_plurals, word, false);
var asPluralAsSingular = ApplyRules(_singulars, asPlural, false);
if (asPlural != word && word + "s" != asPlural && asPluralAsSingular == word && result != word)
{
return word;
}
return result ?? word;
}
var asPluralAsSingular = ApplyRules(singulars, asPlural, false);
if (asPluralAsSingular != word ||
result == word)
{
return result ?? word;
}
private string ApplyRules(IList<Rule> rules, string word, bool skipFirstRule)
return word;
}
string? ApplyRules(IList<Rule> rules, string? word, bool skipFirstRule)
{
if (word == null)
{
if (word == null)
{
return null;
}
return null;
}
if (word.Length < 1)
{
return word;
}
if (word.Length < 1)
{
return word;
}
if (IsUncountable(word))
{
return word;
}
if (IsUncountable(word))
{
return word;
}
var result = word;
var end = skipFirstRule ? 1 : 0;
for (var i = rules.Count - 1; i >= end; i--)
var result = word;
var end = skipFirstRule ? 1 : 0;
for (var i = rules.Count - 1; i >= end; i--)
{
if ((result = rules[i].Apply(word)) != null)
{
if ((result = rules[i].Apply(word)) != null)
{
break;
}
break;
}
return result;
}
private bool IsUncountable(string word)
if (result == null)
{
return _uncountables.Contains(word.ToLower());
return null;
}
private class Rule
{
private readonly Regex _regex;
private readonly string _replacement;
return MatchUpperCase(word, result);
}
public Rule(string pattern, string replacement)
{
_regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
_replacement = replacement;
}
bool IsUncountable(string word) =>
uncountables.Contains(word);
public string Apply(string word)
{
if (!_regex.IsMatch(word))
{
return null;
}
static string MatchUpperCase(string word, string replacement) =>
char.IsUpper(word[0]) &&
char.IsLower(replacement[0]) ? StringHumanizeExtensions.Concat(char.ToUpper(replacement[0]), replacement.AsSpan(1)) : replacement;
/// <summary>
/// If the word is the letter s, singular or plural, return the letter s singular
/// </summary>
string? LetterS(string word)
{
var s = letterS.Match(word);
return s.Groups.Count > 1 ? s.Groups[1].Value : null;
}
class Rule(string pattern, string replacement)
{
readonly Regex regex = new(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
return _regex.Replace(word, _replacement);
public string? Apply(string word)
{
if (!regex.IsMatch(word))
{
return null;
}
return regex.Replace(word, replacement);
}
}
}

3
ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

@ -80,7 +80,7 @@ @@ -80,7 +80,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Sbom.Targets" Version="4.0.3">
<PackageReference Include="Microsoft.Sbom.Targets" Version="4.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
@ -108,6 +108,7 @@ @@ -108,6 +108,7 @@
<Compile Include="DecompilationProgress.cs" />
<Compile Include="Disassembler\IEntityProcessor.cs" />
<Compile Include="Disassembler\SortByNameProcessor.cs" />
<Compile Include="Humanizer\StringHumanizeExtensions.cs" />
<Compile Include="IL\Transforms\InlineArrayTransform.cs" />
<Compile Include="IL\Transforms\RemoveUnconstrainedGenericReferenceTypeCheck.cs" />
<Compile Include="Metadata\MetadataFile.cs" />

2
ICSharpCode.Decompiler/Properties/DecompilerVersionInfo.template.cs

@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
public const string Minor = "0";
public const string Build = "0";
public const string Revision = "$INSERTREVISION$";
public const string VersionName = "preview1";
public const string VersionName = "preview2";
public const string FullVersion = Major + "." + Minor + "." + Build + ".$INSERTREVISION$$INSERTBRANCHPOSTFIX$$INSERTVERSIONNAMEPOSTFIX$";
public const string FullVersionWithShortCommitHash = FullVersion + "+$INSERTSHORTCOMMITHASH$";

6
ICSharpCode.Decompiler/packages.lock.json

@ -4,9 +4,9 @@ @@ -4,9 +4,9 @@
".NETStandard,Version=v2.0": {
"Microsoft.Sbom.Targets": {
"type": "Direct",
"requested": "[4.0.3, )",
"resolved": "4.0.3",
"contentHash": "xwHbbj9gLj1HZzLVEM2UpQM7ZY7FkiEs/nRkt6G1H7mR/14aNhjsskRoI7K7CezHJA4cASsGxTvqorbUXTI1TQ=="
"requested": "[4.1.0, )",
"resolved": "4.1.0",
"contentHash": "GidfeSVHFtNwZSbD2wmwWiUiGkVdND8QR1z21WpFa+/47Mi3YiDkAzsWF02wXrMx2Xd8j3QSfKOUY1JtnF+7uw=="
},
"Microsoft.SourceLink.GitHub": {
"type": "Direct",

337
ICSharpCode.ILSpyCmd/packages.lock.json

@ -15,32 +15,32 @@ @@ -15,32 +15,32 @@
},
"Microsoft.Extensions.Hosting": {
"type": "Direct",
"requested": "[10.0.0-preview.6.25358.103, )",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "CnjLZ27sR1RlqIs2JLf6EKcL2uJf9FekRlvsw669yVNQdRNO/p6Fc8oqN1YB03BTe5S6CUayGw84NUbzdTW9Hg==",
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.CommandLine": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Json": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.UserSecrets": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.DependencyInjection": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Diagnostics": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Hosting.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Configuration": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Console": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Debug": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.EventLog": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.EventSource": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103"
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "VcqnTGY8bMnFxZQb3cjcXnXy4x7dJgp85UlujErNh34xh4ZislQ2XhX7ak0gUnRh8c9ZTI3xj4groyqBl/DNHA==",
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.CommandLine": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Json": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.UserSecrets": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.DependencyInjection": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Diagnostics": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Hosting.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Console": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Debug": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.EventLog": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.EventSource": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108"
}
},
"NuGet.Protocol": {
@ -54,9 +54,9 @@ @@ -54,9 +54,9 @@
},
"System.Security.Cryptography.Pkcs": {
"type": "Direct",
"requested": "[9.0.7, )",
"resolved": "9.0.7",
"contentHash": "6LROjtkO4UCv0MVnnR8Z6FwnRryT+Sz5dz8ZefZG6/yz1kQGaVUd6gAdXZtqNPORQwuXFrNGTWvi7f8hWRkiyg=="
"requested": "[9.0.8, )",
"resolved": "9.0.8",
"contentHash": "+mtc8dZnrP9N1HZICncBzLUrX4YBP+WvAWb817auAA5mKOJzHZShuGpCtQiekgV/7N0uS/x0LkdBAezBcSBwVA=="
},
"TomsToolbox.Composition.Analyzer": {
"type": "Direct",
@ -66,227 +66,228 @@ @@ -66,227 +66,228 @@
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "jMCM7Z7sqACZrJYcOrz2tE9toRKtR/2JlFAMc8In7epzdcOMCz5F7dINKZwnhltLBlYaAyg0xs/9KRRhHWuaNw==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "Tos2R09p02UbSg97w7QNr+dNTKuBtmsWKy4+awTnn2d34CXDpsKkAdDis6gLmhuCjz4c0HyB5S0l2ahaqu+u7A==",
"dependencies": {
"Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "7dJhJ9ebXxqNeuabYk2gkzMr3LtrIp2qw7Mt2TXjCiEJudcK0z9ogm4vzwEH6AgUUiU+tGcJq8reEomzLZnkcw==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "BAcZtIevY+MgiTX9t9iuz8CoYmGPoL1QeAlhNav8EVJmNlhKR/H7nESjxJifejcCRuwQ+dcXlFtHo1xrCMaZWA==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Configuration.CommandLine": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "hE7vjnulJGfveTv8mFtBJAJywyGYQ6r8BvbCEtyK7XKC2JnUS5JhGqi87dG098hK48LdFXOH9u/kYoMlnptehA==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "wrRFfwx7avg204vRHD1C7//zo9axtSLqNydbPXVN6r1tpQUsTz2Mbd6QsYMo+zoNUSvFD7fPFZPsG8pkmbX50A==",
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Configuration.EnvironmentVariables": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "eswr15WlASdXGquY7OrTzNS4oMFaa1QvsEz7pP4ixOnodAZePt1BDs3rqJf0D97XpSbUKinYzaAq0hSDD4HrVQ==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "bIh84M0Clp94aGE827+cw3Ld3E+LN68Goqk1oyHTAkOMftp3YbkGB/yEHGdydsNEi3kfiLw5lZdu3Nh1Agt9gg==",
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Configuration.FileExtensions": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "6jecem+ivT6rue10h7+LFGu2tEdYA+Q1BeueBIwaA7M6QfxmRA8XXVA2/h3m6a/sm8NlFsJaxECQRzqVyUzvKA==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "eGgKM6UgrXTTGNDkPsXE4gofRMK+LPv2PIzMRUOVFLB2iAjoVhSgTTDBiQgVSXZW279FCaoILD8wC7zz5+sZBA==",
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Configuration.UserSecrets": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "z7Prpxxe7bmd5WLY7cn352vpRyDvqbmosUCYz2Cy6pWYJCx3yIm2c80y11chBjPM8oqPEUL7A6tK3MsdjF0wkA==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "X6M5ARSre9pHhQcrdIoPGCrGe2Xh6iM4AYwJGXRrgG6+blFTc04Iau7tvnjOhCDaEFr2g2cxMJI1wiLlJFOECg==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Json": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Json": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "789qUZQkqzBfPVvGDkHn+G/GCjjcZIREzgcnQVcNoPvR+hBM6YQnSzL7oNiwXSDBfhV3OoNJ3Q3VcUiuCWACsA==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "UVMEx1ZOOugXCNxXARPsmtu7B3RzYShFoeGvmO4wA1OmcW8cOSXr7QNTiCTp3uXNrx14daefmDX/BlsExlZyVg==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Diagnostics": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "iYPgCak/Y5zOfTQljKv3FZlV667salExF3cwVipYRkw3IjLe9zYjvmbqKCc8xo0wyJAUqZuJyin0/3u2UG3rUg==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "hbUpAah1f1gSx7NT7GKnmnzdQiP6POB7Mo8HNGZQ5qdcsZm6c3e6toK92u4kMkgJ9Cp0mRgL2wIyDfT6ixS/qw==",
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Diagnostics.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "gC1arc0MQ+1sX46IrWterWv/yjhaIBA4e0QmyIVsHgWmgRX4pei2CuG2TXrRDY1u+pgG5xGlHN8FNhBI8YzXZQ==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "4KCRTDM1TUA1+zwUBefsM9vjCRzAjkhLOsITu5X/z8GxdwxvhVRQL3svELII4AwcWG2PUvAqWHIGnjmKlYJmIQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.FileProviders.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "CQyTCUGP9yF6N68+URCrS4F6F8YtQECb8BIqi4cVDNF5JykM551zCVL7vCoghfAFCBiERbCBPwu46nxy/u7lSA==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "lvXcu7o7ETZ0SRPTOMhMuzyABFSiTwQdye1ATqdQH4u0n46s0QtTMN8u8zrHdIDtU5zv8hv3PqnOmmQt6lMzEQ==",
"dependencies": {
"Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.FileProviders.Physical": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "jCmO0T5g3eUgp6Z7DgyDIqgQQdhknxSJ3/Qt796inNrNcT3wGCtUQoxJKDHjNTfL8kDUe7Ajq221z9YhCd7EwQ==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "CCWJM/f0hEldsKdB+QXJpcyELI0VRHbIuWWejCk9pNQBTuPOJHX5Lxsn4Lt8d30DGosTfkAQWLpy/wh+TGT6xA==",
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.FileSystemGlobbing": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.FileSystemGlobbing": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.FileSystemGlobbing": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "0ElgXEF7R+oTK06ctnHQ2GCKbMFDwcEf7PGjmFD/P2G4gD2B6Q4YeKca1+2X1wAaJaxrl9G5IqWJyQG5L/hPrg=="
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "HsDTy1yAhOyznpgtbaUpiHojeMDrmkwAI/iW6G9PksLfhJAFXT1PffKoWMG2+fS4rWo6yoaro2cmJH0RYBKJ0Q=="
},
"Microsoft.Extensions.Hosting.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "YRzdob0VvFvaSbfJlLXeX1ij+3sAQo2fLWwfyh9WaYsXhGWDL9RB3R35YAeeZ33sFn/LCUVH+Z0XK8fWNlOlPA==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "J6zRebs9tVxWat6q3Z8v1fknqYhUbyUVoZYiGqhu7g+ChVYeCdp/YL2qSvC/Ap/KThXu6+C+R40gdDPCjUq5EQ==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Logging": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "O7o3t9S1pc7JmnEem3bKmoyZUvfZMQxCJlQIRNv6ERVNXlgbagWgxCuwoI0b499b/MG8CpMryTWjQAsYba8VoQ==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "vktcXpKfaF3TEC5OoAv2ySdImeBErcbFwUduuFIGvKOdYGw1B1N8ZpG5GLxApMXFgygdMcAFrkotDWzOF1npUA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.DependencyInjection": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "ktG/8xOcrtBL176cYv6mzOL+YRSPySE8hcppHonAXYa8jf3lW/WmxfAUwK0WtUEl7MdYR8mbuEAbSg81crBq5Q==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "qfx62EG7wvjym/GusNX+kzqPByIVYiXyqBYaObQlIch5YukiVd4ovUJHALYt11jpcxpv9nmjgmqahIluf2j5xA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Logging.Configuration": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "P2dXt5+e7pDwTrK7V9wT/lJ0m5L0NvDGrjKb1XVLBXp3i6leNKG/knChvAp31vSHuypOxDN4HTnHKApNm69cFQ==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "nfivpgjltKnYWCT62WtNgaRyyTv92nRYkqJabEQIvmtlQrjuYNb/kiECy74+jd4t4AQPx3hlPn9hWiLGvIEHhg==",
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Logging.Console": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "JYTuOpP8vW93q9hue1Tx0+kxB3gLTN/KxFoxrpS+8wgElJ9O4lkw+JU/pAhzvohPGRPbGzy64kuAoPSdOF6VLA==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "VfOeXETfctJamiTwovg1SmyfEboi8klawzpE6hv45f8KPajn/PPTuYRCQjaQWiP0praYdAJWrV4TjvDF0+xxeg==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Configuration": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Logging.Debug": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "HrhLOuVl/TiVDI/G280HCMwyqkvZYE1+WtDkecrjDH8hCP10JTsn0zODtHoGn+S9JOcIGa9woPb+7oklsEAx9Q==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "R1XFfHifpXKXtIGDt/QrvwnqPEOMEMdDppBMVjb5UpI3RSBKriTWdKeaJIcc1gx6e56aVO2xOT3EtfnK6Xb3Ig==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Logging.EventLog": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "gOQk5BPZumh3wfe5LO/ptEKqlPmKZIDNrTx6cVmg8bVFmrB6SGsXyw8Rz5jyH7SNZ7JlFLoNharwYa/9Z3Ou2A==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "pa6ggb9nqfU+DPLI2NXRaUDmkrw3mvmXcnh4NQrgcvzNQPB1PW8HySNm+KvzX/nK/UmPtJEa3NbOhmpDBdrbMA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103",
"System.Diagnostics.EventLog": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108",
"System.Diagnostics.EventLog": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Logging.EventSource": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "h4M6SbPBP/0GILpLcvLZl2gkKYmKZTANx+5yCMUeAaBzZ8oTe4dr5TirTVPKscuNvaDFIUZ16sGQ0HwpmjoVzA==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "K0Qydvu3fnotw1kynMz6kDt8FX+VnKxOjX1lVFjKKkyHroHitpz8YUOuA+TlbXQFZQyv3bO7nDimKVkcvPFcVQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "V3IaV1wPAVpVfDrOK0b4xKZVEHMFlYSL0Wfx6/Tm8bt4ovodorVqHe/EvsogWmsbcj1XhJvFuWXVDuG479i2vw==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "kG3XdCpBiMSxPsAeMCy8YhHpe3sUlSoBGuZQfTcC/VaWKrvpQ5OrbhBCfb/SOPLzWexijSsDwtgjYenRvqE91Q==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Options.ConfigurationExtensions": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "dx3KoYXwXtivveyBEDjxmYuFnN/ZyYWJWVn7vWInCP9D1MQ0WmXms7L4bPsC6Ad+4OYi0lNCYz3Tv3fyJ9DD2Q==",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "z05jUKh7+6FTFE+Obdg6wEQqvdxNf+ty5YUZ9VjNyzYcoN9hZMbX7RucTifl4CZCJXadlv79C7ZCSmHIK4x0pw==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "iSpD+A130hPiq20tbqKGujXtFY1Zc3q/R/AlN3qPpUYwmxEZbybykQ+YpiDzdyoGvo0gp/4vtk/Hqcvkwt53Gw=="
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "0oC37fX0irgi29vN8JQdvXn1jZI6upCIs8Q8J+loetDrWrB3fwYBqbUdz/mMS41G+kkjCSaGRfZM8dBiZqqMpw=="
},
"Newtonsoft.Json": {
"type": "Transitive",
@ -339,8 +340,8 @@ @@ -339,8 +340,8 @@
},
"System.Diagnostics.EventLog": {
"type": "Transitive",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "JNwN+0tuqtHnELPl7P2T/OjWlgCdqB9fNuwAOh46W7t/2Z5HU+1ROqkiJCupwSVrXjSfV46lcas6HqhUC8BpYQ=="
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "kKFLata6tLJ/1+jJTbsE9YZu/zeOGO+9ZeukQ3uni5flEjcPpjqGxtmqOx/IFUecMQjNGheNEVyC1KaMl+aZMg=="
},
"System.Security.Cryptography.ProtectedData": {
"type": "Transitive",
@ -360,8 +361,8 @@ @@ -360,8 +361,8 @@
"ICSharpCode.Decompiler": "[8.0.0-noversion, )",
"K4os.Compression.LZ4": "[1.3.8, )",
"Mono.Cecil": "[0.11.6, )",
"System.Composition.AttributedModel": "[10.0.0-preview.6.25358.103, )",
"System.Reflection.Metadata": "[10.0.0-preview.6.25358.103, )",
"System.Composition.AttributedModel": "[10.0.0-preview.7.25380.108, )",
"System.Reflection.Metadata": "[10.0.0-preview.7.25380.108, )",
"System.Runtime.CompilerServices.Unsafe": "[6.1.2, )"
}
},
@ -382,31 +383,31 @@ @@ -382,31 +383,31 @@
},
"Microsoft.Extensions.Configuration": {
"type": "CentralTransitive",
"requested": "[10.0.0-preview.6.25358.103, )",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "fypDLNI6JZe1ipJLYF0quEHa6I9qRQUNMRA1x8+BSY+KJn70BiNNPDSkJFrnAUdrJT+N2otJRm64xRhou0Em6w==",
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "bqeb/og5BMVpJ0cAfVgHhyNPfQa/uF/t6MhoQ9Z0kAUuOvk+hCfnSKlx2CZUzrkrWN6zK/jRXZW8RsbIxtzexw==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.Configuration.Json": {
"type": "CentralTransitive",
"requested": "[10.0.0-preview.6.25358.103, )",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "KcUEaL2H9PSn5K3lJHPYY6VXzv5hSZfmt+EYWq/ws9wE/mKDfjFUClDZ5LvqjMXU79PIYRlfB6nKn9bBglltnA==",
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "vMUtXxczM+wt2rZT3AtDHRG4m0Wzn4R+cTFSr4RDq3VPy1z+qeX+xa+a9Ft73R5ODy/T0N5F1fXxYN6h1fvh6w==",
"dependencies": {
"Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-preview.6.25358.103",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103"
"Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-preview.7.25380.108",
"Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "CentralTransitive",
"requested": "[10.0.0-preview.6.25358.103, )",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "XrX5CQwI6dnGvmPJJxf/X1JxhPzRwdKKUf9onJKN+qyqP+wwH9floTgkckGdJxVV+jvnWeUgSJ6MZvQM6WmwSg=="
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "0oSQ8o2O8eMxaInqR1GykEzzlerBTN3xQMsEtaWA4zbf1LmrqV7H9ctTTjK4oMeWMCTb9mfYoN9fsVWbAhkTXA=="
},
"Mono.Cecil": {
"type": "CentralTransitive",
@ -416,21 +417,21 @@ @@ -416,21 +417,21 @@
},
"System.Collections.Immutable": {
"type": "CentralTransitive",
"requested": "[10.0.0-preview.6.25358.103, )",
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "9.0.0",
"contentHash": "QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w=="
},
"System.Composition.AttributedModel": {
"type": "CentralTransitive",
"requested": "[10.0.0-preview.6.25358.103, )",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "PR03G/Tm4JC4lzzngX8gsfbdpQ4DrZiI38W5Q2HbKsyiKED998lYqiBZUcRriyMVenBw8TNSiGnNadai6+GHpA=="
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "BgKfmK5BAjJPj3DvCh7Qv2v/91FQfY2HwYchSurW1JajkVNhpSCCciZgk5tNOr815yUUpcAG8gY/CUUdYYdXcw=="
},
"System.Reflection.Metadata": {
"type": "CentralTransitive",
"requested": "[10.0.0-preview.6.25358.103, )",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "/87qwC+yDFe0/xG/7rmq/jmlmRCoV+wwC6s3ek8zDU5iEiKo0wliHnvCFzlMbyQtFiTGBvabvyPiGFiO/6ZXEg=="
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "8oQpCMmBOI24XT+xwG1dec/gOv+1uUqAasXYu2vq0NWpXsg/TYw563jD9wMSbQ/lIjnKJmPRvjLFyG8xaX9uww=="
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "CentralTransitive",

20
ICSharpCode.ILSpyX/packages.lock.json

@ -10,9 +10,9 @@ @@ -10,9 +10,9 @@
},
"Microsoft.Sbom.Targets": {
"type": "Direct",
"requested": "[4.0.3, )",
"resolved": "4.0.3",
"contentHash": "xwHbbj9gLj1HZzLVEM2UpQM7ZY7FkiEs/nRkt6G1H7mR/14aNhjsskRoI7K7CezHJA4cASsGxTvqorbUXTI1TQ=="
"requested": "[4.1.0, )",
"resolved": "4.1.0",
"contentHash": "GidfeSVHFtNwZSbD2wmwWiUiGkVdND8QR1z21WpFa+/47Mi3YiDkAzsWF02wXrMx2Xd8j3QSfKOUY1JtnF+7uw=="
},
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
@ -32,15 +32,15 @@ @@ -32,15 +32,15 @@
},
"System.Composition.AttributedModel": {
"type": "Direct",
"requested": "[10.0.0-preview.6.25358.103, )",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "PR03G/Tm4JC4lzzngX8gsfbdpQ4DrZiI38W5Q2HbKsyiKED998lYqiBZUcRriyMVenBw8TNSiGnNadai6+GHpA=="
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "BgKfmK5BAjJPj3DvCh7Qv2v/91FQfY2HwYchSurW1JajkVNhpSCCciZgk5tNOr815yUUpcAG8gY/CUUdYYdXcw=="
},
"System.Reflection.Metadata": {
"type": "Direct",
"requested": "[10.0.0-preview.6.25358.103, )",
"resolved": "10.0.0-preview.6.25358.103",
"contentHash": "/87qwC+yDFe0/xG/7rmq/jmlmRCoV+wwC6s3ek8zDU5iEiKo0wliHnvCFzlMbyQtFiTGBvabvyPiGFiO/6ZXEg=="
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "10.0.0-preview.7.25380.108",
"contentHash": "8oQpCMmBOI24XT+xwG1dec/gOv+1uUqAasXYu2vq0NWpXsg/TYw563jD9wMSbQ/lIjnKJmPRvjLFyG8xaX9uww=="
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Direct",
@ -73,7 +73,7 @@ @@ -73,7 +73,7 @@
},
"System.Collections.Immutable": {
"type": "CentralTransitive",
"requested": "[10.0.0-preview.6.25358.103, )",
"requested": "[10.0.0-preview.7.25380.108, )",
"resolved": "9.0.0",
"contentHash": "QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w=="
}

2
ILSpy.BamlDecompiler.Tests/ILSpy.BamlDecompiler.Tests.csproj

@ -36,11 +36,11 @@ @@ -36,11 +36,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="NUnit" />
<PackageReference Include="NUnit3TestAdapter" />
<PackageReference Include="Shouldly" />
<PackageReference Include="Microsoft.Testing.Extensions.TrxReport" />
<PackageReference Include="Microsoft.Testing.Extensions.VSTestBridge" />
<PackageReference Include="coverlet.collector">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

2
ILSpy.Tests/ILSpy.Tests.csproj

@ -74,7 +74,6 @@ @@ -74,7 +74,6 @@
<PackageReference Include="System.Reflection.Metadata" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" />
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="NUnit3TestAdapter" />
<PackageReference Include="coverlet.collector">
<PrivateAssets>all</PrivateAssets>
@ -83,6 +82,7 @@ @@ -83,6 +82,7 @@
<PackageReference Include="NUnit" />
<PackageReference Include="Shouldly" />
<PackageReference Include="Microsoft.Testing.Extensions.TrxReport" />
<PackageReference Include="Microsoft.Testing.Extensions.VSTestBridge" />
</ItemGroup>
<ItemGroup>

4
ILSpy/Controls/CustomDialog.cs

@ -51,7 +51,7 @@ namespace ICSharpCode.ILSpy.Controls @@ -51,7 +51,7 @@ namespace ICSharpCode.ILSpy.Controls
using (Graphics g = this.CreateGraphics())
{
SizeF size = TextRenderer.MeasureText(message, label.Font, default, TextFormatFlags.NoPrefix);
Size size = TextRenderer.MeasureText(message, label.Font, new((int)(Screen.FromControl(this).WorkingArea.Width * 0.9), int.MaxValue), TextFormatFlags.NoPrefix | TextFormatFlags.WordBreak);
Size clientSize = new Size((int)Math.Ceiling(size.Width * 96 / g.DpiX) + DockPadding.Left + DockPadding.Right, (int)Math.Ceiling(size.Height * 96 / g.DpiY) + DockPadding.Top + DockPadding.Bottom);
Button[] buttons = new Button[buttonLabels.Length];
int[] positions = new int[buttonLabels.Length];
@ -64,7 +64,7 @@ namespace ICSharpCode.ILSpy.Controls @@ -64,7 +64,7 @@ namespace ICSharpCode.ILSpy.Controls
string buttonLabel = buttonLabels[i];
newButton.Text = buttonLabel;
newButton.Click += new EventHandler(ButtonClick);
SizeF buttonSize = TextRenderer.MeasureText(buttonLabel, newButton.Font);
Size buttonSize = TextRenderer.MeasureText(buttonLabel, newButton.Font);
newButton.Width = Math.Max(newButton.Width, ((int)Math.Ceiling(buttonSize.Width * 96 / g.DpiX / 8.0) + 1) * 8);
positions[i] = pos;
buttons[i] = newButton;

9
ILSpy/Properties/Resources.Designer.cs generated

@ -1017,6 +1017,15 @@ namespace ICSharpCode.ILSpy.Properties { @@ -1017,6 +1017,15 @@ namespace ICSharpCode.ILSpy.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Expand params arguments by removing explicit array creation.
/// </summary>
public static string DecompilerSettings_ExpandParamsArguments {
get {
return ResourceManager.GetString("DecompilerSettings.ExpandParamsArguments", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Use file-scoped namespace declarations.
/// </summary>

3
ILSpy/Properties/Resources.resx

@ -360,6 +360,9 @@ Are you sure you want to continue?</value> @@ -360,6 +360,9 @@ Are you sure you want to continue?</value>
<data name="DecompilerSettings.DoWhileStatement" xml:space="preserve">
<value>Transform to do-while, if possible</value>
</data>
<data name="DecompilerSettings.ExpandParamsArguments" xml:space="preserve">
<value>Expand params arguments by removing explicit array creation</value>
</data>
<data name="DecompilerSettings.FSpecificOptions" xml:space="preserve">
<value>F#-specific options</value>
</data>

Loading…
Cancel
Save