diff --git a/.github/workflows/build-tests.yml b/.github/workflows/build-tests.yml
index d3f8f5f..4192550 100644
--- a/.github/workflows/build-tests.yml
+++ b/.github/workflows/build-tests.yml
@@ -54,9 +54,8 @@ jobs:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-dotnet@v6.0.0
with:
- dotnet-version: |
- 8.0.x
- 10.0.401
+ global-json-file: global.json
+ dotnet-version: 10.0.401
- name: Restore validation tools
run: dotnet tool restore
- name: Validate version scenarios
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 15921af..e1b3616 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -33,7 +33,7 @@ jobs:
ref: ${{ needs.validate.outputs.sha }}
- uses: actions/setup-dotnet@v6.0.0
with:
- dotnet-version: 10.0.401
+ global-json-file: global.json
- uses: actions/download-artifact@v8.0.2
with:
name: ${{ needs.validate.outputs.artifact-name }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..07e2b87
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,22 @@
+# Changelog
+
+## 1.0.0 (unreleased)
+
+### Breaking changes
+
+- Removed the .NET 8 target and EF Core 8 dependency. Applications must target
+ .NET 10 or .NET 11 to use this release. Applications remaining on .NET 8
+ must use the earlier 0.x package line.
+
+### Added
+
+- .NET 11 support with EF Core 11 RC2 (`11.0.0-rc.2.26504.105`), including
+ SQLite sample and test coverage, NuGet assets, and debugging symbols.
+- Builds use the .NET 11 RC2 SDK. .NET 10 with EF Core 10 remains supported.
+
+### Release versioning
+
+- GitVersion's `next-version: 1.0.0` makes this a major release from the
+ previous 0.x line. Remove the hint after tagging `v1.0.0`.
+- Use `+semver: major` in the commit or merge message to record the breaking
+ change explicitly.
diff --git a/Directory.Build.props b/Directory.Build.props
index 1cb6a86..1f97df4 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,6 +1,6 @@
- net8.0;net10.0
+ net10.0;net11.0
14.0
enable
enable
@@ -12,10 +12,10 @@
true
true
true
- 8.0.32
10.0.12
- 8.0.1
+ 11.0.0-rc.2.26504.105
10.0.12
+ 11.0.0-rc.2.26504.105
diff --git a/GitVersion.yml b/GitVersion.yml
index fe4a506..a634fbc 100644
--- a/GitVersion.yml
+++ b/GitVersion.yml
@@ -1,4 +1,6 @@
mode: ContinuousDeployment
+# Dropping .NET 8 is a breaking change. Remove this hint after v1.0.0 is tagged.
+next-version: 1.0.0
tag-prefix: '[vV]?'
assembly-versioning-scheme: MajorMinorPatch
assembly-file-versioning-scheme: MajorMinorPatch
diff --git a/README.md b/README.md
index 0f1f7d7..2ded88d 100644
--- a/README.md
+++ b/README.md
@@ -41,16 +41,23 @@ for configuration, multiple-context examples, and cancellation compatibility.
dotnet add package myNOC.EntityFramework.Query
```
-The package, tests, and sample target **.NET 8.0 and .NET 10.0** (LTS).
-The .NET 8 asset uses the latest EF Core 8 servicing release; the .NET 10
-asset uses EF Core 10. EF Core 10 cannot run on .NET 8. Dependency reports
-may therefore show newer major versions for .NET 8; this is intentional.
+**Breaking change in 1.0.0: .NET 8 and EF Core 8 support has been removed.**
+Upgrade applications to .NET 10 or .NET 11 before updating this package.
+Applications remaining on .NET 8 must use the earlier 0.x package line.
+See the [release notes](./CHANGELOG.md).
+
+The package, tests, and sample target **.NET 10.0 and .NET 11.0**.
+The .NET 10 LTS asset uses EF Core 10.
+The .NET 11 asset uses EF Core **11.0.0-rc.2.26504.105**; .NET 11 support
+currently targets [RC2](https://devblogs.microsoft.com/dotnet/dotnet-11-rc-2/).
+Use matching versions of your application's EF Core provider and other EF packages.
+Dependency reports may show newer major versions for older targets; this is intentional.
Test tooling uses the current stable MSTest, VSTest, Coverlet and NSubstitute.
## Local build and validation
-Install the .NET SDK selected by [global.json](./global.json), plus the
-.NET 8 runtime to run the .NET 8 tests. No .NET 9 SDK/runtime is needed.
+Install the .NET 11 RC2 SDK selected by [global.json](./global.json), plus the
+.NET 10 runtime to run the .NET 10 tests. No .NET 8 SDK/runtime is needed.
Run these commands from the repository root:
```shell
@@ -64,6 +71,9 @@ dotnet list package --vulnerable --include-transitive
```
Warnings are errors in every project. Tests run for both target frameworks.
+The library suppresses only NuGet's `NU5104` packaging warning because its
+.NET 11 asset intentionally depends on EF Core 11 RC2. Remove that exception
+when updating to EF Core 11 GA.
PowerShell 7 is required for the versioning and package-validation scripts.
To reproduce CI's version stamping locally:
@@ -91,6 +101,15 @@ props file used by restore, build and pack. It stamps `Version`, `PackageVersion
`AssemblyVersion`, `FileVersion` and `InformationalVersion`. The informational
version and NuGet repository metadata contain the exact build commit.
+For this breaking release, `next-version: 1.0.0` in GitVersion's configuration
+ensures the next release advances from 0.x to **1.0.0**, including after a squash
+merge. Remove the hint after `v1.0.0` is tagged; subsequent releases increment
+from that tag. The recommended commit/merge message is:
+
+```text
+Drop .NET 8 support and add .NET 11 / EF Core 11 support +semver: major
+```
+
- `main` produces only stable `major.minor.patch` packages; two guards reject
prereleases and publishing from any other branch.
- A commit after `v1.2.3` produces `1.2.4`. Publishing creates `v1.2.4` on
@@ -103,7 +122,8 @@ version and NuGet repository metadata contain the exact build commit.
- Avoid `+semver: none` for publishable changes: NuGet versions are immutable.
[Test-Versioning.ps1](./scripts/Test-Versioning.ps1) exercises patch releases,
-stable tags, tagged reruns, previews, explicit minor/major increments and
+the 0.x-to-1.0.0 transition through a squash merge, retiring the version hint,
+stable tags, tagged reruns, previews, explicit minor/major increments, and
merge-message increments in an isolated temporary Git repository.
## CI and Trusted Publishing
@@ -188,8 +208,8 @@ SQLite in-memory database, then runs list and scalar queries. No external databa
server is required. Run it from the repository root for either supported target:
```shell
-dotnet run --project sample/QuerySample --framework net8.0
dotnet run --project sample/QuerySample --framework net10.0
+dotnet run --project sample/QuerySample --framework net11.0
```
The [tests](./tests/myNOC.Tests.EntityFramework.Query/) cover SQL translation and
diff --git a/global.json b/global.json
index e1c5e99..075bf79 100644
--- a/global.json
+++ b/global.json
@@ -1,7 +1,7 @@
{
"sdk": {
- "version": "10.0.401",
+ "version": "11.0.100-rc.2.26504.105",
"rollForward": "latestPatch",
- "allowPrerelease": false
+ "allowPrerelease": true
}
}
diff --git a/scripts/Test-Packages.ps1 b/scripts/Test-Packages.ps1
index 19bf10c..7fe48c1 100644
--- a/scripts/Test-Packages.ps1
+++ b/scripts/Test-Packages.ps1
@@ -21,10 +21,19 @@ try {
if (Get-ChildItem "$scratch/package" -Recurse -Filter '*.pdb') {
throw 'Portable PDBs must be in the symbol package, not the primary package.'
}
- $frameworks = @('net8.0', 'net10.0')
+ $frameworks = @('net10.0', 'net11.0')
+ $assemblies = @(Get-ChildItem "$scratch/package/lib" -Recurse -Filter '*.dll')
+ if ($assemblies.Count -ne $frameworks.Count) { throw 'Expected one packaged DLL per supported target framework.' }
+ if (@($metadata.dependencies.group).Count -ne $frameworks.Count) { throw 'Expected one dependency group per supported target framework.' }
$pdbs = @(Get-ChildItem "$scratch/symbols" -Recurse -Filter '*.pdb')
if ($pdbs.Count -ne $frameworks.Count) { throw 'Expected one packaged PDB per target framework.' }
foreach ($framework in $frameworks) {
+ $dependencyGroup = @($metadata.dependencies.group | Where-Object { $_.targetFramework -eq $framework })
+ $efDependency = @($dependencyGroup.dependency | Where-Object { $_.id -eq 'Microsoft.EntityFrameworkCore' })
+ $efMajor = ($framework -replace '^net', '').Split('.')[0]
+ if ($dependencyGroup.Count -ne 1 -or $efDependency.Count -ne 1 -or $efDependency[0].version -notmatch "^$efMajor\.") {
+ throw "Expected an EF Core $efMajor dependency for $framework."
+ }
$assembly = "$scratch/package/lib/$framework/$packageId.dll"
$pdb = "$scratch/symbols/lib/$framework/$packageId.pdb"
if (!(Test-Path $assembly) -or !(Test-Path $pdb)) { throw "Missing DLL/PDB for $framework." }
diff --git a/scripts/Test-Versioning.ps1 b/scripts/Test-Versioning.ps1
index 9101260..5ddc4de 100644
--- a/scripts/Test-Versioning.ps1
+++ b/scripts/Test-Versioning.ps1
@@ -31,8 +31,29 @@ try {
[System.IO.Directory]::CreateDirectory($scratch) | Out-Null
Invoke-Git init --initial-branch=main
Copy-Item "$root/GitVersion.yml" "$scratch/GitVersion.yml"
+ # Keep this regression scenario after the real 1.0.0 hint is retired.
+ $configuration = Get-Content "$scratch/GitVersion.yml" -Raw
+ $configuration = $configuration -replace '(?m)^next-version:.*\r?\n', ''
+ Set-Content "$scratch/GitVersion.yml" ("next-version: 1.0.0`n" + $configuration) -NoNewline
Invoke-Git add GitVersion.yml
Add-Commit 'Initial release'
+ Invoke-Git tag v0.1.6
+ Assert-Version '0.1.6'
+ Invoke-Git checkout -b work/net11
+ Set-Content "$scratch/frameworks.txt" 'net10.0;net11.0'
+ Invoke-Git add frameworks.txt
+ Add-Commit 'Drop .NET 8 and add .NET 11'
+ Assert-Version '1.0.0-alpha.net11.1'
+ Invoke-Git checkout main
+ Invoke-Git merge --squash work/net11
+ Add-Commit 'Drop .NET 8 and add .NET 11 (squashed without a version directive)'
+ Assert-Version '1.0.0'
+ Invoke-Git tag v1.0.0
+ Assert-Version '1.0.0'
+ Set-Content "$scratch/GitVersion.yml" $configuration -NoNewline
+ Invoke-Git add GitVersion.yml
+ Add-Commit 'Remove the completed next-version hint'
+ Assert-Version '1.0.1'
Invoke-Git tag v1.2.3
Assert-Version '1.2.3'
Add-Commit 'Patch change'
diff --git a/src/myNOC.EntityFramework.Query/README.md b/src/myNOC.EntityFramework.Query/README.md
index b5e99a7..c74ddfe 100644
--- a/src/myNOC.EntityFramework.Query/README.md
+++ b/src/myNOC.EntityFramework.Query/README.md
@@ -10,8 +10,15 @@ Register the EF Core provider used by your application separately. To follow the
SQLite examples, also install `Microsoft.EntityFrameworkCore.Sqlite`, using an
EF Core version matching your target framework and other EF packages.
-Supports **.NET 8.0 and .NET 10.0** (LTS), using EF Core 8 and EF Core 10
-respectively. Match your application's Entity Framework packages to its target.
+**Breaking change in 1.0.0: .NET 8 and EF Core 8 support has been removed.**
+Upgrade to .NET 10 or .NET 11 before updating this package. Applications that
+remain on .NET 8 must use the earlier 0.x package line.
+
+Supports **.NET 10.0 and .NET 11.0**, using EF Core 10 and 11 respectively.
+.NET 10 is an LTS target. .NET 11 support currently uses
+[RC2](https://devblogs.microsoft.com/dotnet/dotnet-11-rc-2/) and EF Core
+**11.0.0-rc.2.26504.105**. Match your application's Entity Framework packages
+and database provider to its target and EF Core version.
See the [repository build instructions](https://github.com/erenken/queryPattern#local-build-and-validation)
to build the library/sample and run tests against both frameworks.
@@ -29,7 +36,7 @@ Trusted Publishing policy, not a permanent API key. See the
## Source Link debugging
-The `.snupkg` includes portable PDBs for .NET 8 and .NET 10. Source Link maps
+The `.snupkg` includes portable PDBs for .NET 10 and .NET 11. Source Link maps
to the exact build commit and CI verifies matching source downloads/checksums.
In Visual Studio, add `https://symbols.nuget.org/download/symbols` under
**Tools > Options > Debugging > Symbols**, enable **Source Link support** and
diff --git a/src/myNOC.EntityFramework.Query/myNOC.EntityFramework.Query.csproj b/src/myNOC.EntityFramework.Query/myNOC.EntityFramework.Query.csproj
index 80fe1ff..13e5c94 100644
--- a/src/myNOC.EntityFramework.Query/myNOC.EntityFramework.Query.csproj
+++ b/src/myNOC.EntityFramework.Query/myNOC.EntityFramework.Query.csproj
@@ -17,6 +17,9 @@
git
https://github.com/erenken/queryPattern
true
+ Breaking change in 1.0.0: .NET 8 and EF Core 8 support has been removed. Target .NET 10 with EF Core 10 or .NET 11 with EF Core 11 RC2 (11.0.0-rc.2.26504.105).
+
+ $(NoWarn);NU5104