From d5352cbdf27767d8386021d27f798bf0105c16d8 Mon Sep 17 00:00:00 2001 From: MichalKoczocik Date: Tue, 21 Jul 2026 15:12:25 +0200 Subject: [PATCH 1/4] chore(#458163,#458177): upgrade Ev.ServiceBus to net10.0 and bump to 6.0.0 Retargets the two multi-targeted packages (Ev.ServiceBus, Ev.ServiceBus.Abstractions) from netstandard2.1;netstandard2.0;net8.0 to netstandard2.1;netstandard2.0;net10.0, and the five single-target packages (Apm, AsyncApi, HealthChecks, Mvc, Prometheus) plus all tests/samples from net8.0 to net10.0. Keeps netstandard support unlike the Ev.Idempotency precedent (US #446005) since this package has real external NuGet consumers unlike Idempotency. Bumps Azure.Identity (1.17.0 was deprecated), Microsoft.Extensions.* to 10.0.9, Elastic.Apm, AspNetCore.HealthChecks.AzureServiceBus, and test tooling (Moq, Microsoft.NET.Test.Sdk, coverlet, FluentAssertions capped at 7.2.2 to avoid the v8+ commercial license, xunit kept on the v2 line). Replaces Ev.ServiceBus.Mvc's legacy Microsoft.AspNetCore.Mvc.Abstractions/Core 2.2.x package refs with a FrameworkReference to Microsoft.AspNetCore.App. Collapses the CI workflows' dead 3.1/5.0/6.0/8.0 SDK setup steps (nothing in the repo has targeted them for years) into a single .NET 10 setup step. Fixes two FluentAssertions 7.x compile breaks where StatusCodes.Status200OK (int) no longer implicitly compares against HttpStatusCode via Should().Be(). Co-Authored-By: Claude Sonnet 5 --- .github/workflows/pr-gate.yml | 16 ++-------------- .github/workflows/publish-nugets.yml | 16 ++-------------- Directory.Build.props | 14 +++++++------- docs/CHANGELOG.md | 7 +++++++ .../Ev.ServiceBus.Aspire.Host.csproj | 6 +++--- .../Ev.ServiceBus.Aspire.ServiceDefault.csproj | 2 +- .../Ev.ServiceBus.Sample.Contracts.csproj | 2 +- .../Ev.ServiceBus.Samples.Receiver.csproj | 2 +- .../Ev.ServiceBus.Samples.Sender.csproj | 2 +- .../Ev.ServiceBus.Abstractions.csproj | 10 +++++----- src/Ev.ServiceBus.Apm/Ev.ServiceBus.Apm.csproj | 4 ++-- .../Ev.ServiceBus.AsyncApi.csproj | 2 +- .../Ev.ServiceBus.HealthChecks.csproj | 6 +++--- src/Ev.ServiceBus.Mvc/Ev.ServiceBus.Mvc.csproj | 5 ++--- .../Ev.ServiceBus.Prometheus.csproj | 4 ++-- src/Ev.ServiceBus/Ev.ServiceBus.csproj | 16 ++++++++-------- .../DocumentFilterTest.cs | 6 +++--- .../Ev.ServiceBus.AsyncApi.UnitTests.csproj | 4 ++-- .../Ev.ServiceBus.HealthChecks.UnitTests.csproj | 4 ++-- .../Ev.ServiceBus.Mvc.UnitTests/DispatchTest.cs | 8 ++++---- .../Ev.ServiceBus.Mvc.UnitTests.csproj | 4 ++-- .../Ev.ServiceBus.TestHelpers.csproj | 10 +++++----- .../Ev.ServiceBus.UnitTests.csproj | 4 ++-- 23 files changed, 68 insertions(+), 86 deletions(-) diff --git a/.github/workflows/pr-gate.yml b/.github/workflows/pr-gate.yml index 1d19a88..fe8a532 100644 --- a/.github/workflows/pr-gate.yml +++ b/.github/workflows/pr-gate.yml @@ -11,22 +11,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Setup .NET Core 3.1 + - name: Setup .NET 10 uses: actions/setup-dotnet@v1 with: - dotnet-version: 3.1.x - - name: Setup .NET 5 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 5.0.x - - name: Setup .NET 6 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 6.0.x - - name: Setup .NET 8 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 8.0.x + dotnet-version: 10.0.x - name: Install dependencies run: dotnet restore - name: Build diff --git a/.github/workflows/publish-nugets.yml b/.github/workflows/publish-nugets.yml index d908ae6..475102b 100644 --- a/.github/workflows/publish-nugets.yml +++ b/.github/workflows/publish-nugets.yml @@ -9,22 +9,10 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v2 - - name: Setup .NET Core 3.1 + - name: Setup .NET 10 uses: actions/setup-dotnet@v1 with: - dotnet-version: 3.1.x - - name: Setup .NET 5 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 5.0.x - - name: Setup .NET 6 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 6.0.x - - name: Setup .NET 8 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 8.0.x + dotnet-version: 10.0.x - name: Install dependencies run: dotnet restore - name: Build diff --git a/Directory.Build.props b/Directory.Build.props index 6fb4881..2c22d1d 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -26,20 +26,20 @@ - + all runtime; build; native; contentfiles; analyzers - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - + + + + + \ No newline at end of file diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 4412da1..4635c7b 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 6.0.0 +- Changed + - **Breaking:** `Ev.ServiceBus.Apm`, `Ev.ServiceBus.AsyncApi`, `Ev.ServiceBus.HealthChecks`, `Ev.ServiceBus.Mvc`, and `Ev.ServiceBus.Prometheus` now target `net10.0` instead of `net8.0`. Consumers on net8.0/net9.0 must upgrade to net10.0 to use 6.0.0+, or stay on the 5.x line. + - `Ev.ServiceBus` and `Ev.ServiceBus.Abstractions` now multi-target `netstandard2.1;netstandard2.0;net10.0` (`net8.0` replaced by `net10.0`; `netstandard2.0`/`netstandard2.1` kept unchanged for existing non-.NET-10 consumers). + - `Ev.ServiceBus.Mvc` no longer references the legacy `Microsoft.AspNetCore.Mvc.Abstractions`/`Microsoft.AspNetCore.Mvc.Core` 2.2.x NuGet packages — it now uses a `FrameworkReference` to `Microsoft.AspNetCore.App`, matching the ASP.NET Core shared-framework model used since .NET Core 3.0. + - Bumped `Azure.Identity` to 1.17.1 (1.17.0 was deprecated), `Microsoft.Extensions.*` to 10.0.9, `Elastic.Apm` to 1.34.5, `AspNetCore.HealthChecks.AzureServiceBus` to 9.0.0. + ## 5.7.5 - Fixed - `ApmTransactionManager` now registers the APM error filter **at construction time** (application startup) instead of lazily inside `OnReceiveCancelled()`. The lazy approach lost a race: during pod graceful shutdown the APM agent flushes its internal buffer concurrently with Service Bus processor teardown, so error events could be sent to APM before `ReceiverWrapper.OnExceptionOccured` ran and had a chance to register the filter. Registering at construction time — before any message processing starts — closes this window. diff --git a/samples/Ev.ServiceBus.Aspire.Host/Ev.ServiceBus.Aspire.Host.csproj b/samples/Ev.ServiceBus.Aspire.Host/Ev.ServiceBus.Aspire.Host.csproj index 225854e..d02ab2b 100644 --- a/samples/Ev.ServiceBus.Aspire.Host/Ev.ServiceBus.Aspire.Host.csproj +++ b/samples/Ev.ServiceBus.Aspire.Host/Ev.ServiceBus.Aspire.Host.csproj @@ -1,17 +1,17 @@ - + Exe - net8.0 + net10.0 enable enable 107e167e-5575-4f6e-8661-fe8d2c335f7a - + diff --git a/samples/Ev.ServiceBus.Aspire.ServiceDefault/Ev.ServiceBus.Aspire.ServiceDefault.csproj b/samples/Ev.ServiceBus.Aspire.ServiceDefault/Ev.ServiceBus.Aspire.ServiceDefault.csproj index 8cdb216..a33acc7 100644 --- a/samples/Ev.ServiceBus.Aspire.ServiceDefault/Ev.ServiceBus.Aspire.ServiceDefault.csproj +++ b/samples/Ev.ServiceBus.Aspire.ServiceDefault/Ev.ServiceBus.Aspire.ServiceDefault.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 enable enable true diff --git a/samples/Ev.ServiceBus.Sample.Contracts/Ev.ServiceBus.Sample.Contracts.csproj b/samples/Ev.ServiceBus.Sample.Contracts/Ev.ServiceBus.Sample.Contracts.csproj index 9a10cbf..d67bff2 100644 --- a/samples/Ev.ServiceBus.Sample.Contracts/Ev.ServiceBus.Sample.Contracts.csproj +++ b/samples/Ev.ServiceBus.Sample.Contracts/Ev.ServiceBus.Sample.Contracts.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 diff --git a/samples/Ev.ServiceBus.Samples.Receiver/Ev.ServiceBus.Samples.Receiver.csproj b/samples/Ev.ServiceBus.Samples.Receiver/Ev.ServiceBus.Samples.Receiver.csproj index 6588b73..979a27a 100644 --- a/samples/Ev.ServiceBus.Samples.Receiver/Ev.ServiceBus.Samples.Receiver.csproj +++ b/samples/Ev.ServiceBus.Samples.Receiver/Ev.ServiceBus.Samples.Receiver.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true enable diff --git a/samples/Ev.ServiceBus.Samples.Sender/Ev.ServiceBus.Samples.Sender.csproj b/samples/Ev.ServiceBus.Samples.Sender/Ev.ServiceBus.Samples.Sender.csproj index a1e1c72..1fb41e7 100644 --- a/samples/Ev.ServiceBus.Samples.Sender/Ev.ServiceBus.Samples.Sender.csproj +++ b/samples/Ev.ServiceBus.Samples.Sender/Ev.ServiceBus.Samples.Sender.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true enable diff --git a/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj b/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj index cdf7a91..4657257 100644 --- a/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj +++ b/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj @@ -1,7 +1,7 @@  - netstandard2.1;netstandard2.0;net8.0 + netstandard2.1;netstandard2.0;net10.0 true MIT @@ -14,7 +14,7 @@ enable - + @@ -22,9 +22,9 @@ - + - - + + \ No newline at end of file diff --git a/src/Ev.ServiceBus.Apm/Ev.ServiceBus.Apm.csproj b/src/Ev.ServiceBus.Apm/Ev.ServiceBus.Apm.csproj index c5bf004..7da8681 100644 --- a/src/Ev.ServiceBus.Apm/Ev.ServiceBus.Apm.csproj +++ b/src/Ev.ServiceBus.Apm/Ev.ServiceBus.Apm.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 true MIT This package helps you add instrumentation to message handling with Elastic APM. @@ -15,7 +15,7 @@ - + diff --git a/src/Ev.ServiceBus.AsyncApi/Ev.ServiceBus.AsyncApi.csproj b/src/Ev.ServiceBus.AsyncApi/Ev.ServiceBus.AsyncApi.csproj index 6e4798f..b05d59d 100644 --- a/src/Ev.ServiceBus.AsyncApi/Ev.ServiceBus.AsyncApi.csproj +++ b/src/Ev.ServiceBus.AsyncApi/Ev.ServiceBus.AsyncApi.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true MIT This package helps you generate an Async API Schema. diff --git a/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj b/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj index 462b6a2..5247237 100644 --- a/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj +++ b/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true MIT This package links Ev.ServiceBus and Microsoft.Extensions.Diagnostics.HealthChecks NuGet packages. @@ -12,8 +12,8 @@ - - + + diff --git a/src/Ev.ServiceBus.Mvc/Ev.ServiceBus.Mvc.csproj b/src/Ev.ServiceBus.Mvc/Ev.ServiceBus.Mvc.csproj index bac4ed8..2002b93 100644 --- a/src/Ev.ServiceBus.Mvc/Ev.ServiceBus.Mvc.csproj +++ b/src/Ev.ServiceBus.Mvc/Ev.ServiceBus.Mvc.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true MIT This NuGet contains helpers to better integrate Ev.ServiceBus with Mvc projects. @@ -15,8 +15,7 @@ - - + diff --git a/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj b/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj index 7794efa..a538cef 100644 --- a/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj +++ b/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 true MIT This package helps you add prometheus meters on top of servicebus messaging. @@ -11,7 +11,7 @@ - + diff --git a/src/Ev.ServiceBus/Ev.ServiceBus.csproj b/src/Ev.ServiceBus/Ev.ServiceBus.csproj index 416260e..bccdd62 100644 --- a/src/Ev.ServiceBus/Ev.ServiceBus.csproj +++ b/src/Ev.ServiceBus/Ev.ServiceBus.csproj @@ -1,7 +1,7 @@  - netstandard2.1;netstandard2.0;net8.0 + netstandard2.1;netstandard2.0;net10.0 true MIT This is a wrapper around Microsoft Azure Service Bus @@ -22,14 +22,14 @@ Its goal to is make it the easiest possible to connect and handle an Azure Servi - - - + + + - - - - + + + + diff --git a/tests/Ev.ServiceBus.AsyncApi.UnitTests/DocumentFilterTest.cs b/tests/Ev.ServiceBus.AsyncApi.UnitTests/DocumentFilterTest.cs index 736334b..241c09c 100644 --- a/tests/Ev.ServiceBus.AsyncApi.UnitTests/DocumentFilterTest.cs +++ b/tests/Ev.ServiceBus.AsyncApi.UnitTests/DocumentFilterTest.cs @@ -1,7 +1,7 @@ +using System.Net; using System.Text.Json; using System.Threading.Tasks; using FluentAssertions; -using Microsoft.AspNetCore.Http; using Xunit; namespace Ev.ServiceBus.AsyncApi.UnitTests; @@ -15,7 +15,7 @@ public async Task CheckStateOfSenderApp() var client = factory.CreateClient(); var response = await client.GetAsync("/asyncapi/asyncapi.json"); - response.StatusCode.Should().Be(StatusCodes.Status200OK); + response.StatusCode.Should().Be(HttpStatusCode.OK); var json = await response.Content.ReadAsStringAsync(); var actualDoc = JsonDocument.Parse(json); @@ -295,7 +295,7 @@ public async Task CheckStateOfReceiverApp() var factory = new ReceiverAppFactory(); var client = factory.CreateClient(); var response = await client.GetAsync("/asyncapi/asyncapi.json"); - response.StatusCode.Should().Be(StatusCodes.Status200OK); + response.StatusCode.Should().Be(HttpStatusCode.OK); var json = await response.Content.ReadAsStringAsync(); var actualDoc = JsonDocument.Parse(json); diff --git a/tests/Ev.ServiceBus.AsyncApi.UnitTests/Ev.ServiceBus.AsyncApi.UnitTests.csproj b/tests/Ev.ServiceBus.AsyncApi.UnitTests/Ev.ServiceBus.AsyncApi.UnitTests.csproj index 786cb25..83fa8d1 100644 --- a/tests/Ev.ServiceBus.AsyncApi.UnitTests/Ev.ServiceBus.AsyncApi.UnitTests.csproj +++ b/tests/Ev.ServiceBus.AsyncApi.UnitTests/Ev.ServiceBus.AsyncApi.UnitTests.csproj @@ -1,12 +1,12 @@ - net8.0 + net10.0 false - + diff --git a/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj b/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj index 42cbac7..5f145a6 100644 --- a/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj +++ b/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 false @@ -11,6 +11,6 @@ - + diff --git a/tests/Ev.ServiceBus.Mvc.UnitTests/DispatchTest.cs b/tests/Ev.ServiceBus.Mvc.UnitTests/DispatchTest.cs index 53f5610..357916c 100644 --- a/tests/Ev.ServiceBus.Mvc.UnitTests/DispatchTest.cs +++ b/tests/Ev.ServiceBus.Mvc.UnitTests/DispatchTest.cs @@ -1,11 +1,11 @@ -using System.Threading; +using System.Net; +using System.Threading; using System.Threading.Tasks; using Azure.Messaging.ServiceBus; using Ev.ServiceBus.Samples.Sender; using Ev.ServiceBus.UnitTests.Helpers; using FluentAssertions; using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.Logging; @@ -23,7 +23,7 @@ public async Task EventsAreSentAtTheEndOfTheRequestExecution() var client = factory.CreateClient(); var response = await client.GetAsync("weatherforecast/pushWeather"); - response.StatusCode.Should().Be(StatusCodes.Status200OK); + response.StatusCode.Should().Be(HttpStatusCode.OK); var queue = factory.Services.GetSenderMock("myqueue"); queue.Mock.Verify(o => o.SendMessagesAsync(It.IsAny(), It.IsAny()), Times.Once); @@ -38,7 +38,7 @@ public async Task FailingRequestsDoNotSendEvents() var client = factory.CreateClient(); var response = await client.GetAsync("failing/pushWeather"); - response.StatusCode.Should().Be(StatusCodes.Status500InternalServerError); + response.StatusCode.Should().Be(HttpStatusCode.InternalServerError); var queue = factory.Services.GetSenderMock("myqueue"); queue.Mock.Verify(o => o.SendMessagesAsync(It.IsAny(), It.IsAny()), Times.Never); diff --git a/tests/Ev.ServiceBus.Mvc.UnitTests/Ev.ServiceBus.Mvc.UnitTests.csproj b/tests/Ev.ServiceBus.Mvc.UnitTests/Ev.ServiceBus.Mvc.UnitTests.csproj index fd5c83e..fa60fb4 100644 --- a/tests/Ev.ServiceBus.Mvc.UnitTests/Ev.ServiceBus.Mvc.UnitTests.csproj +++ b/tests/Ev.ServiceBus.Mvc.UnitTests/Ev.ServiceBus.Mvc.UnitTests.csproj @@ -1,12 +1,12 @@ - net8.0 + net10.0 false - + diff --git a/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj b/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj index 7da80a8..75a4813 100644 --- a/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj +++ b/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 @@ -9,10 +9,10 @@ - + - - - + + + diff --git a/tests/Ev.ServiceBus.UnitTests/Ev.ServiceBus.UnitTests.csproj b/tests/Ev.ServiceBus.UnitTests/Ev.ServiceBus.UnitTests.csproj index 4ef7907..26c4232 100644 --- a/tests/Ev.ServiceBus.UnitTests/Ev.ServiceBus.UnitTests.csproj +++ b/tests/Ev.ServiceBus.UnitTests/Ev.ServiceBus.UnitTests.csproj @@ -2,13 +2,13 @@ false - net8.0 + net10.0 CS0618 enable - + From 2b050eaebbd2018b5c74154423664f89fffa68df Mon Sep 17 00:00:00 2001 From: MichalKoczocik Date: Tue, 21 Jul 2026 16:12:47 +0200 Subject: [PATCH 2/4] fix(#458163,#458177): keep net8.0 alongside net10.0, revert to 5.8.0 Reworks the previous commit per feedback: don't drop net8.0 from src/ projects, add net10.0 alongside it instead (non-breaking) - only samples drop net8.0 (dev-only, not published). Tests multi-target net8.0;net10.0 where possible; AsyncApi.UnitTests and Mvc.UnitTests stay net10.0-only since they reference the now net10.0-only sample projects. Reverts the Microsoft.Extensions.* bump to 10.0.9 (no longer needed since net8.0 stays) but bumps Microsoft.Extensions.Diagnostics.HealthChecks to 8.0.11 specifically - AspNetCore.HealthChecks.AzureServiceBus 9.0.0 requires it, staying at 8.0.0 triggered a NU1605 downgrade error. Changes the version bump from 6.0.0 to 5.8.0 (minor, non-breaking) and rewrites the CHANGELOG entry accordingly. Co-Authored-By: Claude Sonnet 5 --- docs/CHANGELOG.md | 8 ++++---- .../Ev.ServiceBus.Abstractions.csproj | 9 ++++++--- .../Ev.ServiceBus.Apm.csproj | 2 +- .../Ev.ServiceBus.AsyncApi.csproj | 2 +- .../Ev.ServiceBus.HealthChecks.csproj | 4 ++-- .../Ev.ServiceBus.Mvc.csproj | 2 +- .../Ev.ServiceBus.Prometheus.csproj | 4 ++-- src/Ev.ServiceBus/Ev.ServiceBus.csproj | 19 ++++++++++++------- ...v.ServiceBus.HealthChecks.UnitTests.csproj | 4 ++-- .../Ev.ServiceBus.TestHelpers.csproj | 7 ++----- .../Ev.ServiceBus.UnitTests.csproj | 2 +- 11 files changed, 34 insertions(+), 29 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 4635c7b..704ee23 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -4,12 +4,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 6.0.0 +## 5.8.0 +- Added + - `net10.0` added as an additional target framework across `Ev.ServiceBus`, `Ev.ServiceBus.Abstractions`, `Ev.ServiceBus.Apm`, `Ev.ServiceBus.AsyncApi`, `Ev.ServiceBus.HealthChecks`, `Ev.ServiceBus.Mvc`, and `Ev.ServiceBus.Prometheus`, alongside the existing `net8.0` (and `netstandard2.0`/`netstandard2.1` on the core packages). Non-breaking — existing net8.0 consumers are unaffected. - Changed - - **Breaking:** `Ev.ServiceBus.Apm`, `Ev.ServiceBus.AsyncApi`, `Ev.ServiceBus.HealthChecks`, `Ev.ServiceBus.Mvc`, and `Ev.ServiceBus.Prometheus` now target `net10.0` instead of `net8.0`. Consumers on net8.0/net9.0 must upgrade to net10.0 to use 6.0.0+, or stay on the 5.x line. - - `Ev.ServiceBus` and `Ev.ServiceBus.Abstractions` now multi-target `netstandard2.1;netstandard2.0;net10.0` (`net8.0` replaced by `net10.0`; `netstandard2.0`/`netstandard2.1` kept unchanged for existing non-.NET-10 consumers). - `Ev.ServiceBus.Mvc` no longer references the legacy `Microsoft.AspNetCore.Mvc.Abstractions`/`Microsoft.AspNetCore.Mvc.Core` 2.2.x NuGet packages — it now uses a `FrameworkReference` to `Microsoft.AspNetCore.App`, matching the ASP.NET Core shared-framework model used since .NET Core 3.0. - - Bumped `Azure.Identity` to 1.17.1 (1.17.0 was deprecated), `Microsoft.Extensions.*` to 10.0.9, `Elastic.Apm` to 1.34.5, `AspNetCore.HealthChecks.AzureServiceBus` to 9.0.0. + - Bumped `Azure.Identity` to 1.17.1 (1.17.0 was deprecated), `Elastic.Apm` to 1.34.5, `AspNetCore.HealthChecks.AzureServiceBus` to 9.0.0. ## 5.7.5 - Fixed diff --git a/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj b/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj index 4657257..0cf0b82 100644 --- a/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj +++ b/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj @@ -1,7 +1,7 @@  - netstandard2.1;netstandard2.0;net10.0 + netstandard2.1;netstandard2.0;net8.0;net10.0 true MIT @@ -22,9 +22,12 @@ - + + + + - + \ No newline at end of file diff --git a/src/Ev.ServiceBus.Apm/Ev.ServiceBus.Apm.csproj b/src/Ev.ServiceBus.Apm/Ev.ServiceBus.Apm.csproj index 7da8681..f73b851 100644 --- a/src/Ev.ServiceBus.Apm/Ev.ServiceBus.Apm.csproj +++ b/src/Ev.ServiceBus.Apm/Ev.ServiceBus.Apm.csproj @@ -1,7 +1,7 @@  - net10.0 + net8.0;net10.0 true MIT This package helps you add instrumentation to message handling with Elastic APM. diff --git a/src/Ev.ServiceBus.AsyncApi/Ev.ServiceBus.AsyncApi.csproj b/src/Ev.ServiceBus.AsyncApi/Ev.ServiceBus.AsyncApi.csproj index b05d59d..8134868 100644 --- a/src/Ev.ServiceBus.AsyncApi/Ev.ServiceBus.AsyncApi.csproj +++ b/src/Ev.ServiceBus.AsyncApi/Ev.ServiceBus.AsyncApi.csproj @@ -1,7 +1,7 @@ - net10.0 + net8.0;net10.0 true MIT This package helps you generate an Async API Schema. diff --git a/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj b/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj index 5247237..9de31ad 100644 --- a/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj +++ b/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj @@ -1,7 +1,7 @@ - net10.0 + net8.0;net10.0 true MIT This package links Ev.ServiceBus and Microsoft.Extensions.Diagnostics.HealthChecks NuGet packages. @@ -13,7 +13,7 @@ - + diff --git a/src/Ev.ServiceBus.Mvc/Ev.ServiceBus.Mvc.csproj b/src/Ev.ServiceBus.Mvc/Ev.ServiceBus.Mvc.csproj index 2002b93..8408259 100644 --- a/src/Ev.ServiceBus.Mvc/Ev.ServiceBus.Mvc.csproj +++ b/src/Ev.ServiceBus.Mvc/Ev.ServiceBus.Mvc.csproj @@ -1,7 +1,7 @@ - net10.0 + net8.0;net10.0 true MIT This NuGet contains helpers to better integrate Ev.ServiceBus with Mvc projects. diff --git a/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj b/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj index a538cef..e027ff0 100644 --- a/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj +++ b/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj @@ -1,7 +1,7 @@  - net10.0 + net8.0;net10.0 true MIT This package helps you add prometheus meters on top of servicebus messaging. @@ -11,7 +11,7 @@ - + diff --git a/src/Ev.ServiceBus/Ev.ServiceBus.csproj b/src/Ev.ServiceBus/Ev.ServiceBus.csproj index bccdd62..888e6fc 100644 --- a/src/Ev.ServiceBus/Ev.ServiceBus.csproj +++ b/src/Ev.ServiceBus/Ev.ServiceBus.csproj @@ -1,7 +1,7 @@  - netstandard2.1;netstandard2.0;net10.0 + netstandard2.1;netstandard2.0;net8.0;net10.0 true MIT This is a wrapper around Microsoft Azure Service Bus @@ -22,14 +22,19 @@ Its goal to is make it the easiest possible to connect and handle an Azure Servi - - - + + + + + + + + - - - + + + diff --git a/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj b/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj index 5f145a6..5af6427 100644 --- a/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj +++ b/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj @@ -1,7 +1,7 @@ - net10.0 + net8.0;net10.0 false @@ -11,6 +11,6 @@ - + diff --git a/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj b/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj index 75a4813..01e7c56 100644 --- a/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj +++ b/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj @@ -1,7 +1,7 @@ - net10.0 + net8.0;net10.0 @@ -10,9 +10,6 @@ - - - - + diff --git a/tests/Ev.ServiceBus.UnitTests/Ev.ServiceBus.UnitTests.csproj b/tests/Ev.ServiceBus.UnitTests/Ev.ServiceBus.UnitTests.csproj index 26c4232..8040fc9 100644 --- a/tests/Ev.ServiceBus.UnitTests/Ev.ServiceBus.UnitTests.csproj +++ b/tests/Ev.ServiceBus.UnitTests/Ev.ServiceBus.UnitTests.csproj @@ -2,7 +2,7 @@ false - net10.0 + net8.0;net10.0 CS0618 enable From 52e201c0e0244795e4d34bf8a135ee816d197774 Mon Sep 17 00:00:00 2001 From: MichalKoczocik Date: Tue, 21 Jul 2026 16:45:50 +0200 Subject: [PATCH 3/4] fix(#458163,#458177): restore .NET 8 runtime setup in PR Gate The UnitTests and HealthChecks.UnitTests projects multi-target net8.0;net10.0, but the PR Gate workflow only set up the .NET 10 SDK - collapsed too far when the tests were net10.0-only. dotnet test needs the net8.0 runtime installed to launch the net8.0 test binaries ("You must install or update .NET to run this application"), causing PR Gate run 29839325480 to fail on the Test step despite Build succeeding. publish-nugets.yml doesn't run tests (build/pack/push only), so the .NET 10 SDK alone is sufficient there to build the net8.0 targets via restored targeting packs - no equivalent fix needed. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/pr-gate.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/pr-gate.yml b/.github/workflows/pr-gate.yml index fe8a532..5863c05 100644 --- a/.github/workflows/pr-gate.yml +++ b/.github/workflows/pr-gate.yml @@ -11,6 +11,10 @@ jobs: steps: - uses: actions/checkout@v2 + - name: Setup .NET 8 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 8.0.x - name: Setup .NET 10 uses: actions/setup-dotnet@v1 with: From 47ffe563f1fd2efd09a917b3d42cf33690142abf Mon Sep 17 00:00:00 2001 From: MichalKoczocik Date: Tue, 21 Jul 2026 17:10:25 +0200 Subject: [PATCH 4/4] fix(#458163,#458177): align net10.0 slots to 10.0.9, keep .NET 8 in publish workflow Addresses PR #117 review feedback from @benspeth: - keep the .NET 8 SDK setup in publish-nugets.yml for now (was dropped when the workflow only needed net10.0) - the net10.0-conditional Microsoft.Extensions.* package groups were still pinned at 8.0.0 (copy-pasted from the net8.0/netstandard2.1 groups) - bump them to 10.0.9, matching the platform-wide pin used by Shared.Notifications. Applied consistently to every sibling occurrence of the same pattern (Ev.ServiceBus, Ev.ServiceBus.Abstractions, Ev.ServiceBus.HealthChecks, Ev.ServiceBus.Prometheus), not just the one line flagged in review. This creates a transitive requirement (Ev.ServiceBus's net10.0 Microsoft.Extensions.Logging 10.0.9 requires Microsoft.Extensions.DependencyInjection >= 10.0.9), which surfaced two more NU1605 downgrade errors in Ev.ServiceBus.TestHelpers and Ev.ServiceBus.HealthChecks.UnitTests - both still referenced Microsoft.Extensions.DependencyInjection unconditionally at 8.0.0. Split those into net8.0/net10.0 conditional groups too. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/publish-nugets.yml | 4 ++++ .../Ev.ServiceBus.Abstractions.csproj | 2 +- .../Ev.ServiceBus.HealthChecks.csproj | 6 ++++++ .../Ev.ServiceBus.Prometheus.csproj | 8 +++++++- src/Ev.ServiceBus/Ev.ServiceBus.csproj | 6 +++--- .../Ev.ServiceBus.HealthChecks.UnitTests.csproj | 5 ++++- .../Ev.ServiceBus.TestHelpers.csproj | 6 ++++++ 7 files changed, 31 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish-nugets.yml b/.github/workflows/publish-nugets.yml index 475102b..92fa097 100644 --- a/.github/workflows/publish-nugets.yml +++ b/.github/workflows/publish-nugets.yml @@ -9,6 +9,10 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v2 + - name: Setup .NET 8 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 8.0.x - name: Setup .NET 10 uses: actions/setup-dotnet@v1 with: diff --git a/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj b/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj index 0cf0b82..dacdabf 100644 --- a/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj +++ b/src/Ev.ServiceBus.Abstractions/Ev.ServiceBus.Abstractions.csproj @@ -28,6 +28,6 @@ - + \ No newline at end of file diff --git a/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj b/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj index 9de31ad..1490c2f 100644 --- a/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj +++ b/src/Ev.ServiceBus.HealthChecks/Ev.ServiceBus.HealthChecks.csproj @@ -13,8 +13,14 @@ + + + + + + diff --git a/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj b/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj index e027ff0..6392def 100644 --- a/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj +++ b/src/Ev.ServiceBus.Prometheus/Ev.ServiceBus.Prometheus.csproj @@ -11,10 +11,16 @@ - + + + + + + + diff --git a/src/Ev.ServiceBus/Ev.ServiceBus.csproj b/src/Ev.ServiceBus/Ev.ServiceBus.csproj index 888e6fc..f4b9099 100644 --- a/src/Ev.ServiceBus/Ev.ServiceBus.csproj +++ b/src/Ev.ServiceBus/Ev.ServiceBus.csproj @@ -32,9 +32,9 @@ Its goal to is make it the easiest possible to connect and handle an Azure Servi - - - + + + diff --git a/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj b/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj index 5af6427..ecede8a 100644 --- a/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj +++ b/tests/Ev.ServiceBus.HealthChecks.UnitTests/Ev.ServiceBus.HealthChecks.UnitTests.csproj @@ -10,7 +10,10 @@ - + + + + diff --git a/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj b/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj index 01e7c56..ea8a43f 100644 --- a/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj +++ b/tests/Ev.ServiceBus.TestHelpers/Ev.ServiceBus.TestHelpers.csproj @@ -10,6 +10,12 @@ + + + + + +