Skip to content

v0.2.0: multi-target net8.0 alongside net10.0#16

Merged
StuartMeeks merged 1 commit into
mainfrom
retarget-net8-net10
Jun 20, 2026
Merged

v0.2.0: multi-target net8.0 alongside net10.0#16
StuartMeeks merged 1 commit into
mainfrom
retarget-net8-net10

Conversation

@StuartMeeks

Copy link
Copy Markdown
Owner

Summary

Retargets the package from net10.0-only to net8.0;net10.0 so .NET 8 CLIs can consume it directly instead of being forced onto the latest runtime. Shipped as a minor bump: 0.1.10 → 0.2.0.

No API or behaviour changes — the public surface is identical across both targets.

Why net8.0;net10.0 (not the full Spectre netstandard2.0 mirror)

ns2.0 was assessed and rejected. Its surface-API gaps (guard helpers, OperatingSystem.Is*, Convert.ToHexString, record/init, collection expressions) polyfill cleanly, but ArchiveExtractor uses System.Formats.Tar.TarFile (net7+) and ZipFile.ExtractToDirectory(…, overwriteFiles: true) (net6+) to unpack downloaded release archives — no polyfill exists. Supporting ns2.0 would mean adding SharpZipLib and forking that security-sensitive path under #if NETSTANDARD2_0, untestable locally, for an implausible (.NET Framework / Unity) audience. net8.0;net10.0 reaches every realistic consumer with zero source changes.

Verified clean for net8: all deps ship net8.0 assets, and there is no System.Threading.Lock (the usual lone net8 blocker).

Changes

  • src/…csprojTargetFrameworkTargetFrameworks net8.0;net10.0; Version 0.1.10 → 0.2.0. No conditional PackageReferences needed.
  • Directory.Build.props — dropped the singular <TargetFramework> (it would make MSBuild silently ignore TargetFrameworks). Safe: tests/demo each declare their own TFM.
  • CHANGELOG.md## [0.2.0] entry.

Spectre floors untouched (Spectre.Console 0.56.0 / Spectre.Console.Cli 0.55.0).

Verification

  • dotnet build -c Release — both TFMs compile, 0 warnings / 0 errors (TreatWarningsAsErrors on).
  • dotnet test196/196 pass (net10 runtime; net8 compile-verified, as only the net10 runtime is installed locally).
  • dotnet pack.nupkg contains both lib/net8.0/ and lib/net10.0/.
  • Demo (ProjectReference consumer) builds clean.

🤖 Generated with Claude Code

Retarget the package from net10.0-only to net8.0;net10.0 so .NET 8 CLIs
can consume it directly. No API or behaviour changes — every dependency
already ships net8.0 assets and no net9+-only APIs are used.

- src csproj: TargetFramework -> TargetFrameworks net8.0;net10.0; bump 0.1.10 -> 0.2.0
- Directory.Build.props: drop the singular TargetFramework so TargetFrameworks
  is honoured (tests/demo declare their own TFM)
- CHANGELOG: 0.2.0 entry

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@StuartMeeks StuartMeeks merged commit b53df15 into main Jun 20, 2026
4 checks passed
@StuartMeeks StuartMeeks deleted the retarget-net8-net10 branch June 20, 2026 01:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant