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)

Reply via email to