From a6a6cf49c7849120c9d71e50337bd6bc9be0eee2 Mon Sep 17 00:00:00 2001
From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com>
Date: Sun, 11 Jan 2026 18:43:51 -0600
Subject: [PATCH] build: upgrade to .NET 10 and update dependencies
- Bump TargetFramework to net10.0 in Directory.Build.props
- Update Microsoft.Extensions and OpenTelemetry packages to latest versions
- Update test SDK and xunit runner
- Refactor TestWebSocketServer to use HostBuilder and ConfigureWebHost
to respond to deprecation notice
- Pin FluentAssertions version to [7.2.0]
- Remove redundant Microsoft.Extensions.Http reference in StevesBot.Webhook
---
src/Directory.Build.props | 2 +-
src/src/Directory.Packages.props | 16 ++++----
.../StevesBot.Webhook.csproj | 1 -
src/tests/Directory.Packages.props | 8 ++--
.../Infrastructure/TestWebSocketServer.cs | 41 +++++++++++--------
5 files changed, 37 insertions(+), 31 deletions(-)
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index 807df2c..2f80156 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -1,7 +1,7 @@
- net9.0
+ net10.0
enable
enable
latest
diff --git a/src/src/Directory.Packages.props b/src/src/Directory.Packages.props
index e98ac39..67f857c 100644
--- a/src/src/Directory.Packages.props
+++ b/src/src/Directory.Packages.props
@@ -6,14 +6,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/src/src/StevesBot.Webhook/StevesBot.Webhook.csproj b/src/src/StevesBot.Webhook/StevesBot.Webhook.csproj
index 79c3094..81073f2 100644
--- a/src/src/StevesBot.Webhook/StevesBot.Webhook.csproj
+++ b/src/src/StevesBot.Webhook/StevesBot.Webhook.csproj
@@ -2,7 +2,6 @@
-
diff --git a/src/tests/Directory.Packages.props b/src/tests/Directory.Packages.props
index fb6598f..cded8ee 100644
--- a/src/tests/Directory.Packages.props
+++ b/src/tests/Directory.Packages.props
@@ -7,13 +7,13 @@
-
-
-
+
+
+
-
+
diff --git a/src/tests/StevesBot.Worker.Tests/Integration/Infrastructure/TestWebSocketServer.cs b/src/tests/StevesBot.Worker.Tests/Integration/Infrastructure/TestWebSocketServer.cs
index 110068f..0a855df 100644
--- a/src/tests/StevesBot.Worker.Tests/Integration/Infrastructure/TestWebSocketServer.cs
+++ b/src/tests/StevesBot.Worker.Tests/Integration/Infrastructure/TestWebSocketServer.cs
@@ -1,10 +1,12 @@
+using Microsoft.AspNetCore.Hosting.Server;
+
using WebSocket = System.Net.WebSockets.WebSocket;
namespace StevesBot.Worker.Tests.Integration.Infrastructure;
public sealed class TestWebSocketServer : IAsyncLifetime, IDisposable
{
- private readonly IWebHost _host;
+ private readonly IHost _host;
private readonly CancellationTokenSource _echoCts = new();
private Uri? _webSocketUri;
@@ -19,26 +21,30 @@ public sealed class TestWebSocketServer : IAsyncLifetime, IDisposable
public TestWebSocketServer()
{
- _host = new WebHostBuilder()
- .Configure(app =>
+ _host = new HostBuilder()
+ .ConfigureWebHost(b =>
{
- app.UseWebSockets();
-
- app.Run(async context =>
+ b.Configure(app =>
{
- if (context.Request.Path == "/ws" && context.WebSockets.IsWebSocketRequest)
+ app.UseWebSockets();
+
+ app.Run(async context =>
{
- var webSocket = await context.WebSockets.AcceptWebSocketAsync();
- await Echo(webSocket, _echoCts.Token);
- }
- else
- {
- context.Response.StatusCode = 400;
- }
+ if (context.Request.Path == "/ws" && context.WebSockets.IsWebSocketRequest)
+ {
+ var webSocket = await context.WebSockets.AcceptWebSocketAsync();
+ await Echo(webSocket, _echoCts.Token);
+ }
+ else
+ {
+ context.Response.StatusCode = 400;
+ }
+ });
});
+
+ b.UseKestrel();
+ b.UseUrls("http://[::1]:0");
})
- .UseKestrel()
- .UseUrls("http://[::1]:0")
.Build();
}
@@ -58,7 +64,8 @@ public sealed class TestWebSocketServer : IAsyncLifetime, IDisposable
private Uri GetWebSocketUri()
{
- var address = _host.ServerFeatures.GetRequiredFeature().Addresses.First();
+ var serverFeatures = _host.Services.GetRequiredService().Features;
+ var address = serverFeatures.GetRequiredFeature().Addresses.First();
var webSocketAddress = address.Replace("http://", "ws://", StringComparison.OrdinalIgnoreCase);
return new Uri(webSocketAddress + "/ws");
}