Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Run tests one project at a time so a failing or hanging project is attributable.
```powershell
$testProjects = Get-ChildItem test -Filter *.csproj -Recurse
foreach ($project in $testProjects) {
dotnet test $project.FullName --configuration Release --no-restore
dotnet test --project $project.FullName --configuration Release --no-restore
}
```

Expand Down
6 changes: 6 additions & 0 deletions .nuget/Codebelt.Extensions.Xunit.App/PackageReleaseNotes.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Version: 12.0.1
Availability: .NET 10 and .NET 9

# ALM
- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)

Version: 12.0.0
Availability: .NET 10 and .NET 9

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Version: 12.0.1
Availability: .NET 10 and .NET 9

# ALM
- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)

Version: 12.0.0
Availability: .NET 10 and .NET 9

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Version: 12.0.1
Availability: .NET 10, .NET 9 and .NET Standard 2.0

# ALM
- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)

Version: 12.0.0
Availability: .NET 10, .NET 9 and .NET Standard 2.0

Expand Down
6 changes: 6 additions & 0 deletions .nuget/Codebelt.Extensions.Xunit/PackageReleaseNotes.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Version: 12.0.1
Availability: .NET 10, .NET 9 and .NET Standard 2.0

# ALM
- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Correct dependency release notes

This consumer package note says its dependencies were upgraded, but the Cuemon version changes are referenced only by non-packable test projects; the shipped package has no direct reference to those dependencies. The same statement is included in the 12.0.1 notes for the App, Hosting, and Hosting.AspNetCore packages. This is a non-blocking documentation concern, but it gives consumers a misleading reason to update. Describe the update as test-infrastructure maintenance or remove the statement.

Artifacts

Evidence from the check

  • Python source authored for this validation parses central package versions and project XML, checks test packability, and traces each note into NuGet metadata; it provides the repeatable audit used for the result.

Command output from the check

  • Executed Git metadata capture from `/home/user/repo` shows the parent revision's 10.7.0 central versions and the same three direct test-project references; the update did not introduce a shipped-package consumer.

Command output from the check

  • Executed Python audit from `/home/user/repo` exits 0 and shows the 10.7.1 changes, test-only direct consumers, no direct consumer-package references, and four release-note-to-GenerateNuspec paths; the release-note claim reaches consumers despite no corresponding shipped dependency.

View artifacts

T-Rex Ran code and verified through T-Rex

Prompt To Fix With AI
This is a comment left during a code review.
Path: .nuget/Codebelt.Extensions.Xunit/PackageReleaseNotes.txt
Line: 5

Comment:
**Correct dependency release notes**

This consumer package note says its dependencies were upgraded, but the Cuemon version changes are referenced only by non-packable test projects; the shipped package has no direct reference to those dependencies. The same statement is included in the 12.0.1 notes for the App, Hosting, and Hosting.AspNetCore packages. This is a non-blocking documentation concern, but it gives consumers a misleading reason to update. Describe the update as test-infrastructure maintenance or remove the statement.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Codex


Version: 12.0.0
Availability: .NET 10, .NET 9 and .NET Standard 2.0

Expand Down
24 changes: 23 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,27 @@ For more details, please refer to `PackageReleaseNotes.txt` on a per assembly ba
> [!NOTE]
> Changelog entries prior to version 8.4.0 was migrated from previous versions of Cuemon.Extensions.Xunit, Cuemon.Extensions.Xunit.Hosting, and Cuemon.Extensions.Xunit.Hosting.AspNetCore.

## [12.0.1] - 2026-09-11

This is a patch release focused on dependency updates and resource management improvements for .NET 9 and later compatibility.

### Changed

- Upgraded Cuemon.Core, Cuemon.Extensions.AspNetCore, and Cuemon.Extensions.IO from 10.7.0 to 10.7.1,
- Upgraded Microsoft.NET.Test.Sdk from 18.9.0 to 18.10.0,
- Upgraded Microsoft.Testing.Extensions.CodeCoverage from 18.10.0 to 18.11.0,
- Upgraded MinVer from 7.0.0 to 8.0.0,
- Upgraded Microsoft.Bcl.AsyncInterfaces from 10.0.11 to 10.0.12 for netstandard2.0,
- Upgraded Microsoft.Extensions.* packages (Configuration, EnvironmentVariables, FileExtensions, Json, Hosting, AspNetCore.TestHost) from 9.0.19 to 9.0.20 for .NET 9,
- Upgraded Microsoft.Extensions.* packages (Configuration, EnvironmentVariables, FileExtensions, Json, Hosting, AspNetCore.TestHost) from 10.0.11 to 10.0.12 for .NET 10,
- Migrated code coverage tooling from coverlet-based approach to Microsoft.Testing.Extensions.CodeCoverage for consistency with xUnit v3 testing framework.

### Fixed

