From 7abbd59333903d09538a2faef84ca98b5e9a476e Mon Sep 17 00:00:00 2001 From: Oliver Kieselbach Date: Wed, 29 Apr 2026 07:42:56 +0200 Subject: [PATCH] =?UTF-8?q?revert:=20roll=20back=20.NET=2010=20upgrade=20?= =?UTF-8?q?=E2=80=94=20Flex=20stamp=20missing=20runtime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverts: - 8dacce5c "chore(backend): bump optional NuGet patches + fix SYSLIB0057" - 2f68fe69 "chore(backend): upgrade Functions from .NET 8 to .NET 10 isolated" After deploy succeeded and the Flex Consumption stack was switched to .NET 10 Isolated in the portal, the dotnet-isolated worker died on every boot with: dotnet exited with code 150 (FrameworkMissingFailure) and "Exceeded language worker restart retry count for runtime:dotnet-isolated". The deployed package was correct (TFM net10.0, FrameworkReference 10.0.0, all package bumps applied) and the runtime stack property was set to dotnet-isolated 10.0, but the .NET 10 runtime is not present on the Flex Consumption stamp in West Europe even though Microsoft lists DOTNET-ISOLATED|10.0 as supported. Restart and stop+start did not help. Recovery sequence: 1. Stack switched back to .NET 8 Isolated (manual portal action). 2. Re-deployed last known-good net8.0 commit 637bd9a1 via temp branch rollback-net8 (now safe to delete). 3. /api/health back to 200. Follow-ups: - Re-apply security fixes (DataProtection 10.0.7 pin GHSA-9mv3-2cwr-p262, SYSLIB0057 X509CertificateLoader migration) on net8.0 in a separate PR. - Open Microsoft support: ".NET 10 Isolated worker on Flex Consumption WestEurope fails with FrameworkMissingFailure despite stack listed as supported." Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/deploy-backend.yml | 5 ++--- global.json | 7 ------ .../AutopilotMonitor.Functions.Tests.csproj | 2 +- .../AutopilotMonitor.Functions.csproj | 22 +++++++++---------- .../Security/CertificateValidator.cs | 2 +- 5 files changed, 14 insertions(+), 24 deletions(-) delete mode 100644 global.json diff --git a/.github/workflows/deploy-backend.yml b/.github/workflows/deploy-backend.yml index a20a0acb..8669e353 100644 --- a/.github/workflows/deploy-backend.yml +++ b/.github/workflows/deploy-backend.yml @@ -16,11 +16,10 @@ jobs: with: creds: ${{ secrets.AZURE_CREDENTIALS }} - - name: Setup .NET 10 + - name: Setup .NET 8 uses: actions/setup-dotnet@v4 with: - dotnet-version: '10.0.x' - dotnet-quality: 'ga' + dotnet-version: '8.0.x' - name: Restore dependencies run: dotnet restore src/Backend/AutopilotMonitor.Functions/AutopilotMonitor.Functions.csproj diff --git a/global.json b/global.json deleted file mode 100644 index d46d21e5..00000000 --- a/global.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "sdk": { - "version": "10.0.100", - "rollForward": "latestFeature", - "allowPrerelease": false - } -} diff --git a/src/Backend/AutopilotMonitor.Functions.Tests/AutopilotMonitor.Functions.Tests.csproj b/src/Backend/AutopilotMonitor.Functions.Tests/AutopilotMonitor.Functions.Tests.csproj index 211c0061..71d5f2a6 100644 --- a/src/Backend/AutopilotMonitor.Functions.Tests/AutopilotMonitor.Functions.Tests.csproj +++ b/src/Backend/AutopilotMonitor.Functions.Tests/AutopilotMonitor.Functions.Tests.csproj @@ -1,7 +1,7 @@ - net10.0 + net8.0 enable enable false diff --git a/src/Backend/AutopilotMonitor.Functions/AutopilotMonitor.Functions.csproj b/src/Backend/AutopilotMonitor.Functions/AutopilotMonitor.Functions.csproj index ce4bd789..3706ba9f 100644 --- a/src/Backend/AutopilotMonitor.Functions/AutopilotMonitor.Functions.csproj +++ b/src/Backend/AutopilotMonitor.Functions/AutopilotMonitor.Functions.csproj @@ -1,7 +1,7 @@  - net10.0 + net8.0 V4 Exe enable @@ -28,25 +28,23 @@ - + - + - - - - - - - - - + + + + + + + diff --git a/src/Backend/AutopilotMonitor.Functions/Security/CertificateValidator.cs b/src/Backend/AutopilotMonitor.Functions/Security/CertificateValidator.cs index e69f3ceb..ebab0cac 100644 --- a/src/Backend/AutopilotMonitor.Functions/Security/CertificateValidator.cs +++ b/src/Backend/AutopilotMonitor.Functions/Security/CertificateValidator.cs @@ -66,7 +66,7 @@ namespace AutopilotMonitor.Functions.Security // Parse certificate from Base64 var certBytes = Convert.FromBase64String(certificateBase64); - var certificate = X509CertificateLoader.LoadCertificate(certBytes); + var certificate = new X509Certificate2(certBytes); var thumbprint = certificate.Thumbprint; logger?.LogDebug($"Validating certificate: Subject={certificate.Subject}, Issuer={certificate.Issuer}, Thumbprint={thumbprint}");