diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 9478370a6b..d91a1f2eef 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"jetbrains.resharper.globaltools": {
- "version": "2025.2.0",
+ "version": "2025.3.0-eap05",
"commands": [
"jb"
],
diff --git a/.github/workflows/Steeltoe.All.yml b/.github/workflows/Steeltoe.All.yml
index a7567b0dc5..a6eb38507d 100644
--- a/.github/workflows/Steeltoe.All.yml
+++ b/.github/workflows/Steeltoe.All.yml
@@ -65,6 +65,12 @@ jobs:
8.0.*
9.0.*
+ - name: Setup .NET 10 (preview)
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.*
+ dotnet-quality: preview
+
- name: Turn off dev certificate (macOS only)
if: ${{ matrix.os == 'macos-latest' }}
# Setting DOTNET_GENERATE_ASPNET_CERTIFICATE to "false" makes it easier to determine which test failed on macOS when it tried to start a web server with https enabled.
@@ -106,6 +112,12 @@ jobs:
- name: Test (net9.0) (memory dumps)
run: dotnet test ${{ env.SOLUTION_FILE }} --framework net9.0 --filter "${{ env.SKIP_FILTER_WITH_MEMORY_DUMPS }}" ${{ env.COMMON_TEST_ARGS }}
+ - name: Test (net10.0)
+ run: dotnet test ${{ env.SOLUTION_FILE }} --framework net10.0 --filter "${{ env.SKIP_FILTER_NO_MEMORY_DUMPS }}" ${{ env.COMMON_TEST_ARGS }}
+
+ - name: Test (net10.0) (memory dumps)
+ run: dotnet test ${{ env.SOLUTION_FILE }} --framework net10.0 --filter "${{ env.SKIP_FILTER_WITH_MEMORY_DUMPS }}" ${{ env.COMMON_TEST_ARGS }}
+
- name: Upload crash/hang dumps (on failure)
if: ${{ failure() }}
uses: actions/upload-artifact@v4
diff --git a/.github/workflows/component-shared-workflow.yml b/.github/workflows/component-shared-workflow.yml
index 17ca300bc0..c386c7c00f 100644
--- a/.github/workflows/component-shared-workflow.yml
+++ b/.github/workflows/component-shared-workflow.yml
@@ -62,6 +62,12 @@ jobs:
8.0.*
9.0.*
+ - name: Setup .NET 10 (preview)
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.*
+ dotnet-quality: preview
+
- name: Turn off dev certificate (macOS only)
if: ${{ inputs.OS == 'macos' }}
# Setting DOTNET_GENERATE_ASPNET_CERTIFICATE to "false" makes it easier to determine which test failed on macOS when it tried to start a web server with https enabled.
@@ -99,6 +105,13 @@ jobs:
if: ${{ inputs.component == 'Management' }}
run: dotnet test ${{ env.SOLUTION_FILE }} --framework net9.0 ${{ env.SKIP_FILTER_WITH_MEMORY_DUMPS }} ${{ env.COMMON_TEST_ARGS }}
+ - name: Test (net10.0)
+ run: dotnet test ${{ env.SOLUTION_FILE }} --framework net10.0 ${{ env.SKIP_FILTER_NO_MEMORY_DUMPS }} ${{ env.COMMON_TEST_ARGS }}
+
+ - name: Test (net10.0) (memory dumps)
+ if: ${{ inputs.component == 'Management' }}
+ run: dotnet test ${{ env.SOLUTION_FILE }} --framework net10.0 ${{ env.SKIP_FILTER_WITH_MEMORY_DUMPS }} ${{ env.COMMON_TEST_ARGS }}
+
- name: Upload crash/hang dumps (on failure)
if: ${{ failure() }}
uses: actions/upload-artifact@v4
diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml
index 186049309f..75cd0710c9 100644
--- a/.github/workflows/package.yml
+++ b/.github/workflows/package.yml
@@ -38,6 +38,12 @@ jobs:
8.0.*
9.0.*
+ - name: Setup .NET 10 (preview)
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.*
+ dotnet-quality: preview
+
- name: Git checkout
uses: actions/checkout@v4
with:
diff --git a/.github/workflows/scan-vulnerable-dependencies.yml b/.github/workflows/scan-vulnerable-dependencies.yml
index aab25e06a7..e38055a056 100644
--- a/.github/workflows/scan-vulnerable-dependencies.yml
+++ b/.github/workflows/scan-vulnerable-dependencies.yml
@@ -34,6 +34,12 @@ jobs:
8.0.*
9.0.*
+ - name: Setup .NET 10 (preview)
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.*
+ dotnet-quality: preview
+
- name: Git checkout
uses: actions/checkout@v4
with:
diff --git a/.github/workflows/sonarcube.yml b/.github/workflows/sonarcube.yml
index 34f5e0a5e7..e8668eac95 100644
--- a/.github/workflows/sonarcube.yml
+++ b/.github/workflows/sonarcube.yml
@@ -54,6 +54,12 @@ jobs:
8.0.*
9.0.*
+ - name: Setup .NET 10 (preview)
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.*
+ dotnet-quality: preview
+
- name: Install Sonar .NET Scanner
run: dotnet tool install --global dotnet-sonarscanner
@@ -90,6 +96,12 @@ jobs:
- name: Test (net9.0) (memory dumps)
run: dotnet test ${{ env.SOLUTION_FILE }} --filter "Category=MemoryDumps" --framework net9.0 ${{ env.SONAR_TEST_ARGS }}
+ - name: Test (net10.0)
+ run: dotnet test ${{ env.SOLUTION_FILE }} --filter "Category!=MemoryDumps" --framework net10.0 ${{ env.SONAR_TEST_ARGS }}
+
+ - name: Test (net10.0) (memory dumps)
+ run: dotnet test ${{ env.SOLUTION_FILE }} --filter "Category=MemoryDumps" --framework net10.0 ${{ env.SONAR_TEST_ARGS }}
+
- name: End Sonar .NET scanner
if: ${{ !cancelled() && steps.sonar_begin.outcome == 'success' }}
env:
diff --git a/.github/workflows/verify-code-style.yml b/.github/workflows/verify-code-style.yml
index 07859d8a55..e049ac423a 100644
--- a/.github/workflows/verify-code-style.yml
+++ b/.github/workflows/verify-code-style.yml
@@ -33,6 +33,12 @@ jobs:
8.0.*
9.0.*
+ - name: Setup .NET 10 (preview)
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 10.0.*
+ dotnet-quality: preview
+
- name: Git checkout
uses: actions/checkout@v4
with:
diff --git a/shared-test.props b/shared-test.props
index 070739758d..0abf7cd070 100644
--- a/shared-test.props
+++ b/shared-test.props
@@ -4,6 +4,13 @@
$(NoWarn);S2094;S3717;SA1602;CA1062;CA1707;NU5104
+
+
+
+
+ $(NoWarn);ASPDEPR004;ASPDEPR008
+
+
false
diff --git a/shared.props b/shared.props
index a6473a3318..7ca23ec482 100644
--- a/shared.props
+++ b/shared.props
@@ -12,6 +12,13 @@
false
+
+
+ preview
+
+ $(NoWarn);CA1873
+
+
+ $(NoWarn);NU1608
+
+
diff --git a/src/Discovery/test/Configuration.Test/Steeltoe.Discovery.Configuration.Test.csproj b/src/Discovery/test/Configuration.Test/Steeltoe.Discovery.Configuration.Test.csproj
index a1d257dfa7..7d56666bcb 100644
--- a/src/Discovery/test/Configuration.Test/Steeltoe.Discovery.Configuration.Test.csproj
+++ b/src/Discovery/test/Configuration.Test/Steeltoe.Discovery.Configuration.Test.csproj
@@ -1,6 +1,6 @@
- net9.0;net8.0
+ net10.0;net9.0;net8.0
diff --git a/src/Discovery/test/Consul.Test/Steeltoe.Discovery.Consul.Test.csproj b/src/Discovery/test/Consul.Test/Steeltoe.Discovery.Consul.Test.csproj
index 0c13f5fb1c..9d04c2d612 100644
--- a/src/Discovery/test/Consul.Test/Steeltoe.Discovery.Consul.Test.csproj
+++ b/src/Discovery/test/Consul.Test/Steeltoe.Discovery.Consul.Test.csproj
@@ -1,6 +1,6 @@
- net9.0;net8.0
+ net10.0;net9.0;net8.0
diff --git a/src/Discovery/test/Eureka.Test/Steeltoe.Discovery.Eureka.Test.csproj b/src/Discovery/test/Eureka.Test/Steeltoe.Discovery.Eureka.Test.csproj
index f79a91c068..28d96ac0da 100644
--- a/src/Discovery/test/Eureka.Test/Steeltoe.Discovery.Eureka.Test.csproj
+++ b/src/Discovery/test/Eureka.Test/Steeltoe.Discovery.Eureka.Test.csproj
@@ -1,6 +1,6 @@
- net9.0;net8.0
+ net10.0;net9.0;net8.0
diff --git a/src/Discovery/test/HttpClients.Test/LoadBalancers/RoundRobinLoadBalancerTest.cs b/src/Discovery/test/HttpClients.Test/LoadBalancers/RoundRobinLoadBalancerTest.cs
index 08f9e920a5..0f41aab316 100644
--- a/src/Discovery/test/HttpClients.Test/LoadBalancers/RoundRobinLoadBalancerTest.cs
+++ b/src/Discovery/test/HttpClients.Test/LoadBalancers/RoundRobinLoadBalancerTest.cs
@@ -246,8 +246,8 @@ private sealed class TestServiceInstance(Uri uri) : IServiceInstance
public int Port => throw new NotImplementedException();
public bool IsSecure => throw new NotImplementedException();
public Uri Uri { get; } = uri;
- public Uri? NonSecureUri => throw new NotImplementedException();
- public Uri? SecureUri => throw new NotImplementedException();
+ public Uri NonSecureUri => throw new NotImplementedException();
+ public Uri SecureUri => throw new NotImplementedException();
public IReadOnlyDictionary Metadata => throw new NotImplementedException();
}
diff --git a/src/Discovery/test/HttpClients.Test/Steeltoe.Discovery.HttpClients.Test.csproj b/src/Discovery/test/HttpClients.Test/Steeltoe.Discovery.HttpClients.Test.csproj
index 9a42b744de..e9458c6127 100644
--- a/src/Discovery/test/HttpClients.Test/Steeltoe.Discovery.HttpClients.Test.csproj
+++ b/src/Discovery/test/HttpClients.Test/Steeltoe.Discovery.HttpClients.Test.csproj
@@ -1,6 +1,6 @@
- net9.0;net8.0
+ net10.0;net9.0;net8.0
diff --git a/src/Logging/test/DynamicConsole.Test/DynamicConsoleLoggerProviderTest.cs b/src/Logging/test/DynamicConsole.Test/DynamicConsoleLoggerProviderTest.cs
index 5c17d14573..d48ca207d7 100644
--- a/src/Logging/test/DynamicConsole.Test/DynamicConsoleLoggerProviderTest.cs
+++ b/src/Logging/test/DynamicConsole.Test/DynamicConsoleLoggerProviderTest.cs
@@ -482,6 +482,29 @@ public async Task CanUseJsonFormatterWithScopes()
await _consoleOutput.WaitForFlushAsync(TestContext.Current.CancellationToken);
string logOutput = _consoleOutput.ToString();
+#if NET10_0_OR_GREATER
+ logOutput.Should().Be("""
+ {
+ "EventId": 0,
+ "LogLevel": "Information",
+ "Category": "Fully.Qualified.Type",
+ "Message": "Processing of { RequestUrl = https://www.example.com, UserAgent = Steeltoe } started.",
+ "State": {
+ "@IncomingRequest": "{ RequestUrl = https://www.example.com, UserAgent = Steeltoe }",
+ "{OriginalFormat}": "Processing of {@IncomingRequest} started."
+ },
+ "Scopes": [
+ "OuterScope",
+ {
+ "Message": "InnerScope=InnerScopeValue",
+ "InnerScopeKey": "InnerScopeValue",
+ "{OriginalFormat}": "InnerScope={InnerScopeKey}"
+ }
+ ]
+ }
+
+ """);
+#else
logOutput.Should().Be("""
{
"EventId": 0,
@@ -504,6 +527,7 @@ public async Task CanUseJsonFormatterWithScopes()
}
""");
+#endif
}
[Fact]
diff --git a/src/Logging/test/DynamicConsole.Test/Steeltoe.Logging.DynamicConsole.Test.csproj b/src/Logging/test/DynamicConsole.Test/Steeltoe.Logging.DynamicConsole.Test.csproj
index 3a3430b390..ec171ac8c0 100644
--- a/src/Logging/test/DynamicConsole.Test/Steeltoe.Logging.DynamicConsole.Test.csproj
+++ b/src/Logging/test/DynamicConsole.Test/Steeltoe.Logging.DynamicConsole.Test.csproj
@@ -1,6 +1,6 @@
- net9.0;net8.0
+ net10.0;net9.0;net8.0
diff --git a/src/Logging/test/DynamicSerilog.Test/Steeltoe.Logging.DynamicSerilog.Test.csproj b/src/Logging/test/DynamicSerilog.Test/Steeltoe.Logging.DynamicSerilog.Test.csproj
index 9120fbd62a..0620235176 100644
--- a/src/Logging/test/DynamicSerilog.Test/Steeltoe.Logging.DynamicSerilog.Test.csproj
+++ b/src/Logging/test/DynamicSerilog.Test/Steeltoe.Logging.DynamicSerilog.Test.csproj
@@ -1,6 +1,6 @@
- net9.0;net8.0
+ net10.0;net9.0;net8.0
diff --git a/src/Management/src/Endpoint/Actuators/RouteMappings/AspNetEndpointProvider.cs b/src/Management/src/Endpoint/Actuators/RouteMappings/AspNetEndpointProvider.cs
index 70f810c77f..39c995b7a9 100644
--- a/src/Management/src/Endpoint/Actuators/RouteMappings/AspNetEndpointProvider.cs
+++ b/src/Management/src/Endpoint/Actuators/RouteMappings/AspNetEndpointProvider.cs
@@ -167,7 +167,7 @@ private static IEnumerable FromActuatorEndpoint(RouteEndpoint en
if (endpointOptions != null)
{
string displayName = endpoint.DisplayName ?? string.Empty;
- MethodInfo handlerMethod = typeof(EndpointMiddleware<,>).GetMethod(nameof(EndpointMiddleware