- Proper implementation of IDisposable pattern in DeferredHostBuilder with protected Dispose(bool) method and GC.SuppressFinalize call,
- Conditional IAsyncDisposable support in DeferredHostBuilder for .NET 9 and later to properly clean up async-disposable resources,
- Updated test command documentation in contributing guide to use named --project argument instead of positional parameter, following dotnet CLI conventions.

## [12.0.0] - 2026-08-24

This is a major release driven by the upgrade to xUnit v4.0.0, reflecting the decision to bump this library's major version in alignment with the xUnit framework's major release after careful consideration. The xUnit v4 upgrade introduces breaking changes to the testing framework that may require updates to existing test code.
Expand Down Expand Up @@ -526,7 +547,8 @@ This major release is first and foremost focused on ironing out any wrinkles tha



[Unreleased]: https://github.com/codebeltnet/xunit/compare/v12.0.0...HEAD
[Unreleased]: https://github.com/codebeltnet/xunit/compare/v12.0.1...HEAD
[12.0.1]: https://github.com/codebeltnet/xunit/compare/v12.0.0...v12.0.1
[12.0.0]: https://github.com/codebeltnet/xunit/compare/v11.2.1...v12.0.0
[11.2.1]: https://github.com/codebeltnet/xunit/compare/v11.2.0...v11.2.1
[11.2.0]: https://github.com/codebeltnet/xunit/compare/v11.1.2...v11.2.0
Expand Down
8 changes: 0 additions & 8 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,6 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.msbuild">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.collector">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup Condition="'$(IsTestProject)' == 'true'">
Expand Down
40 changes: 19 additions & 21 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -10,41 +10,39 @@
<PackageVersion Include="Codebelt.Bootstrapper.Web" Version="5.2.1" />
<PackageVersion Include="Codebelt.Bootstrapper.Worker" Version="5.2.1" />
<PackageVersion Include="Codebelt.Extensions.BenchmarkDotNet.Console" Version="1.3.3" />
<PackageVersion Include="Cuemon.Core" Version="10.7.0" />
<PackageVersion Include="Cuemon.Extensions.AspNetCore" Version="10.7.0" />
<PackageVersion Include="Cuemon.Extensions.IO" Version="10.7.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.9.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.10.0" />
<PackageVersion Include="MinVer" Version="7.0.0" />
<PackageVersion Include="Cuemon.Core" Version="10.7.1" />
<PackageVersion Include="Cuemon.Extensions.AspNetCore" Version="10.7.1" />
<PackageVersion Include="Cuemon.Extensions.IO" Version="10.7.1" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.10.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.11.0" />
<PackageVersion Include="MinVer" Version="8.0.0" />
<PackageVersion Include="NativeLibraryLoader" Version="1.0.13" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" Condition="'$(MSBuildProjectName)' == 'Codebelt.Extensions.Xunit.Tests'" />
<PackageVersion Include="Xunit.v3.Priority" Version="1.1.18" />
<PackageVersion Include="coverlet.collector" Version="10.0.1" />
<PackageVersion Include="coverlet.msbuild" Version="10.0.1" />
<PackageVersion Include="xunit.v3" Version="4.0.0" />
<PackageVersion Include="xunit.v3.assert" Version="4.0.0" />
<PackageVersion Include="xunit.v3.extensibility.core" Version="4.0.0" />
<PackageVersion Include="xunit.v3.runner.console" Version="4.0.0" />
<PackageVersion Include="xunit.runner.visualstudio" Version="4.0.0" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith('netstandard2'))">
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.11" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.12" />
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.6.3" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith('net9'))">
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.19" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.19" />
<PackageVersion Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.19" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.19" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.19" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="9.0.19" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.20" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.20" />
<PackageVersion Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.20" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.20" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.20" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="9.0.20" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith('net10')) OR $(TargetFramework.StartsWith('netstandard2'))">
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.12" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.12" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.12" />
<PackageVersion Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.12" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.12" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="10.0.12" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -137,13 +137,27 @@

public void Dispose()
{
_startedRegistration.Dispose();
_host.Dispose();
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (disposing)
{
_startedRegistration.Dispose();
_host.Dispose();
}
}

public async ValueTask DisposeAsync()
{
#if NET9_0_OR_GREATER
await _startedRegistration.DisposeAsync().ConfigureAwait(false);
#else
_startedRegistration.Dispose();
#endif

if (_host is IAsyncDisposable disposable)
{
await disposable.DisposeAsync().ConfigureAwait(false);
Expand All @@ -164,7 +178,7 @@
return _host.StopAsync(cancellationToken);
}

public void ReleaseEntrypoint()

Check warning on line 181 in src/Codebelt.Extensions.Xunit.Hosting/Internal/DeferredHostBuilder.cs

View workflow job for this annotation

GitHub Actions / call-sonarcloud / 🔬 Code Quality Analysis

Remove the unused private method 'ReleaseEntrypoint'.
{
_capture.Release();
}
Expand Down
Loading