Zoltan Csizmadia created AVRO-4352:
--------------------------------------
Summary: [C#] Add .NET 9.0 and .NET 10.0 support, remove
end-of-life .NET 6.0 and 7.0
Key: AVRO-4352
URL: https://issues.apache.org/jira/browse/AVRO-4352
Project: Apache Avro
Issue Type: New Feature
Components: csharp
Reporter: Zoltan Csizmadia
The C# SDK's executables and test projects currently target
net6.0;net7.0;net8.0, set by DefaultExeTargetFrameworks in
lang/csharp/common.props. CI, CodeQL and the build Docker image install only
the 6.0, 7.0 and 8.0 SDKs.
Microsoft support status:
- .NET 6.0 reached end of support on 2024-11-12.
- .NET 7.0 reached end of support on 2024-05-14.
- .NET 8.0 (LTS) is supported until 2026-11-10.
- .NET 9.0 (STS) is supported until 2026-11-10.
- .NET 10.0 (LTS) was released in November 2025 and is supported until November
2028.
This means two of the three frameworks we target are out of support, and we
don't build or test against the current LTS at all. common.props sets
CheckEolTargetFramework=false to hide the warnings about this.
Proposed changes
1. In common.props, change DefaultExeTargetFrameworks from net6.0;net7.0;net8.0
to net8.0;net9.0;net10.0. DefaultUnitTestTargetFrameworks follows it
automatically.
2. Leave DefaultLibraryTargetFrameworks (netstandard2.0;netstandard2.1) as it
is, so .NET Framework and older runtimes can still use the libraries.
3. In .github/workflows/test-lang-csharp.yml and
.github/workflows/codeql-csharp-analysis.yml, install SDKs 8.0.x, 9.0.x and
10.0.x.
4. In share/docker/Dockerfile, install the 8.0, 9.0 and 10.0 channels instead
of 6.0, 7.0 and 8.0.
5. In lang/csharp/README.md, update the target framework table and the SDK
prerequisite.
6. Review whether CheckEolTargetFramework=false and
SuppressTfmSupportBuildWarnings are still needed once no EOL targets remain.
7. Fix any new analyzer warnings or obsoletions (SYSLIB/CA) the .NET 9 and 10
SDKs report. The build treats warnings under the project rulesets as errors.
Compatibility
- The libraries still target netstandard2.0 and 2.1, so this change doesn't
affect library users.
- avrogen uses RollForward=Major, so it still runs on newer runtimes. The
published tool package will no longer contain net6.0 or net7.0 builds. Anyone
still using those runtimes can stay on the previous release.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)