Skip to content

Add support for all currently supported .NET frameworks (net9.0, net10.0) #119

@LeeCampbell

Description

@LeeCampbell

Summary

Update the library and supporting projects to target all currently supported .NET versions (.NET 8, .NET 9, and .NET 10), alongside the existing netstandard2.0 target.
Remove no longer supported targets.
Include benchmark testing in the removal of legacy and addition of new targets/runtimes.

Background

As of March 2026, the supported .NET versions are:

Version Support type End of life
.NET 8 LTS 10 November 2026
.NET 9 STS (2-year) 10 November 2026
.NET 10 LTS 14 November 2028

The library currently targets net8.0;netstandard2.0.
PR #113 recently removed EOL frameworks (net5.0, net6.0, net7.0, etc.) from the benchmarking project.
We should now add the supported frameworks we're missing.

Changes Required

1. Main library (HdrHistogram/HdrHistogram.csproj)

Update target frameworks:

<TargetFrameworks>net10.0;net9.0;net8.0;netstandard2.0</TargetFrameworks>
  • netstandard2.0 — broad compatibility (.NET Framework 4.6.1+, Mono, Xamarin, Unity)
  • net8.0 — current LTS baseline (EOL Nov 2026)
  • net9.0 — current STS (EOL Nov 2026)
  • net10.0 — latest LTS (EOL Nov 2028)

Review whether any #if conditional compilation directives should be added to leverage newer APIs in net9.0/net10.0 (e.g. performance improvements, new intrinsics).

2. Test project (HdrHistogram.UnitTests/HdrHistogram.UnitTests.csproj)

Update to run tests against all supported runtimes:

<TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>

This ensures correctness is verified on each runtime.

3. Examples project (HdrHistogram.Examples/HdrHistogram.Examples.csproj)

Update to latest LTS:

<TargetFramework>net10.0</TargetFramework>

4. Benchmarking project (HdrHistogram.Benchmarking/HdrHistogram.Benchmarking.csproj)

Consider multi-targeting to compare performance across runtimes:

<TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>

5. CI pipeline (.github/workflows/ci.yml)

Update GitHub Actions to install the required .NET SDK versions:

- name: Setup .NET
  uses: actions/setup-dotnet@v4
  with:
    dotnet-version: |
      8.0.x
      9.0.x
      10.0.x

The existing build/test steps should work as-is since dotnet test on a multi-targeted project runs against all targets.

Acceptance Criteria

  • Main library targets net10.0;net9.0;net8.0;netstandard2.0
  • Tests run and pass on all three modern runtimes (net8.0, net9.0, net10.0)
  • CI installs all required .NET SDK versions
  • NuGet package includes assemblies for all four targets
  • No regressions — all existing tests pass on all targets
  • Benchmarking project updated to support cross-runtime comparison

Future Maintenance

When .NET 8 and .NET 9 reach EOL in November 2026, they should be removed in a follow-up issue (similar to #105/#113).
When .NET 11 (STS) ships in November 2026, it can be added at that time.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions