FreeAndNil opened a new pull request, #305:
URL: https://github.com/apache/logging-log4net/pull/305

   ## Why
   
   The sources already use C# 14 (the `field` keyword in `SmtpAppender`'s 
property accessors), which
   requires the .NET 10 SDK. Nothing in the repo declared that: the test 
projects targeted `net8.0`,
   CI installed .NET 8 and the Dockerfile fetched the 8.0 channel, so a clean 
checkout could not
   compile - it failed with `CS0501: 'SmtpAppender.To.get' must declare a body`.
   
   This PR makes the required toolchain explicit and cleans up the surrounding 
build, which turned up
   several unrelated defects along the way.
   
   **The shipped surface is unchanged.** `log4net` still targets 
`net462;netstandard2.0` and
   `log4net.Ext.Mail` still targets `netstandard2.0`. Nothing here affects 
consumers.
   
   ## Changes
   
   | Commit | What |
   |---|---|
   | Target .NET 10 / C# 14 | test and integration-test projects `net8.0` → 
`net10.0`; CI `dotnet-version: 10` |
   | Build net4x without Mono | delete `MonoForFramework.targets` and its two 
imports |
   | Container image from the .NET 10 SDK image | `ubuntu:20.04` + 
`dotnet-install.sh` →
   `mcr.microsoft.com/dotnet/sdk:10.0-noble` |
   | Stop the release scripts on failed steps | 
`$PSNativeCommandUseErrorActionPreference` in both scripts, plus a path
   fix |
   | Fix the log4net.Ext.Mail package readme | `NU5039` |
   | Quieten the TelnetAppender test | graceful socket shutdown |
   | Update BUILDING.md | document what the build actually is |
   
   ### Mono is no longer needed to build net4x
   
   `MonoForFramework.targets` set `FrameworkPathOverride` to Mono's `4.6.2-api` 
directory on Unix. That
   is obsolete: the .NET SDK already adds an implicit `PackageReference` to
   `Microsoft.NETFramework.ReferenceAssemblies.<tfm>` for net4x targets, and 
those packages were
   already in the restore graph.
   
   ### net462 tests are now Windows-only
   
   VSTest hosts net4x tests through `TestHostNetFramework/testhost.exe`, a .NET 
Framework executable,
   so `dotnet test` aborts with `TESTRUNABORT` on Linux and macOS. 
`log4net.Tests` now conditions its
   `TargetFrameworks` on `'$(OS)' != 'Windows_NT'`, so no unrunnable test 
assembly is produced. The
   `net462` **library** is still built on every platform; only the test target 
is gated.
   
   This also fixes the `ubuntu-22.04` and `macos-14` CI jobs, which ran a bare 
`dotnet test` against a
   `net462` target they could not host.
   
   ###  Run CI on the latest runner images
   
   macos-14 and ubuntu-22.04 are superseded by macos-latest (macOS 26) and 
ubuntu-latest (Ubuntu 24.04).
   Neither new image ships Mono, so net4x tests cannot run there - which is why 
log4net.Tests restricts net462 to Windows.
   
   ### Release scripts continued after failed steps
   
   `$ErrorActionPreference = 'Stop'` does not apply to native commands — they 
only set
   `$LASTEXITCODE`. A failing `dotnet`, `git`, `zip`, `gpg` or `mvnw` was 
therefore ignored, and
   artifacts were packaged, signed and tagged anyway. Both scripts now set
   `$PSNativeCommandUseErrorActionPreference` (PowerShell 7.3+).
   
   This was not theoretical: `NU5039` made the `log4net.Ext.Mail` pack fail, no 
`.nupkg` was produced,
   and `build-preview.ps1` went on to gpg-sign files that did not exist. 
`build-preview.ps1` also built
   its artifact paths with backslashes, which are not path separators outside 
Windows.
   
   ### TelnetAppender test noise
   
   `SimpleTelnetClient.Dispose()` disposed the `TcpClient` while the reader was 
blocked in
   `stream.Read`, so teardown aborted the socket and dumped an `IOException` 
with a stack trace on
   every passing run. The cancellation token never actually broke the loop — it 
was only checked after
   a successful read. Now the socket is shut down first, the read returns 0, 
and the loop exits
   normally. Exceptions arriving after disposal starts are not reported; 
genuine failures still are.
   
   ## Verification
   
   On Linux (Ubuntu-based, .NET SDK 10.0.110, self-built Mono present but 
unused by the build):
   
   - `dotnet build ./src/log4net.sln` - succeeds, 0 warnings
   - `dotnet test ./src/log4net.sln` - **292 total, 0 failed, 281 succeeded**, 
11 skipped (Windows-only)
   - `net462` and `net472` compile with `MonoForFramework.targets` deleted
   - `log4net.Tests.Signing.AssemblyShouldBeSigned` passes - strong naming 
survives the
     reference-assembly switch
   - `./mvnw site` works
   - both scripts parse under pwsh 7.6.4; the native-error behaviour was 
verified directly
   
   ## For reviewers to weigh
   
   **Nothing tests on the .NET 8 runtime any more.** `netstandard2.0` consumers 
on .NET 8 (LTS until
   November 2026) are still supported but no longer exercised.
   
   **The MCR image reference is fully qualified**, so it needs no registry 
configuration and no login.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to