Skip to content

Commit a0bd291

Browse files
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

.pipelines/cosmos-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ steps:
5757
displayName: Setup .NET SDK v8.0.x
5858
inputs:
5959
packageType: sdk
60-
version: 8.0.x
60+
version: 10.0.x
6161
installationPath: $(Agent.ToolsDirectory)/dotnet
6262

6363
- task: NuGetToolInstaller@1

.pipelines/dwsql-pipelines.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ jobs:
5050
displayName: Setup .NET SDK v8.0.x
5151
inputs:
5252
packageType: sdk
53-
version: 8.0.x
53+
version: 10.0.x
5454

5555
- task: NuGetToolInstaller@1
5656

@@ -179,7 +179,7 @@ jobs:
179179
displayName: Setup .NET SDK v8.0.x
180180
inputs:
181181
packageType: sdk
182-
version: 8.0.x
182+
version: 10.0.x
183183

184184
- task: NuGetToolInstaller@1
185185

.pipelines/mssql-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
displayName: Setup .NET SDK v8.0.x
5353
inputs:
5454
packageType: sdk
55-
version: 8.0.x
55+
version: 10.0.x
5656

5757
- task: NuGetToolInstaller@1
5858

.pipelines/mysql-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
displayName: Setup .NET SDK v8.0.x
5050
inputs:
5151
packageType: sdk
52-
version: 8.0.x
52+
version: 10.0.x
5353

5454
- task: NuGetToolInstaller@1
5555

.pipelines/pg-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
displayName: Setup .NET SDK v8.0.x
4545
inputs:
4646
packageType: sdk
47-
version: 8.0.x
47+
version: 10.0.x
4848

4949
- task: NuGetToolInstaller@1
5050

.pipelines/templates/build-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ steps:
5757
displayName: Setup .NET SDK v8.0.x
5858
inputs:
5959
packageType: sdk
60-
version: 8.0.x
60+
version: 10.0.x
6161
installationPath: $(Agent.ToolsDirectory)/dotnet
6262

6363
- task: NuGetToolInstaller@1

.pipelines/templates/mssql-test-steps.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ steps:
3434
displayName: Setup .NET SDK v8.0.x
3535
inputs:
3636
packageType: sdk
37-
version: 8.0.x
37+
version: 10.0.x
3838

3939
- task: NuGetToolInstaller@1
4040

.pipelines/templates/static-tools.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
displayName: Setup .NET SDK v8.0.x
2525
inputs:
2626
packageType: sdk
27-
version: 8.0.x
27+
version: 10.0.x
2828

2929
# Analyze source and build output text files for credentials
3030
- task: CredScan@3

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# Version values referenced from https://hub.docker.com/_/microsoft-dotnet-aspnet
22

3-
FROM mcr.microsoft.com/dotnet/sdk:8.0-cbl-mariner2.0 AS build
3+
FROM mcr.microsoft.com/dotnet/sdk:10.0-azurelinux3.0 AS build
44

55

66
WORKDIR /src
77
COPY [".", "./"]
88
RUN dotnet build "./src/Service/Azure.DataApiBuilder.Service.csproj" -c Docker -o /out -r linux-x64
99

10-
FROM mcr.microsoft.com/dotnet/aspnet:8.0-cbl-mariner2.0 AS runtime
10+
FROM mcr.microsoft.com/dotnet/aspnet:10.0-azurelinux3.0 AS runtime
1111

1212
COPY --from=build /out /App
1313
# Add default dab-config.json to /App in the image

external_licenses/Microsoft.Data.SqlClient.SNI.5.2.0.License.txt renamed to external_licenses/Microsoft.Data.SqlClient.SNI.6.0.0.License.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
[TODO prereq-PR Usr/sogh/upgrade-net10-sqlclient6: This file was renamed from
2+
Microsoft.Data.SqlClient.SNI.5.2.0.License.txt for the SqlClient 5.2.3 -> 6.0.2
3+
bump. Please refresh contents from the upstream license URL for the new SNI
4+
version 6.0.0 before merge. The body below is still the 5.2.0 text.]
5+
16
MICROSOFT SOFTWARE LICENSE TERMS
27

38
MICROSOFT.DATA.SQLCLIENT.SNI LIBRARY

0 commit comments

Comments
 (0)