Repository navigation
feat!: target net9.0 and net10.0 with configurable frameworks - #87
Merged
Merged
Conversation
The library and test projects now target the frameworks listed in FirebendTargetFrameworks in Directory.Build.props (net9.0 and net10.0). Package versions move to central package management in Directory.Packages.props, with per-framework versions for Microsoft.AspNetCore.JsonPatch and Microsoft.Extensions.DependencyInjection. Test packages are updated (MSTest 4, Microsoft.NET.Test.Sdk 18, FluentAssertions 8.11). A repo nuget.config pins restore to nuget.org. CI installs the 9 and 10 SDKs. Existing dotnet format violations are fixed. BREAKING CHANGE: packages now target only net9.0 and net10.0. The netstandard2.1 target is dropped, so .NET Core 3.x, .NET 5-8 and other netstandard2.1 consumers can no longer install new versions. The net10.0 build depends on the 10.0.x Microsoft.AspNetCore.JsonPatch and Microsoft.Extensions.DependencyInjection packages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JMzvDp6hZ4dnMSGobxdo98
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JMzvDp6hZ4dnMSGobxdo98
FluentAssertions 8 requires a commercial license. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JMzvDp6hZ4dnMSGobxdo98
Replaces the deprecated PackageLicenseUrl and PackageIconUrl (NU5125, NU5048) with PackageLicenseExpression and an embedded nuget-image.png, packed from Directory.Build.props for every project that sets PackageIcon. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JMzvDp6hZ4dnMSGobxdo98
global.json pins SDK 10.0.401 with rollForward latestPatch, so local builds and CI run the same analyzer rules and a new SDK feature band can no longer break dotnet format without a code change. CI reads global.json through setup-dotnet and still installs the 9.0 SDK for the net9.0 test runtime. The release workflow now sets up .NET before installing Versionize, so the dotnet tool install runs on the pinned SDK. Dependabot opens monthly dotnet-sdk updates for global.json. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JMzvDp6hZ4dnMSGobxdo98
mcarey1590
reviewed
Oct 7, 2026
mcarey1590
left a comment
Contributor
There was a problem hiding this comment.
Reviewed the full diff. Nothing blocking; leaning approve. CI green.
Worth checking before/after merge
- Release workflow (
dotnet-release.yml, "Install Versionize"): Versionize now installs/runs aftersetup-dotnet, which provides only the 9.0.x and 10.0.401 SDKs. If the Versionize tool targets net8.0 only and roll-forward isn't permitted, the step fails. Because it hascontinue-on-error: trueit would report "No release required" and 10.0.0 would silently never publish. CI can't exercise this (push-to-main only). Please check the tool's TFM or watch the first main run;DOTNET_ROLL_FORWARD=Majoris the fallback.
Low / nits
Directory.Build.props:5-6:FirebendTargetFrameworkshas noCondition="'$(FirebendTargetFrameworks)'==''"guard, so it can't be overridden with-p:for a quick local build.- Dropping netstandard2.1 is a real breaking change (9.0.13 → 10.0.0 via
feat!). Looks forced sinceMicrosoft.AspNetCore.JsonPatch9.x/10.x has no netstandard asset. Consumers need net9.0+; worth a release-note line. - FluentAssertions pinned to 7.2.2 (licensing) and
nuget.configrestricts restore to nuget.org. Both fine, just noting. - Stray nested
tests/JsonPatchGenerator.Tests/JsonPatchGenerator.Tests.slnis untouched legacy.
Ordering: this should release before auto-crud bumps its Firebend.JsonPatchGenerator reference (auto-crud#440 still pins 9.0.13).
Adds a Building from source section covering global.json and the FirebendTargetFrameworks and FirebendAppTargetFramework properties. Dependabot now ignores major updates to the framework-aligned Microsoft packages, which are versioned per target framework in Directory.Packages.props. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JMzvDp6hZ4dnMSGobxdo98
Contributor
Author
|
Responses to the review:
|
mcarey1590
approved these changes
Oct 7, 2026
mcarey1590
left a comment
Contributor
There was a problem hiding this comment.
Verified the follow-ups against the branch: Versionize ordering explained and checked, README build section, Dependabot ignore for framework-aligned majors. Approving. Reminder: confirm the first main-branch release run publishes 10.0.0, and release before the auto-crud JsonPatchGenerator bump.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
FirebendTargetFrameworksinDirectory.Build.props(currentlynet9.0;net10.0). Samples and other runnable apps useFirebendAppTargetFramework(net10.0). Adding .NET 11 later means editing that list and adding onenet11.0block toDirectory.Packages.props.Directory.Packages.props. Microsoft framework packages are versioned per framework: 9.0.x for net9.0 and 10.0.x for net10.0. Other packages are updated to their latest stable versions.nuget.configrestricts restore to nuget.org.global.jsonpins SDK 10.0.401 withrollForward: latestPatch, so local builds and CI run the same analyzer rules. CI reads it throughactions/setup-dotnet@v4(global-json-file) and also installs the 9.0 SDK for the net9.0 test runtime. CI usesactions/checkout@v4.dotnet-sdkupdates forglobal.json.PackageLicenseExpression(MIT) instead of the deprecatedPackageIconUrlandPackageLicenseUrl(NU5048, NU5125).feat!:with aBREAKING CHANGE:footer, so Versionize will release a new major version.json-patch-generator specifics
publicon interface members, and using order.JsonDiffDetector's lazily created serializer is now a thread-safeLazy<JsonSerializer>.Test plan
dotnet build -c Release: 0 warnings, 0 errors (SDK 10.0.401)dotnet format --verify-no-changespasseslib/net9.0andlib/net10.0, the embedded icon, and the MIT license expression🤖 Generated with Claude Code
https://claude.ai/code/session_01JMzvDp6hZ4dnMSGobxdo98