From 2ca5c38d2a0b95bc5995f07ebf4113c2a80b9ba2 Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Mon, 3 Aug 2026 20:09:19 +0000 Subject: [PATCH 01/25] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260803.5 On relative base path root Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.NETCore.BrowserDebugHost.Transport From Version 8.0.30-servicing.26367.20 -> To Version 8.0.30-servicing.26403.5 --- NuGet.config | 4 ++-- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/NuGet.config b/NuGet.config index d6a9da34c1f..75655b33088 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 63d861c4525..6b9b79162ba 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -29,7 +29,7 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime dcf4a22cf8671c1abe880ebec4cfd906c99588bf - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime a83db3e0eb2defb6220e15dae2f1a0462fdbf99f @@ -54,7 +54,7 @@ a83db3e0eb2defb6220e15dae2f1a0462fdbf99f - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime a83db3e0eb2defb6220e15dae2f1a0462fdbf99f diff --git a/eng/Versions.props b/eng/Versions.props index 4097341897c..b7c9adf2386 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -24,13 +24,13 @@ 8.0.1 8.0.1 8.0.2 - 8.0.30-servicing.26367.20 + 8.0.30-servicing.26403.5 8.0.1 8.0.6 8.0.2 8.0.30 8.0.30 - 8.0.30-servicing.26367.20 + 8.0.30-servicing.26403.5 8.0.0-beta.26278.3 From 621568d59eec3c38554c121f10bf6c7f0750a33e Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Wed, 12 Aug 2026 14:00:08 +0000 Subject: [PATCH 02/25] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260810.19 On relative base path root Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Logging , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.win-x64 , System.Formats.Asn1 , System.Text.Encodings.Web , System.Text.Json From Version 9.0.19 -> To Version 9.0.20 Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.NETCore.BrowserDebugHost.Transport From Version 9.0.19-servicing.26367.24 -> To Version 9.0.20-servicing.26410.19 --- NuGet.config | 4 +-- eng/Version.Details.xml | 60 ++++++++++++++++++++--------------------- eng/Versions.props | 30 ++++++++++----------- 3 files changed, 47 insertions(+), 47 deletions(-) diff --git a/NuGet.config b/NuGet.config index 1af36e4f89c..891efba6218 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -21,7 +21,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9a098f97227..020d4d25a52 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,69 +1,69 @@ - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 8381bdb01fe4a26e1f61370e779c78bb73ecc95b + 845dbebc7cfeb77098f2aa889f18753d0d5869b8 diff --git a/eng/Versions.props b/eng/Versions.props index 5748ef45d22..44879e8b947 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -17,21 +17,21 @@ False - 9.0.19 - 9.0.19 - 9.0.19 - 9.0.19 - 9.0.19 - 9.0.19 - 9.0.19 - 9.0.19-servicing.26367.24 - 9.0.19 - 9.0.19 - 9.0.19 - 9.0.19-servicing.26367.24 - 9.0.19 - 9.0.19 - 9.0.19 + 9.0.20 + 9.0.20 + 9.0.20 + 9.0.20 + 9.0.20 + 9.0.20 + 9.0.20 + 9.0.20-servicing.26410.19 + 9.0.20 + 9.0.20 + 9.0.20 + 9.0.20-servicing.26410.19 + 9.0.20 + 9.0.20 + 9.0.20 9.0.0-beta.26406.11 From 4ded4f164fb14e96411cca69075e4529ef225358 Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Wed, 12 Aug 2026 15:49:14 +0000 Subject: [PATCH 03/25] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260810.18 On relative base path root Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.NETCore.BrowserDebugHost.Transport From Version 8.0.30-servicing.26367.20 -> To Version 8.0.31-servicing.26410.18 Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.win-x64 From Version 8.0.30 -> To Version 8.0.31 --- NuGet.config | 4 ++-- eng/Version.Details.xml | 16 ++++++++-------- eng/Versions.props | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/NuGet.config b/NuGet.config index 75655b33088..0f60cf8f1e8 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 6b9b79162ba..71f1afc5e1e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -29,9 +29,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime dcf4a22cf8671c1abe880ebec4cfd906c99588bf - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - a83db3e0eb2defb6220e15dae2f1a0462fdbf99f + 93dd9dc828f731102a5953076d30dd766aad9430 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime @@ -45,18 +45,18 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime ef853a71052646a42abf17e888ec6d9a69614ad9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - a83db3e0eb2defb6220e15dae2f1a0462fdbf99f + 93dd9dc828f731102a5953076d30dd766aad9430 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - a83db3e0eb2defb6220e15dae2f1a0462fdbf99f + 93dd9dc828f731102a5953076d30dd766aad9430 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - a83db3e0eb2defb6220e15dae2f1a0462fdbf99f + 93dd9dc828f731102a5953076d30dd766aad9430 diff --git a/eng/Versions.props b/eng/Versions.props index b7c9adf2386..acd0c23e9e0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -24,13 +24,13 @@ 8.0.1 8.0.1 8.0.2 - 8.0.30-servicing.26403.5 + 8.0.31-servicing.26410.18 8.0.1 8.0.6 8.0.2 - 8.0.30 - 8.0.30 - 8.0.30-servicing.26403.5 + 8.0.31 + 8.0.31 + 8.0.31-servicing.26410.18 8.0.0-beta.26278.3 From 5f89ffec6c9f24d36bc8ad8c738533ac9f8bba9e Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Thu, 13 Aug 2026 06:55:58 +0000 Subject: [PATCH 04/25] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260812.28 On relative base path root Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.NETCore.BrowserDebugHost.Transport From Version 8.0.30-servicing.26367.20 -> To Version 8.0.31-servicing.26412.28 Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.win-x64 From Version 8.0.30 -> To Version 8.0.31 --- NuGet.config | 4 ++-- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/NuGet.config b/NuGet.config index 0f60cf8f1e8..e3e668fea95 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 71f1afc5e1e..e7c3cf51fa1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -29,9 +29,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime dcf4a22cf8671c1abe880ebec4cfd906c99588bf - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 93dd9dc828f731102a5953076d30dd766aad9430 + 306cfa046b0c09d556429f1cedc3a5a6dc9846fe https://dev.azure.com/dnceng/internal/_git/dotnet-runtime @@ -47,16 +47,16 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 93dd9dc828f731102a5953076d30dd766aad9430 + 306cfa046b0c09d556429f1cedc3a5a6dc9846fe https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 93dd9dc828f731102a5953076d30dd766aad9430 + 306cfa046b0c09d556429f1cedc3a5a6dc9846fe - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 93dd9dc828f731102a5953076d30dd766aad9430 + 306cfa046b0c09d556429f1cedc3a5a6dc9846fe diff --git a/eng/Versions.props b/eng/Versions.props index acd0c23e9e0..bc47bfb75c4 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -24,13 +24,13 @@ 8.0.1 8.0.1 8.0.2 - 8.0.31-servicing.26410.18 + 8.0.31-servicing.26412.28 8.0.1 8.0.6 8.0.2 8.0.31 8.0.31 - 8.0.31-servicing.26410.18 + 8.0.31-servicing.26412.28 8.0.0-beta.26278.3 From bbd347276fd2d64928ac572f3da4a589aaadd469 Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Thu, 13 Aug 2026 19:31:09 +0000 Subject: [PATCH 05/25] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260813.7 On relative base path root Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.NETCore.BrowserDebugHost.Transport From Version 8.0.30-servicing.26367.20 -> To Version 8.0.31-servicing.26413.7 Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.win-x64 From Version 8.0.30 -> To Version 8.0.31 --- NuGet.config | 4 ++-- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/NuGet.config b/NuGet.config index e3e668fea95..02be9715121 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e7c3cf51fa1..bf498c9d284 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -29,9 +29,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime dcf4a22cf8671c1abe880ebec4cfd906c99588bf - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 306cfa046b0c09d556429f1cedc3a5a6dc9846fe + 2a19dd15d054021e9cb1d97fe3ceb6df910e4bcc https://dev.azure.com/dnceng/internal/_git/dotnet-runtime @@ -47,16 +47,16 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 306cfa046b0c09d556429f1cedc3a5a6dc9846fe + 2a19dd15d054021e9cb1d97fe3ceb6df910e4bcc https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 306cfa046b0c09d556429f1cedc3a5a6dc9846fe + 2a19dd15d054021e9cb1d97fe3ceb6df910e4bcc - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 306cfa046b0c09d556429f1cedc3a5a6dc9846fe + 2a19dd15d054021e9cb1d97fe3ceb6df910e4bcc diff --git a/eng/Versions.props b/eng/Versions.props index bc47bfb75c4..154a9aec3d1 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -24,13 +24,13 @@ 8.0.1 8.0.1 8.0.2 - 8.0.31-servicing.26412.28 + 8.0.31-servicing.26413.7 8.0.1 8.0.6 8.0.2 8.0.31 8.0.31 - 8.0.31-servicing.26412.28 + 8.0.31-servicing.26413.7 8.0.0-beta.26278.3 From ec5ad7d54cd23ce33bc7af6629d54a750c26d0ec Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Thu, 13 Aug 2026 22:52:14 +0000 Subject: [PATCH 06/25] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260813.15 On relative base path root Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Logging , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.win-x64 , System.Formats.Asn1 , System.Text.Encodings.Web , System.Text.Json From Version 9.0.19 -> To Version 9.0.20 Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.NETCore.BrowserDebugHost.Transport From Version 9.0.19-servicing.26367.24 -> To Version 9.0.20-servicing.26413.15 --- NuGet.config | 4 ++-- eng/Version.Details.xml | 34 +++++++++++++++++----------------- eng/Versions.props | 4 ++-- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/NuGet.config b/NuGet.config index 891efba6218..4ec8376ae7a 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -21,7 +21,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 020d4d25a52..50f7319faa3 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,47 +3,47 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 845dbebc7cfeb77098f2aa889f18753d0d5869b8 + 3879076d9a06ce098d37c3882fb1845a6627335b diff --git a/eng/Versions.props b/eng/Versions.props index 44879e8b947..0ef80f87e3f 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -24,11 +24,11 @@ 9.0.20 9.0.20 9.0.20 - 9.0.20-servicing.26410.19 + 9.0.20-servicing.26413.15 9.0.20 9.0.20 9.0.20 - 9.0.20-servicing.26410.19 + 9.0.20-servicing.26413.15 9.0.20 9.0.20 9.0.20 From 9d948c79aa06cbb2a559e3f0d69934eb2f3a29e9 Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Fri, 21 Aug 2026 21:29:55 +0000 Subject: [PATCH 07/25] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260820.15 On relative base path root Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.NETCore.BrowserDebugHost.Transport From Version 8.0.31-servicing.26413.7 -> To Version 8.0.31-servicing.26420.15 Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.win-x64 From Version 8.0.31 -> To Version 8.0.31 --- NuGet.config | 4 ++-- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/NuGet.config b/NuGet.config index 02be9715121..27efb3edde0 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index cd752b7c828..16b1273cfac 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -29,9 +29,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime dcf4a22cf8671c1abe880ebec4cfd906c99588bf - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 2a19dd15d054021e9cb1d97fe3ceb6df910e4bcc + 1219a42122cf5190c7f512850557e38c422430dc https://dev.azure.com/dnceng/internal/_git/dotnet-runtime @@ -47,16 +47,16 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 2a19dd15d054021e9cb1d97fe3ceb6df910e4bcc + 1219a42122cf5190c7f512850557e38c422430dc https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 2a19dd15d054021e9cb1d97fe3ceb6df910e4bcc + 1219a42122cf5190c7f512850557e38c422430dc - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 2a19dd15d054021e9cb1d97fe3ceb6df910e4bcc + 1219a42122cf5190c7f512850557e38c422430dc diff --git a/eng/Versions.props b/eng/Versions.props index 4bb99ed80f5..d053b6a5fbf 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -24,13 +24,13 @@ 8.0.1 8.0.1 8.0.2 - 8.0.31-servicing.26413.7 + 8.0.31-servicing.26420.15 8.0.1 8.0.6 8.0.2 8.0.31 8.0.31 - 8.0.31-servicing.26413.7 + 8.0.31-servicing.26420.15 8.0.0-beta.26371.5 From a186e599ffb64811f210d58808972c8e654b16f5 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 7 Sep 2026 06:01:04 +0000 Subject: [PATCH 08/25] Update dependencies from https://github.com/dotnet/arcade build 20260831.8 (#38931) [release/9.0] Update dependencies from dotnet/arcade --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 2 +- eng/common/Get-GitHubAppToken.ps1 | 13 +++++++------ global.json | 4 ++-- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 26dcec672ba..47db8b13f19 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -67,17 +67,17 @@ - + https://github.com/dotnet/arcade - df7cbf719bdc6a2e6dfc229542a53bf28a8d5180 + ee364d8268f86d6a2ab859f6cc82ca6f9d20b31c - + https://github.com/dotnet/arcade - df7cbf719bdc6a2e6dfc229542a53bf28a8d5180 + ee364d8268f86d6a2ab859f6cc82ca6f9d20b31c - + https://github.com/dotnet/arcade - df7cbf719bdc6a2e6dfc229542a53bf28a8d5180 + ee364d8268f86d6a2ab859f6cc82ca6f9d20b31c diff --git a/eng/Versions.props b/eng/Versions.props index 944fa4616b6..7f1718b997d 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -34,7 +34,7 @@ 9.0.19 - 9.0.0-beta.26429.3 + 9.0.0-beta.26431.8 17.8.43 diff --git a/eng/common/Get-GitHubAppToken.ps1 b/eng/common/Get-GitHubAppToken.ps1 index 9c7e3dcd6ac..ea776bd6bc2 100644 --- a/eng/common/Get-GitHubAppToken.ps1 +++ b/eng/common/Get-GitHubAppToken.ps1 @@ -110,19 +110,20 @@ $headers = @{ Write-Host "Looking up installation for '$InstallationOwner'..." try { - $installations = @() + $installations = [System.Collections.Generic.List[object]]::new() $page = 1 do { - # Assign the response before wrapping it in @(). PowerShell otherwise - # preserves a top-level JSON array as one nested pipeline object. $pageResponse = Invoke-RestMethod ` -Uri "https://api.github.com/app/installations?per_page=100&page=$page" ` -Headers $headers ` -Method Get - $pageInstallations = @($pageResponse) - $installations += $pageInstallations + $pageInstallationCount = 0 + foreach ($installation in $pageResponse) { + $installations.Add($installation) + $pageInstallationCount++ + } $page++ - } while ($pageInstallations.Count -eq 100) + } while ($pageInstallationCount -eq 100) } catch { Write-PipelineTelemetryError -Category 'Build' -Message "Failed to list GitHub App installations: $_. The signed JWT may be invalid or the App's Client ID ('$AppClientId') may be incorrect." diff --git a/global.json b/global.json index a55bef5a17d..6cb3433ae87 100644 --- a/global.json +++ b/global.json @@ -13,7 +13,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26429.3", - "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26429.3" + "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26431.8", + "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26431.8" } } From afd85d3cccf361fb7b0ba6f9f6ada51228cf906c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Sep 2026 15:19:36 -0700 Subject: [PATCH 09/25] [release/9.0]: Bump Microsoft.AspNetCore.Identity.EntityFrameworkCore from 8.0.30 to 8.0.31 (#38941) --- updated-dependencies: - dependency-name: Microsoft.AspNetCore.Identity.EntityFrameworkCore dependency-version: 8.0.31 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Directory.Packages.props b/test/Directory.Packages.props index 1a71f396996..6c0147cda28 100644 --- a/test/Directory.Packages.props +++ b/test/Directory.Packages.props @@ -8,7 +8,7 @@ - + From 74b797f1e7ab3a7510f6072e2a9823d77ead167d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Sep 2026 15:21:16 -0700 Subject: [PATCH 10/25] [release/9.0]: Bump Microsoft.Azure.Cosmos from 3.62.1 to 3.63.0 (#38942) --- updated-dependencies: - dependency-name: Microsoft.Azure.Cosmos dependency-version: 3.63.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 43a3c88491a..0672c916264 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -36,7 +36,7 @@ - + From 2b65a8666579406e188a7dfd87fadc9ca00002d3 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 10 Sep 2026 15:36:58 -0700 Subject: [PATCH 11/25] Update dependencies from build 330600 (#38922) Updated Dependencies: Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk (Version 10.0.0-beta.26453.111 -> 10.0.0-beta.26454.107) Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.Logging, Microsoft.NETCore.App.Ref, System.Formats.Asn1, System.Runtime.Caching, System.Text.Encodings.Web, System.Text.Json (Version 10.0.13 -> 10.0.13) Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.NETCore.Platforms (Version 10.0.13-servicing.26453.111 -> 10.0.13-servicing.26454.107) [[ commit created by automation ]] Co-authored-by: dotnet-maestro[bot] --- NuGet.config | 2 +- eng/Version.Details.props | 10 ++++---- eng/Version.Details.xml | 48 +++++++++++++++++++-------------------- global.json | 4 ++-- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/NuGet.config b/NuGet.config index 86a2d527ed9..7c4655564e5 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 2a7c51e525c..aecca1c4fbc 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -6,9 +6,9 @@ This file should be imported by eng/Versions.props - 10.0.0-beta.26453.111 - 10.0.0-beta.26453.111 - 10.0.0-beta.26453.111 + 10.0.0-beta.26454.107 + 10.0.0-beta.26454.107 + 10.0.0-beta.26454.107 10.0.13 10.0.13 10.0.13 @@ -16,10 +16,10 @@ This file should be imported by eng/Versions.props 10.0.13 10.0.13 10.0.13 - 10.0.13-servicing.26453.111 + 10.0.13-servicing.26454.107 10.0.13 10.0.13 - 10.0.13-servicing.26453.111 + 10.0.13-servicing.26454.107 10.0.13 10.0.13 10.0.13 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 341a1dfe813..b31ef8edc39 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,80 +1,80 @@ - + https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 - + https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 - + https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 - + https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 - + https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 - + https://github.com/dotnet/dotnet - bc3b16728272396358befa4b7343a02e9091a48e + 11741c82dbdf7acebca70db556911222226bee52 diff --git a/global.json b/global.json index 9a16bec865c..85c5c8d235d 100644 --- a/global.json +++ b/global.json @@ -18,7 +18,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26453.111", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26453.111" + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26454.107", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26454.107" } } From f0515a932d96e948ad7c5b19e4c5aa983a9758ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Sep 2026 15:42:11 -0700 Subject: [PATCH 12/25] [release/10.0]: Bump Microsoft.Azure.Cosmos from 3.62.1 to 3.63.0 (#38954) --- updated-dependencies: - dependency-name: Microsoft.Azure.Cosmos dependency-version: 3.63.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index d388db70c37..04763be2621 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -38,7 +38,7 @@ - + From db72249a9a0292800cbf37018635448bbc1aa74b Mon Sep 17 00:00:00 2001 From: Andriy Svyryd Date: Fri, 11 Sep 2026 14:25:48 -0700 Subject: [PATCH 13/25] Discard changes to Directory.Packages.props --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 4490d9d780c..0b24bb050e4 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -30,7 +30,7 @@ - + From 82ce89b5e4261bfaca8e6a090470e60ab297581e Mon Sep 17 00:00:00 2001 From: Andriy Svyryd Date: Fri, 11 Sep 2026 14:25:55 -0700 Subject: [PATCH 14/25] Discard changes to NuGet.config --- NuGet.config | 2 -- 1 file changed, 2 deletions(-) diff --git a/NuGet.config b/NuGet.config index a5981a8a2d0..e0bd62b8fbc 100644 --- a/NuGet.config +++ b/NuGet.config @@ -6,7 +6,6 @@ - @@ -25,7 +24,6 @@ - From 8b99600bab9222d875e1af225c60ffa295856715 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Mon, 14 Sep 2026 13:41:10 -0700 Subject: [PATCH 15/25] [release/11.0] Fix UPDATE ordering regression for unique-index reassignment (#38924) Fixes #38917 Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> --- .../Update/Internal/CommandBatchPreparer.cs | 15 ++-- .../Update/NonSharedModelUpdatesTestBase.cs | 71 +++++++++++++++++++ .../Update/CommandBatchPreparerTest.cs | 47 ++++++++++++ 3 files changed, 124 insertions(+), 9 deletions(-) diff --git a/src/EFCore.Relational/Update/Internal/CommandBatchPreparer.cs b/src/EFCore.Relational/Update/Internal/CommandBatchPreparer.cs index 08f184837c9..c1f9efba043 100644 --- a/src/EFCore.Relational/Update/Internal/CommandBatchPreparer.cs +++ b/src/EFCore.Relational/Update/Internal/CommandBatchPreparer.cs @@ -1264,15 +1264,12 @@ private void AddUniqueValueEdges() var rowIndexValueFactory = ((TableIndex)index).GetRowIndexValueFactory(); var (value, hasNullValue) = rowIndexValueFactory.CreateEquatableIndexValue(command); - if (command.EntityState == EntityState.Modified) - { - var (originalValue, _) = rowIndexValueFactory.CreateEquatableIndexValue(command, fromOriginalValues: true); - if (Equals(originalValue, value)) - { - continue; - } - } - + // Note: unlike the predecessor (first) pass above, we don't skip creating an edge here when the + // command's own index value appears unchanged. A predecessor is only ever registered in + // indexPredecessorsMap for a value it is actually releasing (see the check above), so if this + // command's value matches one, it genuinely needs to wait for that release, regardless of whether + // its own current/original value comparison (which can be unreliable, e.g. for attached entities + // whose original value was snapshotted after being modified) suggests no change occurred. if (value != null) { AddMatchingPredecessorEdge( diff --git a/test/EFCore.Relational.Specification.Tests/Update/NonSharedModelUpdatesTestBase.cs b/test/EFCore.Relational.Specification.Tests/Update/NonSharedModelUpdatesTestBase.cs index 053f9e2c8c4..66cc126de82 100644 --- a/test/EFCore.Relational.Specification.Tests/Update/NonSharedModelUpdatesTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Update/NonSharedModelUpdatesTestBase.cs @@ -119,6 +119,77 @@ public class Blog public string? Name { get; set; } } + [Theory, MemberData(nameof(IsAsyncData))] // Issue #38917 + public virtual async Task Reassigning_dependent_with_unique_FK_to_attached_entity_orders_updates_correctly(bool async) + { + var contextFactory = await InitializeNonSharedTest( + onModelCreating: mb => mb.Entity() + .HasOne(g => g.Color) + .WithOne(c => c.Group) + .HasForeignKey("GroupId"), + seed: async context => + { + var group0 = new WorkItemGroup38917 { Name = "G0" }; + var group1 = new WorkItemGroup38917 { Name = "G1" }; + var color0 = new RgbColor38917 { Id = "0x9a79e4", DisplayName = "red" }; + var color1 = new RgbColor38917 { Id = "0xb4e6b9", DisplayName = "turquoise" }; + + group0.Color = color0; + group1.Color = color1; + context.AddRange(group0, group1); + + await context.SaveChangesAsync(); + }); + + await ExecuteWithStrategyInTransactionAsync( + contextFactory, + async context => + { + var g1 = await context.Set() + .Include(g => g.Color) + .SingleAsync(g => g.Name == "G1"); + + var c0 = new RgbColor38917 { Id = "0x9a79e4" }; + context.Attach(c0); + g1.Color = c0; + + if (async) + { + await context.SaveChangesAsync(); + } + else + { + context.SaveChanges(); + } + }, + async context => + { + var g1 = await context.Set() + .Include(g => g.Color) + .SingleAsync(g => g.Name == "G1"); + Assert.Equal("0x9a79e4", g1.Color!.Id); + + var g0 = await context.Set() + .Include(g => g.Color) + .SingleAsync(g => g.Name == "G0"); + Assert.Null(g0.Color); + }); + } + + public class WorkItemGroup38917 + { + public Guid Id { get; set; } = Guid.NewGuid(); + public string Name { get; set; } = ""; + public RgbColor38917? Color { get; set; } + } + + public class RgbColor38917 + { + public string Id { get; set; } = ""; + public string? DisplayName { get; set; } + public WorkItemGroup38917? Group { get; set; } + } + [Theory, MemberData(nameof(IsAsyncData))] public virtual async Task Update_entity_with_not_loaded_property_excludes_column_from_SQL(bool async) { diff --git a/test/EFCore.Relational.Tests/Update/CommandBatchPreparerTest.cs b/test/EFCore.Relational.Tests/Update/CommandBatchPreparerTest.cs index 401cbfd3746..d940261184c 100644 --- a/test/EFCore.Relational.Tests/Update/CommandBatchPreparerTest.cs +++ b/test/EFCore.Relational.Tests/Update/CommandBatchPreparerTest.cs @@ -599,6 +599,40 @@ public void BatchCommands_skips_unique_index_edges_for_unchanged_store_generated Assert.Equal(2, batch.ModificationCommands.Count); } + [Fact] // Issue #38917 + public void BatchCommands_orders_unique_index_release_before_reacquisition_with_unreliable_original_value() + { + var model = CreateModelWithUniqueIndexOnly(); + var configuration = CreateContextServices(model); + var stateManager = configuration.GetRequiredService(); + + // Releases "Test" by changing UniqueValue away from it. Uses a higher Id than the acquiring entry below so + // that the default (primary-key-based) command ordering alone would produce the wrong (unsafe) order, + // and only the dependency edge asserted by this test can produce the correct order. + var releasingEntry = stateManager.GetOrCreateEntry( + new FakeEntity { Id = 2, UniqueValue = "Other" }); + releasingEntry.SetEntityState(EntityState.Modified); + releasingEntry.SetOriginalValue(releasingEntry.EntityType.FindProperty(nameof(FakeEntity.UniqueValue))!, "Test"); + + // Simulates an attached entity whose original value snapshot ends up matching its (newly assigned) current + // value; it still needs to wait for another command to release "Test" before it can claim it. + var acquiringEntry = stateManager.GetOrCreateEntry( + new FakeEntity { Id = 1, UniqueValue = "Test" }); + acquiringEntry.SetEntityState(EntityState.Modified); + acquiringEntry.SetOriginalValue(acquiringEntry.EntityType.FindProperty(nameof(FakeEntity.UniqueValue))!, "Test"); + + var modelData = new UpdateAdapter(stateManager); + + var batches = CreateBatches([acquiringEntry, releasingEntry], modelData); + var batch = Assert.Single(batches); + + // The command releasing "Test" must be ordered before the command acquiring it, otherwise we'd get a + // unique constraint violation. + Assert.Equal( + [releasingEntry, acquiringEntry], + batch.ModificationCommands.Select(c => c.Entries.Single())); + } + [Fact] public void BatchCommands_creates_valid_batch_for_shared_table_added_entities() { @@ -1063,6 +1097,19 @@ private static IModel CreateSimpleFKModel() return modelBuilder.Model.FinalizeModel(); } + private static IModel CreateModelWithUniqueIndexOnly() + { + var modelBuilder = FakeRelationalTestHelpers.Instance.CreateConventionBuilder(); + + modelBuilder.Entity(b => + { + b.Ignore(c => c.RelatedId); + b.HasIndex(c => c.UniqueValue).IsUnique(); + }); + + return modelBuilder.Model.FinalizeModel(); + } + private static IModel CreateFKOneToManyModelWithGeneratedIds() { var modelBuilder = FakeRelationalTestHelpers.Instance.CreateConventionBuilder(); From e989d0ee1b9efda1a4357b5d5484f78d0b71fff4 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Mon, 14 Sep 2026 13:41:43 -0700 Subject: [PATCH 16/25] [release/11.0] Lift mixed outer-reference aggregate arguments (#38925) Fixes #38834 Co-authored-by: Ben O'Donovan Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> --- ...qlServerAggregateArgumentPostprocessor.cs} | 61 +++++++++++++++---- .../SqlServerQueryTranslationPostprocessor.cs | 2 +- ...gregateOperatorsQueryRelationalTestBase.cs | 31 ++++++++++ ...indAggregateOperatorsQuerySqlServerTest.cs | 56 +++++++++++++++++ 4 files changed, 137 insertions(+), 13 deletions(-) rename src/EFCore.SqlServer/Query/Internal/{SqlServerAggregateOverSubqueryPostprocessor.cs => SqlServerAggregateArgumentPostprocessor.cs} (75%) diff --git a/src/EFCore.SqlServer/Query/Internal/SqlServerAggregateOverSubqueryPostprocessor.cs b/src/EFCore.SqlServer/Query/Internal/SqlServerAggregateArgumentPostprocessor.cs similarity index 75% rename from src/EFCore.SqlServer/Query/Internal/SqlServerAggregateOverSubqueryPostprocessor.cs rename to src/EFCore.SqlServer/Query/Internal/SqlServerAggregateArgumentPostprocessor.cs index 2731af894b3..182c8dcdd6a 100644 --- a/src/EFCore.SqlServer/Query/Internal/SqlServerAggregateOverSubqueryPostprocessor.cs +++ b/src/EFCore.SqlServer/Query/Internal/SqlServerAggregateArgumentPostprocessor.cs @@ -7,8 +7,9 @@ namespace Microsoft.EntityFrameworkCore.SqlServer.Query.Internal; /// -/// SQL Server doesn't support aggregate function invocations over subqueries, or other aggregate function invocations; this -/// postprocessor lifts such subqueries out to an OUTER APPLY/JOIN on the SELECT to work around this limitation. +/// SQL Server doesn't support aggregate function invocations over subqueries, or other aggregate function invocations; nor does it +/// support aggregating an expression which references a column from an outer query alongside any other column. This postprocessor +/// lifts such aggregate arguments out to an OUTER APPLY/JOIN on the SELECT to work around these limitations. /// /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -16,14 +17,17 @@ namespace Microsoft.EntityFrameworkCore.SqlServer.Query.Internal; /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// -public class SqlServerAggregateOverSubqueryPostprocessor(SqlAliasManager sqlAliasManager) : ExpressionVisitor +public class SqlServerAggregateArgumentPostprocessor(SqlAliasManager sqlAliasManager) : ExpressionVisitor { private SelectExpression? _currentSelect; private bool _inAggregateInvocation; private bool _aggregateArgumentContainsSubquery; + private bool _aggregateArgumentContainsOuterReference; + private bool _aggregateArgumentContainsLocalReference; private List? _joinsToAdd; private bool _isCorrelatedSubquery; private HashSet? _tableAliasesInScope; + private HashSet? _aggregatingSelectTableAliases; /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -81,18 +85,42 @@ when function.Name.ToLower(CultureInfo.InvariantCulture) is "sum" or "avg" or "m var parentInAggregateInvocation = _inAggregateInvocation; var parentIsCorrelatedSubquery = _isCorrelatedSubquery; var parentTableAliasesInScope = _tableAliasesInScope; + var parentAggregatingSelectTableAliases = _aggregatingSelectTableAliases; var parentAggregateArgumentContainsSubquery = _aggregateArgumentContainsSubquery; + var parentAggregateArgumentContainsOuterReference = _aggregateArgumentContainsOuterReference; + var parentAggregateArgumentContainsLocalReference = _aggregateArgumentContainsLocalReference; _inAggregateInvocation = true; _isCorrelatedSubquery = false; _tableAliasesInScope = []; + // The tables of the SELECT in which the aggregate is evaluated; columns over any other table are outer references. + _aggregatingSelectTableAliases = _currentSelect is null + ? [] + : new HashSet(_currentSelect.Tables.Select(t => t.UnwrapJoin().Alias).Where(a => a is not null)!); _aggregateArgumentContainsSubquery = false; + _aggregateArgumentContainsOuterReference = false; + _aggregateArgumentContainsLocalReference = false; var result = base.VisitExtension(function); - if (_aggregateArgumentContainsSubquery) + // An outer reference on its own is fine - SQL Server evaluates such an aggregate in the outer query, which is how + // aggregates over an outer grouping get translated. It's only when the outer reference is combined with another column + // that SQL Server rejects the expression, and lifting is both needed and unambiguous. + var liftArgument = _aggregateArgumentContainsSubquery + || (_aggregateArgumentContainsOuterReference && _aggregateArgumentContainsLocalReference); + var isCorrelatedSubquery = _isCorrelatedSubquery; + + _inAggregateInvocation = parentInAggregateInvocation; + _isCorrelatedSubquery = parentIsCorrelatedSubquery; + _tableAliasesInScope = parentTableAliasesInScope; + _aggregatingSelectTableAliases = parentAggregatingSelectTableAliases; + _aggregateArgumentContainsSubquery = parentAggregateArgumentContainsSubquery; + _aggregateArgumentContainsOuterReference = parentAggregateArgumentContainsOuterReference; + _aggregateArgumentContainsLocalReference = parentAggregateArgumentContainsLocalReference; + + if (liftArgument) { - // During our visitation of the aggregate function invocation, a subquery was encountered - this is our trigger to - // extract out the argument to be an OUTER APPLY/CROSS JOIN. + // During our visitation of the aggregate function invocation, a subquery or an outer reference was encountered - this + // is our trigger to extract out the argument to be an OUTER APPLY/CROSS JOIN. if (result is not SqlFunctionExpression { Instance: null, Arguments: [var argument] } visitedFunction) { throw new UnreachableException(); @@ -154,7 +182,7 @@ when function.Name.ToLower(CultureInfo.InvariantCulture) is "sum" or "avg" or "m _joinsToAdd ??= []; _joinsToAdd.Add( - _isCorrelatedSubquery ? new OuterApplyExpression(liftedSubquery) : new CrossJoinExpression(liftedSubquery)); + isCorrelatedSubquery ? new OuterApplyExpression(liftedSubquery) : new CrossJoinExpression(liftedSubquery)); var projection = liftedSubquery.Projection.Single(); @@ -168,11 +196,6 @@ when function.Name.ToLower(CultureInfo.InvariantCulture) is "sum" or "avg" or "m ]); } - _inAggregateInvocation = parentInAggregateInvocation; - _isCorrelatedSubquery = parentIsCorrelatedSubquery; - _tableAliasesInScope = parentTableAliasesInScope; - _aggregateArgumentContainsSubquery = parentAggregateArgumentContainsSubquery; - return result; } @@ -188,6 +211,20 @@ when function.Name.ToLower(CultureInfo.InvariantCulture) is "sum" or "avg" or "m // we're in a correlated subquery. case ColumnExpression column when _tableAliasesInScope?.Contains(column.TableAlias) == false: _isCorrelatedSubquery = true; + + // The column may still belong to the SELECT in which the aggregate is being evaluated (that SELECT's tables aren't in + // _tableAliasesInScope, since the lifted subquery must reference them via APPLY rather than via CROSS JOIN). If it doesn't, + // it's an outer reference, which SQL Server only tolerates inside an aggregate if it's the only column referenced there. + switch (_aggregatingSelectTableAliases?.Contains(column.TableAlias)) + { + case true: + _aggregateArgumentContainsLocalReference = true; + break; + case false: + _aggregateArgumentContainsOuterReference = true; + break; + } + return base.VisitExtension(column); case ShapedQueryExpression shapedQueryExpression: diff --git a/src/EFCore.SqlServer/Query/Internal/SqlServerQueryTranslationPostprocessor.cs b/src/EFCore.SqlServer/Query/Internal/SqlServerQueryTranslationPostprocessor.cs index 1c058b1ccae..b3114bdf07a 100644 --- a/src/EFCore.SqlServer/Query/Internal/SqlServerQueryTranslationPostprocessor.cs +++ b/src/EFCore.SqlServer/Query/Internal/SqlServerQueryTranslationPostprocessor.cs @@ -20,7 +20,7 @@ public class SqlServerQueryTranslationPostprocessor( relationalDependencies.SqlExpressionFactory, queryCompilationContext.SqlAliasManager); - private readonly SqlServerAggregateOverSubqueryPostprocessor _aggregatePostprocessor = new(queryCompilationContext.SqlAliasManager); + private readonly SqlServerAggregateArgumentPostprocessor _aggregatePostprocessor = new(queryCompilationContext.SqlAliasManager); private readonly SqlServerSqlTreePruner _pruner = new(); /// diff --git a/test/EFCore.Relational.Specification.Tests/Query/NorthwindAggregateOperatorsQueryRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/NorthwindAggregateOperatorsQueryRelationalTestBase.cs index 58ef7246852..5ef39758690 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/NorthwindAggregateOperatorsQueryRelationalTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/NorthwindAggregateOperatorsQueryRelationalTestBase.cs @@ -48,4 +48,35 @@ public override async Task Average_no_data_subquery(bool async) => Assert.Equal( "Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.", (await Assert.ThrowsAsync(() => base.Average_no_data_subquery(async))).Message); + + [Theory, MemberData(nameof(IsAsyncData))] + public virtual Task Sum_over_expression_with_outer_reference(bool async) + => AssertQuery( + async, + ss => ss.Set() + .Select(o => new { o.OrderID, Total = o.OrderDetails.Sum(od => od.ProductID * o.OrderID) }), + elementSorter: e => e.OrderID); + + [Theory, MemberData(nameof(IsAsyncData))] + public virtual Task Sum_over_members_of_single_result_subquery_with_outer_reference(bool async) + => AssertQuery( + async, + ss => from c in ss.Set() + let projected = from o in c.Orders + let d = o.OrderDetails + .OrderBy(od => od.ProductID) + .Select(od => new { od.ProductID, od.OrderID }) + .FirstOrDefault() + select new + { + Products = d!.ProductID * c.CustomerID.Length, + Orders = d.OrderID * c.CustomerID.Length + } + select new + { + c.CustomerID, + TotalProducts = projected.Sum(x => x.Products), + TotalOrders = projected.Sum(x => x.Orders) + }, + elementSorter: e => e.CustomerID); } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindAggregateOperatorsQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindAggregateOperatorsQuerySqlServerTest.cs index c6ca23702ad..ccf12b36475 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindAggregateOperatorsQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindAggregateOperatorsQuerySqlServerTest.cs @@ -3482,6 +3482,62 @@ FROM [Order Details] AS [o] """); } + public override async Task Sum_over_expression_with_outer_reference(bool async) + { + await base.Sum_over_expression_with_outer_reference(async); + + AssertSql( + """ +SELECT [o].[OrderID], ( + SELECT ISNULL(SUM([s].[value]), 0) + FROM [Order Details] AS [o0] + OUTER APPLY ( + SELECT [o0].[ProductID] * [o].[OrderID] AS [value] + ) AS [s] + WHERE [o].[OrderID] = [o0].[OrderID]) AS [Total] +FROM [Orders] AS [o] +"""); + } + + public override async Task Sum_over_members_of_single_result_subquery_with_outer_reference(bool async) + { + await base.Sum_over_members_of_single_result_subquery_with_outer_reference(async); + + AssertSql( + """ +SELECT [c].[CustomerID], ( + SELECT ISNULL(SUM([s].[value]), 0) + FROM [Orders] AS [o] + LEFT JOIN ( + SELECT [o1].[ProductID], [o1].[OrderID0] + FROM ( + SELECT [o0].[ProductID], [o0].[OrderID] AS [OrderID0], ROW_NUMBER() OVER(PARTITION BY [o0].[OrderID] ORDER BY [o0].[ProductID]) AS [row] + FROM [Order Details] AS [o0] + ) AS [o1] + WHERE [o1].[row] <= 1 + ) AS [o2] ON [o].[OrderID] = [o2].[OrderID0] + OUTER APPLY ( + SELECT [o2].[ProductID] * CAST(LEN([c].[CustomerID]) AS int) AS [value] + ) AS [s] + WHERE [c].[CustomerID] = [o].[CustomerID]) AS [TotalProducts], ( + SELECT ISNULL(SUM([s0].[value]), 0) + FROM [Orders] AS [o3] + LEFT JOIN ( + SELECT [o5].[OrderID], [o5].[OrderID0] + FROM ( + SELECT [o4].[OrderID], [o4].[OrderID] AS [OrderID0], ROW_NUMBER() OVER(PARTITION BY [o4].[OrderID] ORDER BY [o4].[ProductID]) AS [row] + FROM [Order Details] AS [o4] + ) AS [o5] + WHERE [o5].[row] <= 1 + ) AS [o6] ON [o3].[OrderID] = [o6].[OrderID0] + OUTER APPLY ( + SELECT [o6].[OrderID] * CAST(LEN([c].[CustomerID]) AS int) AS [value] + ) AS [s0] + WHERE [c].[CustomerID] = [o3].[CustomerID]) AS [TotalOrders] +FROM [Customers] AS [c] +"""); + } + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); From 83e6ef7429b985751287526cb08a21f814086428 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Mon, 14 Sep 2026 13:42:23 -0700 Subject: [PATCH 17/25] [release/11.0] Fix projecting JSON complex collection together with collection navigation (#38948) Fixes #38928 Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> --- ...ionalProjectionBindingExpressionVisitor.cs | 9 +-- .../ComplexTypeQueryRelationalTestBase.cs | 69 +++++++++++++++++++ .../Query/ComplexTypeQuerySqlServerTest.cs | 27 ++++++++ .../Query/ComplexTypeQuerySqliteTest.cs | 29 ++++++++ 4 files changed, 130 insertions(+), 4 deletions(-) diff --git a/src/EFCore.Relational/Query/Internal/RelationalProjectionBindingExpressionVisitor.cs b/src/EFCore.Relational/Query/Internal/RelationalProjectionBindingExpressionVisitor.cs index 0e682b9f751..0d2aa226cd4 100644 --- a/src/EFCore.Relational/Query/Internal/RelationalProjectionBindingExpressionVisitor.cs +++ b/src/EFCore.Relational/Query/Internal/RelationalProjectionBindingExpressionVisitor.cs @@ -557,11 +557,12 @@ protected override Expression VisitExtension(Expression extensionExpression) if (_indexBasedBinding) { _clientProjections!.Add(jsonQuery); + + return collectionResult.Update( + new ProjectionBindingExpression(_selectExpression, _clientProjections.Count - 1, collectionResult.Type)); } - else - { - _projectionMapping[_projectionMembers.Peek()] = jsonQuery; - } + + _projectionMapping[_projectionMembers.Peek()] = jsonQuery; return collectionResult.Update( new ProjectionBindingExpression(_selectExpression, _projectionMembers.Peek(), collectionResult.Type)); diff --git a/test/EFCore.Relational.Specification.Tests/Query/ComplexTypeQueryRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/ComplexTypeQueryRelationalTestBase.cs index 58f9817f327..9be297798da 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/ComplexTypeQueryRelationalTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/ComplexTypeQueryRelationalTestBase.cs @@ -296,6 +296,75 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) #endregion 38077 + #region 38928 + + [Fact] + public virtual async Task Project_json_complex_collection_together_with_collection_navigation() + { + var contextFactory = await InitializeNonSharedTest( + seed: async context => + { + context.Set().Add( + new Context38928.Parent + { + Items = [new Context38928.ChildItem { Value = "/x" }], + Links = [new Context38928.Link()] + }); + + await context.SaveChangesAsync(); + }); + + await using var context = contextFactory.CreateDbContext(); + + var result = await context.Set() + .AsSplitQuery() + .Select(p => new + { + p.Id, + p.Items, + Links = p.Links.Select(l => new { l.Id }).ToList() + }) + .SingleAsync(); + + Assert.NotEqual(0, result.Id); + Assert.NotNull(result.Items); + var item = Assert.Single(result.Items); + Assert.Equal("/x", item.Value); + Assert.Single(result.Links); + } + + private class Context38928(DbContextOptions options) : DbContext(options) + { + public class Parent + { + public int Id { get; set; } + public List? Items { get; set; } + public List Links { get; set; } = []; + } + + public class ChildItem + { + public required string Value { get; init; } + } + + public class Link + { + public int Id { get; set; } + public List Parents { get; set; } = []; + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(b => + { + b.ComplexCollection(p => p.Items).ToJson(); + b.HasMany(p => p.Links).WithMany(l => l.Parents).UsingEntity("ParentLinks"); + }); + } + } + + #endregion 38928 + protected TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/ComplexTypeQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/ComplexTypeQuerySqlServerTest.cs index d3735ebd0ae..e4d5d7426e6 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/ComplexTypeQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/ComplexTypeQuerySqlServerTest.cs @@ -1624,6 +1624,33 @@ FROM [Child] AS [c] """); } + public override async Task Project_json_complex_collection_together_with_collection_navigation() + { + await base.Project_json_complex_collection_together_with_collection_navigation(); + + AssertSql( + """ +SELECT TOP(2) [p].[Id], [p].[Items] +FROM [Parent] AS [p] +ORDER BY [p].[Id] +""", + // + """ +SELECT [s].[Id], [p3].[Id] +FROM ( + SELECT TOP(1) [p].[Id] + FROM [Parent] AS [p] + ORDER BY [p].[Id] +) AS [p3] +INNER JOIN ( + SELECT [l1].[Id], [p2].[ParentsId] + FROM [ParentLinks] AS [p2] + INNER JOIN [Link] AS [l1] ON [p2].[LinksId] = [l1].[Id] +) AS [s] ON [p3].[Id] = [s].[ParentsId] +ORDER BY [p3].[Id] +"""); + } + #endregion Non-shared test resources [Fact] diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/ComplexTypeQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/ComplexTypeQuerySqliteTest.cs index 110a247bd80..da51e403d2d 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/ComplexTypeQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/ComplexTypeQuerySqliteTest.cs @@ -1454,6 +1454,35 @@ public override async Task Complex_property_on_split_entity() """); } + public override async Task Project_json_complex_collection_together_with_collection_navigation() + { + await base.Project_json_complex_collection_together_with_collection_navigation(); + + AssertSql( + """ +SELECT "p"."Id", "p"."Items" +FROM "Parent" AS "p" +ORDER BY "p"."Id" +LIMIT 2 +""", + // + """ +SELECT "s"."Id", "p3"."Id" +FROM ( + SELECT "p"."Id" + FROM "Parent" AS "p" + ORDER BY "p"."Id" + LIMIT 1 +) AS "p3" +INNER JOIN ( + SELECT "l1"."Id", "p2"."ParentsId" + FROM "ParentLinks" AS "p2" + INNER JOIN "Link" AS "l1" ON "p2"."LinksId" = "l1"."Id" +) AS "s" ON "p3"."Id" = "s"."ParentsId" +ORDER BY "p3"."Id" +"""); + } + #endregion Non-shared test resources [Fact] From 2b9be5e0914a7d84785bdd1b5c587843aff0a6e9 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:35:56 -0700 Subject: [PATCH 18/25] Update dependencies from build 331727 (#38975) Updated Dependencies: Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk (Version 11.0.0-beta.26458.109 -> 11.0.0-beta.26461.110) Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Logging, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Formats.Asn1, System.Runtime.Caching, System.Text.Encodings.Web, System.Text.Json (Version 11.0.0-rc.2.26458.109 -> 11.0.0-rc.2.26461.110) [[ commit created by automation ]] Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.props | 34 ++++----- eng/Version.Details.xml | 70 +++++++++---------- eng/common/core-templates/job/onelocbuild.yml | 48 +++++-------- global.json | 8 +-- 4 files changed, 73 insertions(+), 87 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 12ef482c374..bd686e13c85 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -6,23 +6,23 @@ This file should be imported by eng/Versions.props - 11.0.0-beta.26458.109 - 11.0.0-beta.26458.109 - 11.0.0-beta.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 - 11.0.0-rc.2.26458.109 + 11.0.0-beta.26461.110 + 11.0.0-beta.26461.110 + 11.0.0-beta.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 + 11.0.0-rc.2.26461.110 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 54cf4c7a72b..3857ab6fc58 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,76 +1,76 @@ - + - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 - + https://github.com/dotnet/dotnet - c65c25f0c9889e06a5d70e275c741d8430fa353a + e775569ca8ce94c363d910311f5f889e648ddc23 diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index ce077368e40..25af2787900 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -5,20 +5,10 @@ parameters: # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool pool: '' - CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex - GithubPat: $(BotAccount-dotnet-bot-repo-PAT) - - # Service connection for WIF-based Entra authentication to ceapex feeds (replaces CeapexPat). - # When set, dnceng/internal builds acquire a federated Entra token instead of using a PAT. - # All other projects (e.g. DevDiv, public), where this dnceng-scoped service connection does not - # exist, and any pipeline that sets this to '' fall back to PAT-based auth via the CeapexPat parameter. + # Project-scoped WIF service connection for Ceapex feed authentication. CeapexServiceConnection: 'dnceng-onelocbuild-ceapex' # GitHub App authentication for the OneLoc check-in PR. - # dnceng/internal and DevDiv/DevDiv are enabled by default with their project-scoped service - # connections. Other projects must explicitly opt in after provisioning equivalent infrastructure. - UseGitHubAppAuthentication: true - UseGitHubAppAuthenticationInOtherProjects: false GitHubAppServiceConnection: 'dnceng-oneloc-githubapp' GitHubAppClientId: 'Iv23lijBU8x3gc9lDOc9' GitHubAppKeyVaultName: 'EngKeyVault' @@ -50,7 +40,6 @@ jobs: displayName: OneLocBuild${{ parameters.JobNameSuffix }} variables: - - group: OneLocBuildVariables # Contains the CeapexPat and GithubPat - name: _GenerateLocProjectArguments value: -SourcesDirectory ${{ parameters.SourcesDirectory }} -LanguageSet "${{ parameters.LanguageSet }}" @@ -81,6 +70,12 @@ jobs: steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: - 'Illegal entry point, is1ESPipeline is not defined. Repository yaml should not directly reference templates in core-templates folder.': error + - ${{ if notin(variables['System.TeamProject'], 'internal', 'DevDiv') }}: + - 'OneLocBuild is supported only in dnceng/internal and DevDiv/DevDiv.': error + - ${{ if eq(parameters.CeapexServiceConnection, '') }}: + - 'CeapexServiceConnection must identify a WIF service connection.': error + - ${{ if and(eq(parameters.RepoType, 'gitHub'), eq(parameters.GitHubAppServiceConnection, '')) }}: + - 'GitHubAppServiceConnection must identify a WIF service connection for GitHub repositories.': error - ${{ if ne(parameters.SkipLocProjectJsonGeneration, 'true') }}: - task: Powershell@2 @@ -90,18 +85,15 @@ jobs: displayName: Generate LocProject.json condition: ${{ parameters.condition }} - # Acquire an Entra token for ceapex feed access via WIF (dnceng/internal only). - # All other projects use PAT-based auth, since the ceapex service connection is scoped to dnceng/internal. - - ${{ if and(ne(parameters.CeapexServiceConnection, ''), eq(variables['System.TeamProject'], 'internal')) }}: - - template: /eng/common/templates/steps/get-federated-access-token.yml - parameters: - federatedServiceConnection: ${{ parameters.CeapexServiceConnection }} - outputVariableName: 'CeapexEntraToken' - condition: ${{ parameters.condition }} + # Acquire a short-lived Entra token for Ceapex feed access. + - template: /eng/common/templates/steps/get-federated-access-token.yml + parameters: + federatedServiceConnection: ${{ parameters.CeapexServiceConnection }} + outputVariableName: 'CeapexEntraToken' + condition: ${{ parameters.condition }} - # Mint a short-lived GitHub App installation token for the loc check-in PR. Use the connection - # provisioned in each supported project; other projects must explicitly opt in and override it. - - ${{ if and(eq(parameters.RepoType, 'gitHub'), eq(parameters.UseGitHubAppAuthentication, true), or(eq(variables['System.TeamProject'], 'internal'), eq(variables['System.TeamProject'], 'DevDiv'), eq(parameters.UseGitHubAppAuthenticationInOtherProjects, true))) }}: + # Mint a short-lived GitHub App installation token for the loc check-in PR. + - ${{ if eq(parameters.RepoType, 'gitHub') }}: - template: /eng/common/core-templates/steps/get-github-app-token.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -131,16 +123,10 @@ jobs: isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} isShouldReusePrSelected: ${{ parameters.ReusePr }} packageSourceAuth: patAuth - ${{ if and(ne(parameters.CeapexServiceConnection, ''), eq(variables['System.TeamProject'], 'internal')) }}: - patVariable: $(CeapexEntraToken) - ${{ if or(eq(parameters.CeapexServiceConnection, ''), ne(variables['System.TeamProject'], 'internal')) }}: - patVariable: ${{ parameters.CeapexPat }} + patVariable: $(CeapexEntraToken) ${{ if eq(parameters.RepoType, 'gitHub') }}: repoType: ${{ parameters.RepoType }} - ${{ if and(eq(parameters.UseGitHubAppAuthentication, true), or(eq(variables['System.TeamProject'], 'internal'), eq(variables['System.TeamProject'], 'DevDiv'), eq(parameters.UseGitHubAppAuthenticationInOtherProjects, true))) }}: - gitHubPatVariable: "$(GitHubAppInstallationToken)" - ${{ else }}: - gitHubPatVariable: "${{ parameters.GithubPat }}" + gitHubPatVariable: "$(GitHubAppInstallationToken)" ${{ if ne(parameters.MirrorRepo, '') }}: isMirrorRepoSelected: true gitHubOrganization: ${{ parameters.GitHubOrg }} diff --git a/global.json b/global.json index 73ee7753c89..d3274317539 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "11.0.100-rc.1.26420.103", + "version": "11.0.100-rc.1.26425.128", "allowPrerelease": true, "rollForward": "latestMajor", "paths": [ @@ -13,7 +13,7 @@ "runner": "Microsoft.Testing.Platform" }, "tools": { - "dotnet": "11.0.100-rc.1.26420.103", + "dotnet": "11.0.100-rc.1.26425.128", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26458.109", - "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26458.109", + "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26461.110", + "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26461.110", "Microsoft.Build.NoTargets": "3.7.134" } } From e3144b68a3255365dd3886fe7a23960776d81684 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:36:22 -0700 Subject: [PATCH 19/25] [release/11.0]: Bump Microsoft.Data.SqlClient from 7.0.2 to 7.0.3 (#38968) --- updated-dependencies: - dependency-name: Microsoft.Data.SqlClient dependency-version: 7.0.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 4490d9d780c..d2c892939b7 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -32,7 +32,7 @@ - + From bd2cc34aba041cb19b31d965cdf1ff8e8ac439d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:36:34 -0700 Subject: [PATCH 20/25] [release/11.0]: Bump Microsoft.Data.SqlClient.Extensions.Azure from 7.0.2 to 7.0.3 (#38969) --- updated-dependencies: - dependency-name: Microsoft.Data.SqlClient.Extensions.Azure dependency-version: 7.0.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Directory.Packages.props b/test/Directory.Packages.props index 395b888279d..52a0a271785 100644 --- a/test/Directory.Packages.props +++ b/test/Directory.Packages.props @@ -10,7 +10,7 @@ - + From 17c442f82afcb04ab8a6ae4c8bc624a8a7e030b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:36:48 -0700 Subject: [PATCH 21/25] [release/11.0]: Bump Microsoft.DotNet.XUnitV3Extensions from 11.0.0-beta.26454.1 to 11.0.0-beta.26461.3 (#38970) --- updated-dependencies: - dependency-name: Microsoft.DotNet.XUnitV3Extensions dependency-version: 11.0.0-beta.26461.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index 0e84bc95e0e..3d6ce5da1da 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -53,7 +53,7 @@ 3.0.5 2.4.0 4.0.0-pre.108 - 11.0.0-beta.26454.1 + 11.0.0-beta.26461.3 2.3.3 18.10.0 From a88fade8ba7bf116b3281c51b35f0aae10630939 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 16:37:26 -0700 Subject: [PATCH 22/25] [release/11.0]: Bump Microsoft.AspNetCore.Identity.EntityFrameworkCore from 9.0.19 to 9.0.20 (#38966) --- updated-dependencies: - dependency-name: Microsoft.AspNetCore.Identity.EntityFrameworkCore dependency-version: 9.0.20 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Directory.Packages.props b/test/Directory.Packages.props index 52a0a271785..9c2b6fe7891 100644 --- a/test/Directory.Packages.props +++ b/test/Directory.Packages.props @@ -8,7 +8,7 @@ - + From 734a5f7a7ee0ec1cf1950b139c093e31a1cc5953 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 15 Sep 2026 13:02:02 -0700 Subject: [PATCH 23/25] Merge pull request #38997 from dotnet/darc-release/11.0-07246f3c-4116-4837-973c-9929578ae48f [release/11.0] Source code updates from dotnet/dotnet --- eng/Version.Details.props | 34 +++++++++---------- eng/Version.Details.xml | 70 +++++++++++++++++++-------------------- global.json | 4 +-- 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index bd686e13c85..a00edff5477 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -6,23 +6,23 @@ This file should be imported by eng/Versions.props - 11.0.0-beta.26461.110 - 11.0.0-beta.26461.110 - 11.0.0-beta.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 - 11.0.0-rc.2.26461.110 + 11.0.0-beta.26464.119 + 11.0.0-beta.26464.119 + 11.0.0-beta.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 + 11.0.0-rc.2.26464.119 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 3857ab6fc58..290a7de22c9 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,76 +1,76 @@ - + - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b - + https://github.com/dotnet/dotnet - e775569ca8ce94c363d910311f5f889e648ddc23 + e30f34edad9fde012dbe3d67c95aa4db4c1d022b diff --git a/global.json b/global.json index d3274317539..b7f56e0aeaf 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26461.110", - "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26461.110", + "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26464.119", + "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26464.119", "Microsoft.Build.NoTargets": "3.7.134" } } From 7d8981c77ebc3ca18b124021e9fafb7dc3cbd89c Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 16 Sep 2026 16:58:06 -0700 Subject: [PATCH 24/25] [release/11.0] Source code updates from dotnet/dotnet (#39003) * Update dependencies from build 332243 Updated Dependencies: Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk (Version 11.0.0-beta.26464.119 -> 11.0.0-beta.26465.108) Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Logging, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Formats.Asn1, System.Runtime.Caching, System.Text.Encodings.Web, System.Text.Json (Version 11.0.0-rc.2.26464.119 -> 11.0.0-rc.2.26465.108) [[ commit created by automation ]] * Update dependencies from build 332290 Updated Dependencies: Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk (Version 11.0.0-beta.26465.108 -> 11.0.0-beta.26465.113) Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Logging, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Formats.Asn1, System.Runtime.Caching, System.Text.Encodings.Web, System.Text.Json (Version 11.0.0-rc.2.26465.108 -> 11.0.0-rc.2.26465.113) [[ commit created by automation ]] --------- Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.props | 34 ++++----- eng/Version.Details.xml | 70 +++++++++---------- .../core-templates/job/helix-job-monitor.yml | 42 ++++++++++- eng/common/core-templates/job/job.yml | 3 +- .../core-templates/steps/send-to-helix.yml | 43 ++++++++++-- global.json | 4 +- 6 files changed, 135 insertions(+), 61 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index a00edff5477..c82ef023a18 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -6,23 +6,23 @@ This file should be imported by eng/Versions.props - 11.0.0-beta.26464.119 - 11.0.0-beta.26464.119 - 11.0.0-beta.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 - 11.0.0-rc.2.26464.119 + 11.0.0-beta.26465.113 + 11.0.0-beta.26465.113 + 11.0.0-beta.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 + 11.0.0-rc.2.26465.113 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 290a7de22c9..629aeb70f3d 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,76 +1,76 @@ - + - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d - + https://github.com/dotnet/dotnet - e30f34edad9fde012dbe3d67c95aa4db4c1d022b + 3d2a4811a58d8ba08bc2162cced36034f98c6b5d diff --git a/eng/common/core-templates/job/helix-job-monitor.yml b/eng/common/core-templates/job/helix-job-monitor.yml index 53bbf74927e..7417afdf3ea 100644 --- a/eng/common/core-templates/job/helix-job-monitor.yml +++ b/eng/common/core-templates/job/helix-job-monitor.yml @@ -52,11 +52,23 @@ parameters: type: string default: https://helix.dot.net/ -# Helix API access token forwarded to the tool via the HELIX_ACCESSTOKEN environment variable. +# Helix API access token forwarded via HELIX_ACCESSTOKEN. Not forwarded when +# useEntraAuthentication is true. - name: helixAccessToken type: string default: '' +# Use a refreshable Entra credential instead of a PAT or anonymous access. +- name: useEntraAuthentication + type: boolean + default: false + +# Azure service connection ID authorized for Helix. Required when +# useEntraAuthentication is true. +- name: azureSubscription + type: string + default: '' + # Polling interval in seconds (--polling-interval-seconds). - name: pollingIntervalSeconds type: number @@ -141,6 +153,26 @@ jobs: - checkout: self fetchDepth: 1 + - ${{ if and(eq(parameters.useEntraAuthentication, true), eq(parameters.azureSubscription, '')) }}: + - pwsh: throw "azureSubscription must be set when useEntraAuthentication is true." + displayName: Validate Helix Entra authentication + + - ${{ if eq(parameters.useEntraAuthentication, true) }}: + - task: AzureCLI@2 + displayName: Initialize Helix Entra authentication + inputs: + azureSubscription: ${{ parameters.azureSubscription }} + addSpnToEnvironment: true + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + if ([string]::IsNullOrWhiteSpace($env:servicePrincipalId) -or [string]::IsNullOrWhiteSpace($env:tenantId)) { + throw "The Helix Azure service connection did not provide a service principal or tenant ID." + } + + Write-Host "##vso[task.setvariable variable=HelixEntraClientId]$env:servicePrincipalId" + Write-Host "##vso[task.setvariable variable=HelixEntraTenantId]$env:tenantId" + - ${{ if ne(parameters.toolNupkgArtifactName, '') }}: - task: DownloadPipelineArtifact@2 displayName: Download Helix Job Monitor artifact @@ -214,6 +246,7 @@ jobs: toolArgs=( --helix-base-uri '${{ parameters.helixBaseUri }}' + --use-entra-authentication '${{ parameters.useEntraAuthentication }}' --polling-interval-seconds '${{ parameters.pollingIntervalSeconds }}' --fail-on-failed-tests '${{ parameters.failWorkItemsWithFailedTests }}' --allow-no-helix-jobs '${{ parameters.allowNoHelixJobs }}' @@ -275,4 +308,9 @@ jobs: displayName: Monitor Helix Jobs env: SYSTEM_ACCESSTOKEN: $(System.AccessToken) - HELIX_ACCESSTOKEN: ${{ parameters.helixAccessToken }} + ${{ if eq(parameters.useEntraAuthentication, false) }}: + HELIX_ACCESSTOKEN: ${{ parameters.helixAccessToken }} + ${{ if eq(parameters.useEntraAuthentication, true) }}: + AZURESUBSCRIPTION_CLIENT_ID: $(HelixEntraClientId) + AZURESUBSCRIPTION_TENANT_ID: $(HelixEntraTenantId) + AZURESUBSCRIPTION_SERVICE_CONNECTION_ID: ${{ parameters.azureSubscription }} diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index cb60f529784..7da6bdf520e 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -119,7 +119,8 @@ jobs: - name: ${{ pair.key }} value: ${{ pair.value }} - # DotNet-HelixApi-Access provides 'HelixApiAccessToken' for internal builds + # DotNet-HelixApi-Access provides 'HelixApiAccessToken' for internal builds. + # Entra-enabled Helix templates do not forward this value to their processes. - ${{ if and(eq(parameters.enableTelemetry, 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - group: DotNet-HelixApi-Access diff --git a/eng/common/core-templates/steps/send-to-helix.yml b/eng/common/core-templates/steps/send-to-helix.yml index ec7a2000399..62cce4d4ea2 100644 --- a/eng/common/core-templates/steps/send-to-helix.yml +++ b/eng/common/core-templates/steps/send-to-helix.yml @@ -4,7 +4,9 @@ parameters: HelixType: 'tests/default/' # required -- Helix telemetry which identifies what type of data this is; should include "test" for clarity and must end in '/' HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number HelixTargetQueues: '' # required -- semicolon-delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues - HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group + HelixAccessToken: '' # optional -- legacy access token; not forwarded when HelixUseEntraAuthentication is true + HelixUseEntraAuthentication: false # optional -- use refreshable Entra authentication instead of a PAT or anonymous access + HelixAzureSubscription: '' # required when HelixUseEntraAuthentication is true -- Azure service connection ID authorized for Helix HelixProjectPath: 'eng/common/helixpublish.proj' # optional -- path to the project file to build relative to BUILD_SOURCESDIRECTORY HelixProjectArguments: '' # optional -- arguments passed to the build command HelixConfiguration: '' # optional -- additional property attached to a job @@ -32,12 +34,35 @@ parameters: continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false steps: + - ${{ if and(eq(parameters.HelixUseEntraAuthentication, true), eq(parameters.HelixAzureSubscription, '')) }}: + - pwsh: throw "HelixAzureSubscription must be set when HelixUseEntraAuthentication is true." + displayName: Validate Helix Entra authentication + condition: ${{ parameters.condition }} + + - ${{ if eq(parameters.HelixUseEntraAuthentication, true) }}: + - task: AzureCLI@2 + displayName: Initialize Helix Entra authentication + inputs: + azureSubscription: ${{ parameters.HelixAzureSubscription }} + addSpnToEnvironment: true + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + if ([string]::IsNullOrWhiteSpace($env:servicePrincipalId) -or [string]::IsNullOrWhiteSpace($env:tenantId)) { + throw "The Helix Azure service connection did not provide a service principal or tenant ID." + } + + Write-Host "##vso[task.setvariable variable=HelixEntraClientId]$env:servicePrincipalId" + Write-Host "##vso[task.setvariable variable=HelixEntraTenantId]$env:tenantId" + condition: ${{ parameters.condition }} + - powershell: > $(Build.SourcesDirectory)\eng\common\msbuild.ps1 $(Build.SourcesDirectory)/${{ parameters.HelixProjectPath }} /restore /p:TreatWarningsAsErrors=false /p:EnableHelixJobMonitor=${{ parameters.UseHelixMonitor }} + /p:HelixUseEntraAuthentication=${{ parameters.HelixUseEntraAuthentication }} ${{ parameters.HelixProjectArguments }} /t:Test /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog @@ -49,7 +74,12 @@ steps: HelixBuild: ${{ parameters.HelixBuild }} HelixConfiguration: ${{ parameters.HelixConfiguration }} HelixTargetQueues: ${{ parameters.HelixTargetQueues }} - HelixAccessToken: ${{ parameters.HelixAccessToken }} + ${{ if eq(parameters.HelixUseEntraAuthentication, false) }}: + HelixAccessToken: ${{ parameters.HelixAccessToken }} + ${{ if eq(parameters.HelixUseEntraAuthentication, true) }}: + AZURESUBSCRIPTION_CLIENT_ID: $(HelixEntraClientId) + AZURESUBSCRIPTION_TENANT_ID: $(HelixEntraTenantId) + AZURESUBSCRIPTION_SERVICE_CONNECTION_ID: ${{ parameters.HelixAzureSubscription }} HelixPreCommands: ${{ parameters.HelixPreCommands }} HelixPostCommands: ${{ parameters.HelixPostCommands }} WorkItemDirectory: ${{ parameters.WorkItemDirectory }} @@ -76,6 +106,7 @@ steps: /restore /p:TreatWarningsAsErrors=false /p:EnableHelixJobMonitor=${{ parameters.UseHelixMonitor }} + /p:HelixUseEntraAuthentication=${{ parameters.HelixUseEntraAuthentication }} ${{ parameters.HelixProjectArguments }} /t:Test /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog @@ -87,7 +118,12 @@ steps: HelixBuild: ${{ parameters.HelixBuild }} HelixConfiguration: ${{ parameters.HelixConfiguration }} HelixTargetQueues: ${{ parameters.HelixTargetQueues }} - HelixAccessToken: ${{ parameters.HelixAccessToken }} + ${{ if eq(parameters.HelixUseEntraAuthentication, false) }}: + HelixAccessToken: ${{ parameters.HelixAccessToken }} + ${{ if eq(parameters.HelixUseEntraAuthentication, true) }}: + AZURESUBSCRIPTION_CLIENT_ID: $(HelixEntraClientId) + AZURESUBSCRIPTION_TENANT_ID: $(HelixEntraTenantId) + AZURESUBSCRIPTION_SERVICE_CONNECTION_ID: ${{ parameters.HelixAzureSubscription }} HelixPreCommands: ${{ parameters.HelixPreCommands }} HelixPostCommands: ${{ parameters.HelixPostCommands }} WorkItemDirectory: ${{ parameters.WorkItemDirectory }} @@ -108,4 +144,3 @@ steps: SYSTEM_ACCESSTOKEN: $(System.AccessToken) condition: and(${{ parameters.condition }}, ne(variables['Agent.Os'], 'Windows_NT')) continueOnError: ${{ parameters.continueOnError }} - diff --git a/global.json b/global.json index b7f56e0aeaf..768e7d1b368 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26464.119", - "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26464.119", + "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26465.113", + "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26465.113", "Microsoft.Build.NoTargets": "3.7.134" } } From 90fcbccb45fe0490796f90c47fbd080a504caa68 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 17 Sep 2026 14:35:07 -0700 Subject: [PATCH 25/25] [release/11.0] Source code updates from dotnet/dotnet (#39007) * Update dependencies from build 332487 Updated Dependencies: Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk (Version 11.0.0-beta.26465.113 -> 11.0.0-beta.26466.122) Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Logging, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Formats.Asn1, System.Runtime.Caching, System.Text.Encodings.Web, System.Text.Json (Version 11.0.0-rc.2.26465.113 -> 11.0.0-rc.2.26466.122) [[ commit created by automation ]] * Update dependencies from build 332554 Updated Dependencies: Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Helix.Sdk (Version 11.0.0-beta.26466.122 -> 11.0.0-beta.26467.104) Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.EnvironmentVariables, Microsoft.Extensions.Configuration.Json, Microsoft.Extensions.DependencyInjection, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.HostFactoryResolver.Sources, Microsoft.Extensions.Logging, Microsoft.NETCore.App.Ref, Microsoft.NETCore.Platforms, System.Formats.Asn1, System.Runtime.Caching, System.Text.Encodings.Web, System.Text.Json (Version 11.0.0-rc.2.26466.122 -> 11.0.0-rc.2.26467.104) [[ commit created by automation ]] --------- Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.props | 34 +++++++++---------- eng/Version.Details.xml | 70 +++++++++++++++++++-------------------- global.json | 4 +-- 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index c82ef023a18..43a3d470faa 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -6,23 +6,23 @@ This file should be imported by eng/Versions.props - 11.0.0-beta.26465.113 - 11.0.0-beta.26465.113 - 11.0.0-beta.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 - 11.0.0-rc.2.26465.113 + 11.0.0-beta.26467.104 + 11.0.0-beta.26467.104 + 11.0.0-beta.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 + 11.0.0-rc.2.26467.104 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 629aeb70f3d..4ddab40837a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,76 +1,76 @@ - + - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d - + https://github.com/dotnet/dotnet - 3d2a4811a58d8ba08bc2162cced36034f98c6b5d + 4361ea30ba1845a072ae2d31a011ca867c0d2e0d diff --git a/global.json b/global.json index 768e7d1b368..4b53a61031d 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26465.113", - "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26465.113", + "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26467.104", + "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26467.104", "Microsoft.Build.NoTargets": "3.7.134" } }