Commit a0bd291
committed
chore(deps): upgrade to .NET 10 and Microsoft.Data.SqlClient 6.x
Joint runtime + driver bump that prerequisites issue #2768 (MSSQL JSON
data type support). Behavior-preserving — no production logic changes.
WHY BOTH BUMPS ARE REQUIRED TOGETHER
====================================
SqlDbType.Json (numeric value 35) is a BCL enum value in System.Data,
added in .NET 9 and present in .NET 10. It is NOT a Microsoft.Data.SqlClient
symbol — SqlClient does not get to add values to a BCL enum it does not
own. On .NET 8, the SqlDbType enum stops at DateTimeOffset = 34, so
Enum.TryParse<SqlDbType>("json", ignoreCase: true, out _)
in TypeHelper.GetSystemTypeFromSqlDbType returns false regardless of
which SqlClient version is installed. The companion feature PR for #2768
plans to add a single dictionary entry
[SqlDbType.Json] = typeof(string)
which simply will not compile on net8.0. Both upgrades must therefore
land together as a single prerequisite.
WHY .NET 10 AND NOT .NET 9
==========================
- .NET 10 is the current Long-Term Support release (Nov 2025+).
- .NET 9 is Standard-Term Support, EOL May 2026.
- DAB's current .NET 8 line reaches EOL November 2026.
Going straight to LTS avoids a second forced upgrade inside 12 months.
SCOPE OF CHANGES (NO BEHAVIOR CHANGE INTENDED)
==============================================
Runtime / SDK pin:
- global.json: 8.0.420 -> 10.0.301
Target framework (all 11 src/**/*.csproj):
- net8.0 -> net10.0
NuGet packages (Directory.Packages.props):
- Microsoft.Data.SqlClient 5.2.3 -> 6.0.2
- Microsoft.Extensions.Caching.Memory 8.0.1 -> 10.0.0
- Microsoft.Extensions.Caching.Abstractions 9.0.0 -> 10.0.0
- Microsoft.Extensions.Primitives 9.0.0 -> 10.0.0
- Microsoft.Extensions.Configuration.Binder 9.0.0 -> 10.0.0
- Microsoft.Extensions.Configuration.Json 9.0.0 -> 10.0.0
- Microsoft.Extensions.Caching.StackExchangeRedis 9.0.3 -> 10.0.0
The Microsoft.Extensions.* bumps are required because OpenTelemetry's
transitive chain (Microsoft.Extensions.Logging.Configuration 10.0.0)
demands Configuration.Binder >= 10.0.0 — staying on 9.0.0 produces
NU1605 package-downgrade errors (warning-as-error).
Service.csproj (Microsoft.NET.Sdk.Web) — drop now-redundant
PackageReferences (NU1510, warning-as-error):
- Microsoft.Extensions.Configuration.Binder (in shared framework)
- Microsoft.Extensions.Configuration.Json (in shared framework)
Azure DevOps pipelines (9 occurrences across 8 files):
- UseDotNet@2 version: 8.0.x -> 10.0.x
Container base images (Dockerfile):
- mcr.microsoft.com/dotnet/sdk:8.0-cbl-mariner2.0 -> 10.0-azurelinux3.0
- mcr.microsoft.com/dotnet/aspnet:8.0-cbl-mariner2.0 -> 10.0-azurelinux3.0
(cbl-mariner2.0 tag does not exist for .NET 9+; Azure Linux 3.0 is
Microsoft's documented successor.)
Aspire AppHost (src/Aspire.AppHost/AppHost.cs):
- WithArgs("-f", "net8.0") -> WithArgs("-f", "net10.0") (mssql + pg)
Build/publish scripts:
- scripts/publish.ps1: $dotnetTargetFrameworks net8.0 -> net10.0
- scripts/create-manifest-file.ps1: $dotnetTargetFrameworks + hashtable
keys net8.0_{rid} -> net10.0_{rid}
(TODO marker: release-engineering to
confirm download URLs/hashes resolve)
License file rename:
- external_licenses/Microsoft.Data.SqlClient.SNI.5.2.0.License.txt
-> external_licenses/Microsoft.Data.SqlClient.SNI.6.0.0.License.txt
- scripts/notice-generation.ps1: path updated to match
- TODO marker at top of license file: contents still 5.2.0 text;
release-engineering to refresh from upstream before merge.
SUPPRESSED ASPDEPR008 (warning-as-error) — DELIBERATE
=====================================================
ASP.NET Core 10 deprecates IWebHostBuilder / IWebHost in favor of
WebApplicationBuilder / IHost. Two locations in this repo still consume
the obsolete types and would block compilation under the repo's
TreatWarningsAsErrors=true setting:
- src/Service/Program.cs (2 sites): test-only helpers
CreateWebHostBuilder + CreateWebHostFromInMemoryUpdatableConfBuilder
are consumed by the existing TestServer fixture which takes
IWebHostBuilder.
- src/Service.Tests/Configuration/ConfigurationTests.cs (3 sites):
the consumer of those helpers.
Migrating from WebHost to HostBuilder/WebApplicationBuilder is a
behavior-affecting refactor and explicitly OUT OF SCOPE for this
no-behavior-change prerequisite PR. Suppression is added at the
project level (NoWarn=ASPDEPR008 on Service.csproj + Service.Tests.csproj)
with an inline TODO comment pointing at this branch and a follow-up
issue link placeholder.
VALIDATION
==========
dotnet --version : 10.0.301
dotnet restore --nologo : 11/11 projects restored (8.05s avg)
dotnet build -c Debug : 0 warnings, 0 errors, 10.32s
Multi-engine test categories (MsSql, PostgreSql, MySql, CosmosDb_NoSql,
DwSql) were NOT run locally; they MUST run green on the Azure DevOps
multi-engine matrix before this PR merges. That matrix is the gate.
NEXT STEPS BEFORE MERGE
=======================
1. Release-engineering: refresh
external_licenses/Microsoft.Data.SqlClient.SNI.6.0.0.License.txt
from upstream for the SNI 6.0.0 version (currently still 5.2.0 text
with a TODO marker at top).
2. Release-engineering: confirm
scripts/create-manifest-file.ps1 net10.0_{linux,win,osx}-x64 download
URLs and SHA hashes resolve once the .NET 10 publish cycle runs.
3. Multi-engine CI matrix runs green (MsSql, PostgreSql, MySql,
CosmosDb_NoSql, DwSql) — that is the merge gate.
4. File follow-up issue for ASPDEPR008 migration (WebHost ->
WebApplicationBuilder / IHost) so the NoWarn suppressions can be
removed in a future behavior-changing PR.1 parent bfc4f3d commit a0bd291
27 files changed
Lines changed: 69 additions & 48 deletions
File tree
- .pipelines
- templates
- external_licenses
- scripts
- src
- Aspire.AppHost
- Auth
- Azure.DataApiBuilder.Mcp
- Cli.Tests
- Cli
- Config
- Core
- Product
- Service.GraphQLBuilder
- Service.Tests
- Service
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
| 60 | + | |
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
53 | | - | |
| 53 | + | |
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| |||
179 | 179 | | |
180 | 180 | | |
181 | 181 | | |
182 | | - | |
| 182 | + | |
183 | 183 | | |
184 | 184 | | |
185 | 185 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | | - | |
| 55 | + | |
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
| 52 | + | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
47 | | - | |
| 47 | + | |
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
| 60 | + | |
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
| 37 | + | |
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
Lines changed: 5 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
1 | 6 | | |
2 | 7 | | |
3 | 8 | | |
| |||
0 commit comments