From 56d1a77407243ff6b4996210d8924bbffcfe3cee Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Feb 2026 11:55:27 +0000 Subject: [PATCH 1/2] Initial plan From 6435687c7b68c0709b3d1f08d12f369084a52888 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Feb 2026 11:58:27 +0000 Subject: [PATCH 2/2] Update CHANGELOG and docs for v1.4.0 (.NET 10 migration release) Co-authored-by: leeoades <2321091+leeoades@users.noreply.github.com> --- CHANGELOG.md | 10 ++++++++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- docs/AOT-and-Trim-Compatibility.md | 8 ++++---- docs/Target-Framework-Compatibility.md | 6 +++--- docs/index.md | 2 +- test/FunctionalStateMachine.Benchmarks/README.md | 5 ++--- 7 files changed, 23 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a65bad2..af8f9eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/), and this ## [Unreleased] +## [1.4.0] - 2026-02-26 + +### Changed +- **⬆️ .NET 10 upgrade** — The entire solution is now built on .NET 10 + - SDK pinned to `10.0.102` via `global.json` (`rollForward: latestFeature`) + - Library projects (`FunctionalStateMachine.Core`, `FunctionalStateMachine.CommandRunner`) now ship `netstandard2.0` and `net10.0` builds (previously `net8.0`) + - Test and sample projects target `net10.0` (previously `net9.0`) + - `Microsoft.Extensions.DependencyInjection.Abstractions` updated `2.2.0` → `10.0.0` + - `Microsoft.Extensions.DependencyInjection` updated `9.0.0` → `10.0.0` + ## [1.3.0] - 2026-02-23 ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b8132c7..b89d3f9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ This project adheres to a Code of Conduct that all contributors are expected to ### Prerequisites -- [.NET 9.0 SDK](https://dotnet.microsoft.com/download) or later +- [.NET 10.0 SDK](https://dotnet.microsoft.com/download) or later - Git - A code editor (Visual Studio, VS Code, Rider, etc.) diff --git a/README.md b/README.md index 8e9f3e7..d8cd809 100644 --- a/README.md +++ b/README.md @@ -488,9 +488,9 @@ Explore complete, runnable examples in the `/samples` directory: ## Advanced Topics -This library targets both `netstandard2.0` (broad compatibility) and `net8.0` (AOT/trim-ready). Both NativeAOT and `PublishTrimmed` publishing are supported with zero runtime reflection. +This library targets both `netstandard2.0` (broad compatibility) and `net10.0` (AOT/trim-ready). Both NativeAOT and `PublishTrimmed` publishing are supported with zero runtime reflection. -- **[Target framework compatibility](docs/Target-Framework-Compatibility.md)** — .NET Standard 2.0 vs .NET 8+, what each target provides +- **[Target framework compatibility](docs/Target-Framework-Compatibility.md)** — .NET Standard 2.0 vs .NET 10+, what each target provides - **[AOT and trim compatibility](docs/AOT-and-Trim-Compatibility.md)** — NativeAOT, `PublishTrimmed`, how source generators eliminate reflection --- diff --git a/docs/AOT-and-Trim-Compatibility.md b/docs/AOT-and-Trim-Compatibility.md index 770dced..697bd89 100644 --- a/docs/AOT-and-Trim-Compatibility.md +++ b/docs/AOT-and-Trim-Compatibility.md @@ -1,6 +1,6 @@ # AOT and Trim Compatibility -The `net8.0` build of `FunctionalStateMachine.Core` and `FunctionalStateMachine.CommandRunner` is fully compatible with: +The `net10.0` build of `FunctionalStateMachine.Core` and `FunctionalStateMachine.CommandRunner` is fully compatible with: - **NativeAOT** (`PublishAot=true`) — compiled ahead of time to a self-contained native binary - **Trimming** (`PublishTrimmed=true`) — unused code removed at publish time to reduce binary size @@ -10,8 +10,8 @@ The `net8.0` build of `FunctionalStateMachine.Core` and `FunctionalStateMachine. | Package | `IsAotCompatible` | Reflection-free | Trim-safe | |---|---|---|---| -| `FunctionalStateMachine.Core` | ✅ (`net8.0+`) | ✅ | ✅ | -| `FunctionalStateMachine.CommandRunner` | ✅ (`net8.0+`) | ✅ | ✅ | +| `FunctionalStateMachine.Core` | ✅ (`net10.0`) | ✅ | ✅ | +| `FunctionalStateMachine.CommandRunner` | ✅ (`net10.0`) | ✅ | ✅ | | `FunctionalStateMachine.Diagrams` | N/A (build-time only) | N/A | N/A | | `FunctionalStateMachine.Core.Generator` | N/A (build-time only) | N/A | N/A | | `FunctionalStateMachine.CommandRunner.Generator` | N/A (build-time only) | N/A | N/A | @@ -28,7 +28,7 @@ Add `true` to your `.csproj`: Exe - net9.0 + net10.0 true diff --git a/docs/Target-Framework-Compatibility.md b/docs/Target-Framework-Compatibility.md index 90e6e76..e4c5421 100644 --- a/docs/Target-Framework-Compatibility.md +++ b/docs/Target-Framework-Compatibility.md @@ -7,15 +7,15 @@ | Target framework | Gets | |---|---| | `netstandard2.0` | Broadest compatibility — .NET Framework 4.6.1+, .NET Core 2.0+, Xamarin, Unity | -| `net8.0` | AOT-compatible build with full trim analysis | +| `net10.0` | AOT-compatible build with full trim analysis | -When you reference the NuGet package from a `net8.0` or `net9.0` project, NuGet automatically selects the `net8.0` build. When you reference it from a `netstandard2.0`-compatible target, NuGet selects the `netstandard2.0` build. +When you reference the NuGet package from a `net10.0` project, NuGet automatically selects the `net10.0` build. When you reference it from any other target (including `net8.0`, `net9.0`, or `netstandard2.0`-compatible targets), NuGet selects the `netstandard2.0` build. ## Feature comparison All state machine features are identical across both targets. The only difference is in the internals: -| Feature | `netstandard2.0` | `net8.0+` | +| Feature | `netstandard2.0` | `net10.0` | |---|---|---| | Full fluent API | ✅ | ✅ | | Guards, conditionals | ✅ | ✅ | diff --git a/docs/index.md b/docs/index.md index 8007ca2..47fd3d1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -33,7 +33,7 @@ Welcome to the Functional State Machine docs. Each guide introduces a feature, w ## Advanced -- [Target framework compatibility (.NET Standard 2.0 vs .NET 8+)](Target-Framework-Compatibility.md) +- [Target framework compatibility (.NET Standard 2.0 vs .NET 10+)](Target-Framework-Compatibility.md) - [AOT and trim compatibility](AOT-and-Trim-Compatibility.md) ## For Contributors diff --git a/test/FunctionalStateMachine.Benchmarks/README.md b/test/FunctionalStateMachine.Benchmarks/README.md index 2962a95..17ca061 100644 --- a/test/FunctionalStateMachine.Benchmarks/README.md +++ b/test/FunctionalStateMachine.Benchmarks/README.md @@ -33,7 +33,7 @@ Results will be saved to `BenchmarkDotNet.Artifacts/results/` including: ## Typical Results -*Benchmarks run on .NET 9.0* +*Benchmarks run on .NET 10.0* | Method | Mean | Allocated | |---------------------------- |----------:|----------:| @@ -63,8 +63,7 @@ Use BenchmarkDotNet's built-in analysis: ```bash # Compare different .NET versions -dotnet run -c Release -f net8.0 -dotnet run -c Release -f net9.0 +dotnet run -c Release -f net10.0 # Memory profiling dotnet run -c Release --filter *Fire*