-
Notifications
You must be signed in to change notification settings - Fork 1
feat: Add .NET 8 and .NET 9 multi-targeting support #29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
… Standard 2.1 Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
…ully Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR adds multi-targeting support to enable the ExperimentFramework to work with .NET 8 LTS and .NET 9 in addition to .NET 10. The changes centralize package version management and update the CI/CD pipeline to build and test all target frameworks.
Key Changes:
- All 29 library projects now multi-target
net8.0;net9.0;net10.0 - Centralized package version management in
Directory.Build.propswith conditional logic for different target frameworks - Updated GitHub Actions workflow to install and build against all three .NET SDKs
Reviewed changes
Copilot reviewed 31 out of 31 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| Directory.Build.props | Added centralized package version management with conditional logic for Microsoft.Extensions and Microsoft.FeatureManagement versions |
| .github/workflows/ci.yml | Updated to install .NET 8.0.x, 9.0.x, and 10.0.x SDKs for multi-targeting builds |
| src/ExperimentFramework/ExperimentFramework.csproj | Changed from single TargetFramework to multi-targeting TargetFrameworks; updated package references to use version variables |
| src/ExperimentFramework/packages.lock.json | Removed package lock file (likely to allow multi-targeting flexibility) |
| src/ExperimentFramework.Targeting/ExperimentFramework.Targeting.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.StickyRouting/ExperimentFramework.StickyRouting.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Science/ExperimentFramework.Science.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Rollout/ExperimentFramework.Rollout.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Resilience/ExperimentFramework.Resilience.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Plugins/ExperimentFramework.Plugins.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.OpenFeature/ExperimentFramework.OpenFeature.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Metrics.Exporters/ExperimentFramework.Metrics.Exporters.csproj | Changed to multi-targeting |
| src/ExperimentFramework.Governance/ExperimentFramework.Governance.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Governance.Persistence/ExperimentFramework.Governance.Persistence.csproj | Changed to multi-targeting |
| src/ExperimentFramework.Governance.Persistence.Sql/ExperimentFramework.Governance.Persistence.Sql.csproj | Changed to multi-targeting and updated EF Core package references to use version variables |
| src/ExperimentFramework.Governance.Persistence.Redis/ExperimentFramework.Governance.Persistence.Redis.csproj | Changed to multi-targeting |
| src/ExperimentFramework.FeatureManagement/ExperimentFramework.FeatureManagement.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Distributed/ExperimentFramework.Distributed.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Distributed.Redis/ExperimentFramework.Distributed.Redis.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.DataPlane/ExperimentFramework.DataPlane.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.DataPlane.SqlServer/ExperimentFramework.DataPlane.SqlServer.csproj | Changed to multi-targeting and updated EF Core package references to use version variables |
| src/ExperimentFramework.DataPlane.Kafka/ExperimentFramework.DataPlane.Kafka.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.DataPlane.AzureServiceBus/ExperimentFramework.DataPlane.AzureServiceBus.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.DataPlane.Abstractions/ExperimentFramework.DataPlane.Abstractions.csproj | Changed to multi-targeting |
| src/ExperimentFramework.Data/ExperimentFramework.Data.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Configuration/ExperimentFramework.Configuration.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Bandit/ExperimentFramework.Bandit.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.AutoStop/ExperimentFramework.AutoStop.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Audit/ExperimentFramework.Audit.csproj | Changed to multi-targeting and updated package references to use version variables |
| src/ExperimentFramework.Admin/ExperimentFramework.Admin.csproj | Changed to multi-targeting |
| docs/MULTI_TARGETING.md | Added comprehensive documentation covering target framework support, package version management, migration guide, and support policy |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #29 +/- ##
=======================================
Coverage ? 83.20%
=======================================
Files ? 184
Lines ? 6860
Branches ? 962
=======================================
Hits ? 5708
Misses ? 1152
Partials ? 0
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Code Coverage |
ExperimentFramework previously targeted .NET 10 only, limiting adoption on production systems running .NET 8 LTS or .NET 9.
Changes
Multi-targeting configuration
net8.0;net9.0;net10.0netstandard2.0(Roslyn requirement)net10.0onlyPackage version management
Directory.Build.propswith centralized MSBuild properties:$(MicrosoftExtensionsVersion)variableCI/CD
Documentation
docs/MULTI_TARGETING.mdcovering TFM selection, migration, and support policyNuGet package structure
Each package now contains framework-specific assemblies:
NuGet automatically selects the appropriate assembly based on consumer's target framework.
Why not .NET Standard 2.x?
Core dependencies (Microsoft.Extensions.Hosting.Abstractions, Polly 8.x, EF Core 10.x) require .NET 8+ in their latest versions. Modern C# features (init properties, required members) would require extensive polyfills. The .NET ecosystem has standardized on .NET 8 as baseline.
Breaking changes
None. Existing .NET 10 projects continue working unchanged.
Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.