Repository navigation
feat!: target net9.0 and net10.0 with configurable frameworks - #151
Merged
Merged
Conversation
Directory.Build.props defines FirebendTargetFrameworks (net9.0;net10.0) for the library and tests and FirebendAppTargetFramework (net10.0) for the sample. Central package management in Directory.Packages.props gives the Microsoft.Extensions.* packages per-framework versions (9.0.x for net9.0, 10.0.x for net10.0). Packages are updated, including StackExchange.Redis 2.9.11 to 3.3.1, and in-box System.Text.Json and System.ComponentModel.TypeConverter references are removed. CI installs the 9 and 10 SDKs. BREAKING CHANGE: packages now target only net9.0 and net10.0; the netstandard2.1 target is dropped. StackExchange.Redis is now 3.x, so consumers must be on StackExchange.Redis 3.x. 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
Restores the always rule for dotnet_style_require_accessibility_modifiers and adds the explicit public modifiers the .NET 10 SDK now flags (IDE0040). 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 (not built locally).
Worth addressing
- StackExchange.Redis goes 2.x → 3.x. Unit tests pass on net9.0 (13), but the live-Redis manual run only used the net10.0 sample, so the net9.0 build against a real Redis is untested. Consider a net9 integration run before release.
LitRedisCacheStore.cs:52:expiry.HasValue ? new Expiration(expiry.Value) : Expiration.Default. Please confirm null expiry still means "no TTL" under SE.Redis 3; a small test asserting that would settle it.
Low / info
- Per-TFM
PackageVersionblocks inDirectory.Packages.props: a new TFM with no block fails with NU1010 (loud, fine), but Dependabot may handle the conditional blocks unevenly. - Version goes 5.0.0 → 6.0.0 via Versionize. If squash-merged, the title must keep
!and theBREAKING CHANGE:footer or it cuts a minor. - netstandard2.1 dropped, so net8 consumers can't take this. Worth confirming that's intended and calling it out in release notes.
Ordering: should release before jobba#214 (jobba pins LitRedis.Core 5.0.0). Dependents must move to SE.Redis 3.x together; mixing 2.x and 3.x in one graph will fail.
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
Pin that a null expiry maps to Expiration.Default (a plain SET that clears any existing TTL, matching the 2.x expiry: null behavior) and not Expiration.KeepTtl, and that a set expiry maps to a relative Expiration of the same span. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JMzvDp6hZ4dnMSGobxdo98
Collaborator
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: null-expiry tests added (LitRedisCacheStoreTests), net9.0 sample run against Redis 7 reported, README and Dependabot ignore added, CI green. Approving. Release this before jobba#214 moves to LitRedis.Core 6.0.0.
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.lit-redis specifics
StringSetAsyncnow takes anExpiration. Consumers who reference StackExchange.Redis directly must move to 3.x. On net9.0, StackExchange.Redis 3.x pulls in Microsoft.Extensions.Logging.Abstractions 10.0.5. I checked that the 47 StackExchange.Redis references in Microsoft.Extensions.Caching.StackExchangeRedis all still resolve against 3.3.1.public, as the .NET 10 SDK's IDE0040 rule requires. The.editorconfigrule is unchanged.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