From 0ae801523c5f212fe1a30149b48937110dd1d8c3 Mon Sep 17 00:00:00 2001 From: Victor Frye Date: Wed, 12 Nov 2025 14:12:25 -0500 Subject: [PATCH 001/230] chore: add slnx to gitattributes template --- .../content/Gitattributes/.gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitattributes/.gitattributes b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitattributes/.gitattributes index 81543208f4cd..5d59b830cb86 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitattributes/.gitattributes +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitattributes/.gitattributes @@ -14,6 +14,7 @@ *.cshtml text diff=html *.csx text diff=csharp *.sln text eol=crlf +*.slnx text eol=crlf # Content below from: https://github.com/gitattributes/gitattributes/blob/master/Common.gitattributes From 6fe6b803094a157306a80ade63afc7f5db8aadb6 Mon Sep 17 00:00:00 2001 From: Andy Zivkovic Date: Mon, 9 Mar 2026 23:44:39 +0000 Subject: [PATCH 002/230] Merged PR 58847: Insert NuGet 6.14.3.1 --- eng/Version.Details.xml | 102 ++++++++++++++++++++-------------------- eng/Versions.props | 24 +++++----- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 0b750014a281..539fd1256b2d 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -139,74 +139,74 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted + 13eeb32d62833984c9367f8f4e22a120ebc03b47 https://github.com/microsoft/vstest diff --git a/eng/Versions.props b/eng/Versions.props index c9c8068c7b28..ba363f88ad39 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -139,18 +139,18 @@ - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 - 6.14.0-rc.116 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 + 6.14.3-rc.1 From ced00189ea209bfba8f5c39735767495c47642f6 Mon Sep 17 00:00:00 2001 From: Rainer Sigwald Date: Fri, 13 Mar 2026 14:17:34 -0500 Subject: [PATCH 003/230] Quote arguments to [MSBuild]::MakeRelative Fix #53385 by quoting file-path arguments so any commas within the paths do not leak into MSBuild's understanding of the arguments to the property function. --- .../targets/Microsoft.NET.Publish.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets index eef7ac8c0b80..07ea328b4bb0 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets @@ -848,7 +848,7 @@ Copyright (c) .NET Foundation. All rights reserved. %(Content.TargetPath) %(Content.Link) - $([MSBuild]::MakeRelative($(MSBuildProjectDirectory), %(Content.FullPath))) + $([MSBuild]::MakeRelative('$(MSBuildProjectDirectory)', '%(Content.FullPath)')) From 3f2519ffdad03208fb640897aa65132a9af2ef09 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 17:24:56 +0000 Subject: [PATCH 004/230] Port PR #52743: Remove ResolverTargetFramework and ToolsetTargetFramework, use SdkTargetFramework directly Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> --- Directory.Build.props | 4 --- .../Microsoft.DotNet.Cli.Utils.csproj | 2 +- .../Microsoft.DotNet.Cli.Utils/Polyfills.cs | 2 +- ...initions.cs => netframeworkDefinitions.cs} | 0 src/Layout/redist/targets/Crossgen.targets | 2 +- .../Microsoft.DotNet.TemplateLocator.csproj | 4 +-- .../Microsoft.DotNet.NativeWrapper.csproj | 2 +- .../Microsoft.DotNet.SdkResolver.csproj | 4 +-- ....NET.Sdk.WorkloadMSBuildSdkResolver.csproj | 2 +- ...soft.NET.Sdk.WorkloadManifestReader.csproj | 2 +- .../Tasks/Data/StaticWebAsset.cs | 2 +- .../Tasks/Data/StaticWebAssetEndpoint.cs | 4 +-- .../Data/StaticWebAssetEndpointProperty.cs | 2 +- .../StaticWebAssetEndpointResponseHeader.cs | 2 +- .../Publish/Tasks/MsDeploy/CommonUtility.cs | 32 +++++++++---------- .../Publish/Tasks/MsDeploy/DynamicAssembly.cs | 8 ++--- .../Tasks/MsDeploy/VsMSDeployObject.cs | 4 +-- .../Tasks/MsDeploy/CreateManifestFile.cs | 2 +- .../Tasks/MsDeploy/CreateParameterFile.cs | 2 +- .../Publish/Tasks/Tasks/MsDeploy/MSDeploy.cs | 4 +-- .../Tasks/Tasks/MsDeploy/VsMsdeploy.cs | 16 +++++----- .../ArgumentForwarding.Tests.csproj | 2 +- .../ArgumentsReflector.csproj | 2 +- test/EndToEnd.Tests/EndToEnd.Tests.csproj | 2 +- ...t.DotNet.ApiCompat.IntegrationTests.csproj | 4 +-- .../Microsoft.DotNet.ApiCompat.Tests.csproj | 6 ++-- ...osoft.DotNet.ApiCompatibility.Tests.csproj | 4 +-- .../Microsoft.DotNet.ApiDiff.Tests.csproj | 2 +- ...ft.DotNet.ApiSymbolExtensions.Tests.csproj | 4 +-- .../Microsoft.DotNet.Cli.Utils.Tests.csproj | 2 +- .../Microsoft.DotNet.GenAPI.Tests.csproj | 4 +-- ...crosoft.DotNet.PackageInstall.Tests.csproj | 2 +- ...soft.DotNet.PackageValidation.Tests.csproj | 4 +-- ...rosoft.DotNet.TemplateLocator.Tests.csproj | 8 ++--- ...t.DotNet.Tools.Tests.ComponentMocks.csproj | 2 +- ...crosoft.NET.Sdk.Publish.Tasks.Tests.csproj | 6 ++-- ...ET.Sdk.WorkloadManifestReader.Tests.csproj | 6 ++-- .../Microsoft.Win32.Msi.Manual.Tests.csproj | 4 +-- .../Microsoft.Win32.Msi.Tests.csproj | 6 ++-- .../Msbuild.Tests.Utilities.csproj | 2 +- test/SDDLTests/SDDLTests.csproj | 4 +-- .../dotnet-new.IntegrationTests.csproj | 2 +- .../dotnet-watch-test-browser.csproj | 2 +- .../dotnet-watch.Tests.csproj | 2 +- test/dotnet.Tests/dotnet.Tests.csproj | 2 +- .../msbuild.Integration.Tests.csproj | 2 +- test/sdk-tasks.Tests/sdk-tasks.Tests.csproj | 6 ++-- .../trustedroots.Tests.csproj | 2 +- 48 files changed, 96 insertions(+), 100 deletions(-) rename src/Containers/Microsoft.NET.Build.Containers/{net472Definitions.cs => netframeworkDefinitions.cs} (100%) diff --git a/Directory.Build.props b/Directory.Build.props index 7816170a7988..075acf2ffa0c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -50,13 +50,9 @@ net10.0 $(NetCurrent) - $(SdkTargetFramework) net9.0 net472 - - $(SdkTargetFramework) - diff --git a/src/Cli/Microsoft.DotNet.Cli.Utils/Microsoft.DotNet.Cli.Utils.csproj b/src/Cli/Microsoft.DotNet.Cli.Utils/Microsoft.DotNet.Cli.Utils.csproj index 211355e6cfdf..ff5e9271dda7 100644 --- a/src/Cli/Microsoft.DotNet.Cli.Utils/Microsoft.DotNet.Cli.Utils.csproj +++ b/src/Cli/Microsoft.DotNet.Cli.Utils/Microsoft.DotNet.Cli.Utils.csproj @@ -1,6 +1,6 @@  - $(ResolverTargetFramework);net472 + $(SdkTargetFramework);net472 true MicrosoftAspNetCore true diff --git a/src/Cli/Microsoft.DotNet.Cli.Utils/Polyfills.cs b/src/Cli/Microsoft.DotNet.Cli.Utils/Polyfills.cs index 59668dbae394..af29e1721a34 100644 --- a/src/Cli/Microsoft.DotNet.Cli.Utils/Polyfills.cs +++ b/src/Cli/Microsoft.DotNet.Cli.Utils/Polyfills.cs @@ -1,7 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -#if NET472 +#if NETFRAMEWORK #pragma warning disable IDE0130 // Namespace does not match folder structure namespace System.Runtime.CompilerServices { diff --git a/src/Containers/Microsoft.NET.Build.Containers/net472Definitions.cs b/src/Containers/Microsoft.NET.Build.Containers/netframeworkDefinitions.cs similarity index 100% rename from src/Containers/Microsoft.NET.Build.Containers/net472Definitions.cs rename to src/Containers/Microsoft.NET.Build.Containers/netframeworkDefinitions.cs diff --git a/src/Layout/redist/targets/Crossgen.targets b/src/Layout/redist/targets/Crossgen.targets index 3e07f481af11..f28b268274c6 100644 --- a/src/Layout/redist/targets/Crossgen.targets +++ b/src/Layout/redist/targets/Crossgen.targets @@ -66,7 +66,7 @@ - + diff --git a/src/Microsoft.DotNet.TemplateLocator/Microsoft.DotNet.TemplateLocator.csproj b/src/Microsoft.DotNet.TemplateLocator/Microsoft.DotNet.TemplateLocator.csproj index 9e78f55cad3c..9b652c8cbf84 100644 --- a/src/Microsoft.DotNet.TemplateLocator/Microsoft.DotNet.TemplateLocator.csproj +++ b/src/Microsoft.DotNet.TemplateLocator/Microsoft.DotNet.TemplateLocator.csproj @@ -1,10 +1,10 @@  - $(ResolverTargetFramework);net472 + $(SdkTargetFramework);net472 - $(ResolverTargetFramework) + $(SdkTargetFramework) MicrosoftAspNetCore true diff --git a/src/Resolvers/Microsoft.DotNet.NativeWrapper/Microsoft.DotNet.NativeWrapper.csproj b/src/Resolvers/Microsoft.DotNet.NativeWrapper/Microsoft.DotNet.NativeWrapper.csproj index f39d5b24e2c2..ec780cd24208 100644 --- a/src/Resolvers/Microsoft.DotNet.NativeWrapper/Microsoft.DotNet.NativeWrapper.csproj +++ b/src/Resolvers/Microsoft.DotNet.NativeWrapper/Microsoft.DotNet.NativeWrapper.csproj @@ -1,7 +1,7 @@  - $(ResolverTargetFramework);net472 + $(SdkTargetFramework);net472 diff --git a/src/Resolvers/Microsoft.DotNet.SdkResolver/Microsoft.DotNet.SdkResolver.csproj b/src/Resolvers/Microsoft.DotNet.SdkResolver/Microsoft.DotNet.SdkResolver.csproj index 3de0d9656c3f..bab77ee1d360 100644 --- a/src/Resolvers/Microsoft.DotNet.SdkResolver/Microsoft.DotNet.SdkResolver.csproj +++ b/src/Resolvers/Microsoft.DotNet.SdkResolver/Microsoft.DotNet.SdkResolver.csproj @@ -1,10 +1,10 @@  - $(ResolverTargetFramework);net472 + $(SdkTargetFramework);net472 - $(ResolverTargetFramework) + $(SdkTargetFramework) true Microsoft.DotNet.DotNetSdkResolver diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.csproj b/src/Resolvers/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.csproj index 5e0bdda9834a..d6532a3bdd7c 100644 --- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.csproj +++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver/Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.csproj @@ -1,7 +1,7 @@  - $(ResolverTargetFramework) + $(SdkTargetFramework) true diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/Microsoft.NET.Sdk.WorkloadManifestReader.csproj b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/Microsoft.NET.Sdk.WorkloadManifestReader.csproj index db045f7e4b59..d676c7e0b230 100644 --- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/Microsoft.NET.Sdk.WorkloadManifestReader.csproj +++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/Microsoft.NET.Sdk.WorkloadManifestReader.csproj @@ -1,7 +1,7 @@  - $(ResolverTargetFramework);net472 + $(SdkTargetFramework);net472 MicrosoftAspNetCore true diff --git a/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAsset.cs b/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAsset.cs index 60058355f0b6..78966129d04f 100644 --- a/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAsset.cs +++ b/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAsset.cs @@ -752,7 +752,7 @@ public void Normalize() // * Appends a trailing directory separator at the end. public static string NormalizeContentRootPath(string path) => Path.GetFullPath(path) + - // We need to do .ToString because there is no EndsWith overload for chars in .net472 + // We need to do .ToString because there is no EndsWith overload for chars in .NET Framework (path.EndsWith(Path.DirectorySeparatorChar.ToString()), path.EndsWith(Path.AltDirectorySeparatorChar.ToString())) switch { (true, _) => "", diff --git a/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpoint.cs b/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpoint.cs index 80cfe3b4c417..a101abad250d 100644 --- a/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpoint.cs +++ b/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpoint.cs @@ -237,7 +237,7 @@ public bool Equals(StaticWebAssetEndpoint other) => other is not null && Route = public override int GetHashCode() { -#if NET472_OR_GREATER +#if NETFRAMEWORK var hashCode = -604019124; hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Route); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(AssetFile); @@ -403,7 +403,7 @@ public bool Equals(StaticWebAssetEndpoint x, StaticWebAssetEndpoint y) public int GetHashCode(StaticWebAssetEndpoint obj) { -#if NET472_OR_GREATER +#if NETFRAMEWORK var hashCode = -604019124; hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(obj.Route); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(obj.AssetFile); diff --git a/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpointProperty.cs b/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpointProperty.cs index 5110d7e36d54..9c308d451a68 100644 --- a/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpointProperty.cs +++ b/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpointProperty.cs @@ -41,7 +41,7 @@ public bool Equals(StaticWebAssetEndpointProperty other) => public override int GetHashCode() { -#if NET472_OR_GREATER +#if NETFRAMEWORK var hashCode = -244751520; hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Name); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Value); diff --git a/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpointResponseHeader.cs b/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpointResponseHeader.cs index 8ca2af0a1f5b..232065651ec2 100644 --- a/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpointResponseHeader.cs +++ b/src/StaticWebAssetsSdk/Tasks/Data/StaticWebAssetEndpointResponseHeader.cs @@ -36,7 +36,7 @@ public bool Equals(StaticWebAssetEndpointResponseHeader other) => string.Equals( public override int GetHashCode() { -#if NET472_OR_GREATER +#if NETFRAMEWORK var hashCode = -244751520; hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Name); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Value); diff --git a/src/WebSdk/Publish/Tasks/MsDeploy/CommonUtility.cs b/src/WebSdk/Publish/Tasks/MsDeploy/CommonUtility.cs index 1a78ef754d58..78f5d8e45851 100644 --- a/src/WebSdk/Publish/Tasks/MsDeploy/CommonUtility.cs +++ b/src/WebSdk/Publish/Tasks/MsDeploy/CommonUtility.cs @@ -339,7 +339,7 @@ public static StringBuilder CleanStringBuilder } } -#if NET472 +#if NETFRAMEWORK /// /// Return the current machine's IIS version /// @@ -440,7 +440,7 @@ public static bool CheckMSDeploymentVersion(Utilities.TaskLoggingHelper log, out /// public static void SaveDocument(XmlDocument document, string outputFileName, Encoding encode) { -#if NET472 +#if NETFRAMEWORK XmlTextWriter textWriter = new(outputFileName, encode) { Formatting = Formatting.Indented @@ -487,7 +487,7 @@ private static bool CheckMSDeploymentVersion() currentMinVersion = new Version(7, 1, 614); // current drop { string strMinimumVersion = string.Empty; -#if NET472 +#if NETFRAMEWORK using (Win32.RegistryKey registryKeyVs = Win32.Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\VisualStudio\11.0\WebDeploy")) { if (registryKeyVs != null) @@ -544,7 +544,7 @@ private static bool CheckMSDeploymentVersion() } else { -#if NET472 +#if NETFRAMEWORK _strErrorMessage = string.Format(CultureInfo.CurrentCulture, Resources.VSMSDEPLOY_MSDEPLOYLOADFAIL, Resources.VSMSDEPLOY_MSDEPLOY32bit, Resources.VSMSDEPLOY_MSDEPLOY64bit, @@ -561,7 +561,7 @@ private static bool CheckMSDeploymentVersion() } } -#if NET472 +#if NETFRAMEWORK /// /// Return a search path for the data /// @@ -605,7 +605,7 @@ internal static void BuildArgumentsBaseOnEnumTypeName(Framework.ITaskItem item, if (!string.IsNullOrEmpty(data)) { string valueData = PutValueInQuote(data, valueQuote); -#if NET472 +#if NETFRAMEWORK arguments.Add(string.Concat(enumName.ToLower(CultureInfo.InvariantCulture), "=", valueData)); #else arguments.Add(string.Concat(enumName.ToLower(), "=", valueData)); @@ -684,7 +684,7 @@ public static void MsDeployExeEndOfExecuteMessage(bool bSuccess, string destType string[] ArchiveDirOnly = new string[] { MSDeploy.Provider.ArchiveDir }; if (bSuccess) { -#if NET472 +#if NETFRAMEWORK if (IsOneOf(destType, packageArchivedir, StringComparison.InvariantCultureIgnoreCase)) #else if (IsOneOf(destType, packageArchivedir, StringComparison.OrdinalIgnoreCase)) @@ -695,7 +695,7 @@ public static void MsDeployExeEndOfExecuteMessage(bool bSuccess, string destType string dir = Path.GetDirectoryName(destRoot) ?? string.Empty; string dirUri = ConvertAbsPhysicalPathToAbsUriPath(dir); -#if NET472 +#if NETFRAMEWORK if (IsOneOf(destType, ArchiveDirOnly, StringComparison.InvariantCultureIgnoreCase)) #else if (IsOneOf(destType, ArchiveDirOnly, StringComparison.OrdinalIgnoreCase)) @@ -712,7 +712,7 @@ public static void MsDeployExeEndOfExecuteMessage(bool bSuccess, string destType } else { -#if NET472 +#if NETFRAMEWORK if (IsOneOf(destType, packageArchivedir, StringComparison.InvariantCultureIgnoreCase)) #else if (IsOneOf(destType, packageArchivedir, StringComparison.OrdinalIgnoreCase)) @@ -745,7 +745,7 @@ public static void MsDeployEndOfExecuteMessage(bool bSuccess, string destType, s // Deployment.DeploymentWellKnownProvider wellKnownProvider = Deployment.DeploymentWellKnownProvider.Unknown; Type? DeploymentWellKnownProviderType = MSWebDeploymentAssembly.DynamicAssembly?.GetType(MSDeploy.TypeName.DeploymentWellKnownProvider); dynamic? wellKnownProvider = MSWebDeploymentAssembly.DynamicAssembly?.GetEnumValue(MSDeploy.TypeName.DeploymentWellKnownProvider, "Unknown"); -#if NET472 +#if NETFRAMEWORK if (string.Compare(destType, MSDeploy.Provider.DbDacFx, StringComparison.InvariantCultureIgnoreCase) != 0) #else if (string.Compare(destType, MSDeploy.Provider.DbDacFx, StringComparison.OrdinalIgnoreCase) != 0) @@ -1337,7 +1337,7 @@ public static string DumpITaskItem(Framework.ITaskItem iTaskItem) public static bool IsDeploymentWellKnownProvider(string strProvider) { -#if NET472 +#if NETFRAMEWORK if (string.Compare(strProvider, MSDeploy.Provider.DbDacFx, StringComparison.InvariantCultureIgnoreCase) == 0) #else if (string.Compare(strProvider, MSDeploy.Provider.DbDacFx, StringComparison.OrdinalIgnoreCase) == 0) @@ -1513,7 +1513,7 @@ static int ContainMsdeployFwlink(string errorMessage, out string? provider) internal static bool IsType(Type type, Type? checkType) { -#if NET472 +#if NETFRAMEWORK if (checkType != null && (type == checkType || type.IsSubclassOf(checkType))) { return true; @@ -1566,7 +1566,7 @@ internal static void LogVsMsDeployException(Utilities.TaskLoggingHelper Log, Exc lastDeploymentException = rootException; } -#if NET472 +#if NETFRAMEWORK bool isWebException = rootException is System.Net.WebException; if (isWebException) { @@ -1820,7 +1820,7 @@ internal static void SetupMSWebDeployDynamicAssemblies(string? strVersionsToTry, MSWebDeploymentAssembly.SetVersion(version); Version webDelegationAssemblyVersion = version; -#if NET472 +#if NETFRAMEWORK if (MSWebDeploymentAssembly.DynamicAssembly != null && MSWebDeploymentAssembly.DynamicAssembly.Assembly != null) { foreach (AssemblyName assemblyName in MSWebDeploymentAssembly.DynamicAssembly.Assembly.GetReferencedAssemblies()) @@ -1894,7 +1894,7 @@ internal static void SetupMSWebDeployDynamicAssemblies(string? strVersionsToTry, /// public static string? GetFullUserAgentString(string? userAgent) { -#if NET472 +#if NETFRAMEWORK if(string.IsNullOrEmpty(userAgent)) return null; try @@ -1920,7 +1920,7 @@ internal static class ItemFilter public static bool ItemFilterPipelineMetadata(Framework.ITaskItem item, string metadataName, string metadataValue, bool fIgnoreCase) { -#if NET472 +#if NETFRAMEWORK return (string.Compare(item.GetMetadata(metadataName), metadataValue, fIgnoreCase, CultureInfo.InvariantCulture) == 0); #else return (string.Compare(item.GetMetadata(metadataName), metadataValue, fIgnoreCase) == 0); diff --git a/src/WebSdk/Publish/Tasks/MsDeploy/DynamicAssembly.cs b/src/WebSdk/Publish/Tasks/MsDeploy/DynamicAssembly.cs index 6c99f9d51d06..dfa0b25e555e 100644 --- a/src/WebSdk/Publish/Tasks/MsDeploy/DynamicAssembly.cs +++ b/src/WebSdk/Publish/Tasks/MsDeploy/DynamicAssembly.cs @@ -12,7 +12,7 @@ internal class DynamicAssembly public DynamicAssembly(string assemblyName, Version verToLoad, string publicKeyToken) { AssemblyFullName = string.Format(System.Globalization.CultureInfo.CurrentCulture, "{0}, Version={1}.{2}.0.0, Culture=neutral, PublicKeyToken={3}", assemblyName, verToLoad.Major, verToLoad.Minor, publicKeyToken); -#if NET472 +#if NETFRAMEWORK bool isAssemblyLoaded = false; try { @@ -32,7 +32,7 @@ public DynamicAssembly(string assemblyName, Version verToLoad, string publicKeyT Version = verToLoad; } -#if NET472 +#if NETFRAMEWORK public static string TaskAssemblyDirectory { get @@ -133,7 +133,7 @@ public bool TryGetEnumValue(string enumTypeName, string enumStrValue, out object return createdObject; } -#if NET472 +#if NETFRAMEWORK public object? CallStaticMethod(string typeName, string methodName, object[] arguments) { Type? t = GetType(typeName); @@ -163,7 +163,7 @@ public bool TryGetEnumValue(string enumTypeName, string enumStrValue, out object MethodCallExpression body = Expression.Call(Expression.Constant(d), invokeMethod, parameters); var lambda = Expression.Lambda(body, parameters); // Diagnostics.Debug.Assert(false, lambda.ToString()); -#if NET472 +#if NETFRAMEWORK return Delegate.CreateDelegate(handlerType, lambda.Compile(), "Invoke", false); #else return null; diff --git a/src/WebSdk/Publish/Tasks/MsDeploy/VsMSDeployObject.cs b/src/WebSdk/Publish/Tasks/MsDeploy/VsMSDeployObject.cs index 33dca06a48e3..a49234edf7a0 100644 --- a/src/WebSdk/Publish/Tasks/MsDeploy/VsMSDeployObject.cs +++ b/src/WebSdk/Publish/Tasks/MsDeploy/VsMSDeployObject.cs @@ -231,7 +231,7 @@ public VSMSDeployObject(string provider, string root) // maybe we should show the "secure data to display" // for now just suppress it. -#if NET472 +#if NETFRAMEWORK if (0 == string.Compare(m_provider, MSWebDeploymentAssembly.DynamicAssembly?.GetEnumValue(MSDeploy.TypeName.DeploymentWellKnownProvider, MSDeploy.Provider.DBFullSql)?.ToString(), StringComparison.InvariantCultureIgnoreCase) || 0 == string.Compare(m_provider, MSDeploy.Provider.DbDacFx , StringComparison.InvariantCultureIgnoreCase)) m_fNoDisplayRoot = true; @@ -555,7 +555,7 @@ public void ResetBaseOptions() public void SyncTo(VSMSDeployObject destObject, /*VSMSDeploySyncOption*/ dynamic syncOptions, IVSMSDeployHost _host) { -#if NET472 +#if NETFRAMEWORK //$BUGBUG lmchen, there is only set to source provider? // set up the provider setting /*Deployment.DeploymentProviderOptions*/ diff --git a/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/CreateManifestFile.cs b/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/CreateManifestFile.cs index 73cea04ee17d..8451519fe87a 100644 --- a/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/CreateManifestFile.cs +++ b/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/CreateManifestFile.cs @@ -110,7 +110,7 @@ public override bool Execute() WriteManifestsToFile(Log, m_manifests, ManifestFile); } } -#if NET472 +#if NETFRAMEWORK catch (Xml.XmlException ex) { Uri sourceUri = new(ex.SourceUri); diff --git a/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/CreateParameterFile.cs b/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/CreateParameterFile.cs index 7205f19029b8..11e01a0d52eb 100644 --- a/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/CreateParameterFile.cs +++ b/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/CreateParameterFile.cs @@ -307,7 +307,7 @@ public override bool Execute() } } } -#if NET472 +#if NETFRAMEWORK catch (Xml.XmlException ex) { Uri sourceUri = new(ex.SourceUri); diff --git a/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/MSDeploy.cs b/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/MSDeploy.cs index 0f703a82678f..b61a8d15e1bd 100644 --- a/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/MSDeploy.cs +++ b/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/MSDeploy.cs @@ -225,7 +225,7 @@ public string? ExePath { get { -#if NET472 +#if NETFRAMEWORK if (string.IsNullOrEmpty(m_exePath)) { // if path is not set, we optimize to latest version of msdeploy @@ -796,7 +796,7 @@ public static void AddSetParametersToObject(Utilities.CommandLineBuilder command Utility.BuildArgumentsBaseOnEnumTypeName(item, arguments, typeof(ExistingDeclareParameterMetadata), valueQuote); if (arguments.Count > 0 && !string.IsNullOrEmpty(data)) { -#if NET472 +#if NETFRAMEWORK arguments.Add(string.Concat(ExistingSyncParameterMetadata.Value.ToString().ToLower(CultureInfo.InvariantCulture), "=", Utility.PutValueInQuote(data, valueQuote))); #else diff --git a/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/VsMsdeploy.cs b/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/VsMsdeploy.cs index ede99a2cbe10..cccd735c2c6f 100644 --- a/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/VsMsdeploy.cs +++ b/src/WebSdk/Publish/Tasks/Tasks/MsDeploy/VsMsdeploy.cs @@ -166,7 +166,7 @@ private bool CancelCallback() if (_option == null) { object? option = MSWebDeploymentAssembly.DynamicAssembly?.CreateObject("Microsoft.Web.Deployment.DeploymentSyncOptions"); -#if NET472 +#if NETFRAMEWORK Type? deploymentCancelCallbackType = MSWebDeploymentAssembly.DynamicAssembly?.GetType("Microsoft.Web.Deployment.DeploymentCancelCallback"); object cancelCallbackDelegate = Delegate.CreateDelegate(deploymentCancelCallbackType, this, "CancelCallback"); @@ -180,7 +180,7 @@ private bool CancelCallback() return _option; } -#if NET472 +#if NETFRAMEWORK private Dictionary? _highImportanceEventTypes = null; private Dictionary GetHighImportanceEventTypes() { @@ -204,7 +204,7 @@ void TraceEventHandlerDynamic(object sender, dynamic e) // throw new System.NotImplementedException(); string msg = e.Message; Diagnostics.Trace.WriteLine("MSDeploy TraceEvent Handler is called with " + msg); -#if NET472 +#if NETFRAMEWORK LogTrace(e, GetHighImportanceEventTypes()); #endif //try @@ -329,7 +329,7 @@ public static BaseMSDeployDriver CreateBaseMSDeployDriver( /// We create CustomBuildWithPropertiesEventArgs is for the purpose of logging verious information /// in a IDictionary such that the MBuild handler can handle generically. /// -#if NET472 +#if NETFRAMEWORK [Serializable] #endif public class CustomBuildWithPropertiesEventArgs : CustomBuildEventArgs, Collections.IDictionary @@ -447,7 +447,7 @@ protected override void BeforeSync() // Utility function to log all public instance property to CustomerBuildEventArgs private static void AddAllPropertiesToCustomBuildWithPropertyEventArgs(ExtendedCustomBuildEventArgs cbpEventArg, object obj) { -#if NET472 +#if NETFRAMEWORK if (obj != null) { Type thisType = obj.GetType(); @@ -776,7 +776,7 @@ private bool AllowUntrustedCertCallback(object sp, } private void SetupPublishRelatedProperties(ref VSMSDeployObject dest) { -#if NET472 +#if NETFRAMEWORK if (AllowUntrustedCertificate) { System.Net.ServicePointManager.ServerCertificateValidationCallback @@ -885,7 +885,7 @@ public override bool Execute() } finally { -#if NET472 +#if NETFRAMEWORK if (AllowUntrustedCertificate) System.Net.ServicePointManager.ServerCertificateValidationCallback @@ -1089,7 +1089,7 @@ public void Cancel() public object? GetProperty(string propertyName) { -#if NET472 +#if NETFRAMEWORK string lowerName = propertyName.ToLower(System.Globalization.CultureInfo.InvariantCulture); #else string lowerName = propertyName.ToLower(); diff --git a/test/ArgumentForwarding.Tests/ArgumentForwarding.Tests.csproj b/test/ArgumentForwarding.Tests/ArgumentForwarding.Tests.csproj index fb2419eebf04..2cf683724c71 100644 --- a/test/ArgumentForwarding.Tests/ArgumentForwarding.Tests.csproj +++ b/test/ArgumentForwarding.Tests/ArgumentForwarding.Tests.csproj @@ -1,7 +1,7 @@  - $(ToolsetTargetFramework) + $(SdkTargetFramework) Exe false true diff --git a/test/ArgumentsReflector/ArgumentsReflector.csproj b/test/ArgumentsReflector/ArgumentsReflector.csproj index d34fdf938aa6..fadc4185321c 100644 --- a/test/ArgumentsReflector/ArgumentsReflector.csproj +++ b/test/ArgumentsReflector/ArgumentsReflector.csproj @@ -1,7 +1,7 @@  - $(ToolsetTargetFramework) + $(SdkTargetFramework) Exe diff --git a/test/EndToEnd.Tests/EndToEnd.Tests.csproj b/test/EndToEnd.Tests/EndToEnd.Tests.csproj index 6dbf926e6108..505e8f4b0633 100644 --- a/test/EndToEnd.Tests/EndToEnd.Tests.csproj +++ b/test/EndToEnd.Tests/EndToEnd.Tests.csproj @@ -6,7 +6,7 @@ - $(ToolsetTargetFramework) + $(SdkTargetFramework) Exe false diff --git a/test/Microsoft.DotNet.ApiCompat.IntegrationTests/Microsoft.DotNet.ApiCompat.IntegrationTests.csproj b/test/Microsoft.DotNet.ApiCompat.IntegrationTests/Microsoft.DotNet.ApiCompat.IntegrationTests.csproj index 48ca6c84d0de..8c17bb602b57 100644 --- a/test/Microsoft.DotNet.ApiCompat.IntegrationTests/Microsoft.DotNet.ApiCompat.IntegrationTests.csproj +++ b/test/Microsoft.DotNet.ApiCompat.IntegrationTests/Microsoft.DotNet.ApiCompat.IntegrationTests.csproj @@ -1,8 +1,8 @@  - $(ToolsetTargetFramework);$(NetFrameworkToolCurrent) - Exe + $(SdkTargetFramework);$(NetFrameworkToolCurrent) + Exe true diff --git a/test/Microsoft.DotNet.ApiCompat.Tests/Microsoft.DotNet.ApiCompat.Tests.csproj b/test/Microsoft.DotNet.ApiCompat.Tests/Microsoft.DotNet.ApiCompat.Tests.csproj index bac201f78cea..27745efcdfef 100644 --- a/test/Microsoft.DotNet.ApiCompat.Tests/Microsoft.DotNet.ApiCompat.Tests.csproj +++ b/test/Microsoft.DotNet.ApiCompat.Tests/Microsoft.DotNet.ApiCompat.Tests.csproj @@ -1,9 +1,9 @@  - $(ToolsetTargetFramework);$(NetFrameworkToolCurrent) - $(ToolsetTargetFramework) - Exe + $(SdkTargetFramework);$(NetFrameworkToolCurrent) + $(SdkTargetFramework) + Exe true diff --git a/test/Microsoft.DotNet.ApiCompatibility.Tests/Microsoft.DotNet.ApiCompatibility.Tests.csproj b/test/Microsoft.DotNet.ApiCompatibility.Tests/Microsoft.DotNet.ApiCompatibility.Tests.csproj index e2c0ccd07842..aa1bdc4bcf96 100644 --- a/test/Microsoft.DotNet.ApiCompatibility.Tests/Microsoft.DotNet.ApiCompatibility.Tests.csproj +++ b/test/Microsoft.DotNet.ApiCompatibility.Tests/Microsoft.DotNet.ApiCompatibility.Tests.csproj @@ -1,8 +1,8 @@  - $(ToolsetTargetFramework);$(NetFrameworkToolCurrent) - Exe + $(SdkTargetFramework);$(NetFrameworkToolCurrent) + Exe true diff --git a/test/Microsoft.DotNet.ApiDiff.Tests/Microsoft.DotNet.ApiDiff.Tests.csproj b/test/Microsoft.DotNet.ApiDiff.Tests/Microsoft.DotNet.ApiDiff.Tests.csproj index 0614262e2f1e..bc07041bee3e 100644 --- a/test/Microsoft.DotNet.ApiDiff.Tests/Microsoft.DotNet.ApiDiff.Tests.csproj +++ b/test/Microsoft.DotNet.ApiDiff.Tests/Microsoft.DotNet.ApiDiff.Tests.csproj @@ -1,7 +1,7 @@ - $(ToolsetTargetFramework) + $(SdkTargetFramework) Exe true diff --git a/test/Microsoft.DotNet.ApiSymbolExtensions.Tests/Microsoft.DotNet.ApiSymbolExtensions.Tests.csproj b/test/Microsoft.DotNet.ApiSymbolExtensions.Tests/Microsoft.DotNet.ApiSymbolExtensions.Tests.csproj index 9cb2cadbe2ed..01067804ffd4 100644 --- a/test/Microsoft.DotNet.ApiSymbolExtensions.Tests/Microsoft.DotNet.ApiSymbolExtensions.Tests.csproj +++ b/test/Microsoft.DotNet.ApiSymbolExtensions.Tests/Microsoft.DotNet.ApiSymbolExtensions.Tests.csproj @@ -1,8 +1,8 @@  - $(ToolsetTargetFramework);$(NetFrameworkToolCurrent) - Exe + $(SdkTargetFramework);$(NetFrameworkToolCurrent) + Exe true diff --git a/test/Microsoft.DotNet.Cli.Utils.Tests/Microsoft.DotNet.Cli.Utils.Tests.csproj b/test/Microsoft.DotNet.Cli.Utils.Tests/Microsoft.DotNet.Cli.Utils.Tests.csproj index 26b3ab5addb4..f1daf8fe9881 100644 --- a/test/Microsoft.DotNet.Cli.Utils.Tests/Microsoft.DotNet.Cli.Utils.Tests.csproj +++ b/test/Microsoft.DotNet.Cli.Utils.Tests/Microsoft.DotNet.Cli.Utils.Tests.csproj @@ -1,6 +1,6 @@  - $(ToolsetTargetFramework) + $(SdkTargetFramework) Exe MicrosoftAspNetCore diff --git a/test/Microsoft.DotNet.GenAPI.Tests/Microsoft.DotNet.GenAPI.Tests.csproj b/test/Microsoft.DotNet.GenAPI.Tests/Microsoft.DotNet.GenAPI.Tests.csproj index 82da898e0bb7..5fb5b54518a4 100644 --- a/test/Microsoft.DotNet.GenAPI.Tests/Microsoft.DotNet.GenAPI.Tests.csproj +++ b/test/Microsoft.DotNet.GenAPI.Tests/Microsoft.DotNet.GenAPI.Tests.csproj @@ -1,8 +1,8 @@  - $(ToolsetTargetFramework) - Exe + $(SdkTargetFramework) + Exe true diff --git a/test/Microsoft.DotNet.PackageInstall.Tests/Microsoft.DotNet.PackageInstall.Tests.csproj b/test/Microsoft.DotNet.PackageInstall.Tests/Microsoft.DotNet.PackageInstall.Tests.csproj index 83b6439cc8c8..e144b6210c57 100644 --- a/test/Microsoft.DotNet.PackageInstall.Tests/Microsoft.DotNet.PackageInstall.Tests.csproj +++ b/test/Microsoft.DotNet.PackageInstall.Tests/Microsoft.DotNet.PackageInstall.Tests.csproj @@ -7,7 +7,7 @@ - $(ToolsetTargetFramework) + $(SdkTargetFramework) Exe MicrosoftAspNetCore false diff --git a/test/Microsoft.DotNet.PackageValidation.Tests/Microsoft.DotNet.PackageValidation.Tests.csproj b/test/Microsoft.DotNet.PackageValidation.Tests/Microsoft.DotNet.PackageValidation.Tests.csproj index 2d126411c3e6..d9a65ec6e75d 100644 --- a/test/Microsoft.DotNet.PackageValidation.Tests/Microsoft.DotNet.PackageValidation.Tests.csproj +++ b/test/Microsoft.DotNet.PackageValidation.Tests/Microsoft.DotNet.PackageValidation.Tests.csproj @@ -1,8 +1,8 @@  - $(ToolsetTargetFramework);$(NetFrameworkToolCurrent) - Exe + $(SdkTargetFramework);$(NetFrameworkToolCurrent) + Exe true diff --git a/test/Microsoft.DotNet.TemplateLocator.Tests/Microsoft.DotNet.TemplateLocator.Tests.csproj b/test/Microsoft.DotNet.TemplateLocator.Tests/Microsoft.DotNet.TemplateLocator.Tests.csproj index 8875d0f3169b..06cc40d7fe5a 100644 --- a/test/Microsoft.DotNet.TemplateLocator.Tests/Microsoft.DotNet.TemplateLocator.Tests.csproj +++ b/test/Microsoft.DotNet.TemplateLocator.Tests/Microsoft.DotNet.TemplateLocator.Tests.csproj @@ -1,12 +1,12 @@  - net472;$(ToolsetTargetFramework) - $(ToolsetTargetFramework) + net472;$(SdkTargetFramework) + $(SdkTargetFramework) - $(ToolsetTargetFramework) - Exe + $(SdkTargetFramework) + Exe MicrosoftAspNetCore true diff --git a/test/trustedroots.Tests/trustedroots.Tests.csproj b/test/trustedroots.Tests/trustedroots.Tests.csproj index c4fd805c72af..ed864b10bf0b 100644 --- a/test/trustedroots.Tests/trustedroots.Tests.csproj +++ b/test/trustedroots.Tests/trustedroots.Tests.csproj @@ -2,7 +2,7 @@ - $(ToolsetTargetFramework) + $(SdkTargetFramework) Exe false From 95cd079fec40a2091539a8f73fb79484d6d26989 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 18:24:36 +0000 Subject: [PATCH 005/230] Fix: Update Microsoft.NET.Build.Containers.csproj to reference renamed netframeworkDefinitions.cs Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> --- .../Microsoft.NET.Build.Containers.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Containers/Microsoft.NET.Build.Containers/Microsoft.NET.Build.Containers.csproj b/src/Containers/Microsoft.NET.Build.Containers/Microsoft.NET.Build.Containers.csproj index d635d1fdfb86..97ff0e7306b9 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Microsoft.NET.Build.Containers.csproj +++ b/src/Containers/Microsoft.NET.Build.Containers/Microsoft.NET.Build.Containers.csproj @@ -77,7 +77,7 @@ - + @@ -87,7 +87,7 @@ - + From f897542a19c0eb71c24d5956add809f7549f0636 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Tue, 17 Mar 2026 13:34:44 -0700 Subject: [PATCH 006/230] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../Microsoft.NET.Build.Containers.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Containers/Microsoft.NET.Build.Containers/Microsoft.NET.Build.Containers.csproj b/src/Containers/Microsoft.NET.Build.Containers/Microsoft.NET.Build.Containers.csproj index 97ff0e7306b9..3c4c3d932e9b 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Microsoft.NET.Build.Containers.csproj +++ b/src/Containers/Microsoft.NET.Build.Containers/Microsoft.NET.Build.Containers.csproj @@ -65,8 +65,8 @@ - - + + @@ -84,8 +84,8 @@ - - + + From b476fccbc1f45e13196073341678f9ee295fad05 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Tue, 17 Mar 2026 13:53:56 -0700 Subject: [PATCH 007/230] Add test for publishing content with commas in filename This test verifies that Content items with commas in their filenames can be published without triggering MSB4186 due to the comma being interpreted as an argument separator. --- ...GivenThatWeWantToPublishWithIfDifferent.cs | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs index d234ec586284..308844aad8c5 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs @@ -455,5 +455,49 @@ public void It_publishes_content_from_imported_targets_with_correct_path() .Where(f => !f.StartsWith(publishDirectory.FullName)); potentialEscapedFiles.Should().BeEmpty("Content file should not escape to directories outside publish folder"); } + + [Fact] + public void It_publishes_content_with_comma_in_filename() + { + // This test verifies that Content items with commas in their filenames can be published + // without triggering MSB4186 due to the comma being interpreted as an argument separator + // in the [MSBuild]::MakeRelative property function call. + + var testProject = new TestProject() + { + Name = "PublishCommaContent", + TargetFrameworks = ToolsetInfo.CurrentTargetFramework, + IsExe = true + }; + + testProject.SourceFiles["Program.cs"] = "class Program { static void Main() { } }"; + + var testAsset = TestAssetsManager.CreateTestProject(testProject); + + var projectDirectory = Path.Combine(testAsset.Path, testProject.Name); + + // Create a content file with a comma in the filename (e.g., a variable font file) + var contentFileName = "Doto-VariableFont_ROND,wght.ttf"; + var contentFile = Path.Combine(projectDirectory, contentFileName); + File.WriteAllText(contentFile, "fake font content"); + + // Update the project file to include the content file with CopyToPublishDirectory + var projectFile = Path.Combine(projectDirectory, $"{testProject.Name}.csproj"); + var projectContent = File.ReadAllText(projectFile); + projectContent = projectContent.Replace("", @" + + Expand commentComment on line R489Resolved + +"); + File.WriteAllText(projectFile, projectContent); + + var publishCommand = new PublishCommand(testAsset); + var publishResult = publishCommand.Execute(); + + publishResult.Should().Pass(); + + var publishDirectory = publishCommand.GetOutputDirectory(testProject.TargetFrameworks); + publishDirectory.Should().HaveFile(contentFileName); + } } } From 19078f11cca4e1c7d961e0827ec17a5c0f63b25f Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Wed, 18 Mar 2026 11:17:54 -0500 Subject: [PATCH 008/230] Fix assets manager usage --- .../GivenThatWeWantToPublishWithIfDifferent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs index 308844aad8c5..1558c425da4a 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs @@ -472,7 +472,7 @@ public void It_publishes_content_with_comma_in_filename() testProject.SourceFiles["Program.cs"] = "class Program { static void Main() { } }"; - var testAsset = TestAssetsManager.CreateTestProject(testProject); + var testAsset = _testAssetsManager.CreateTestProject(testProject); var projectDirectory = Path.Combine(testAsset.Path, testProject.Name); From 8e08d24b0ef87b3f169916b60a550ef30625aea0 Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Wed, 18 Mar 2026 13:53:42 -0500 Subject: [PATCH 009/230] fix errant raw string in xml code --- .../GivenThatWeWantToPublishWithIfDifferent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs index 1558c425da4a..5b7add2b7e3b 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs @@ -486,7 +486,7 @@ public void It_publishes_content_with_comma_in_filename() var projectContent = File.ReadAllText(projectFile); projectContent = projectContent.Replace("", @" - Expand commentComment on line R489Resolved + "); File.WriteAllText(projectFile, projectContent); From 70c830c84f1ea9c3c6b6953fee6f5e034bdc8a24 Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Wed, 18 Mar 2026 21:35:44 +0000 Subject: [PATCH 010/230] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260318.12 On relative base path root Microsoft.Bcl.AsyncInterfaces , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Console , Microsoft.NET.ILLink.Tasks , Microsoft.NETCore.App.Host.win-x64 , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.Win32.SystemEvents , System.CodeDom , System.Composition.AttributedModel , System.Composition.Convention , System.Composition.Hosting , System.Composition.Runtime , System.Composition.TypedParts , System.Configuration.ConfigurationManager , System.Formats.Asn1 , System.Reflection.MetadataLoadContext , System.Resources.Extensions , System.Security.Cryptography.Pkcs , System.Security.Cryptography.ProtectedData , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encoding.CodePages , System.Text.Json , System.Windows.Extensions From Version 9.0.14 -> To Version 9.0.15 Microsoft.NET.HostModel , Microsoft.NETCore.Platforms , VS.Redist.Common.NetCore.SharedFramework.x64.9.0 , VS.Redist.Common.NetCore.TargetingPack.x64.9.0 , Microsoft.SourceBuild.Intermediate.runtime.linux-x64 From Version 9.0.14-servicing.26119.10 -> To Version 9.0.15-servicing.26168.12 Dependency coherency updates On relative base path root Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100 From Version 9.0.14 -> To Version 9.0.16 (parent: Microsoft.NETCore.App.Runtime.win-x64) Microsoft.SourceBuild.Intermediate.emsdk From Version 9.0.14-servicing.26110.3 -> To Version 9.0.16-servicing.26160.4 (parent: Microsoft.NETCore.App.Runtime.win-x64) --- NuGet.config | 10 +-- eng/Version.Details.xml | 148 ++++++++++++++++++++-------------------- eng/Versions.props | 70 +++++++++---------- 3 files changed, 112 insertions(+), 116 deletions(-) diff --git a/NuGet.config b/NuGet.config index e4b7dcd1b1e0..e00da03b8f1f 100644 --- a/NuGet.config +++ b/NuGet.config @@ -24,10 +24,9 @@ - + - @@ -37,13 +36,12 @@ - + - @@ -72,13 +70,11 @@ - - + - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 7b684a3a8ef2..bd61e279d278 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -15,42 +15,42 @@ b73682307aa0128c5edbec94c2e6a070d13ae6bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 @@ -59,14 +59,14 @@ https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - + https://github.com/dotnet/emsdk - fb1326b0f4622f04f21584dc133f1c71f7554509 + dee978139950436eec13cadd76e9a438bdb26d4b - + https://github.com/dotnet/emsdk - fb1326b0f4622f04f21584dc133f1c71f7554509 + dee978139950436eec13cadd76e9a438bdb26d4b @@ -226,29 +226,29 @@ 51441adcd6c424ae7315d66ce7e96baf34d70369 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop @@ -469,89 +469,89 @@ - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 @@ -585,9 +585,9 @@ 01c94b66e75697e9298eb79a49db74489f8d343e - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + d4bd3feb752ad3c8e2c4707335bca8674db076d8 https://github.com/dotnet/arcade-services diff --git a/eng/Versions.props b/eng/Versions.props index 798f4cadb0c0..6a714aa0ac4e 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -85,50 +85,50 @@ - 9.0.14 - 9.0.14-servicing.26119.10 - 9.0.14 - 9.0.14 - 9.0.14-servicing.26119.10 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 + 9.0.15 + 9.0.15-servicing.26168.12 + 9.0.15 + 9.0.15 + 9.0.15-servicing.26168.12 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 8.0.0-rc.1.23414.4 - 9.0.14-servicing.26119.10 - 9.0.14-servicing.26119.10 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 + 9.0.15-servicing.26168.12 + 9.0.15-servicing.26168.12 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 2.1.0 - 9.0.14 + 9.0.15 8.0.0 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 8.0.0 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 - 9.0.14 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 + 9.0.15 4.5.1 4.5.5 8.0.5 4.5.4 - 9.0.14 - 9.0.14 + 9.0.15 + 9.0.15 @@ -319,7 +319,7 @@ 15.0.9617 18.0.9617 - 9.0.14 + 9.0.16 $(MicrosoftNETWorkloadEmscriptenCurrentManifest90100PackageVersion) 9.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-(?!rtm)[A-z]*[\.]*\d*`)) From c06b7f62e39aaac7384a09ba04470ed691d9ad50 Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Thu, 19 Mar 2026 19:36:59 +0000 Subject: [PATCH 011/230] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop build 20260319.1 On relative base path root Microsoft.WindowsDesktop.App.Ref , Microsoft.WindowsDesktop.App.Runtime.win-x64 From Version 9.0.14 -> To Version 9.0.15 VS.Redist.Common.WindowsDesktop.SharedFramework.x64.9.0 , VS.Redist.Common.WindowsDesktop.TargetingPack.x64.9.0 From Version 9.0.14-servicing.26119.3 -> To Version 9.0.15-servicing.26169.1 Dependency coherency updates On relative base path root Microsoft.NET.Sdk.WindowsDesktop From Version 9.0.14-rtm.26119.2 -> To Version 9.0.15-rtm.26167.6 (parent: Microsoft.WindowsDesktop.App.Ref) Microsoft.Dotnet.WinForms.ProjectTemplates From Version 9.0.14-servicing.26119.4 -> To Version 9.0.15-servicing.26166.1 (parent: Microsoft.WindowsDesktop.App.Runtime.win-x64) Microsoft.DotNet.Wpf.ProjectTemplates From Version 9.0.14-rtm.26119.2 -> To Version 9.0.15-rtm.26167.6 (parent: Microsoft.WindowsDesktop.App.Runtime.win-x64) --- NuGet.config | 2 ++ eng/Version.Details.xml | 28 ++++++++++++++-------------- eng/Versions.props | 14 +++++++------- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/NuGet.config b/NuGet.config index e00da03b8f1f..b6df98d9cd71 100644 --- a/NuGet.config +++ b/NuGet.config @@ -42,6 +42,7 @@ + @@ -75,6 +76,7 @@ + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index bd61e279d278..a570769cd4a2 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -250,26 +250,26 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime d4bd3feb752ad3c8e2c4707335bca8674db076d8 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 + 183e13570b127f34c5f2669378920cf3fe080786 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 + 183e13570b127f34c5f2669378920cf3fe080786 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 + 183e13570b127f34c5f2669378920cf3fe080786 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 + 183e13570b127f34c5f2669378920cf3fe080786 - + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 72d4e0415ec4ae0771a5df3e05260691a5d6775b + 0c1686a473c9500e3974e7c1733ad143952fca3c https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore @@ -356,13 +356,13 @@ baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - + https://dev.azure.com/dnceng/internal/_git/dotnet-winforms - 9399df09f8f8a187dcf1941b1d07a538ca197171 + e7effd79b8343b1a10e02e483bd870d34067d29c - + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 72d4e0415ec4ae0771a5df3e05260691a5d6775b + 0c1686a473c9500e3974e7c1733ad143952fca3c https://github.com/dotnet/xdt diff --git a/eng/Versions.props b/eng/Versions.props index 6a714aa0ac4e..bbae9dea713c 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -81,7 +81,7 @@ - 9.0.14-servicing.26119.4 + 9.0.15-servicing.26166.1 @@ -132,10 +132,10 @@ - 9.0.14-servicing.26119.3 - 9.0.14-servicing.26119.3 - 9.0.14 - 9.0.14 + 9.0.15-servicing.26169.1 + 9.0.15-servicing.26169.1 + 9.0.15 + 9.0.15 @@ -239,8 +239,8 @@ - 9.0.14-rtm.26119.2 - 9.0.14-rtm.26119.2 + 9.0.15-rtm.26167.6 + 9.0.15-rtm.26167.6 From 1618e8afd5693a8030c942badbb67dfc3ca2462c Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Fri, 20 Mar 2026 22:01:53 +0000 Subject: [PATCH 012/230] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260320.6 On relative base path root Microsoft.Bcl.AsyncInterfaces , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Console , Microsoft.NET.ILLink.Tasks , Microsoft.NETCore.App.Host.win-x64 , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.Win32.SystemEvents , System.CodeDom , System.Composition.AttributedModel , System.Composition.Convention , System.Composition.Hosting , System.Composition.Runtime , System.Composition.TypedParts , System.Configuration.ConfigurationManager , System.Formats.Asn1 , System.Reflection.MetadataLoadContext , System.Resources.Extensions , System.Security.Cryptography.Pkcs , System.Security.Cryptography.ProtectedData , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encoding.CodePages , System.Text.Json , System.Windows.Extensions From Version 9.0.14 -> To Version 9.0.15 Microsoft.NET.HostModel , Microsoft.NETCore.Platforms , VS.Redist.Common.NetCore.SharedFramework.x64.9.0 , VS.Redist.Common.NetCore.TargetingPack.x64.9.0 , Microsoft.SourceBuild.Intermediate.runtime.linux-x64 From Version 9.0.14-servicing.26119.10 -> To Version 9.0.15-servicing.26170.6 --- NuGet.config | 4 +-- eng/Version.Details.xml | 80 ++++++++++++++++++++--------------------- eng/Versions.props | 8 ++--- 3 files changed, 46 insertions(+), 46 deletions(-) diff --git a/NuGet.config b/NuGet.config index b6df98d9cd71..55f37d512b5c 100644 --- a/NuGet.config +++ b/NuGet.config @@ -36,7 +36,7 @@ - + @@ -73,7 +73,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a570769cd4a2..f0ffe5a638c6 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -17,40 +17,40 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 @@ -228,27 +228,27 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop @@ -471,39 +471,39 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore @@ -511,47 +511,47 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 @@ -587,7 +587,7 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - d4bd3feb752ad3c8e2c4707335bca8674db076d8 + 672f4072279654291cc5a88de4b276d226dafeb3 https://github.com/dotnet/arcade-services diff --git a/eng/Versions.props b/eng/Versions.props index bbae9dea713c..203b00bd17ea 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -86,10 +86,10 @@ 9.0.15 - 9.0.15-servicing.26168.12 + 9.0.15-servicing.26170.6 9.0.15 9.0.15 - 9.0.15-servicing.26168.12 + 9.0.15-servicing.26170.6 9.0.15 9.0.15 9.0.15 @@ -97,8 +97,8 @@ 9.0.15 9.0.15 8.0.0-rc.1.23414.4 - 9.0.15-servicing.26168.12 - 9.0.15-servicing.26168.12 + 9.0.15-servicing.26170.6 + 9.0.15-servicing.26170.6 9.0.15 9.0.15 9.0.15 From b356f99d83489f5baa2877713aad617693fafec1 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 20 Mar 2026 22:42:36 +0000 Subject: [PATCH 013/230] Update dependencies from build 307126 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26165.110 -> 10.0.0-preview.26170.111) Microsoft.Build (Version 18.3.3 -> 18.3.3) Microsoft.Build.Localization (Version 18.3.3-servicing-26165-110 -> 18.3.3-servicing-26170-111) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.3.0-rc.16610 -> 7.3.0-rc.17111) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.202 -> 10.0.202) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.3.0-2.26165.110 -> 5.3.0-2.26170.111) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26165.110 -> 10.0.0-beta.26170.111) Microsoft.FSharp.Compiler (Version 15.2.202-servicing.26165.110 -> 15.2.202-servicing.26170.111) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26165-110 -> 18.3.0-release-26170-111) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.202-servicing.26165.110 -> 10.0.202-servicing.26170.111) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 96 ++++++++--------- eng/Version.Details.xml | 220 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 162 insertions(+), 162 deletions(-) diff --git a/NuGet.config b/NuGet.config index b4cefe38af01..2715928474a2 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 7260c61cddad..b1ffc80a0234 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,37 +30,37 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4-servicing.26119.110 10.0.4-servicing.26119.110 - 10.0.0-preview.26165.110 + 10.0.0-preview.26170.111 10.0.4 10.0.4 18.3.3 - 18.3.3-servicing-26165-110 - 7.3.0-rc.16610 + 18.3.3-servicing-26170-111 + 7.3.0-rc.17111 10.0.202 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 10.0.0-preview.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 10.0.0-preview.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 2.0.0-preview.1.26119.110 2.2.4 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 10.0.4 10.0.4 10.0.4-servicing.26119.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 10.0.4 10.0.4 10.0.4 @@ -70,17 +70,17 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 10.0.4 - 15.2.202-servicing.26165.110 + 15.2.202-servicing.26170.111 10.0.4 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 10.0.4-servicing.26119.110 10.0.4 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26165.110 + 10.0.0-preview.26170.111 10.0.4-servicing.26119.110 - 18.3.0-release-26165-110 + 18.3.0-release-26170-111 10.0.4 10.0.4-servicing.26119.110 10.0.202 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.202 10.0.202 10.0.202 - 10.0.202-servicing.26165.110 + 10.0.202-servicing.26170.111 10.0.202 - 10.0.202-servicing.26165.110 + 10.0.202-servicing.26170.111 10.0.202 10.0.202 - 10.0.202-servicing.26165.110 - 18.3.0-release-26165-110 - 18.3.0-release-26165-110 + 10.0.202-servicing.26170.111 + 18.3.0-release-26170-111 + 18.3.0-release-26170-111 3.2.4 10.0.4 10.0.4-servicing.26119.110 10.0.4 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 10.0.4 2.0.4 10.0.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 654ec7be6ff9..59c1ae513bf1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -74,136 +74,136 @@ https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -370,25 +370,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -407,27 +407,27 @@ https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c @@ -514,9 +514,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -524,37 +524,37 @@ - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 115461302edc70fe6e7c8ba73d0b40d328add55c https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 74c305d2ffdd..fe4a62f35fac 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.200", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26165.110", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26165.110", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26170.111", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26170.111", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 2738d46943a4185c589a1ebfc7a4357ec0bbcc7a Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Sat, 21 Mar 2026 05:30:58 +0000 Subject: [PATCH 014/230] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore build 20260320.6 On relative base path root dotnet-dev-certs , dotnet-user-jwts , dotnet-user-secrets , Microsoft.AspNetCore.Analyzers , Microsoft.AspNetCore.App.Ref.Internal , Microsoft.AspNetCore.Components.SdkAnalyzers , Microsoft.AspNetCore.DeveloperCertificates.XPlat , Microsoft.AspNetCore.Mvc.Analyzers , Microsoft.AspNetCore.Mvc.Api.Analyzers , VS.Redist.Common.AspNetCore.SharedFramework.x64.9.0 , Microsoft.SourceBuild.Intermediate.aspnetcore From Version 9.0.14-servicing.26119.9 -> To Version 9.0.15-servicing.26170.6 Microsoft.AspNetCore.App.Ref , Microsoft.AspNetCore.App.Runtime.win-x64 , Microsoft.AspNetCore.Authorization , Microsoft.AspNetCore.Components.Web , Microsoft.AspNetCore.TestHost , Microsoft.Extensions.FileProviders.Embedded , Microsoft.Extensions.ObjectPool , Microsoft.JSInterop From Version 9.0.14 -> To Version 9.0.15 --- NuGet.config | 2 ++ eng/Version.Details.xml | 76 ++++++++++++++++++++--------------------- eng/Versions.props | 26 +++++++------- 3 files changed, 53 insertions(+), 51 deletions(-) diff --git a/NuGet.config b/NuGet.config index 55f37d512b5c..618cabb2a645 100644 --- a/NuGet.config +++ b/NuGet.config @@ -27,6 +27,7 @@ + @@ -71,6 +72,7 @@ + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index f0ffe5a638c6..4c7244f5bd59 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -131,13 +131,13 @@ https://github.com/dotnet/roslyn 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted @@ -271,54 +271,54 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-wpf 0c1686a473c9500e3974e7c1733ad143952fca3c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 @@ -339,21 +339,21 @@ 41f3afd466695ac2460260431537fe4d779ff446 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 @@ -505,9 +505,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime 672f4072279654291cc5a88de4b276d226dafeb3 - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + 4f293341e1528e51280bf5bec41920aa7bafb583 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime diff --git a/eng/Versions.props b/eng/Versions.props index 203b00bd17ea..1bd4805cb41e 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -217,19 +217,19 @@ - 9.0.14 - 9.0.14-servicing.26119.9 - 9.0.14-servicing.26119.9 - 9.0.14-servicing.26119.9 - 9.0.14-servicing.26119.9 - 9.0.14-servicing.26119.9 - 9.0.14 - 9.0.14 - 9.0.14-servicing.26119.9 - 9.0.14-servicing.26119.9 - 9.0.14-servicing.26119.9 - 9.0.14-servicing.26119.9 - 9.0.14-servicing.26119.9 + 9.0.15 + 9.0.15-servicing.26170.6 + 9.0.15-servicing.26170.6 + 9.0.15-servicing.26170.6 + 9.0.15-servicing.26170.6 + 9.0.15-servicing.26170.6 + 9.0.15 + 9.0.15 + 9.0.15-servicing.26170.6 + 9.0.15-servicing.26170.6 + 9.0.15-servicing.26170.6 + 9.0.15-servicing.26170.6 + 9.0.15-servicing.26170.6 From 92dd98b1be45ca81e84175128eaf2f01f0c8e676 Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Sun, 22 Mar 2026 03:59:38 +0000 Subject: [PATCH 015/230] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop build 20260321.1 On relative base path root Microsoft.WindowsDesktop.App.Ref , Microsoft.WindowsDesktop.App.Runtime.win-x64 From Version 9.0.14 -> To Version 9.0.15 VS.Redist.Common.WindowsDesktop.SharedFramework.x64.9.0 , VS.Redist.Common.WindowsDesktop.TargetingPack.x64.9.0 From Version 9.0.14-servicing.26119.3 -> To Version 9.0.15-servicing.26171.1 Dependency coherency updates On relative base path root Microsoft.NET.Sdk.WindowsDesktop From Version 9.0.14-rtm.26119.2 -> To Version 9.0.15-rtm.26170.2 (parent: Microsoft.WindowsDesktop.App.Ref) Microsoft.Dotnet.WinForms.ProjectTemplates From Version 9.0.14-servicing.26119.4 -> To Version 9.0.15-servicing.26170.1 (parent: Microsoft.WindowsDesktop.App.Runtime.win-x64) Microsoft.DotNet.Wpf.ProjectTemplates From Version 9.0.14-rtm.26119.2 -> To Version 9.0.15-rtm.26170.2 (parent: Microsoft.WindowsDesktop.App.Runtime.win-x64) --- NuGet.config | 4 ++-- eng/Version.Details.xml | 24 ++++++++++++------------ eng/Versions.props | 10 +++++----- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/NuGet.config b/NuGet.config index 618cabb2a645..2991c360e499 100644 --- a/NuGet.config +++ b/NuGet.config @@ -43,7 +43,7 @@ - + @@ -78,7 +78,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 4c7244f5bd59..40c823f54473 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -252,24 +252,24 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 183e13570b127f34c5f2669378920cf3fe080786 + 9cb679f2feb9ad5228a7e45f3675f6d43a22effc - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 183e13570b127f34c5f2669378920cf3fe080786 + 9cb679f2feb9ad5228a7e45f3675f6d43a22effc https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 183e13570b127f34c5f2669378920cf3fe080786 + 9cb679f2feb9ad5228a7e45f3675f6d43a22effc - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 183e13570b127f34c5f2669378920cf3fe080786 + 9cb679f2feb9ad5228a7e45f3675f6d43a22effc - + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 0c1686a473c9500e3974e7c1733ad143952fca3c + f4723a5d3212e9e57fee2597875307f0896ba4b4 https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore @@ -356,13 +356,13 @@ 4f293341e1528e51280bf5bec41920aa7bafb583 - + https://dev.azure.com/dnceng/internal/_git/dotnet-winforms - e7effd79b8343b1a10e02e483bd870d34067d29c + 5a1c1eaad2d2d938bf62793f65e847c69c9d1a06 - + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 0c1686a473c9500e3974e7c1733ad143952fca3c + f4723a5d3212e9e57fee2597875307f0896ba4b4 https://github.com/dotnet/xdt diff --git a/eng/Versions.props b/eng/Versions.props index 1bd4805cb41e..1d5c9d51b4e0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -81,7 +81,7 @@ - 9.0.15-servicing.26166.1 + 9.0.15-servicing.26170.1 @@ -132,8 +132,8 @@ - 9.0.15-servicing.26169.1 - 9.0.15-servicing.26169.1 + 9.0.15-servicing.26171.1 + 9.0.15-servicing.26171.1 9.0.15 9.0.15 @@ -239,8 +239,8 @@ - 9.0.15-rtm.26167.6 - 9.0.15-rtm.26167.6 + 9.0.15-rtm.26170.2 + 9.0.15-rtm.26170.2 From 5a401fc9a81a0cd5250faac59e276bdc11bbb285 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Mon, 23 Mar 2026 03:59:47 +0000 Subject: [PATCH 016/230] Update dependencies from build 307266 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.6-servicing.26170.102 -> 10.0.6-servicing.26171.105) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.6 -> 10.0.6) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26170.102 -> 10.0.0-preview.26171.105) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26170-102 -> 18.0.11-servicing-26171-105) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.17102 -> 7.0.2-rc.17205) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.106 -> 10.0.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26170.102 -> 5.0.0-2.26171.105) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26170.102 -> 2.0.0-preview.1.26171.105) Microsoft.DiaSymReader (Version 2.2.6 -> 2.2.6) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26170.102 -> 10.0.0-beta.26171.105) Microsoft.FSharp.Compiler (Version 14.0.106-servicing.26170.102 -> 14.0.106-servicing.26171.105) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26170-102 -> 18.0.2-release-26171-105) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.106-servicing.26170.102 -> 10.0.106-servicing.26171.105) Microsoft.Web.Xdt (Version 3.2.6 -> 3.2.6) System.CommandLine (Version 2.0.6 -> 2.0.6) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 262 insertions(+), 262 deletions(-) diff --git a/NuGet.config b/NuGet.config index 67f6bbfd947d..0aaa6a0edb4d 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index caef7dcdb9e2..5d0451894a8e 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26170.102 - 10.0.6-servicing.26170.102 - 10.0.6-servicing.26170.102 - 10.0.6-servicing.26170.102 + 10.0.6-servicing.26171.105 + 10.0.6-servicing.26171.105 + 10.0.6-servicing.26171.105 + 10.0.6-servicing.26171.105 10.0.6 - 10.0.6-servicing.26170.102 + 10.0.6-servicing.26171.105 10.0.6 10.0.6 10.0.6 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26170.102 + 10.0.6-servicing.26171.105 10.0.6 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26170.102 + 10.0.6-servicing.26171.105 10.0.6 - 10.0.6-servicing.26170.102 - 10.0.6-servicing.26170.102 - 10.0.0-preview.26170.102 + 10.0.6-servicing.26171.105 + 10.0.6-servicing.26171.105 + 10.0.0-preview.26171.105 10.0.6 10.0.6 18.0.11 - 18.0.11-servicing-26170-102 - 7.0.2-rc.17102 + 18.0.11-servicing-26171-105 + 7.0.2-rc.17205 10.0.106 - 5.0.0-2.26170.102 - 5.0.0-2.26170.102 - 5.0.0-2.26170.102 - 5.0.0-2.26170.102 - 5.0.0-2.26170.102 - 5.0.0-2.26170.102 - 5.0.0-2.26170.102 - 10.0.0-preview.26170.102 - 5.0.0-2.26170.102 - 5.0.0-2.26170.102 - 2.0.0-preview.1.26170.102 + 5.0.0-2.26171.105 + 5.0.0-2.26171.105 + 5.0.0-2.26171.105 + 5.0.0-2.26171.105 + 5.0.0-2.26171.105 + 5.0.0-2.26171.105 + 5.0.0-2.26171.105 + 10.0.0-preview.26171.105 + 5.0.0-2.26171.105 + 5.0.0-2.26171.105 + 2.0.0-preview.1.26171.105 2.2.6 - 10.0.0-beta.26170.102 - 10.0.0-beta.26170.102 - 10.0.0-beta.26170.102 - 10.0.0-beta.26170.102 - 10.0.0-beta.26170.102 - 10.0.0-beta.26170.102 + 10.0.0-beta.26171.105 + 10.0.0-beta.26171.105 + 10.0.0-beta.26171.105 + 10.0.0-beta.26171.105 + 10.0.0-beta.26171.105 + 10.0.0-beta.26171.105 10.0.6 10.0.6 - 10.0.6-servicing.26170.102 - 10.0.6-servicing.26170.102 - 10.0.0-beta.26170.102 - 10.0.0-beta.26170.102 + 10.0.6-servicing.26171.105 + 10.0.6-servicing.26171.105 + 10.0.0-beta.26171.105 + 10.0.0-beta.26171.105 10.0.6 10.0.6 10.0.6 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 14.0.106-servicing.26170.102 + 14.0.106-servicing.26171.105 10.0.6 - 5.0.0-2.26170.102 - 5.0.0-2.26170.102 - 10.0.6-servicing.26170.102 + 5.0.0-2.26171.105 + 5.0.0-2.26171.105 + 10.0.6-servicing.26171.105 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26170.102 - 10.0.6-servicing.26170.102 - 18.0.2-release-26170-102 + 10.0.0-preview.26171.105 + 10.0.6-servicing.26171.105 + 18.0.2-release-26171-105 10.0.6 - 10.0.6-servicing.26170.102 + 10.0.6-servicing.26171.105 10.0.106 10.0.106 10.0.106 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.106 10.0.106 10.0.106 - 10.0.106-servicing.26170.102 + 10.0.106-servicing.26171.105 10.0.106 - 10.0.106-servicing.26170.102 + 10.0.106-servicing.26171.105 10.0.106 10.0.106 - 10.0.106-servicing.26170.102 - 18.0.2-release-26170-102 - 18.0.2-release-26170-102 + 10.0.106-servicing.26171.105 + 18.0.2-release-26171-105 + 18.0.2-release-26171-105 3.2.6 10.0.6 - 10.0.6-servicing.26170.102 + 10.0.6-servicing.26171.105 10.0.6 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 - 7.0.2-rc.17102 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 + 7.0.2-rc.17205 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 5e4be31ea477..9e29bd9b6a42 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f - + https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - df857aec34b5feea2cfd528e7a44575aa9f75330 + 6041df6c13c4654878425f69649f6099d0b8d15f diff --git a/global.json b/global.json index ed0007f2d138..e1ef6d38830f 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26170.102", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26170.102", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26171.105", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26171.105", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 5f61638b3b44740deb85a84692945faa8bacf27d Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Mon, 23 Mar 2026 04:08:43 +0000 Subject: [PATCH 017/230] Update dependencies from build 307268 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.6-servicing.26171.105 -> 10.0.6-servicing.26172.102) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.6 -> 10.0.6) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26171.105 -> 10.0.0-preview.26172.102) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26171-105 -> 18.0.11-servicing-26172-102) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.17205 -> 7.0.2-rc.17302) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.106 -> 10.0.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26171.105 -> 5.0.0-2.26172.102) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26171.105 -> 2.0.0-preview.1.26172.102) Microsoft.DiaSymReader (Version 2.2.6 -> 2.2.6) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26171.105 -> 10.0.0-beta.26172.102) Microsoft.FSharp.Compiler (Version 14.0.106-servicing.26171.105 -> 14.0.106-servicing.26172.102) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26171-105 -> 18.0.2-release-26172-102) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.106-servicing.26171.105 -> 10.0.106-servicing.26172.102) Microsoft.Web.Xdt (Version 3.2.6 -> 3.2.6) System.CommandLine (Version 2.0.6 -> 2.0.6) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 262 insertions(+), 262 deletions(-) diff --git a/NuGet.config b/NuGet.config index 0aaa6a0edb4d..58b3a032bd8b 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 5d0451894a8e..638639b3f161 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26171.105 - 10.0.6-servicing.26171.105 - 10.0.6-servicing.26171.105 - 10.0.6-servicing.26171.105 + 10.0.6-servicing.26172.102 + 10.0.6-servicing.26172.102 + 10.0.6-servicing.26172.102 + 10.0.6-servicing.26172.102 10.0.6 - 10.0.6-servicing.26171.105 + 10.0.6-servicing.26172.102 10.0.6 10.0.6 10.0.6 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26171.105 + 10.0.6-servicing.26172.102 10.0.6 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26171.105 + 10.0.6-servicing.26172.102 10.0.6 - 10.0.6-servicing.26171.105 - 10.0.6-servicing.26171.105 - 10.0.0-preview.26171.105 + 10.0.6-servicing.26172.102 + 10.0.6-servicing.26172.102 + 10.0.0-preview.26172.102 10.0.6 10.0.6 18.0.11 - 18.0.11-servicing-26171-105 - 7.0.2-rc.17205 + 18.0.11-servicing-26172-102 + 7.0.2-rc.17302 10.0.106 - 5.0.0-2.26171.105 - 5.0.0-2.26171.105 - 5.0.0-2.26171.105 - 5.0.0-2.26171.105 - 5.0.0-2.26171.105 - 5.0.0-2.26171.105 - 5.0.0-2.26171.105 - 10.0.0-preview.26171.105 - 5.0.0-2.26171.105 - 5.0.0-2.26171.105 - 2.0.0-preview.1.26171.105 + 5.0.0-2.26172.102 + 5.0.0-2.26172.102 + 5.0.0-2.26172.102 + 5.0.0-2.26172.102 + 5.0.0-2.26172.102 + 5.0.0-2.26172.102 + 5.0.0-2.26172.102 + 10.0.0-preview.26172.102 + 5.0.0-2.26172.102 + 5.0.0-2.26172.102 + 2.0.0-preview.1.26172.102 2.2.6 - 10.0.0-beta.26171.105 - 10.0.0-beta.26171.105 - 10.0.0-beta.26171.105 - 10.0.0-beta.26171.105 - 10.0.0-beta.26171.105 - 10.0.0-beta.26171.105 + 10.0.0-beta.26172.102 + 10.0.0-beta.26172.102 + 10.0.0-beta.26172.102 + 10.0.0-beta.26172.102 + 10.0.0-beta.26172.102 + 10.0.0-beta.26172.102 10.0.6 10.0.6 - 10.0.6-servicing.26171.105 - 10.0.6-servicing.26171.105 - 10.0.0-beta.26171.105 - 10.0.0-beta.26171.105 + 10.0.6-servicing.26172.102 + 10.0.6-servicing.26172.102 + 10.0.0-beta.26172.102 + 10.0.0-beta.26172.102 10.0.6 10.0.6 10.0.6 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 14.0.106-servicing.26171.105 + 14.0.106-servicing.26172.102 10.0.6 - 5.0.0-2.26171.105 - 5.0.0-2.26171.105 - 10.0.6-servicing.26171.105 + 5.0.0-2.26172.102 + 5.0.0-2.26172.102 + 10.0.6-servicing.26172.102 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26171.105 - 10.0.6-servicing.26171.105 - 18.0.2-release-26171-105 + 10.0.0-preview.26172.102 + 10.0.6-servicing.26172.102 + 18.0.2-release-26172-102 10.0.6 - 10.0.6-servicing.26171.105 + 10.0.6-servicing.26172.102 10.0.106 10.0.106 10.0.106 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.106 10.0.106 10.0.106 - 10.0.106-servicing.26171.105 + 10.0.106-servicing.26172.102 10.0.106 - 10.0.106-servicing.26171.105 + 10.0.106-servicing.26172.102 10.0.106 10.0.106 - 10.0.106-servicing.26171.105 - 18.0.2-release-26171-105 - 18.0.2-release-26171-105 + 10.0.106-servicing.26172.102 + 18.0.2-release-26172-102 + 18.0.2-release-26172-102 3.2.6 10.0.6 - 10.0.6-servicing.26171.105 + 10.0.6-servicing.26172.102 10.0.6 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 - 7.0.2-rc.17205 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 + 7.0.2-rc.17302 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9e29bd9b6a42..328c746e07e5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 - + https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - 6041df6c13c4654878425f69649f6099d0b8d15f + 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 diff --git a/global.json b/global.json index e1ef6d38830f..23310fdad516 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26171.105", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26171.105", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26172.102", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26172.102", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 818239ff91948a0b83a3dc1ba3792b1fcfe90df2 Mon Sep 17 00:00:00 2001 From: Noah Gilson Date: Mon, 23 Mar 2026 14:40:23 -0700 Subject: [PATCH 018/230] exclude overlayed targets in the runtime from stage 0 as bad architecture files may get consumed as we auto default to x64 --- src/Layout/redist/targets/OverlaySdkOnLKG.targets | 8 ++++++-- .../src/Microsoft.CodeAnalysis.NetAnalyzers.sarif | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Layout/redist/targets/OverlaySdkOnLKG.targets b/src/Layout/redist/targets/OverlaySdkOnLKG.targets index 54a82b807a82..aca3be5ac7a9 100644 --- a/src/Layout/redist/targets/OverlaySdkOnLKG.targets +++ b/src/Layout/redist/targets/OverlaySdkOnLKG.targets @@ -14,12 +14,16 @@ + Ignore the sdk, templates and host files for which only live built artifacts should be used. + Also exclude stage0 shared frameworks in the current major.minor band that don't match the + built runtime version, as they may have a different architecture than the target. --> <_OverlaySDKFile Include="$(_DotNetHiveRoot)\**\*" Exclude="$(_DotNetHiveRoot)sdk\**\*; $(_DotNetHiveRoot)templates\**\*; - $(_DotNetHiveRoot)host\**\*"/> + $(_DotNetHiveRoot)host\**\*; + $(_DotNetHiveRoot)shared\Microsoft.NETCore.App\$(MajorMinorVersion).*\**\*; + $(_DotNetHiveRoot)shared\Microsoft.AspNetCore.App\$(MajorMinorVersion).*\**\*"/> diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif index 3a511619a536..cf84411022e6 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif @@ -7092,4 +7092,4 @@ } } ] -} +} \ No newline at end of file From 2d70f992ec65f0e3d3c5701a28fcf5bd4ca38130 Mon Sep 17 00:00:00 2001 From: Noah Gilson Date: Mon, 23 Mar 2026 15:53:20 -0700 Subject: [PATCH 019/230] only replace the staged files if the arch mismatches --- .../redist/targets/OverlaySdkOnLKG.targets | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/Layout/redist/targets/OverlaySdkOnLKG.targets b/src/Layout/redist/targets/OverlaySdkOnLKG.targets index aca3be5ac7a9..794048905958 100644 --- a/src/Layout/redist/targets/OverlaySdkOnLKG.targets +++ b/src/Layout/redist/targets/OverlaySdkOnLKG.targets @@ -14,16 +14,12 @@ + Ignore the sdk, templates and host files for which only live built artifacts should be used. --> <_OverlaySDKFile Include="$(_DotNetHiveRoot)\**\*" Exclude="$(_DotNetHiveRoot)sdk\**\*; $(_DotNetHiveRoot)templates\**\*; - $(_DotNetHiveRoot)host\**\*; - $(_DotNetHiveRoot)shared\Microsoft.NETCore.App\$(MajorMinorVersion).*\**\*; - $(_DotNetHiveRoot)shared\Microsoft.AspNetCore.App\$(MajorMinorVersion).*\**\*"/> + $(_DotNetHiveRoot)host\**\*"/> @@ -42,6 +38,22 @@ SkipUnchangedFiles="true" UseHardLinksIfPossible="false" /> + + + <_Stage0NETCoreSharedFxDir Include="$([System.IO.Directory]::GetDirectories('$(TestHostDotNetRoot)shared/Microsoft.NETCore.App', '$(MajorMinorVersion).*'))" /> + <_Stage0NETCoreSharedFxDir Remove="$(TestHostDotNetRoot)shared/Microsoft.NETCore.App/$(MicrosoftNETCoreAppRuntimePackageVersion)" /> + + <_BuiltNETCoreSharedFxFile Include="$(TestHostDotNetRoot)shared/Microsoft.NETCore.App/$(MicrosoftNETCoreAppRuntimePackageVersion)/**/*" /> + + + + From a348c29832e4bb96c72ab779d5719f7757d2d067 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 24 Mar 2026 00:05:10 +0000 Subject: [PATCH 020/230] Update dependencies from build 307387 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.6-servicing.26172.102 -> 10.0.6-servicing.26173.108) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.6 -> 10.0.6) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26172.102 -> 10.0.0-preview.26173.108) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26172-102 -> 18.0.11-servicing-26173-108) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.17302 -> 7.0.2-rc.17408) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.106 -> 10.0.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26172.102 -> 5.0.0-2.26173.108) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26172.102 -> 2.0.0-preview.1.26173.108) Microsoft.DiaSymReader (Version 2.2.6 -> 2.2.6) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26172.102 -> 10.0.0-beta.26173.108) Microsoft.FSharp.Compiler (Version 14.0.106-servicing.26172.102 -> 14.0.106-servicing.26173.108) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26172-102 -> 18.0.2-release-26173-108) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.106-servicing.26172.102 -> 10.0.106-servicing.26173.108) Microsoft.Web.Xdt (Version 3.2.6 -> 3.2.6) System.CommandLine (Version 2.0.6 -> 2.0.6) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 262 insertions(+), 262 deletions(-) diff --git a/NuGet.config b/NuGet.config index 58b3a032bd8b..a5f6382afb7d 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 638639b3f161..573dce162c82 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26172.102 - 10.0.6-servicing.26172.102 - 10.0.6-servicing.26172.102 - 10.0.6-servicing.26172.102 + 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.108 10.0.6 - 10.0.6-servicing.26172.102 + 10.0.6-servicing.26173.108 10.0.6 10.0.6 10.0.6 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26172.102 + 10.0.6-servicing.26173.108 10.0.6 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26172.102 + 10.0.6-servicing.26173.108 10.0.6 - 10.0.6-servicing.26172.102 - 10.0.6-servicing.26172.102 - 10.0.0-preview.26172.102 + 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.108 + 10.0.0-preview.26173.108 10.0.6 10.0.6 18.0.11 - 18.0.11-servicing-26172-102 - 7.0.2-rc.17302 + 18.0.11-servicing-26173-108 + 7.0.2-rc.17408 10.0.106 - 5.0.0-2.26172.102 - 5.0.0-2.26172.102 - 5.0.0-2.26172.102 - 5.0.0-2.26172.102 - 5.0.0-2.26172.102 - 5.0.0-2.26172.102 - 5.0.0-2.26172.102 - 10.0.0-preview.26172.102 - 5.0.0-2.26172.102 - 5.0.0-2.26172.102 - 2.0.0-preview.1.26172.102 + 5.0.0-2.26173.108 + 5.0.0-2.26173.108 + 5.0.0-2.26173.108 + 5.0.0-2.26173.108 + 5.0.0-2.26173.108 + 5.0.0-2.26173.108 + 5.0.0-2.26173.108 + 10.0.0-preview.26173.108 + 5.0.0-2.26173.108 + 5.0.0-2.26173.108 + 2.0.0-preview.1.26173.108 2.2.6 - 10.0.0-beta.26172.102 - 10.0.0-beta.26172.102 - 10.0.0-beta.26172.102 - 10.0.0-beta.26172.102 - 10.0.0-beta.26172.102 - 10.0.0-beta.26172.102 + 10.0.0-beta.26173.108 + 10.0.0-beta.26173.108 + 10.0.0-beta.26173.108 + 10.0.0-beta.26173.108 + 10.0.0-beta.26173.108 + 10.0.0-beta.26173.108 10.0.6 10.0.6 - 10.0.6-servicing.26172.102 - 10.0.6-servicing.26172.102 - 10.0.0-beta.26172.102 - 10.0.0-beta.26172.102 + 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.108 + 10.0.0-beta.26173.108 + 10.0.0-beta.26173.108 10.0.6 10.0.6 10.0.6 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 14.0.106-servicing.26172.102 + 14.0.106-servicing.26173.108 10.0.6 - 5.0.0-2.26172.102 - 5.0.0-2.26172.102 - 10.0.6-servicing.26172.102 + 5.0.0-2.26173.108 + 5.0.0-2.26173.108 + 10.0.6-servicing.26173.108 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26172.102 - 10.0.6-servicing.26172.102 - 18.0.2-release-26172-102 + 10.0.0-preview.26173.108 + 10.0.6-servicing.26173.108 + 18.0.2-release-26173-108 10.0.6 - 10.0.6-servicing.26172.102 + 10.0.6-servicing.26173.108 10.0.106 10.0.106 10.0.106 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.106 10.0.106 10.0.106 - 10.0.106-servicing.26172.102 + 10.0.106-servicing.26173.108 10.0.106 - 10.0.106-servicing.26172.102 + 10.0.106-servicing.26173.108 10.0.106 10.0.106 - 10.0.106-servicing.26172.102 - 18.0.2-release-26172-102 - 18.0.2-release-26172-102 + 10.0.106-servicing.26173.108 + 18.0.2-release-26173-108 + 18.0.2-release-26173-108 3.2.6 10.0.6 - 10.0.6-servicing.26172.102 + 10.0.6-servicing.26173.108 10.0.6 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 - 7.0.2-rc.17302 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 + 7.0.2-rc.17408 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 328c746e07e5..e912555e543a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 - + https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - 8aa2738d3bdb38df89821c66dd8a41b9b73dc174 + ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 diff --git a/global.json b/global.json index 23310fdad516..4adbefa7b9f7 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26172.102", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26172.102", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26173.108", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26173.108", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 132fd0148c58cff51b8da30521f6c0edba19abd3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 04:29:08 +0000 Subject: [PATCH 021/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 266 +++++++-------- eng/Version.Details.xml | 673 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 475 insertions(+), 474 deletions(-) diff --git a/NuGet.config b/NuGet.config index a5f6382afb7d..b4cefe38af01 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 573dce162c82..7260c61cddad 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,139 +8,139 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 - 10.0.6 - 10.0.6-servicing.26173.108 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26173.108 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26173.108 - 10.0.6 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 - 10.0.0-preview.26173.108 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26173-108 - 7.0.2-rc.17408 - 10.0.106 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 10.0.0-preview.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 2.0.0-preview.1.26173.108 - 2.2.6 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26173.108 - 10.0.6 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 10.0.6-servicing.26173.108 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26165.110 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26165-110 + 7.3.0-rc.16610 + 10.0.202 + 5.3.0-2.26165.110 + 5.3.0-2.26165.110 + 5.3.0-2.26165.110 + 5.3.0-2.26165.110 + 5.3.0-2.26165.110 + 5.3.0-2.26165.110 + 5.3.0-2.26165.110 + 5.3.0-2.26165.110 + 10.0.0-preview.26165.110 + 5.3.0-2.26165.110 + 5.3.0-2.26165.110 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26165.110 + 10.0.0-beta.26165.110 + 10.0.0-beta.26165.110 + 10.0.0-beta.26165.110 + 10.0.0-beta.26165.110 + 10.0.0-beta.26165.110 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26165.110 + 10.0.0-beta.26165.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26165.110 + 10.0.4 + 5.3.0-2.26165.110 + 5.3.0-2.26165.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26173.108 - 10.0.6-servicing.26173.108 - 18.0.2-release-26173-108 - 10.0.6 - 10.0.6-servicing.26173.108 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26173.108 - 10.0.106 - 10.0.106-servicing.26173.108 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26173.108 - 18.0.2-release-26173-108 - 18.0.2-release-26173-108 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26173.108 - 10.0.6 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26165.110 + 10.0.4-servicing.26119.110 + 18.3.0-release-26165-110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26165.110 + 10.0.202 + 10.0.202-servicing.26165.110 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26165.110 + 18.3.0-release-26165-110 + 18.3.0-release-26165-110 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 7.3.0-rc.16610 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 2.2.0-preview.26163.4 4.2.0-preview.26163.4 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e912555e543a..654ec7be6ff9 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 https://github.com/microsoft/testfx @@ -569,9 +568,9 @@ https://github.com/microsoft/testfx 85dfe511d8e4111cea9f0e1a308dc66d7973469b - - https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 4adbefa7b9f7..74c305d2ffdd 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.200", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26173.108", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26173.108", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26165.110", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26165.110", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From a2f09f332651e0921d9a74320615b7d1022ebc3a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 24 Mar 2026 07:24:15 +0000 Subject: [PATCH 022/230] Update dependencies from build 307443 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.6-servicing.26173.108 -> 10.0.6-servicing.26173.116) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.6 -> 10.0.6) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26173.108 -> 10.0.0-preview.26173.116) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26173-108 -> 18.0.11-servicing-26173-116) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.17408 -> 7.0.2-rc.17416) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.106 -> 10.0.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26173.108 -> 5.0.0-2.26173.116) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26173.108 -> 2.0.0-preview.1.26173.116) Microsoft.DiaSymReader (Version 2.2.6 -> 2.2.6) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26173.108 -> 10.0.0-beta.26173.116) Microsoft.FSharp.Compiler (Version 14.0.106-servicing.26173.108 -> 14.0.106-servicing.26173.116) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26173-108 -> 18.0.2-release-26173-116) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.106-servicing.26173.108 -> 10.0.106-servicing.26173.116) Microsoft.Web.Xdt (Version 3.2.6 -> 3.2.6) System.CommandLine (Version 2.0.6 -> 2.0.6) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 262 insertions(+), 262 deletions(-) diff --git a/NuGet.config b/NuGet.config index a5f6382afb7d..1ec44c35d231 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 573dce162c82..2bc396ccaead 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.116 + 10.0.6-servicing.26173.116 + 10.0.6-servicing.26173.116 + 10.0.6-servicing.26173.116 10.0.6 - 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.116 10.0.6 10.0.6 10.0.6 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.116 10.0.6 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.116 10.0.6 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 - 10.0.0-preview.26173.108 + 10.0.6-servicing.26173.116 + 10.0.6-servicing.26173.116 + 10.0.0-preview.26173.116 10.0.6 10.0.6 18.0.11 - 18.0.11-servicing-26173-108 - 7.0.2-rc.17408 + 18.0.11-servicing-26173-116 + 7.0.2-rc.17416 10.0.106 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 10.0.0-preview.26173.108 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 2.0.0-preview.1.26173.108 + 5.0.0-2.26173.116 + 5.0.0-2.26173.116 + 5.0.0-2.26173.116 + 5.0.0-2.26173.116 + 5.0.0-2.26173.116 + 5.0.0-2.26173.116 + 5.0.0-2.26173.116 + 10.0.0-preview.26173.116 + 5.0.0-2.26173.116 + 5.0.0-2.26173.116 + 2.0.0-preview.1.26173.116 2.2.6 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 + 10.0.0-beta.26173.116 + 10.0.0-beta.26173.116 + 10.0.0-beta.26173.116 + 10.0.0-beta.26173.116 + 10.0.0-beta.26173.116 + 10.0.0-beta.26173.116 10.0.6 10.0.6 - 10.0.6-servicing.26173.108 - 10.0.6-servicing.26173.108 - 10.0.0-beta.26173.108 - 10.0.0-beta.26173.108 + 10.0.6-servicing.26173.116 + 10.0.6-servicing.26173.116 + 10.0.0-beta.26173.116 + 10.0.0-beta.26173.116 10.0.6 10.0.6 10.0.6 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 14.0.106-servicing.26173.108 + 14.0.106-servicing.26173.116 10.0.6 - 5.0.0-2.26173.108 - 5.0.0-2.26173.108 - 10.0.6-servicing.26173.108 + 5.0.0-2.26173.116 + 5.0.0-2.26173.116 + 10.0.6-servicing.26173.116 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26173.108 - 10.0.6-servicing.26173.108 - 18.0.2-release-26173-108 + 10.0.0-preview.26173.116 + 10.0.6-servicing.26173.116 + 18.0.2-release-26173-116 10.0.6 - 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.116 10.0.106 10.0.106 10.0.106 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.106 10.0.106 10.0.106 - 10.0.106-servicing.26173.108 + 10.0.106-servicing.26173.116 10.0.106 - 10.0.106-servicing.26173.108 + 10.0.106-servicing.26173.116 10.0.106 10.0.106 - 10.0.106-servicing.26173.108 - 18.0.2-release-26173-108 - 18.0.2-release-26173-108 + 10.0.106-servicing.26173.116 + 18.0.2-release-26173-116 + 18.0.2-release-26173-116 3.2.6 10.0.6 - 10.0.6-servicing.26173.108 + 10.0.6-servicing.26173.116 10.0.6 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 - 7.0.2-rc.17408 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 + 7.0.2-rc.17416 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e912555e543a..063419a6da62 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - ad5e0a16d8b6727cd10ed60efd8e13edd82e24f7 + 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 diff --git a/global.json b/global.json index 4adbefa7b9f7..5a5b1f80a5c3 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26173.108", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26173.108", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26173.116", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26173.116", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 9f83bb402c3d3d22b41e25972a5d06cfdb5eee1b Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Tue, 24 Mar 2026 09:09:55 -0700 Subject: [PATCH 023/230] Fix typo in test project --- .../GivenThatWeWantToPublishWithIfDifferent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs index 5b7add2b7e3b..6029fe2024db 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishWithIfDifferent.cs @@ -486,7 +486,7 @@ public void It_publishes_content_with_comma_in_filename() var projectContent = File.ReadAllText(projectFile); projectContent = projectContent.Replace("", @" - + "); File.WriteAllText(projectFile, projectContent); From 5522bcce3590fb6df654416709694d8cfc6ec3a9 Mon Sep 17 00:00:00 2001 From: Noah Gilson Date: Tue, 24 Mar 2026 11:12:25 -0700 Subject: [PATCH 024/230] Fix MSB4043: qualified metadata reference in item transform Move the cross-compilation shared framework copy into a separate target (OverwriteStage0SharedFxForCrossCompilation) that uses target batching via Outputs=%(_Stage0NETCoreSharedFxDir.Identity). This captures each directory identity into a property that can be safely used inside the @(_BuiltNETCoreSharedFxFile) item transform, avoiding both: - MSB4043: qualified metadata reference inside a transform - MSB3026: copy-to-self when using unqualified %(Identity) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../redist/targets/OverlaySdkOnLKG.targets | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Layout/redist/targets/OverlaySdkOnLKG.targets b/src/Layout/redist/targets/OverlaySdkOnLKG.targets index 794048905958..d6bbe26bff1a 100644 --- a/src/Layout/redist/targets/OverlaySdkOnLKG.targets +++ b/src/Layout/redist/targets/OverlaySdkOnLKG.targets @@ -49,16 +49,27 @@ <_BuiltNETCoreSharedFxFile Include="$(TestHostDotNetRoot)shared/Microsoft.NETCore.App/$(MicrosoftNETCoreAppRuntimePackageVersion)/**/*" /> - - + + + + <_CurrentStage0FxDir>%(_Stage0NETCoreSharedFxDir.Identity) + + + + + From 7098c825905b0bae7b731b382ba0bce631cc1bdb Mon Sep 17 00:00:00 2001 From: Noah Gilson Date: Tue, 24 Mar 2026 13:29:34 -0700 Subject: [PATCH 025/230] Also overwrite stage0 Microsoft.AspNetCore.App for cross-compilation The cross-compilation overlay only handled Microsoft.NETCore.App, leaving stage0 Microsoft.AspNetCore.App native binaries with the build machine's architecture. This caused BadImageFormatException in tests that start ASP.NET Core servers (e.g. Aspire tests) when cross-compiling for a different architecture. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../redist/targets/OverlaySdkOnLKG.targets | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Layout/redist/targets/OverlaySdkOnLKG.targets b/src/Layout/redist/targets/OverlaySdkOnLKG.targets index d6bbe26bff1a..02a281245d77 100644 --- a/src/Layout/redist/targets/OverlaySdkOnLKG.targets +++ b/src/Layout/redist/targets/OverlaySdkOnLKG.targets @@ -47,6 +47,11 @@ <_Stage0NETCoreSharedFxDir Remove="$(TestHostDotNetRoot)shared/Microsoft.NETCore.App/$(MicrosoftNETCoreAppRuntimePackageVersion)" /> <_BuiltNETCoreSharedFxFile Include="$(TestHostDotNetRoot)shared/Microsoft.NETCore.App/$(MicrosoftNETCoreAppRuntimePackageVersion)/**/*" /> + + <_Stage0AspNetCoreSharedFxDir Include="$([System.IO.Directory]::GetDirectories('$(TestHostDotNetRoot)shared/Microsoft.AspNetCore.App', '$(MajorMinorVersion).*'))" /> + <_Stage0AspNetCoreSharedFxDir Remove="$(TestHostDotNetRoot)shared/Microsoft.AspNetCore.App/$(MicrosoftAspNetCoreAppRuntimePackageVersion)" /> + + <_BuiltAspNetCoreSharedFxFile Include="$(TestHostDotNetRoot)shared/Microsoft.AspNetCore.App/$(MicrosoftAspNetCoreAppRuntimePackageVersion)/**/*" /> + Each target runs once per stage0 shared framework directory, capturing its Identity in a + property that can be safely used inside the item transform. --> + + + <_CurrentStage0FxDir>%(_Stage0AspNetCoreSharedFxDir.Identity) + + + + + From ab67809702e4eb745b48ce2e284d4ac2395ec4b0 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 23:20:55 +0000 Subject: [PATCH 026/230] [release/10.0.3xx] Source code updates from dotnet/dotnet (#53575) [release/10.0.3xx] Source code updates from dotnet/dotnet --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 48a4b16d519c..fe5af9650d2b 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26173.111 + 10.0.0-preview.26174.106 10.0.5 10.0.5 - 18.6.0-preview-26173-111 - 18.6.0-preview-26173-111 - 7.6.0-rc.17411 - 10.0.300-alpha.26173.111 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 - 10.0.0-preview.26173.111 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 + 18.6.0-preview-26174-106 + 18.6.0-preview-26174-106 + 7.6.0-rc.17506 + 10.0.300-alpha.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 10.0.0-preview.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26173.111 - 10.0.0-beta.26173.111 - 10.0.0-beta.26173.111 - 10.0.0-beta.26173.111 - 10.0.0-beta.26173.111 - 10.0.0-beta.26173.111 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26173.111 - 10.0.0-beta.26173.111 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26173.111 + 15.2.300-servicing.26174.106 10.0.5 - 5.6.0-2.26173.111 - 5.6.0-2.26173.111 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26173.111 + 10.0.0-preview.26174.106 10.0.5-servicing.26153.111 - 18.3.0-release-26173-111 + 18.3.0-release-26174-106 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26173.111 - 10.0.300-alpha.26173.111 - 10.0.300-alpha.26173.111 - 10.0.300-alpha.26173.111 - 10.0.300-alpha.26173.111 - 10.0.300-preview.26173.111 - 10.0.300-preview.26173.111 - 10.0.300-preview.26173.111 - 10.0.300-preview.26173.111 - 10.0.300-preview.26173.111 - 10.0.300-preview.26173.111 - 10.0.300-preview.26173.111 - 10.0.300-preview.26173.111 - 10.0.300-preview.26173.111 - 18.3.0-release-26173-111 - 18.3.0-release-26173-111 + 10.0.300-alpha.26174.106 + 10.0.300-alpha.26174.106 + 10.0.300-alpha.26174.106 + 10.0.300-alpha.26174.106 + 10.0.300-alpha.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 18.3.0-release-26174-106 + 18.3.0-release-26174-106 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 - 7.6.0-rc.17411 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 1bbe73725c92..d498242e1c11 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 4bf356979576e49df34287d2de49dcb600a6c0e6 + 913bfeebf747b38cf6ea89a64787ce7245969915 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 5bc51b7d5f9f..71156b28e23d 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26173.111", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26173.111", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.106", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.106", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 7ee574bfdd7cca76000775b4099c49f5d74bbf8a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 23:22:14 +0000 Subject: [PATCH 027/230] Reset files to release/10.0.3xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 1 - eng/Version.Details.props | 274 ++++++++++--------- eng/Version.Details.xml | 551 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 425 insertions(+), 407 deletions(-) diff --git a/NuGet.config b/NuGet.config index b4cefe38af01..f3f728c95515 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,6 @@ - diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 7260c61cddad..fe5af9650d2b 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,145 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.0-preview.26165.110 - 10.0.4 - 10.0.4 - 18.3.3 - 18.3.3-servicing-26165-110 - 7.3.0-rc.16610 - 10.0.202 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 10.0.0-preview.26165.110 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 2.0.0-preview.1.26119.110 - 2.2.4 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.0-beta.26165.110 - 10.0.0-beta.26165.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 15.2.202-servicing.26165.110 - 10.0.4 - 5.3.0-2.26165.110 - 5.3.0-2.26165.110 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-preview.26174.106 + 10.0.5 + 10.0.5 + 18.6.0-preview-26174-106 + 18.6.0-preview-26174-106 + 7.6.0-rc.17506 + 10.0.300-alpha.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 10.0.0-preview.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 2.0.0-preview.1.26153.111 + 2.2.5 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-beta.26174.106 + 10.0.0-beta.26174.106 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 15.2.300-servicing.26174.106 + 10.0.5 + 5.6.0-2.26174.106 + 5.6.0-2.26174.106 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26165.110 - 10.0.4-servicing.26119.110 - 18.3.0-release-26165-110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26165.110 - 10.0.202 - 10.0.202-servicing.26165.110 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26165.110 - 18.3.0-release-26165-110 - 18.3.0-release-26165-110 - 3.2.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 7.3.0-rc.16610 - 10.0.4 - 2.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 + 10.0.0-preview.26174.106 + 10.0.5-servicing.26153.111 + 18.3.0-release-26174-106 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.300-alpha.26174.106 + 10.0.300-alpha.26174.106 + 10.0.300-alpha.26174.106 + 10.0.300-alpha.26174.106 + 10.0.300-alpha.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 10.0.300-preview.26174.106 + 18.3.0-release-26174-106 + 18.3.0-release-26174-106 + 3.2.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 7.6.0-rc.17506 + 10.0.5 + 2.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 - 2.2.0-preview.26163.4 - 4.2.0-preview.26163.4 + 2.1.0-preview.25571.1 + 4.1.0-preview.25571.1 @@ -190,6 +193,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion) $(MicrosoftDeploymentDotNetReleasesPackageVersion) $(MicrosoftDiaSymReaderPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) @@ -201,9 +205,11 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) $(MicrosoftExtensionsDependencyModelPackageVersion) $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 654ec7be6ff9..d498242e1c11 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 @@ -68,170 +68,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 + + + https://github.com/dotnet/dotnet + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 + + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://github.com/dotnet/dotnet - 371b9b5d0aefef66a1db9caba3a697ca58a04eb7 + 913bfeebf747b38cf6ea89a64787ce7245969915 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/microsoft/testfx - 85dfe511d8e4111cea9f0e1a308dc66d7973469b + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://github.com/microsoft/testfx - 85dfe511d8e4111cea9f0e1a308dc66d7973469b + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 diff --git a/global.json b/global.json index 74c305d2ffdd..71156b28e23d 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.200", + "dotnet": "10.0.105", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26165.110", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26165.110", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.106", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.106", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 1a50ad34a746ded4d4263060c6e066e4b1ea84db Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 25 Mar 2026 02:02:44 +0000 Subject: [PATCH 028/230] Update dependencies from https://github.com/microsoft/testfx build 20260324.1 On relative base path root Microsoft.Testing.Platform From Version 2.2.0-preview.26163.4 -> To Version 2.2.0-preview.26174.1 MSTest From Version 4.2.0-preview.26163.4 -> To Version 4.2.0-preview.26174.1 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 2bc396ccaead..e8db7974fdc6 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 - 2.2.0-preview.26163.4 - 4.2.0-preview.26163.4 + 2.2.0-preview.26174.1 + 4.2.0-preview.26174.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 063419a6da62..42e4790acc05 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -561,13 +561,13 @@ https://github.com/dotnet/dotnet 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 - + https://github.com/microsoft/testfx - 85dfe511d8e4111cea9f0e1a308dc66d7973469b + 926d2f3fbfce8f04a1c05e743d28715d93baa5bb - + https://github.com/microsoft/testfx - 85dfe511d8e4111cea9f0e1a308dc66d7973469b + 926d2f3fbfce8f04a1c05e743d28715d93baa5bb https://github.com/dotnet/dotnet From 222c107ff7b4d29673d84f74a1bf883ce8c5884b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 25 Mar 2026 02:03:43 +0000 Subject: [PATCH 029/230] Update dependencies from https://github.com/microsoft/testfx build 20260324.1 On relative base path root Microsoft.Testing.Platform From Version 2.2.0-preview.26163.4 -> To Version 2.2.0-preview.26174.1 MSTest From Version 4.2.0-preview.26163.4 -> To Version 4.2.0-preview.26174.1 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 7260c61cddad..497b38e2d795 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 - 2.2.0-preview.26163.4 - 4.2.0-preview.26163.4 + 2.2.0-preview.26174.1 + 4.2.0-preview.26174.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 654ec7be6ff9..f2fde48e68cc 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -560,13 +560,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - 85dfe511d8e4111cea9f0e1a308dc66d7973469b + 926d2f3fbfce8f04a1c05e743d28715d93baa5bb - + https://github.com/microsoft/testfx - 85dfe511d8e4111cea9f0e1a308dc66d7973469b + 926d2f3fbfce8f04a1c05e743d28715d93baa5bb https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From 3dc9177d15a40260cd8e8831711a20fa61c2d825 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 25 Mar 2026 03:59:46 +0000 Subject: [PATCH 030/230] Update dependencies from build 307627 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26170.111 -> 10.0.0-preview.26174.114) Microsoft.Build (Version 18.3.3 -> 18.3.3) Microsoft.Build.Localization (Version 18.3.3-servicing-26170-111 -> 18.3.3-servicing-26174-114) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.3.0-rc.17111 -> 7.3.0-rc.17514) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.202 -> 10.0.202) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.3.0-2.26170.111 -> 5.3.0-2.26174.114) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26170.111 -> 10.0.0-beta.26174.114) Microsoft.FSharp.Compiler (Version 15.2.202-servicing.26170.111 -> 15.2.202-servicing.26174.114) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26170-111 -> 18.3.0-release-26174-114) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.202-servicing.26170.111 -> 10.0.202-servicing.26174.114) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 96 ++++++++--------- eng/Version.Details.xml | 220 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 161 insertions(+), 161 deletions(-) diff --git a/NuGet.config b/NuGet.config index 2715928474a2..62cec2f1e957 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index b1ffc80a0234..08ecb2f82e12 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,37 +30,37 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4-servicing.26119.110 10.0.4-servicing.26119.110 - 10.0.0-preview.26170.111 + 10.0.0-preview.26174.114 10.0.4 10.0.4 18.3.3 - 18.3.3-servicing-26170-111 - 7.3.0-rc.17111 + 18.3.3-servicing-26174-114 + 7.3.0-rc.17514 10.0.202 - 5.3.0-2.26170.111 - 5.3.0-2.26170.111 - 5.3.0-2.26170.111 - 5.3.0-2.26170.111 - 5.3.0-2.26170.111 - 5.3.0-2.26170.111 - 5.3.0-2.26170.111 - 5.3.0-2.26170.111 - 10.0.0-preview.26170.111 - 5.3.0-2.26170.111 - 5.3.0-2.26170.111 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 10.0.0-preview.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 2.0.0-preview.1.26119.110 2.2.4 - 10.0.0-beta.26170.111 - 10.0.0-beta.26170.111 - 10.0.0-beta.26170.111 - 10.0.0-beta.26170.111 - 10.0.0-beta.26170.111 - 10.0.0-beta.26170.111 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 10.0.4 10.0.4 10.0.4-servicing.26119.110 - 10.0.0-beta.26170.111 - 10.0.0-beta.26170.111 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 10.0.4 10.0.4 10.0.4 @@ -70,17 +70,17 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 10.0.4 - 15.2.202-servicing.26170.111 + 15.2.202-servicing.26174.114 10.0.4 - 5.3.0-2.26170.111 - 5.3.0-2.26170.111 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 10.0.4-servicing.26119.110 10.0.4 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26170.111 + 10.0.0-preview.26174.114 10.0.4-servicing.26119.110 - 18.3.0-release-26170-111 + 18.3.0-release-26174-114 10.0.4 10.0.4-servicing.26119.110 10.0.202 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.202 10.0.202 10.0.202 - 10.0.202-servicing.26170.111 + 10.0.202-servicing.26174.114 10.0.202 - 10.0.202-servicing.26170.111 + 10.0.202-servicing.26174.114 10.0.202 10.0.202 - 10.0.202-servicing.26170.111 - 18.3.0-release-26170-111 - 18.3.0-release-26170-111 + 10.0.202-servicing.26174.114 + 18.3.0-release-26174-114 + 18.3.0-release-26174-114 3.2.4 10.0.4 10.0.4-servicing.26119.110 10.0.4 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 - 7.3.0-rc.17111 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 10.0.4 2.0.4 10.0.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 59c1ae513bf1..6b5344fa9c20 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -74,136 +74,136 @@ https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -370,25 +370,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -407,27 +407,27 @@ https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f @@ -514,9 +514,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -524,37 +524,37 @@ - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 115461302edc70fe6e7c8ba73d0b40d328add55c + 3f7694a10a5075ca61531ca4aa99082acdef048f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index fe4a62f35fac..8205f49bb392 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26170.111", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26170.111", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.114", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.114", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From d443e374bcd206fd49b9270011cc03b2f2f56e20 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 25 Mar 2026 04:24:36 +0000 Subject: [PATCH 031/230] Update dependencies from build 307628 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.6-servicing.26173.116 -> 10.0.6-servicing.26174.108) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.6 -> 10.0.6) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26173.116 -> 10.0.0-preview.26174.108) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26173-116 -> 18.0.11-servicing-26174-108) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.17416 -> 7.0.2-rc.17508) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.106 -> 10.0.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26173.116 -> 5.0.0-2.26174.108) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26173.116 -> 2.0.0-preview.1.26174.108) Microsoft.DiaSymReader (Version 2.2.6 -> 2.2.6) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26173.116 -> 10.0.0-beta.26174.108) Microsoft.FSharp.Compiler (Version 14.0.106-servicing.26173.116 -> 14.0.106-servicing.26174.108) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26173-116 -> 18.0.2-release-26174-108) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.106-servicing.26173.116 -> 10.0.106-servicing.26174.108) Microsoft.Web.Xdt (Version 3.2.6 -> 3.2.6) System.CommandLine (Version 2.0.6 -> 2.0.6) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 262 insertions(+), 262 deletions(-) diff --git a/NuGet.config b/NuGet.config index 1ec44c35d231..d6e5616407ab 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 2bc396ccaead..19547f0b9c1a 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 + 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.108 10.0.6 - 10.0.6-servicing.26173.116 + 10.0.6-servicing.26174.108 10.0.6 10.0.6 10.0.6 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26173.116 + 10.0.6-servicing.26174.108 10.0.6 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26173.116 + 10.0.6-servicing.26174.108 10.0.6 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 - 10.0.0-preview.26173.116 + 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.108 + 10.0.0-preview.26174.108 10.0.6 10.0.6 18.0.11 - 18.0.11-servicing-26173-116 - 7.0.2-rc.17416 + 18.0.11-servicing-26174-108 + 7.0.2-rc.17508 10.0.106 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 10.0.0-preview.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 2.0.0-preview.1.26173.116 + 5.0.0-2.26174.108 + 5.0.0-2.26174.108 + 5.0.0-2.26174.108 + 5.0.0-2.26174.108 + 5.0.0-2.26174.108 + 5.0.0-2.26174.108 + 5.0.0-2.26174.108 + 10.0.0-preview.26174.108 + 5.0.0-2.26174.108 + 5.0.0-2.26174.108 + 2.0.0-preview.1.26174.108 2.2.6 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 + 10.0.0-beta.26174.108 + 10.0.0-beta.26174.108 + 10.0.0-beta.26174.108 + 10.0.0-beta.26174.108 + 10.0.0-beta.26174.108 + 10.0.0-beta.26174.108 10.0.6 10.0.6 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 + 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.108 + 10.0.0-beta.26174.108 + 10.0.0-beta.26174.108 10.0.6 10.0.6 10.0.6 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 14.0.106-servicing.26173.116 + 14.0.106-servicing.26174.108 10.0.6 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 10.0.6-servicing.26173.116 + 5.0.0-2.26174.108 + 5.0.0-2.26174.108 + 10.0.6-servicing.26174.108 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26173.116 - 10.0.6-servicing.26173.116 - 18.0.2-release-26173-116 + 10.0.0-preview.26174.108 + 10.0.6-servicing.26174.108 + 18.0.2-release-26174-108 10.0.6 - 10.0.6-servicing.26173.116 + 10.0.6-servicing.26174.108 10.0.106 10.0.106 10.0.106 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.106 10.0.106 10.0.106 - 10.0.106-servicing.26173.116 + 10.0.106-servicing.26174.108 10.0.106 - 10.0.106-servicing.26173.116 + 10.0.106-servicing.26174.108 10.0.106 10.0.106 - 10.0.106-servicing.26173.116 - 18.0.2-release-26173-116 - 18.0.2-release-26173-116 + 10.0.106-servicing.26174.108 + 18.0.2-release-26174-108 + 18.0.2-release-26174-108 3.2.6 10.0.6 - 10.0.6-servicing.26173.116 + 10.0.6-servicing.26174.108 10.0.6 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 + 7.0.2-rc.17508 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 063419a6da62..268798e1279c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 94af52e1deb547073232526f35817a0f3ada98ab diff --git a/global.json b/global.json index 5a5b1f80a5c3..70dde0483be1 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26173.116", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26173.116", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.108", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.108", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From fe32c302b28e429168b1b1db994e90abd277b810 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 04:34:14 +0000 Subject: [PATCH 032/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 270 +++++++-------- eng/Version.Details.xml | 681 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 481 insertions(+), 480 deletions(-) diff --git a/NuGet.config b/NuGet.config index 1ec44c35d231..2715928474a2 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index e8db7974fdc6..b1ffc80a0234 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,142 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 - 10.0.6 - 10.0.6-servicing.26173.116 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26173.116 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26173.116 - 10.0.6 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 - 10.0.0-preview.26173.116 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26173-116 - 7.0.2-rc.17416 - 10.0.106 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 10.0.0-preview.26173.116 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 2.0.0-preview.1.26173.116 - 2.2.6 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26173.116 - 10.0.6-servicing.26173.116 - 10.0.0-beta.26173.116 - 10.0.0-beta.26173.116 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26173.116 - 10.0.6 - 5.0.0-2.26173.116 - 5.0.0-2.26173.116 - 10.0.6-servicing.26173.116 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26170.111 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26170-111 + 7.3.0-rc.17111 + 10.0.202 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 10.0.0-preview.26170.111 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26170.111 + 10.0.0-beta.26170.111 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26170.111 + 10.0.4 + 5.3.0-2.26170.111 + 5.3.0-2.26170.111 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26173.116 - 10.0.6-servicing.26173.116 - 18.0.2-release-26173-116 - 10.0.6 - 10.0.6-servicing.26173.116 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26173.116 - 10.0.106 - 10.0.106-servicing.26173.116 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26173.116 - 18.0.2-release-26173-116 - 18.0.2-release-26173-116 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26173.116 - 10.0.6 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 7.0.2-rc.17416 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26170.111 + 10.0.4-servicing.26119.110 + 18.3.0-release-26170-111 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26170.111 + 10.0.202 + 10.0.202-servicing.26170.111 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26170.111 + 18.3.0-release-26170-111 + 18.3.0-release-26170-111 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 7.3.0-rc.17111 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 - 2.2.0-preview.26174.1 - 4.2.0-preview.26174.1 + 2.2.0-preview.26163.4 + 4.2.0-preview.26163.4 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 42e4790acc05..59c1ae513bf1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - + https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + 115461302edc70fe6e7c8ba73d0b40d328add55c - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - 926d2f3fbfce8f04a1c05e743d28715d93baa5bb + 85dfe511d8e4111cea9f0e1a308dc66d7973469b - + https://github.com/microsoft/testfx - 926d2f3fbfce8f04a1c05e743d28715d93baa5bb + 85dfe511d8e4111cea9f0e1a308dc66d7973469b - - https://github.com/dotnet/dotnet - 5d8e1dab0ad36dd7a893a544523ecde4a647fe09 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 5a5b1f80a5c3..fe4a62f35fac 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26173.116", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26173.116", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26170.111", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26170.111", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 0fd8524cc9cfddf2e67162b521a2969fe355a328 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 25 Mar 2026 04:49:49 +0000 Subject: [PATCH 033/230] Update dependencies from build 307634 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26174.106 -> 10.0.0-preview.26174.116) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26174-106 -> 18.6.0-preview-26174-116) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.17506 -> 7.6.0-rc.17516) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26174.106 -> 10.0.300-alpha.26174.116) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26174.106 -> 5.6.0-2.26174.116) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26174.106 -> 10.0.0-beta.26174.116) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26174.106 -> 15.2.300-servicing.26174.116) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26174-106 -> 18.3.0-release-26174-116) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26174.106 -> 10.0.300-preview.26174.116) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index fe5af9650d2b..490b4c2d4794 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26174.106 + 10.0.0-preview.26174.116 10.0.5 10.0.5 - 18.6.0-preview-26174-106 - 18.6.0-preview-26174-106 - 7.6.0-rc.17506 - 10.0.300-alpha.26174.106 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 - 10.0.0-preview.26174.106 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 + 18.6.0-preview-26174-116 + 18.6.0-preview-26174-116 + 7.6.0-rc.17516 + 10.0.300-alpha.26174.116 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 + 10.0.0-preview.26174.116 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26174.106 - 10.0.0-beta.26174.106 - 10.0.0-beta.26174.106 - 10.0.0-beta.26174.106 - 10.0.0-beta.26174.106 - 10.0.0-beta.26174.106 + 10.0.0-beta.26174.116 + 10.0.0-beta.26174.116 + 10.0.0-beta.26174.116 + 10.0.0-beta.26174.116 + 10.0.0-beta.26174.116 + 10.0.0-beta.26174.116 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26174.106 - 10.0.0-beta.26174.106 + 10.0.0-beta.26174.116 + 10.0.0-beta.26174.116 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26174.106 + 15.2.300-servicing.26174.116 10.0.5 - 5.6.0-2.26174.106 - 5.6.0-2.26174.106 + 5.6.0-2.26174.116 + 5.6.0-2.26174.116 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26174.106 + 10.0.0-preview.26174.116 10.0.5-servicing.26153.111 - 18.3.0-release-26174-106 + 18.3.0-release-26174-116 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26174.106 - 10.0.300-alpha.26174.106 - 10.0.300-alpha.26174.106 - 10.0.300-alpha.26174.106 - 10.0.300-alpha.26174.106 - 10.0.300-preview.26174.106 - 10.0.300-preview.26174.106 - 10.0.300-preview.26174.106 - 10.0.300-preview.26174.106 - 10.0.300-preview.26174.106 - 10.0.300-preview.26174.106 - 10.0.300-preview.26174.106 - 10.0.300-preview.26174.106 - 10.0.300-preview.26174.106 - 18.3.0-release-26174-106 - 18.3.0-release-26174-106 + 10.0.300-alpha.26174.116 + 10.0.300-alpha.26174.116 + 10.0.300-alpha.26174.116 + 10.0.300-alpha.26174.116 + 10.0.300-alpha.26174.116 + 10.0.300-preview.26174.116 + 10.0.300-preview.26174.116 + 10.0.300-preview.26174.116 + 10.0.300-preview.26174.116 + 10.0.300-preview.26174.116 + 10.0.300-preview.26174.116 + 10.0.300-preview.26174.116 + 10.0.300-preview.26174.116 + 10.0.300-preview.26174.116 + 18.3.0-release-26174-116 + 18.3.0-release-26174-116 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 - 7.6.0-rc.17506 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 + 7.6.0-rc.17516 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index d498242e1c11..8570d53a2818 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 - + https://github.com/dotnet/dotnet - 913bfeebf747b38cf6ea89a64787ce7245969915 + 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 71156b28e23d..331491f5a34c 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.106", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.106", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.116", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.116", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From fa60eabf4da20da8e7103970f161cbcaf00ba8ee Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 25 Mar 2026 05:49:13 +0000 Subject: [PATCH 034/230] Update dependencies from build 307638 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.6-servicing.26174.108 -> 10.0.6-servicing.26174.113) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.6 -> 10.0.6) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26174.108 -> 10.0.0-preview.26174.113) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26174-108 -> 18.0.11-servicing-26174-113) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.17508 -> 7.0.2-rc.17513) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.106 -> 10.0.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26174.108 -> 5.0.0-2.26174.113) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26174.108 -> 2.0.0-preview.1.26174.113) Microsoft.DiaSymReader (Version 2.2.6 -> 2.2.6) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26174.108 -> 10.0.0-beta.26174.113) Microsoft.FSharp.Compiler (Version 14.0.106-servicing.26174.108 -> 14.0.106-servicing.26174.113) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26174-108 -> 18.0.2-release-26174-113) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.106-servicing.26174.108 -> 10.0.106-servicing.26174.113) Microsoft.Web.Xdt (Version 3.2.6 -> 3.2.6) System.CommandLine (Version 2.0.6 -> 2.0.6) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 262 insertions(+), 262 deletions(-) diff --git a/NuGet.config b/NuGet.config index d6e5616407ab..4950d4c01bdc 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 19547f0b9c1a..a657ea7abdfc 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26174.108 - 10.0.6-servicing.26174.108 - 10.0.6-servicing.26174.108 - 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.113 + 10.0.6-servicing.26174.113 + 10.0.6-servicing.26174.113 + 10.0.6-servicing.26174.113 10.0.6 - 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.113 10.0.6 10.0.6 10.0.6 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.113 10.0.6 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.113 10.0.6 - 10.0.6-servicing.26174.108 - 10.0.6-servicing.26174.108 - 10.0.0-preview.26174.108 + 10.0.6-servicing.26174.113 + 10.0.6-servicing.26174.113 + 10.0.0-preview.26174.113 10.0.6 10.0.6 18.0.11 - 18.0.11-servicing-26174-108 - 7.0.2-rc.17508 + 18.0.11-servicing-26174-113 + 7.0.2-rc.17513 10.0.106 - 5.0.0-2.26174.108 - 5.0.0-2.26174.108 - 5.0.0-2.26174.108 - 5.0.0-2.26174.108 - 5.0.0-2.26174.108 - 5.0.0-2.26174.108 - 5.0.0-2.26174.108 - 10.0.0-preview.26174.108 - 5.0.0-2.26174.108 - 5.0.0-2.26174.108 - 2.0.0-preview.1.26174.108 + 5.0.0-2.26174.113 + 5.0.0-2.26174.113 + 5.0.0-2.26174.113 + 5.0.0-2.26174.113 + 5.0.0-2.26174.113 + 5.0.0-2.26174.113 + 5.0.0-2.26174.113 + 10.0.0-preview.26174.113 + 5.0.0-2.26174.113 + 5.0.0-2.26174.113 + 2.0.0-preview.1.26174.113 2.2.6 - 10.0.0-beta.26174.108 - 10.0.0-beta.26174.108 - 10.0.0-beta.26174.108 - 10.0.0-beta.26174.108 - 10.0.0-beta.26174.108 - 10.0.0-beta.26174.108 + 10.0.0-beta.26174.113 + 10.0.0-beta.26174.113 + 10.0.0-beta.26174.113 + 10.0.0-beta.26174.113 + 10.0.0-beta.26174.113 + 10.0.0-beta.26174.113 10.0.6 10.0.6 - 10.0.6-servicing.26174.108 - 10.0.6-servicing.26174.108 - 10.0.0-beta.26174.108 - 10.0.0-beta.26174.108 + 10.0.6-servicing.26174.113 + 10.0.6-servicing.26174.113 + 10.0.0-beta.26174.113 + 10.0.0-beta.26174.113 10.0.6 10.0.6 10.0.6 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 14.0.106-servicing.26174.108 + 14.0.106-servicing.26174.113 10.0.6 - 5.0.0-2.26174.108 - 5.0.0-2.26174.108 - 10.0.6-servicing.26174.108 + 5.0.0-2.26174.113 + 5.0.0-2.26174.113 + 10.0.6-servicing.26174.113 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26174.108 - 10.0.6-servicing.26174.108 - 18.0.2-release-26174-108 + 10.0.0-preview.26174.113 + 10.0.6-servicing.26174.113 + 18.0.2-release-26174-113 10.0.6 - 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.113 10.0.106 10.0.106 10.0.106 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.106 10.0.106 10.0.106 - 10.0.106-servicing.26174.108 + 10.0.106-servicing.26174.113 10.0.106 - 10.0.106-servicing.26174.108 + 10.0.106-servicing.26174.113 10.0.106 10.0.106 - 10.0.106-servicing.26174.108 - 18.0.2-release-26174-108 - 18.0.2-release-26174-108 + 10.0.106-servicing.26174.113 + 18.0.2-release-26174-113 + 18.0.2-release-26174-113 3.2.6 10.0.6 - 10.0.6-servicing.26174.108 + 10.0.6-servicing.26174.113 10.0.6 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 - 7.0.2-rc.17508 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 + 7.0.2-rc.17513 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 268798e1279c..656e4847d8ea 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - 94af52e1deb547073232526f35817a0f3ada98ab + 645374ace1c8bbeb07aac743552acc62bbb2c34b diff --git a/global.json b/global.json index 70dde0483be1..9e488dee1037 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.108", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.108", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.113", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.113", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From fe5c4449a96dfc09c8697a6164cc47a2c90338f4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 17:44:18 +0000 Subject: [PATCH 035/230] Add /tactics comment-triggered workflow for servicing PRs Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/e9426e50-d112-4958-82fc-c010e834b310 --- .../workflows/update-tactics-on-comment.yml | 479 ++++++++++++++++++ 1 file changed, 479 insertions(+) create mode 100644 .github/workflows/update-tactics-on-comment.yml diff --git a/.github/workflows/update-tactics-on-comment.yml b/.github/workflows/update-tactics-on-comment.yml new file mode 100644 index 000000000000..987f983852ea --- /dev/null +++ b/.github/workflows/update-tactics-on-comment.yml @@ -0,0 +1,479 @@ +name: Update Tactics on command + +on: + issue_comment: + types: [created] + +permissions: + contents: read + +env: + REPO_NAME: ${{ github.event.repository.name }} + RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + AI_MODEL: gpt-4o-mini + +jobs: + authorize: + name: Authorize Request + if: github.event.issue.pull_request + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + pull-requests: write + outputs: + should_run: ${{ steps.command-filter.outputs.should_run }} + issue_number: ${{ steps.command-filter.outputs.issue_number }} + pr_number: ${{ steps.metadata.outputs.pr_number }} + + steps: + - name: Evaluate comment command + id: command-filter + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + env: + COMMENT_BODY: ${{ github.event.comment.body }} # GH Has a Character Limit which prevents overflow issues. https://github.com/dead-claudia/github-limits + with: + script: | + const body = (process.env.COMMENT_BODY || '').trim(); + const match = body.match(/^\/tactics(?:\s+(\d+))?(?:\s|$)/i); + const shouldRun = !!match; + core.setOutput('should_run', String(shouldRun)); + core.setOutput('issue_number', (match && match[1]) ? match[1] : ''); + if (!shouldRun) { + core.info('Comment does not invoke /tactics. Skipping workflow.'); + } + + - name: Ensure commenter is trusted + if: steps.command-filter.outputs.should_run == 'true' + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + with: + github-token: ${{ github.token }} + script: | + const { owner, repo } = context.repo; + const username = context.payload.comment.user.login; + + if (!username) { + throw new Error('Unable to resolve commenter username from event payload.'); + } + + try { + const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({ + owner, + repo, + username, + }); + + const allowed = ['admin', 'write']; + if (!allowed.includes(permission.permission)) { + throw new Error(`@${username} has "${permission.permission}" access.`); + } + + core.info(`Verified ${username} has ${permission.permission} access.`); + } catch (error) { + throw new Error(`Only collaborators with write access may trigger this workflow. ${error.message || error}`); + } + + - name: React to comment + if: steps.command-filter.outputs.should_run == 'true' + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + with: + github-token: ${{ github.token }} + script: | + const { owner, repo } = context.repo; + const commentId = context.payload.comment?.id; + if (!commentId) { + core.warning('No comment ID found on payload; skipping reaction.'); + return; + } + + await github.rest.reactions.createForIssueComment({ + owner, + repo, + comment_id: Number(commentId), + content: 'eyes', + }); + + - name: Comment on PR - Started + if: steps.command-filter.outputs.should_run == 'true' + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + env: + COMMENT_BODY: ${{ format('▶️ Tactics update workflow started. Track progress in [this workflow run]({0}).', env.RUN_URL) }} + with: + github-token: ${{ github.token }} + script: | + const { owner, repo } = context.repo; + await github.rest.issues.createComment({ + owner, + repo, + issue_number: Number(context.payload.issue.number), + body: process.env.COMMENT_BODY, + }); + + - name: Capture PR metadata + id: metadata + if: steps.command-filter.outputs.should_run == 'true' + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + with: + script: | + const pr = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.payload.issue.number, + }); + + core.setOutput('pr_number', String(pr.data.number)); + + update: + name: Generate and Apply Tactics + needs: authorize + if: needs.authorize.outputs.should_run == 'true' + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + pull-requests: read + + steps: + - name: Gather PR and issue data + id: gather + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + env: + EXPLICIT_ISSUE_NUMBER: ${{ needs.authorize.outputs.issue_number }} + PR_NUMBER: ${{ needs.authorize.outputs.pr_number }} + with: + github-token: ${{ github.token }} + script: | + const { owner, repo } = context.repo; + const prNumber = Number(process.env.PR_NUMBER); + + // Get PR details + const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number: prNumber }); + + // Get PR comments (issue-level) + const { data: comments } = await github.rest.issues.listComments({ + owner, repo, issue_number: prNumber, per_page: 100, + }); + + // Get PR review comments (code-level) + const { data: reviewComments } = await github.rest.pulls.listReviewComments({ + owner, repo, pull_number: prNumber, per_page: 100, + }); + + // Get files changed for context + const { data: files } = await github.rest.pulls.listFiles({ + owner, repo, pull_number: prNumber, per_page: 100, + }); + + // Find linked issue: explicit argument takes priority, then parse PR body + let issueNumber = process.env.EXPLICIT_ISSUE_NUMBER + ? Number(process.env.EXPLICIT_ISSUE_NUMBER) + : null; + + if (!issueNumber) { + const body = pr.body || ''; + const pattern = /(?:fix(?:es|ed)?|close[sd]?|resolve[sd]?)\s+#(\d+)/gi; + const match = pattern.exec(body); + if (match) { + issueNumber = Number(match[1]); + core.info(`Auto-detected linked issue #${issueNumber} from PR body.`); + } + } + + // Limit text fields to avoid exceeding GitHub Actions output size and AI token limits + const MAX_TEXT_LENGTH = 4000; + const MAX_REVIEW_COMMENT_LENGTH = 2000; + + let issueTitle = ''; + let issueBody = ''; + if (issueNumber) { + try { + const { data: issue } = await github.rest.issues.get({ owner, repo, issue_number: issueNumber }); + issueTitle = issue.title; + issueBody = (issue.body || '').substring(0, MAX_TEXT_LENGTH); + core.info(`Fetched issue #${issueNumber}: ${issueTitle}`); + } catch (e) { + core.warning(`Could not fetch issue #${issueNumber}: ${e.message}`); + issueNumber = null; + } + } else { + core.warning('No linked issue found. Specify one explicitly with /tactics .'); + } + + const filesSummary = files + .slice(0, 20) + .map(f => `${f.filename} (+${f.additions}/-${f.deletions})`) + .join('\n'); + + // Exclude bot comments and the triggering /tactics comment itself + const triggeringCommentId = context.payload.comment.id; + const userComments = comments + .filter(c => c.id !== triggeringCommentId && !c.user.login.includes('[bot]')) + .map(c => `@${c.user.login}: ${c.body}`) + .join('\n\n---\n\n') + .substring(0, MAX_TEXT_LENGTH); + + const reviewCommentsSummary = reviewComments + .filter(c => !c.user.login.includes('[bot]')) + .map(c => `@${c.user.login} on \`${c.path}\`: ${c.body}`) + .join('\n\n---\n\n') + .substring(0, MAX_REVIEW_COMMENT_LENGTH); + + core.setOutput('pr_title', pr.title); + core.setOutput('pr_body', (pr.body || '').substring(0, MAX_TEXT_LENGTH)); + core.setOutput('pr_author', pr.user.login); + core.setOutput('pr_base_ref', pr.base.ref); + core.setOutput('files_summary', filesSummary); + core.setOutput('comments_summary', userComments); + core.setOutput('review_comments_summary', reviewCommentsSummary); + core.setOutput('issue_number', issueNumber ? String(issueNumber) : ''); + core.setOutput('issue_title', issueTitle); + core.setOutput('issue_body', issueBody); + + - name: Generate tactics with AI + id: ai-generate + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + env: + GH_MODELS_TOKEN: ${{ github.token }} + PR_TITLE: ${{ steps.gather.outputs.pr_title }} + PR_BODY: ${{ steps.gather.outputs.pr_body }} + PR_AUTHOR: ${{ steps.gather.outputs.pr_author }} + PR_BASE_REF: ${{ steps.gather.outputs.pr_base_ref }} + FILES_SUMMARY: ${{ steps.gather.outputs.files_summary }} + COMMENTS_SUMMARY: ${{ steps.gather.outputs.comments_summary }} + REVIEW_COMMENTS_SUMMARY: ${{ steps.gather.outputs.review_comments_summary }} + ISSUE_TITLE: ${{ steps.gather.outputs.issue_title }} + ISSUE_BODY: ${{ steps.gather.outputs.issue_body }} + PR_NUMBER: ${{ needs.authorize.outputs.pr_number }} + with: + script: | + const n = '\n'; + const prNumber = process.env.PR_NUMBER; + const prTitle = process.env.PR_TITLE; + const prAuthor = process.env.PR_AUTHOR; + const prBaseRef = process.env.PR_BASE_REF; + const prBody = process.env.PR_BODY || '(no description)'; + const filesSummary = process.env.FILES_SUMMARY || '(none)'; + const commentsSummary = process.env.COMMENTS_SUMMARY || '(none)'; + const reviewComments = process.env.REVIEW_COMMENTS_SUMMARY || '(none)'; + const issueTitle = process.env.ISSUE_TITLE || '(none)'; + const issueBody = process.env.ISSUE_BODY || '(none)'; + + const prompt = [ + 'You are helping fill in a "tactics" template for a servicing pull request in the dotnet/sdk repository.', + '', + 'A servicing PR targets a release branch and requires extra scrutiny. Fill in five sections based on the provided context.', + '', + `## PR #${prNumber}: ${prTitle}`, + `**Author:** @${prAuthor}`, + `**Target branch:** ${prBaseRef}`, + '', + '### PR Description', + prBody, + '', + '### Files Changed', + filesSummary, + '', + '### PR Comments (may include manual testing details)', + commentsSummary, + '', + '### Code Review Comments', + reviewComments, + '', + '## Linked Issue', + `**Title:** ${issueTitle}`, + '**Description:**', + issueBody, + '', + '---', + '', + 'Based on all of the above, fill in the tactics template. Be concise but accurate.', + '', + 'Guidelines per section:', + '- **Summary**: 1-3 sentences describing what change is being made and why.', + '- **Customer Impact**: How does this affect customers? Include the type of failure (build error, runtime error, etc.), severity, and affected SDK version(s).', + '- **Regression?**: Was this introduced by a specific PR or SDK version? Answer "Yes, from #N" or "Yes, from vX.Y.Z" if known, otherwise "No" or "Unknown".', + '- **Testing**: What automated and/or manual testing was done? Check PR comments for evidence of private or manual validation.', + '- **Risk**: Rate as Low, Medium, or High with a one-sentence justification.', + '', + 'Respond with ONLY the filled template in exactly this format. Do not include any preamble or text outside the sections:', + '', + '### Summary', + '', + '[your text here]', + '', + '### Customer Impact', + '', + '[your text here]', + '', + '### Regression?', + '', + '[your text here]', + '', + '### Testing', + '', + '[your text here]', + '', + '### Risk', + '', + '[your text here]', + ].join(n); + + const response = await fetch('https://models.inference.ai.azure.com/chat/completions', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${process.env.GH_MODELS_TOKEN}`, + }, + body: JSON.stringify({ + model: process.env.AI_MODEL, + messages: [{ role: 'user', content: prompt }], + max_tokens: 800, // Five short sections; 800 tokens is sufficient + temperature: 0.2, // Low temperature for factual, consistent output + }), + }); + + if (!response.ok) { + const text = await response.text(); + throw new Error(`AI API call failed (${response.status}): ${text}`); + } + + const data = await response.json(); + const tactics = data.choices[0].message.content.trim(); + core.info('AI-generated tactics content:\n' + tactics); + core.setOutput('tactics_content', tactics); + + - name: Update issue with tactics + id: update-issue + if: steps.gather.outputs.issue_number != '' + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + env: + ISSUE_NUMBER: ${{ steps.gather.outputs.issue_number }} + ISSUE_BODY: ${{ steps.gather.outputs.issue_body }} + TACTICS_CONTENT: ${{ steps.ai-generate.outputs.tactics_content }} + PR_NUMBER: ${{ needs.authorize.outputs.pr_number }} + with: + github-token: ${{ github.token }} + script: | + const { owner, repo } = context.repo; + const issueNumber = Number(process.env.ISSUE_NUMBER); + const prNumber = Number(process.env.PR_NUMBER); + const tacticsContent = process.env.TACTICS_CONTENT; + const currentBody = process.env.ISSUE_BODY || ''; + + const beginMarker = ''; + const endMarker = ''; + const tacticsBlock = `${beginMarker}\n## Tactics\n\n*Generated from PR #${prNumber}*\n\n${tacticsContent}\n${endMarker}`; + + let newBody; + if (currentBody.includes(beginMarker)) { + // Replace existing tactics section if present (idempotent re-runs) + const regex = new RegExp(`${beginMarker}[\\s\\S]*?${endMarker}`, 'g'); + newBody = currentBody.replace(regex, tacticsBlock); + } else { + // Append new tactics section to the existing issue body + newBody = currentBody.trimEnd() + '\n\n' + tacticsBlock; + } + + await github.rest.issues.update({ + owner, + repo, + issue_number: issueNumber, + body: newBody, + }); + + core.info(`Updated issue #${issueNumber} with tactics content.`); + + - name: Add Servicing-consider label to issue + if: steps.gather.outputs.issue_number != '' + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + env: + ISSUE_NUMBER: ${{ steps.gather.outputs.issue_number }} + with: + github-token: ${{ github.token }} + script: | + const { owner, repo } = context.repo; + const issueNumber = Number(process.env.ISSUE_NUMBER); + try { + await github.rest.issues.addLabels({ + owner, + repo, + issue_number: issueNumber, + labels: ['Servicing-consider'], + }); + core.info(`Added 'Servicing-consider' label to issue #${issueNumber}.`); + } catch (error) { + core.warning(`Could not add 'Servicing-consider' label to issue #${issueNumber}: ${error.message}`); + } + + - name: Comment on PR - Success + if: steps.gather.outputs.issue_number != '' + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + env: + ISSUE_NUMBER: ${{ steps.gather.outputs.issue_number }} + with: + github-token: ${{ github.token }} + script: | + const { owner, repo } = context.repo; + const issueNumber = process.env.ISSUE_NUMBER; + const body = `✅ Tactics have been added to issue #${issueNumber} and the \`Servicing-consider\` label has been applied. See [workflow details](${process.env.RUN_URL}).`; + await github.rest.issues.createComment({ + owner, + repo, + issue_number: Number(context.payload.issue.number), + body, + }); + await github.rest.reactions.createForIssueComment({ + owner, + repo, + comment_id: Number(context.payload.comment.id), + content: '+1', + }); + + - name: Comment on PR - No linked issue found + if: steps.gather.outputs.issue_number == '' + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + with: + github-token: ${{ github.token }} + script: | + const { owner, repo } = context.repo; + await github.rest.issues.createComment({ + owner, + repo, + issue_number: Number(context.payload.issue.number), + body: '⚠️ Could not find a linked issue for this PR. Please specify the issue number explicitly using `/tactics `.', + }); + await github.rest.reactions.createForIssueComment({ + owner, + repo, + comment_id: Number(context.payload.comment.id), + content: 'confused', + }); + + report-failure: + name: Report Failure + needs: [authorize, update] + if: needs.authorize.outputs.should_run == 'true' && needs.authorize.result == 'success' && failure() + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - name: Comment on PR - Failure + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + with: + github-token: ${{ github.token }} + script: | + const { owner, repo } = context.repo; + await github.rest.issues.createComment({ + owner, + repo, + issue_number: Number(context.payload.issue.number), + body: `❌ Failed to generate or apply tactics. Please check [the workflow run](${process.env.RUN_URL}) for details.`, + }); + await github.rest.reactions.createForIssueComment({ + owner, + repo, + comment_id: Number(context.payload.comment.id), + content: 'confused', + }); From 3cc3c6f74a4c93751be51d4147adc588f6225ff6 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 25 Mar 2026 18:07:02 +0000 Subject: [PATCH 036/230] Update dependencies from build 307747 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26174.116 -> 10.0.0-preview.26175.107) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26174-116 -> 18.6.0-preview-26175-107) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.17516 -> 7.6.0-rc.17607) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26174.116 -> 10.0.300-alpha.26175.107) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26174.116 -> 5.6.0-2.26175.107) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26174.116 -> 10.0.0-beta.26175.107) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26174.116 -> 15.2.300-servicing.26175.107) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26174-116 -> 18.3.0-release-26175-107) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26174.116 -> 10.0.300-preview.26175.107) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 490b4c2d4794..08e4fad7b425 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26174.116 + 10.0.0-preview.26175.107 10.0.5 10.0.5 - 18.6.0-preview-26174-116 - 18.6.0-preview-26174-116 - 7.6.0-rc.17516 - 10.0.300-alpha.26174.116 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 - 10.0.0-preview.26174.116 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 + 18.6.0-preview-26175-107 + 18.6.0-preview-26175-107 + 7.6.0-rc.17607 + 10.0.300-alpha.26175.107 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 + 10.0.0-preview.26175.107 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26174.116 - 10.0.0-beta.26174.116 - 10.0.0-beta.26174.116 - 10.0.0-beta.26174.116 - 10.0.0-beta.26174.116 - 10.0.0-beta.26174.116 + 10.0.0-beta.26175.107 + 10.0.0-beta.26175.107 + 10.0.0-beta.26175.107 + 10.0.0-beta.26175.107 + 10.0.0-beta.26175.107 + 10.0.0-beta.26175.107 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26174.116 - 10.0.0-beta.26174.116 + 10.0.0-beta.26175.107 + 10.0.0-beta.26175.107 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26174.116 + 15.2.300-servicing.26175.107 10.0.5 - 5.6.0-2.26174.116 - 5.6.0-2.26174.116 + 5.6.0-2.26175.107 + 5.6.0-2.26175.107 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26174.116 + 10.0.0-preview.26175.107 10.0.5-servicing.26153.111 - 18.3.0-release-26174-116 + 18.3.0-release-26175-107 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26174.116 - 10.0.300-alpha.26174.116 - 10.0.300-alpha.26174.116 - 10.0.300-alpha.26174.116 - 10.0.300-alpha.26174.116 - 10.0.300-preview.26174.116 - 10.0.300-preview.26174.116 - 10.0.300-preview.26174.116 - 10.0.300-preview.26174.116 - 10.0.300-preview.26174.116 - 10.0.300-preview.26174.116 - 10.0.300-preview.26174.116 - 10.0.300-preview.26174.116 - 10.0.300-preview.26174.116 - 18.3.0-release-26174-116 - 18.3.0-release-26174-116 + 10.0.300-alpha.26175.107 + 10.0.300-alpha.26175.107 + 10.0.300-alpha.26175.107 + 10.0.300-alpha.26175.107 + 10.0.300-alpha.26175.107 + 10.0.300-preview.26175.107 + 10.0.300-preview.26175.107 + 10.0.300-preview.26175.107 + 10.0.300-preview.26175.107 + 10.0.300-preview.26175.107 + 10.0.300-preview.26175.107 + 10.0.300-preview.26175.107 + 10.0.300-preview.26175.107 + 10.0.300-preview.26175.107 + 18.3.0-release-26175-107 + 18.3.0-release-26175-107 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 - 7.6.0-rc.17516 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 + 7.6.0-rc.17607 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 8570d53a2818..86e0a63f58c0 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 - + https://github.com/dotnet/dotnet - 340bc04a0168a68bc74bbf8da6e5666b8db6fcf9 + c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 331491f5a34c..6d6cfaf3f190 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.116", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.116", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26175.107", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26175.107", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 7532c7222389d63648b467773832ad7071cf91b7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 21:32:59 +0000 Subject: [PATCH 037/230] Add models: read permission to fix 401 from GitHub Models API Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/769c23fd-4c04-415c-a470-007b89cbe31b --- .github/workflows/update-tactics-on-comment.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/update-tactics-on-comment.yml b/.github/workflows/update-tactics-on-comment.yml index 987f983852ea..96664e371cb2 100644 --- a/.github/workflows/update-tactics-on-comment.yml +++ b/.github/workflows/update-tactics-on-comment.yml @@ -131,6 +131,7 @@ jobs: permissions: contents: read issues: write + models: read pull-requests: read steps: From 7f044c503ed53be6b3ced3b377c78ce538e208ec Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 25 Mar 2026 21:48:17 +0000 Subject: [PATCH 038/230] Update dependencies from build 307775 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26175.107 -> 10.0.0-preview.26175.114) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26175-107 -> 18.6.0-preview-26175-114) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.17607 -> 7.6.0-rc.17614) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26175.107 -> 10.0.300-alpha.26175.114) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26175.107 -> 5.6.0-2.26175.114) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26175.107 -> 10.0.0-beta.26175.114) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26175.107 -> 15.2.300-servicing.26175.114) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26175-107 -> 18.3.0-release-26175-114) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26175.107 -> 10.0.300-preview.26175.114) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 08e4fad7b425..efa5376ba93c 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26175.107 + 10.0.0-preview.26175.114 10.0.5 10.0.5 - 18.6.0-preview-26175-107 - 18.6.0-preview-26175-107 - 7.6.0-rc.17607 - 10.0.300-alpha.26175.107 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 - 10.0.0-preview.26175.107 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 + 18.6.0-preview-26175-114 + 18.6.0-preview-26175-114 + 7.6.0-rc.17614 + 10.0.300-alpha.26175.114 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 + 10.0.0-preview.26175.114 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26175.107 - 10.0.0-beta.26175.107 - 10.0.0-beta.26175.107 - 10.0.0-beta.26175.107 - 10.0.0-beta.26175.107 - 10.0.0-beta.26175.107 + 10.0.0-beta.26175.114 + 10.0.0-beta.26175.114 + 10.0.0-beta.26175.114 + 10.0.0-beta.26175.114 + 10.0.0-beta.26175.114 + 10.0.0-beta.26175.114 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26175.107 - 10.0.0-beta.26175.107 + 10.0.0-beta.26175.114 + 10.0.0-beta.26175.114 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26175.107 + 15.2.300-servicing.26175.114 10.0.5 - 5.6.0-2.26175.107 - 5.6.0-2.26175.107 + 5.6.0-2.26175.114 + 5.6.0-2.26175.114 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26175.107 + 10.0.0-preview.26175.114 10.0.5-servicing.26153.111 - 18.3.0-release-26175-107 + 18.3.0-release-26175-114 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26175.107 - 10.0.300-alpha.26175.107 - 10.0.300-alpha.26175.107 - 10.0.300-alpha.26175.107 - 10.0.300-alpha.26175.107 - 10.0.300-preview.26175.107 - 10.0.300-preview.26175.107 - 10.0.300-preview.26175.107 - 10.0.300-preview.26175.107 - 10.0.300-preview.26175.107 - 10.0.300-preview.26175.107 - 10.0.300-preview.26175.107 - 10.0.300-preview.26175.107 - 10.0.300-preview.26175.107 - 18.3.0-release-26175-107 - 18.3.0-release-26175-107 + 10.0.300-alpha.26175.114 + 10.0.300-alpha.26175.114 + 10.0.300-alpha.26175.114 + 10.0.300-alpha.26175.114 + 10.0.300-alpha.26175.114 + 10.0.300-preview.26175.114 + 10.0.300-preview.26175.114 + 10.0.300-preview.26175.114 + 10.0.300-preview.26175.114 + 10.0.300-preview.26175.114 + 10.0.300-preview.26175.114 + 10.0.300-preview.26175.114 + 10.0.300-preview.26175.114 + 10.0.300-preview.26175.114 + 18.3.0-release-26175-114 + 18.3.0-release-26175-114 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 - 7.6.0-rc.17607 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 + 7.6.0-rc.17614 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 86e0a63f58c0..2de2457e528b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 - + https://github.com/dotnet/dotnet - c1c994a5ef446dafc1df55fc9994c1be4d2c3d85 + 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 6d6cfaf3f190..e48453b26142 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26175.107", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26175.107", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26175.114", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26175.114", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 29f3c4d99c49a78157413358663cb9e407bc86be Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 21:54:40 +0000 Subject: [PATCH 039/230] Add pull-requests: write to update job to fix 403 on PR comment Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/1d3c9fb1-4478-456b-97fd-cf11947df9db --- .github/workflows/update-tactics-on-comment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-tactics-on-comment.yml b/.github/workflows/update-tactics-on-comment.yml index 96664e371cb2..bbc0ac3ed913 100644 --- a/.github/workflows/update-tactics-on-comment.yml +++ b/.github/workflows/update-tactics-on-comment.yml @@ -132,7 +132,7 @@ jobs: contents: read issues: write models: read - pull-requests: read + pull-requests: write steps: - name: Gather PR and issue data From 1dfe016907646d0e687f630351bbe33577c8ad08 Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Thu, 26 Mar 2026 05:51:08 +0000 Subject: [PATCH 040/230] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-runtime build 20260325.22 On relative base path root Microsoft.Bcl.AsyncInterfaces , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Console , Microsoft.NET.ILLink.Tasks , Microsoft.NETCore.App.Host.win-x64 , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.Win32.SystemEvents , System.CodeDom , System.Composition.AttributedModel , System.Composition.Convention , System.Composition.Hosting , System.Composition.Runtime , System.Composition.TypedParts , System.Configuration.ConfigurationManager , System.Formats.Asn1 , System.Reflection.MetadataLoadContext , System.Resources.Extensions , System.Security.Cryptography.Pkcs , System.Security.Cryptography.ProtectedData , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encoding.CodePages , System.Text.Json , System.Windows.Extensions From Version 9.0.15 -> To Version 9.0.15 Microsoft.NET.HostModel , Microsoft.NETCore.Platforms , VS.Redist.Common.NetCore.SharedFramework.x64.9.0 , VS.Redist.Common.NetCore.TargetingPack.x64.9.0 , Microsoft.SourceBuild.Intermediate.runtime.linux-x64 From Version 9.0.15-servicing.26170.6 -> To Version 9.0.15-servicing.26175.22 Dependency coherency updates On relative base path root Microsoft.NET.Workload.Emscripten.Current.Manifest-9.0.100 From Version 9.0.16 -> To Version 9.0.15 (parent: Microsoft.NETCore.App.Runtime.win-x64) Microsoft.SourceBuild.Intermediate.emsdk From Version 9.0.16-servicing.26160.4 -> To Version 9.0.15-servicing.26175.1 (parent: Microsoft.NETCore.App.Runtime.win-x64) --- NuGet.config | 6 +-- eng/Version.Details.xml | 88 ++++++++++++++++++++--------------------- eng/Versions.props | 10 ++--- 3 files changed, 52 insertions(+), 52 deletions(-) diff --git a/NuGet.config b/NuGet.config index 2991c360e499..f92818844aac 100644 --- a/NuGet.config +++ b/NuGet.config @@ -24,7 +24,7 @@ - + @@ -37,7 +37,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 40c823f54473..72f422e4092b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -17,40 +17,40 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - + https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 @@ -59,14 +59,14 @@ https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - + https://github.com/dotnet/emsdk - dee978139950436eec13cadd76e9a438bdb26d4b + 918f4eac9e7d238562abcc364ec417be11b108f0 - + https://github.com/dotnet/emsdk - dee978139950436eec13cadd76e9a438bdb26d4b + 918f4eac9e7d238562abcc364ec417be11b108f0 @@ -228,27 +228,27 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop @@ -471,39 +471,39 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore @@ -511,47 +511,47 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 @@ -587,7 +587,7 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 672f4072279654291cc5a88de4b276d226dafeb3 + 4250c8399aa851d2d6a95efbdcc5c4c12311e024 https://github.com/dotnet/arcade-services diff --git a/eng/Versions.props b/eng/Versions.props index 1d5c9d51b4e0..1fa44cfa1d0b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -86,10 +86,10 @@ 9.0.15 - 9.0.15-servicing.26170.6 + 9.0.15-servicing.26175.22 9.0.15 9.0.15 - 9.0.15-servicing.26170.6 + 9.0.15-servicing.26175.22 9.0.15 9.0.15 9.0.15 @@ -97,8 +97,8 @@ 9.0.15 9.0.15 8.0.0-rc.1.23414.4 - 9.0.15-servicing.26170.6 - 9.0.15-servicing.26170.6 + 9.0.15-servicing.26175.22 + 9.0.15-servicing.26175.22 9.0.15 9.0.15 9.0.15 @@ -319,7 +319,7 @@ 15.0.9617 18.0.9617 - 9.0.16 + 9.0.15 $(MicrosoftNETWorkloadEmscriptenCurrentManifest90100PackageVersion) 9.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-(?!rtm)[A-z]*[\.]*\d*`)) From d3e4ca4853702e5c9c83287c3235eb35eb6fd8fb Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 26 Mar 2026 12:55:03 +0000 Subject: [PATCH 041/230] Update dependencies from build 307864 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26175.114 -> 10.0.0-preview.26176.103) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26175-114 -> 18.6.0-preview-26176-103) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.17614 -> 7.6.0-rc.17703) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26175.114 -> 10.0.300-alpha.26176.103) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26175.114 -> 5.6.0-2.26176.103) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26175.114 -> 10.0.0-beta.26176.103) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26175.114 -> 15.2.300-servicing.26176.103) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26175-114 -> 18.3.0-release-26176-103) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26175.114 -> 10.0.300-preview.26176.103) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index efa5376ba93c..075748fa1a39 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26175.114 + 10.0.0-preview.26176.103 10.0.5 10.0.5 - 18.6.0-preview-26175-114 - 18.6.0-preview-26175-114 - 7.6.0-rc.17614 - 10.0.300-alpha.26175.114 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 - 10.0.0-preview.26175.114 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 + 18.6.0-preview-26176-103 + 18.6.0-preview-26176-103 + 7.6.0-rc.17703 + 10.0.300-alpha.26176.103 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 + 10.0.0-preview.26176.103 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26175.114 - 10.0.0-beta.26175.114 - 10.0.0-beta.26175.114 - 10.0.0-beta.26175.114 - 10.0.0-beta.26175.114 - 10.0.0-beta.26175.114 + 10.0.0-beta.26176.103 + 10.0.0-beta.26176.103 + 10.0.0-beta.26176.103 + 10.0.0-beta.26176.103 + 10.0.0-beta.26176.103 + 10.0.0-beta.26176.103 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26175.114 - 10.0.0-beta.26175.114 + 10.0.0-beta.26176.103 + 10.0.0-beta.26176.103 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26175.114 + 15.2.300-servicing.26176.103 10.0.5 - 5.6.0-2.26175.114 - 5.6.0-2.26175.114 + 5.6.0-2.26176.103 + 5.6.0-2.26176.103 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26175.114 + 10.0.0-preview.26176.103 10.0.5-servicing.26153.111 - 18.3.0-release-26175-114 + 18.3.0-release-26176-103 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26175.114 - 10.0.300-alpha.26175.114 - 10.0.300-alpha.26175.114 - 10.0.300-alpha.26175.114 - 10.0.300-alpha.26175.114 - 10.0.300-preview.26175.114 - 10.0.300-preview.26175.114 - 10.0.300-preview.26175.114 - 10.0.300-preview.26175.114 - 10.0.300-preview.26175.114 - 10.0.300-preview.26175.114 - 10.0.300-preview.26175.114 - 10.0.300-preview.26175.114 - 10.0.300-preview.26175.114 - 18.3.0-release-26175-114 - 18.3.0-release-26175-114 + 10.0.300-alpha.26176.103 + 10.0.300-alpha.26176.103 + 10.0.300-alpha.26176.103 + 10.0.300-alpha.26176.103 + 10.0.300-alpha.26176.103 + 10.0.300-preview.26176.103 + 10.0.300-preview.26176.103 + 10.0.300-preview.26176.103 + 10.0.300-preview.26176.103 + 10.0.300-preview.26176.103 + 10.0.300-preview.26176.103 + 10.0.300-preview.26176.103 + 10.0.300-preview.26176.103 + 10.0.300-preview.26176.103 + 18.3.0-release-26176-103 + 18.3.0-release-26176-103 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 - 7.6.0-rc.17614 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 + 7.6.0-rc.17703 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 2de2457e528b..a844cdcbe2ef 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 - + https://github.com/dotnet/dotnet - 57e1a4aefb30d2a330b8dcbb80b2c911b081d738 + 3f40c677f3934b5df143cb3848e04d5776a39c56 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index e48453b26142..3c708f0b49c4 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26175.114", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26175.114", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 91bbbc99786a528f810f0eb0c9c37a2e3c2fcf92 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 26 Mar 2026 16:55:59 +0000 Subject: [PATCH 042/230] Update dependencies from build 307928 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26176.103 -> 10.0.0-preview.26176.107) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26176-103 -> 18.6.0-preview-26176-107) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.17703 -> 7.6.0-rc.17707) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26176.103 -> 10.0.300-alpha.26176.107) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26176.103 -> 5.6.0-2.26176.107) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26176.103 -> 10.0.0-beta.26176.107) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26176.103 -> 15.2.300-servicing.26176.107) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26176-103 -> 18.3.0-release-26176-107) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26176.103 -> 10.0.300-preview.26176.107) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 075748fa1a39..c07c90e1d519 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26176.103 + 10.0.0-preview.26176.107 10.0.5 10.0.5 - 18.6.0-preview-26176-103 - 18.6.0-preview-26176-103 - 7.6.0-rc.17703 - 10.0.300-alpha.26176.103 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 - 10.0.0-preview.26176.103 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 + 18.6.0-preview-26176-107 + 18.6.0-preview-26176-107 + 7.6.0-rc.17707 + 10.0.300-alpha.26176.107 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 + 10.0.0-preview.26176.107 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26176.103 - 10.0.0-beta.26176.103 - 10.0.0-beta.26176.103 - 10.0.0-beta.26176.103 - 10.0.0-beta.26176.103 - 10.0.0-beta.26176.103 + 10.0.0-beta.26176.107 + 10.0.0-beta.26176.107 + 10.0.0-beta.26176.107 + 10.0.0-beta.26176.107 + 10.0.0-beta.26176.107 + 10.0.0-beta.26176.107 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26176.103 - 10.0.0-beta.26176.103 + 10.0.0-beta.26176.107 + 10.0.0-beta.26176.107 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26176.103 + 15.2.300-servicing.26176.107 10.0.5 - 5.6.0-2.26176.103 - 5.6.0-2.26176.103 + 5.6.0-2.26176.107 + 5.6.0-2.26176.107 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26176.103 + 10.0.0-preview.26176.107 10.0.5-servicing.26153.111 - 18.3.0-release-26176-103 + 18.3.0-release-26176-107 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26176.103 - 10.0.300-alpha.26176.103 - 10.0.300-alpha.26176.103 - 10.0.300-alpha.26176.103 - 10.0.300-alpha.26176.103 - 10.0.300-preview.26176.103 - 10.0.300-preview.26176.103 - 10.0.300-preview.26176.103 - 10.0.300-preview.26176.103 - 10.0.300-preview.26176.103 - 10.0.300-preview.26176.103 - 10.0.300-preview.26176.103 - 10.0.300-preview.26176.103 - 10.0.300-preview.26176.103 - 18.3.0-release-26176-103 - 18.3.0-release-26176-103 + 10.0.300-alpha.26176.107 + 10.0.300-alpha.26176.107 + 10.0.300-alpha.26176.107 + 10.0.300-alpha.26176.107 + 10.0.300-alpha.26176.107 + 10.0.300-preview.26176.107 + 10.0.300-preview.26176.107 + 10.0.300-preview.26176.107 + 10.0.300-preview.26176.107 + 10.0.300-preview.26176.107 + 10.0.300-preview.26176.107 + 10.0.300-preview.26176.107 + 10.0.300-preview.26176.107 + 10.0.300-preview.26176.107 + 18.3.0-release-26176-107 + 18.3.0-release-26176-107 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 - 7.6.0-rc.17703 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 + 7.6.0-rc.17707 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a844cdcbe2ef..e74bd5400390 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d - + https://github.com/dotnet/dotnet - 3f40c677f3934b5df143cb3848e04d5776a39c56 + eebcb99e5770c241d6b6f8a900fa11fa0c910e2d https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 3c708f0b49c4..446215bd7fd4 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.103", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.107", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.107", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 23898b98d2b4d34d42dda1c1e8b0912f5189a23b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 26 Mar 2026 21:08:58 +0000 Subject: [PATCH 043/230] Update dependencies from build 307977 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26176.107 -> 10.0.0-preview.26176.111) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26176-107 -> 18.6.0-preview-26176-111) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.17707 -> 7.6.0-rc.17711) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26176.107 -> 10.0.300-alpha.26176.111) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26176.107 -> 5.6.0-2.26176.111) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26176.107 -> 10.0.0-beta.26176.111) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26176.107 -> 15.2.300-servicing.26176.111) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26176-107 -> 18.3.0-release-26176-111) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26176.107 -> 10.0.300-preview.26176.111) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index c07c90e1d519..bc03bc8ecdb2 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26176.107 + 10.0.0-preview.26176.111 10.0.5 10.0.5 - 18.6.0-preview-26176-107 - 18.6.0-preview-26176-107 - 7.6.0-rc.17707 - 10.0.300-alpha.26176.107 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 - 10.0.0-preview.26176.107 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 + 18.6.0-preview-26176-111 + 18.6.0-preview-26176-111 + 7.6.0-rc.17711 + 10.0.300-alpha.26176.111 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 + 10.0.0-preview.26176.111 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26176.107 - 10.0.0-beta.26176.107 - 10.0.0-beta.26176.107 - 10.0.0-beta.26176.107 - 10.0.0-beta.26176.107 - 10.0.0-beta.26176.107 + 10.0.0-beta.26176.111 + 10.0.0-beta.26176.111 + 10.0.0-beta.26176.111 + 10.0.0-beta.26176.111 + 10.0.0-beta.26176.111 + 10.0.0-beta.26176.111 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26176.107 - 10.0.0-beta.26176.107 + 10.0.0-beta.26176.111 + 10.0.0-beta.26176.111 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26176.107 + 15.2.300-servicing.26176.111 10.0.5 - 5.6.0-2.26176.107 - 5.6.0-2.26176.107 + 5.6.0-2.26176.111 + 5.6.0-2.26176.111 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26176.107 + 10.0.0-preview.26176.111 10.0.5-servicing.26153.111 - 18.3.0-release-26176-107 + 18.3.0-release-26176-111 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26176.107 - 10.0.300-alpha.26176.107 - 10.0.300-alpha.26176.107 - 10.0.300-alpha.26176.107 - 10.0.300-alpha.26176.107 - 10.0.300-preview.26176.107 - 10.0.300-preview.26176.107 - 10.0.300-preview.26176.107 - 10.0.300-preview.26176.107 - 10.0.300-preview.26176.107 - 10.0.300-preview.26176.107 - 10.0.300-preview.26176.107 - 10.0.300-preview.26176.107 - 10.0.300-preview.26176.107 - 18.3.0-release-26176-107 - 18.3.0-release-26176-107 + 10.0.300-alpha.26176.111 + 10.0.300-alpha.26176.111 + 10.0.300-alpha.26176.111 + 10.0.300-alpha.26176.111 + 10.0.300-alpha.26176.111 + 10.0.300-preview.26176.111 + 10.0.300-preview.26176.111 + 10.0.300-preview.26176.111 + 10.0.300-preview.26176.111 + 10.0.300-preview.26176.111 + 10.0.300-preview.26176.111 + 10.0.300-preview.26176.111 + 10.0.300-preview.26176.111 + 10.0.300-preview.26176.111 + 18.3.0-release-26176-111 + 18.3.0-release-26176-111 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 - 7.6.0-rc.17707 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 + 7.6.0-rc.17711 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e74bd5400390..33aee755526f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac - + https://github.com/dotnet/dotnet - eebcb99e5770c241d6b6f8a900fa11fa0c910e2d + 42d6a4c2c669419a1f10edac6999d02dc2c204ac https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 446215bd7fd4..ec391a7b8286 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.107", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.107", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.111", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.111", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From af7d6565953c6eb0f4e463ec7d7fdfd172e1456b Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Thu, 26 Mar 2026 14:43:01 -0700 Subject: [PATCH 044/230] [backport to release/10.0.3xx]Add warnings for newer tool versions during dotnet tool restore (#52715) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> Co-authored-by: Noah Gilson Co-authored-by: nagilson <23152278+nagilson@users.noreply.github.com> --- .../dotnet/Commands/CliCommandStrings.resx | 3 + .../Tool/Restore/ToolPackageRestorer.cs | 44 ++++- .../Tool/Restore/ToolRestoreCommand.cs | 31 +++- .../Commands/xlf/CliCommandStrings.cs.xlf | 5 + .../Commands/xlf/CliCommandStrings.de.xlf | 5 + .../Commands/xlf/CliCommandStrings.es.xlf | 5 + .../Commands/xlf/CliCommandStrings.fr.xlf | 5 + .../Commands/xlf/CliCommandStrings.it.xlf | 5 + .../Commands/xlf/CliCommandStrings.ja.xlf | 5 + .../Commands/xlf/CliCommandStrings.ko.xlf | 5 + .../Commands/xlf/CliCommandStrings.pl.xlf | 5 + .../Commands/xlf/CliCommandStrings.pt-BR.xlf | 5 + .../Commands/xlf/CliCommandStrings.ru.xlf | 5 + .../Commands/xlf/CliCommandStrings.tr.xlf | 5 + .../xlf/CliCommandStrings.zh-Hans.xlf | 5 + .../xlf/CliCommandStrings.zh-Hant.xlf | 5 + .../Tool/Restore/ToolRestoreCommandTests.cs | 170 ++++++++++++++++++ 17 files changed, 306 insertions(+), 7 deletions(-) diff --git a/src/Cli/dotnet/Commands/CliCommandStrings.resx b/src/Cli/dotnet/Commands/CliCommandStrings.resx index 61630d8c6b27..cb37e3792b84 100644 --- a/src/Cli/dotnet/Commands/CliCommandStrings.resx +++ b/src/Cli/dotnet/Commands/CliCommandStrings.resx @@ -919,6 +919,9 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Tool '{0}' (version '{1}') was restored. Available commands: {2} + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + Invalid rollback definition. The manifest IDs in rollback definition {0} do not match installed manifest IDs {1}. diff --git a/src/Cli/dotnet/Commands/Tool/Restore/ToolPackageRestorer.cs b/src/Cli/dotnet/Commands/Tool/Restore/ToolPackageRestorer.cs index 1377a97cb006..9aecc47b4806 100644 --- a/src/Cli/dotnet/Commands/Tool/Restore/ToolPackageRestorer.cs +++ b/src/Cli/dotnet/Commands/Tool/Restore/ToolPackageRestorer.cs @@ -83,6 +83,9 @@ public ToolRestoreResult InstallPackage( toolPackage.Command.Name)); } + // Check for newer versions and prepare warning message + string warning = CheckForNewerVersion(package, configFile); + return ToolRestoreResult.Success( saveToCache: (new RestoredCommandIdentifier( @@ -96,7 +99,8 @@ public ToolRestoreResult InstallPackage( CliCommandStrings.RestoreSuccessful, package.PackageId, package.Version.ToNormalizedString(), - string.Join(" ", package.CommandNames))); + string.Join(" ", package.CommandNames)), + warning: warning); } catch (ToolPackageException e) { @@ -129,6 +133,44 @@ public bool PackageHasBeenRestored( && _fileSystem.File.Exists(toolCommand.Executable.Value); } + private string CheckForNewerVersion(ToolManifestPackage package, FilePath? configFile) + { + try + { + // Use wildcard version range to get the latest version + var latestVersionRange = VersionRange.Parse("*"); + + var (latestVersion, _) = _toolPackageDownloader.GetNuGetVersion( + new PackageLocation( + nugetConfig: configFile, + additionalFeeds: _additionalSources, + sourceFeedOverrides: _overrideSources, + rootConfigDirectory: package.FirstEffectDirectory), + package.PackageId, + _verbosity, + latestVersionRange, + _restoreActionConfig); + + // Compare versions - only warn if there's a newer stable version or if the manifest uses prerelease + if (latestVersion != null && latestVersion > package.Version) + { + // If the current version is prerelease, show warning for any newer version + // If the current version is stable, only show warning for newer stable versions + if (package.Version.IsPrerelease || !latestVersion.IsPrerelease) + { + return string.Format(CliCommandStrings.RestoreNewVersionAvailable, package.PackageId, latestVersion.ToNormalizedString()); + } + } + } + catch + { + // If we can't check for newer versions, don't show a warning + // This could happen due to network issues, package source problems, etc. + } + + return string.Empty; + } + private static string JoinBySpaceWithQuote(IEnumerable objects) { return string.Join(" ", objects.Select(o => $"\"{o.ToString()}\"")); diff --git a/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommand.cs b/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommand.cs index 3c00ebfb2dfd..1e180fcd9c5f 100644 --- a/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommand.cs +++ b/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommand.cs @@ -140,7 +140,14 @@ private int PrintConclusionAndReturn(ToolRestoreResult[] toolRestoreResults) { _reporter.WriteLine(); _reporter.WriteLine(string.Join(Environment.NewLine, successMessage)); - + + // Display warnings for successful restorations even in partial failure case + var warnings = toolRestoreResults.Where(r => r.IsSuccess && !string.IsNullOrEmpty(r.Warning)).Select(r => r.Warning); + if (warnings.Any()) + { + _reporter.WriteLine(); + _reporter.WriteLine(string.Join(Environment.NewLine, warnings).Yellow()); + } } _errorReporter.WriteLine(Environment.NewLine + @@ -154,6 +161,15 @@ private int PrintConclusionAndReturn(ToolRestoreResult[] toolRestoreResults) { _reporter.WriteLine(string.Join(Environment.NewLine, toolRestoreResults.Where(r => r.IsSuccess).Select(r => r.Message))); + + // Display warnings for newer versions available + var warnings = toolRestoreResults.Where(r => r.IsSuccess && !string.IsNullOrEmpty(r.Warning)).Select(r => r.Warning); + if (warnings.Any()) + { + _reporter.WriteLine(); + _reporter.WriteLine(string.Join(Environment.NewLine, warnings).Yellow()); + } + _reporter.WriteLine(); _reporter.WriteLine(CliCommandStrings.LocalToolsRestoreWasSuccessful.Green()); @@ -203,10 +219,11 @@ public struct ToolRestoreResult public (RestoredCommandIdentifier restoredCommandIdentifier, ToolCommand toolCommand)? SaveToCache { get; } public bool IsSuccess { get; } public string Message { get; } + public string Warning { get; } private ToolRestoreResult( (RestoredCommandIdentifier, ToolCommand)? saveToCache, - bool isSuccess, string message) + bool isSuccess, string message, string warning = null) { if (string.IsNullOrWhiteSpace(message)) { @@ -216,18 +233,20 @@ private ToolRestoreResult( SaveToCache = saveToCache; IsSuccess = isSuccess; Message = message; + Warning = warning; } public static ToolRestoreResult Success( (RestoredCommandIdentifier, ToolCommand)? saveToCache, - string message) + string message, + string warning = null) { - return new ToolRestoreResult(saveToCache, true, message); + return new ToolRestoreResult(saveToCache, true, message, warning); } public static ToolRestoreResult Failure(string message) { - return new ToolRestoreResult(null, false, message); + return new ToolRestoreResult(null, false, message, null); } public static ToolRestoreResult Failure( @@ -236,7 +255,7 @@ public static ToolRestoreResult Failure( { return new ToolRestoreResult(null, false, string.Format(CliCommandStrings.PackageFailedToRestore, - packageId.ToString(), toolPackageException.ToString())); + packageId.ToString(), toolPackageException.ToString()), null); } } } diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf index 3bb69f375577..949d8ff029b7 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf @@ -1337,6 +1337,11 @@ Nástroj {1} (verze {2}) se úspěšně nainstaloval. Do souboru manifestu {3} s Obnovení selhalo. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. Obnovení bylo částečně neúspěšné. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf index 0ec39df110ce..6268859bf8c5 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf @@ -1337,6 +1337,11 @@ Das Tool "{1}" (Version {2}) wurde erfolgreich installiert. Der Eintrag wird der Fehler beim Wiederherstellen. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. Die Wiederherstellung war nur teilweise möglich. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf index cd33ddb1cae8..323fa4f3e421 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf @@ -1337,6 +1337,11 @@ La herramienta "{1}" (versión "{2}") se instaló correctamente. Se ha agregado Error en la restauración. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. Error parcial de restauración. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf index 8a0bd0573548..ad6fcc2de5ba 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf @@ -1337,6 +1337,11 @@ L'outil '{1}' (version '{2}') a été correctement installé. L'entrée est ajou Échec de la restauration. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. Échec partiel de la restauration. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf index c78cd43a5dc0..aa395fb773c2 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf @@ -1337,6 +1337,11 @@ Lo strumento '{1}' versione '{2}' è stato installato. La voce è stata aggiunta Il ripristino non è riuscito. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. Il ripristino non è riuscito parzialmente. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index 207944301937..50e25379136a 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -1337,6 +1337,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 復元に失敗しました。 + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. 復元が部分的に失敗しました。 diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf index 4788a1e6c97f..8e11b85aec17 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf @@ -1337,6 +1337,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 복원하지 못했습니다. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. 부분적으로 복원하지 못했습니다. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf index 4d5b146ff4f4..91efd4721d19 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf @@ -1337,6 +1337,11 @@ Narzędzie „{1}” (wersja „{2}”) zostało pomyślnie zainstalowane. Wpis Przywracanie nie powiodło się. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. Przywracanie częściowo nie powiodło się. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf index 0acb57aad166..6538926d0aed 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf @@ -1337,6 +1337,11 @@ A ferramenta '{1}' (versão '{2}') foi instalada com êxito. A entrada foi adici Falha na restauração. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. Falha parcial na restauração. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index 61550b7f9a60..94c78c2068bc 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -1337,6 +1337,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Сбой восстановления. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. Восстановление частично не выполнено. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf index 450e91d741f3..9dc6ccad5ace 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf @@ -1337,6 +1337,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Geri yükleme başarısız oldu. + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. Geri yükleme kısmen başarısız oldu. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf index c3bdb44fa189..4f4a1765f804 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf @@ -1337,6 +1337,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 还原失败。 + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. 还原部分失败。 diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf index 30fa6a45f568..6b5c4b7a2392 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf @@ -1337,6 +1337,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 還原失敗。 + + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + + Restore partially failed. 還原部分失敗。 diff --git a/test/dotnet.Tests/CommandTests/Tool/Restore/ToolRestoreCommandTests.cs b/test/dotnet.Tests/CommandTests/Tool/Restore/ToolRestoreCommandTests.cs index c84b9c8ee372..d18f633601d3 100644 --- a/test/dotnet.Tests/CommandTests/Tool/Restore/ToolRestoreCommandTests.cs +++ b/test/dotnet.Tests/CommandTests/Tool/Restore/ToolRestoreCommandTests.cs @@ -532,6 +532,176 @@ public void WhenRunWithoutManifestFileItShouldPrintSpecificRestoreErrorMessage() l.Contains(AnsiExtensions.Yellow(CliCommandStrings.NoToolsWereRestored))); } + [Fact] + public void WhenNewerVersionIsAvailableItShowsWarning() + { + // Use an explicit version to prevent test from breaking if _packageVersionA changes + var currentVersion = NuGetVersion.Parse("1.0.0"); + var newerPackageVersion = NuGetVersion.Parse("2.1.4"); + var manifestPackage = new ToolManifestPackage( + _packageIdA, + currentVersion, + new[] { _toolCommandNameA }, + new DirectoryPath(_temporaryDirectory), + rollForward: false); + + // Create a mock feed with both the current version and a newer version + var feeds = new List + { + new MockFeed + { + Type = MockFeedType.FeedFromGlobalNugetConfig, + Packages = new List + { + new MockFeedPackage + { + PackageId = _packageIdA.ToString(), + Version = currentVersion.ToNormalizedString(), + ToolCommandName = _toolCommandNameA.Value, + }, + new MockFeedPackage + { + PackageId = _packageIdA.ToString(), + Version = newerPackageVersion.ToNormalizedString(), + ToolCommandName = _toolCommandNameA.Value, + } + } + } + }; + + var toolPackageDownloaderMockWithFeeds = new ToolPackageDownloaderMock( + _toolPackageStore, _fileSystem, feeds: feeds); + + IToolManifestFinder fakeManifestFinder = + new MockManifestFinder(new[] { manifestPackage }); + + ToolRestoreCommand toolRestoreCommand = new(_parseResult, + toolPackageDownloaderMockWithFeeds, + fakeManifestFinder, + _localToolsResolverCache, + _fileSystem, + _reporter + ); + + toolRestoreCommand.Execute().Should().Be(0); + + _reporter.Lines.Should().Contain(l => + l.Contains(string.Format(CliCommandStrings.RestoreNewVersionAvailable, _packageIdA, newerPackageVersion.ToNormalizedString()))); + } + + [Fact] + public void WhenCurrentVersionIsPrereleaseAndNewerStableIsAvailableItShowsWarning() + { + var currentPrereleaseVersion = NuGetVersion.Parse("1.0.0-rc1"); + var newerStableVersion = NuGetVersion.Parse("1.0.0"); + var manifestPackage = new ToolManifestPackage( + _packageIdA, + currentPrereleaseVersion, + new[] { _toolCommandNameA }, + new DirectoryPath(_temporaryDirectory), + rollForward: false); + + // Create a mock feed with both the prerelease version and a newer stable version + var feeds = new List + { + new MockFeed + { + Type = MockFeedType.FeedFromGlobalNugetConfig, + Packages = new List + { + new MockFeedPackage + { + PackageId = _packageIdA.ToString(), + Version = currentPrereleaseVersion.ToNormalizedString(), + ToolCommandName = _toolCommandNameA.Value, + }, + new MockFeedPackage + { + PackageId = _packageIdA.ToString(), + Version = newerStableVersion.ToNormalizedString(), + ToolCommandName = _toolCommandNameA.Value, + } + } + } + }; + + var toolPackageDownloaderMockWithFeeds = new ToolPackageDownloaderMock( + _toolPackageStore, _fileSystem, feeds: feeds); + + IToolManifestFinder fakeManifestFinder = + new MockManifestFinder(new[] { manifestPackage }); + + ToolRestoreCommand toolRestoreCommand = new(_parseResult, + toolPackageDownloaderMockWithFeeds, + fakeManifestFinder, + _localToolsResolverCache, + _fileSystem, + _reporter + ); + + toolRestoreCommand.Execute().Should().Be(0); + + _reporter.Lines.Should().Contain(l => + l.Contains(string.Format(CliCommandStrings.RestoreNewVersionAvailable, _packageIdA, newerStableVersion.ToNormalizedString()))); + } + + [Fact] + public void WhenCurrentVersionIsStableAndNewerPrereleaseIsAvailableItDoesNotShowWarning() + { + var currentStableVersion = NuGetVersion.Parse("1.0.0"); + var newerPrereleaseVersion = NuGetVersion.Parse("1.1.0-rc1"); + var manifestPackage = new ToolManifestPackage( + _packageIdA, + currentStableVersion, + new[] { _toolCommandNameA }, + new DirectoryPath(_temporaryDirectory), + rollForward: false); + + // Create a mock feed with both the stable version and a newer prerelease version + var feeds = new List + { + new MockFeed + { + Type = MockFeedType.FeedFromGlobalNugetConfig, + Packages = new List + { + new MockFeedPackage + { + PackageId = _packageIdA.ToString(), + Version = currentStableVersion.ToNormalizedString(), + ToolCommandName = _toolCommandNameA.Value, + }, + new MockFeedPackage + { + PackageId = _packageIdA.ToString(), + Version = newerPrereleaseVersion.ToNormalizedString(), + ToolCommandName = _toolCommandNameA.Value, + } + } + } + }; + + var toolPackageDownloaderMockWithFeeds = new ToolPackageDownloaderMock( + _toolPackageStore, _fileSystem, feeds: feeds); + + IToolManifestFinder fakeManifestFinder = + new MockManifestFinder(new[] { manifestPackage }); + + ToolRestoreCommand toolRestoreCommand = new(_parseResult, + toolPackageDownloaderMockWithFeeds, + fakeManifestFinder, + _localToolsResolverCache, + _fileSystem, + _reporter + ); + + toolRestoreCommand.Execute().Should().Be(0); + + // Should NOT contain warning about the prerelease version + _reporter.Lines.Should().NotContain(l => + l.Contains(string.Format(CliCommandStrings.RestoreNewVersionAvailable, _packageIdA, newerPrereleaseVersion.ToNormalizedString()))); + } + private class MockManifestFinder : IToolManifestFinder { private readonly IReadOnlyCollection _toReturn; From 38dfbc8188808baf6326125ef74bb44dc2e84c9c Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 26 Mar 2026 21:48:37 +0000 Subject: [PATCH 045/230] Update dependencies from build 307981 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26174.114 -> 10.0.0-preview.26176.114) Microsoft.Build (Version 18.3.3 -> 18.3.3) Microsoft.Build.Localization (Version 18.3.3-servicing-26174-114 -> 18.3.3-servicing-26176-114) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.3.0-rc.17514 -> 7.3.0-rc.17714) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.202 -> 10.0.202) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.3.0-2.26174.114 -> 5.3.0-2.26176.114) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26174.114 -> 10.0.0-beta.26176.114) Microsoft.FSharp.Compiler (Version 15.2.202-servicing.26174.114 -> 15.2.202-servicing.26176.114) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26174-114 -> 18.3.0-release-26176-114) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.202-servicing.26174.114 -> 10.0.202-servicing.26176.114) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 96 ++++++++--------- eng/Version.Details.xml | 220 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 161 insertions(+), 161 deletions(-) diff --git a/NuGet.config b/NuGet.config index 62cec2f1e957..ea88a8aa62a2 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index b23906261702..9af0d274fa20 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,37 +30,37 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4-servicing.26119.110 10.0.4-servicing.26119.110 - 10.0.0-preview.26174.114 + 10.0.0-preview.26176.114 10.0.4 10.0.4 18.3.3 - 18.3.3-servicing-26174-114 - 7.3.0-rc.17514 + 18.3.3-servicing-26176-114 + 7.3.0-rc.17714 10.0.202 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 10.0.0-preview.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 + 5.3.0-2.26176.114 + 5.3.0-2.26176.114 + 5.3.0-2.26176.114 + 5.3.0-2.26176.114 + 5.3.0-2.26176.114 + 5.3.0-2.26176.114 + 5.3.0-2.26176.114 + 5.3.0-2.26176.114 + 10.0.0-preview.26176.114 + 5.3.0-2.26176.114 + 5.3.0-2.26176.114 2.0.0-preview.1.26119.110 2.2.4 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 + 10.0.0-beta.26176.114 + 10.0.0-beta.26176.114 + 10.0.0-beta.26176.114 + 10.0.0-beta.26176.114 + 10.0.0-beta.26176.114 + 10.0.0-beta.26176.114 10.0.4 10.0.4 10.0.4-servicing.26119.110 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 + 10.0.0-beta.26176.114 + 10.0.0-beta.26176.114 10.0.4 10.0.4 10.0.4 @@ -70,17 +70,17 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 10.0.4 - 15.2.202-servicing.26174.114 + 15.2.202-servicing.26176.114 10.0.4 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 + 5.3.0-2.26176.114 + 5.3.0-2.26176.114 10.0.4-servicing.26119.110 10.0.4 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26174.114 + 10.0.0-preview.26176.114 10.0.4-servicing.26119.110 - 18.3.0-release-26174-114 + 18.3.0-release-26176-114 10.0.4 10.0.4-servicing.26119.110 10.0.202 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.202 10.0.202 10.0.202 - 10.0.202-servicing.26174.114 + 10.0.202-servicing.26176.114 10.0.202 - 10.0.202-servicing.26174.114 + 10.0.202-servicing.26176.114 10.0.202 10.0.202 - 10.0.202-servicing.26174.114 - 18.3.0-release-26174-114 - 18.3.0-release-26174-114 + 10.0.202-servicing.26176.114 + 18.3.0-release-26176-114 + 18.3.0-release-26176-114 3.2.4 10.0.4 10.0.4-servicing.26119.110 10.0.4 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 + 7.3.0-rc.17714 10.0.4 2.0.4 10.0.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 847dd2a16208..c8c8baf5d19e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -74,136 +74,136 @@ https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -370,25 +370,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -407,27 +407,27 @@ https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee @@ -514,9 +514,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -524,37 +524,37 @@ - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 8205f49bb392..ffbb7f865b84 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.114", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.114", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.114", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.114", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 2fc0a97031783518b6ee34d3f7e78a958b1642af Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 23:16:35 +0000 Subject: [PATCH 046/230] [release/10.0.3xx] Fix `dotnet reference add/remove` failing when no `--project` is specified (#53601) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: baronfel <573979+baronfel@users.noreply.github.com> --- .../Reference/Add/ReferenceAddCommand.cs | 2 +- .../Reference/Remove/ReferenceRemoveCommand.cs | 2 +- .../Reference/Add/GivenDotnetAddReference.cs | 16 ++++++++++++++++ .../Reference/Remove/GivenDotnetRemoveP2P.cs | 17 +++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/Cli/dotnet/Commands/Reference/Add/ReferenceAddCommand.cs b/src/Cli/dotnet/Commands/Reference/Add/ReferenceAddCommand.cs index deb1f31ae408..b1f84385e526 100644 --- a/src/Cli/dotnet/Commands/Reference/Add/ReferenceAddCommand.cs +++ b/src/Cli/dotnet/Commands/Reference/Add/ReferenceAddCommand.cs @@ -17,7 +17,7 @@ internal sealed class ReferenceAddCommand : CommandBase Date: Fri, 27 Mar 2026 00:05:32 +0000 Subject: [PATCH 047/230] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore build 20260326.7 On relative base path root dotnet-dev-certs , dotnet-user-jwts , dotnet-user-secrets , Microsoft.AspNetCore.Analyzers , Microsoft.AspNetCore.App.Ref.Internal , Microsoft.AspNetCore.Components.SdkAnalyzers , Microsoft.AspNetCore.DeveloperCertificates.XPlat , Microsoft.AspNetCore.Mvc.Analyzers , Microsoft.AspNetCore.Mvc.Api.Analyzers , VS.Redist.Common.AspNetCore.SharedFramework.x64.9.0 , Microsoft.SourceBuild.Intermediate.aspnetcore From Version 9.0.15-servicing.26170.6 -> To Version 9.0.15-servicing.26176.7 Microsoft.AspNetCore.App.Ref , Microsoft.AspNetCore.App.Runtime.win-x64 , Microsoft.AspNetCore.Authorization , Microsoft.AspNetCore.Components.Web , Microsoft.AspNetCore.TestHost , Microsoft.Extensions.FileProviders.Embedded , Microsoft.Extensions.ObjectPool , Microsoft.JSInterop From Version 9.0.15 -> To Version 9.0.15 --- NuGet.config | 4 +-- eng/Version.Details.xml | 60 ++++++++++++++++++++--------------------- eng/Versions.props | 20 +++++++------- 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/NuGet.config b/NuGet.config index f92818844aac..9543032156fe 100644 --- a/NuGet.config +++ b/NuGet.config @@ -27,7 +27,7 @@ - + @@ -72,7 +72,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 72f422e4092b..e0dec4efa41e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -131,13 +131,13 @@ https://github.com/dotnet/roslyn 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted @@ -273,52 +273,52 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c @@ -341,19 +341,19 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c @@ -507,7 +507,7 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 4f293341e1528e51280bf5bec41920aa7bafb583 + 324a351f7f1ae6c17b6a8661903e2a7921a7d75c https://dev.azure.com/dnceng/internal/_git/dotnet-runtime diff --git a/eng/Versions.props b/eng/Versions.props index 1fa44cfa1d0b..5a2252321582 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -218,18 +218,18 @@ 9.0.15 - 9.0.15-servicing.26170.6 - 9.0.15-servicing.26170.6 - 9.0.15-servicing.26170.6 - 9.0.15-servicing.26170.6 - 9.0.15-servicing.26170.6 + 9.0.15-servicing.26176.7 + 9.0.15-servicing.26176.7 + 9.0.15-servicing.26176.7 + 9.0.15-servicing.26176.7 + 9.0.15-servicing.26176.7 9.0.15 9.0.15 - 9.0.15-servicing.26170.6 - 9.0.15-servicing.26170.6 - 9.0.15-servicing.26170.6 - 9.0.15-servicing.26170.6 - 9.0.15-servicing.26170.6 + 9.0.15-servicing.26176.7 + 9.0.15-servicing.26176.7 + 9.0.15-servicing.26176.7 + 9.0.15-servicing.26176.7 + 9.0.15-servicing.26176.7 From 554801447b7be8f1ad5bbd47862424f1ad4fa1bf Mon Sep 17 00:00:00 2001 From: DotNet-Bot Date: Fri, 27 Mar 2026 00:22:21 +0000 Subject: [PATCH 048/230] Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop build 20260326.2 On relative base path root Microsoft.WindowsDesktop.App.Ref , Microsoft.WindowsDesktop.App.Runtime.win-x64 From Version 9.0.15 -> To Version 9.0.15 VS.Redist.Common.WindowsDesktop.SharedFramework.x64.9.0 , VS.Redist.Common.WindowsDesktop.TargetingPack.x64.9.0 From Version 9.0.15-servicing.26171.1 -> To Version 9.0.15-servicing.26176.2 Dependency coherency updates On relative base path root Microsoft.NET.Sdk.WindowsDesktop From Version 9.0.15-rtm.26170.2 -> To Version 9.0.15-rtm.26176.4 (parent: Microsoft.WindowsDesktop.App.Ref) Microsoft.Dotnet.WinForms.ProjectTemplates From Version 9.0.15-servicing.26170.1 -> To Version 9.0.15-servicing.26176.1 (parent: Microsoft.WindowsDesktop.App.Runtime.win-x64) Microsoft.DotNet.Wpf.ProjectTemplates From Version 9.0.15-rtm.26170.2 -> To Version 9.0.15-rtm.26176.4 (parent: Microsoft.WindowsDesktop.App.Runtime.win-x64) --- NuGet.config | 4 ++-- eng/Version.Details.xml | 24 ++++++++++++------------ eng/Versions.props | 10 +++++----- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/NuGet.config b/NuGet.config index 9543032156fe..96be0356b546 100644 --- a/NuGet.config +++ b/NuGet.config @@ -43,7 +43,7 @@ - + @@ -78,7 +78,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e0dec4efa41e..acd1a5add9bf 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -252,24 +252,24 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 9cb679f2feb9ad5228a7e45f3675f6d43a22effc + 46c3072d4539c2323f276f6282a7574feaa6a2a5 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 9cb679f2feb9ad5228a7e45f3675f6d43a22effc + 46c3072d4539c2323f276f6282a7574feaa6a2a5 https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 9cb679f2feb9ad5228a7e45f3675f6d43a22effc + 46c3072d4539c2323f276f6282a7574feaa6a2a5 - + https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 9cb679f2feb9ad5228a7e45f3675f6d43a22effc + 46c3072d4539c2323f276f6282a7574feaa6a2a5 - + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - f4723a5d3212e9e57fee2597875307f0896ba4b4 + a01db3af68be8bfc869550b0be7cfc5881e4c685 https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore @@ -356,13 +356,13 @@ 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - + https://dev.azure.com/dnceng/internal/_git/dotnet-winforms - 5a1c1eaad2d2d938bf62793f65e847c69c9d1a06 + fe627979c58f8a0b591850cfebb46adb9002c69b - + https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - f4723a5d3212e9e57fee2597875307f0896ba4b4 + a01db3af68be8bfc869550b0be7cfc5881e4c685 https://github.com/dotnet/xdt diff --git a/eng/Versions.props b/eng/Versions.props index 5a2252321582..ae8e7ceb96a8 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -81,7 +81,7 @@ - 9.0.15-servicing.26170.1 + 9.0.15-servicing.26176.1 @@ -132,8 +132,8 @@ - 9.0.15-servicing.26171.1 - 9.0.15-servicing.26171.1 + 9.0.15-servicing.26176.2 + 9.0.15-servicing.26176.2 9.0.15 9.0.15 @@ -239,8 +239,8 @@ - 9.0.15-rtm.26170.2 - 9.0.15-rtm.26170.2 + 9.0.15-rtm.26176.4 + 9.0.15-rtm.26176.4 From 3e3b50331857cb806104360ad5a941ddae1ba1f5 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 27 Mar 2026 02:01:51 +0000 Subject: [PATCH 049/230] Update dependencies from https://github.com/microsoft/testfx build 20260326.6 On relative base path root Microsoft.Testing.Platform From Version 2.2.0-preview.26174.1 -> To Version 2.2.0-preview.26176.6 MSTest From Version 4.2.0-preview.26174.1 -> To Version 4.2.0-preview.26176.6 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 17dd5067d527..34cd4f25902b 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 - 2.2.0-preview.26174.1 - 4.2.0-preview.26174.1 + 2.2.0-preview.26176.6 + 4.2.0-preview.26176.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 66edec17a66a..1f9a4a3da45c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -561,13 +561,13 @@ https://github.com/dotnet/dotnet 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/microsoft/testfx - 926d2f3fbfce8f04a1c05e743d28715d93baa5bb + a6a857248711507fe51224a90eaecef43f436f8c - + https://github.com/microsoft/testfx - 926d2f3fbfce8f04a1c05e743d28715d93baa5bb + a6a857248711507fe51224a90eaecef43f436f8c https://github.com/dotnet/dotnet From d30520590449a72c616d8cabcf4ef51e0dd47a47 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 27 Mar 2026 02:02:44 +0000 Subject: [PATCH 050/230] Update dependencies from https://github.com/microsoft/testfx build 20260326.6 On relative base path root Microsoft.Testing.Platform From Version 2.2.0-preview.26174.1 -> To Version 2.2.0-preview.26176.6 MSTest From Version 4.2.0-preview.26174.1 -> To Version 4.2.0-preview.26176.6 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index b23906261702..343d14f11a94 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 - 2.2.0-preview.26174.1 - 4.2.0-preview.26174.1 + 2.2.0-preview.26176.6 + 4.2.0-preview.26176.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 847dd2a16208..d8798b6776fd 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -560,13 +560,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - 926d2f3fbfce8f04a1c05e743d28715d93baa5bb + a6a857248711507fe51224a90eaecef43f436f8c - + https://github.com/microsoft/testfx - 926d2f3fbfce8f04a1c05e743d28715d93baa5bb + a6a857248711507fe51224a90eaecef43f436f8c https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From 27d0eb2627e89bb81d35df7e8ca493e909e67351 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 27 Mar 2026 04:52:46 +0000 Subject: [PATCH 051/230] Update dependencies from build 308038 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.6-servicing.26174.113 -> 10.0.6-servicing.26176.117) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.6 -> 10.0.6) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26174.113 -> 10.0.0-preview.26176.117) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26174-113 -> 18.0.11-servicing-26176-117) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.17513 -> 7.0.2-rc.17717) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.106 -> 10.0.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26174.113 -> 5.0.0-2.26176.117) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26174.113 -> 2.0.0-preview.1.26176.117) Microsoft.DiaSymReader (Version 2.2.6 -> 2.2.6) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26174.113 -> 10.0.0-beta.26176.117) Microsoft.FSharp.Compiler (Version 14.0.106-servicing.26174.113 -> 14.0.106-servicing.26176.117) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26174-113 -> 18.0.2-release-26176-117) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.106-servicing.26174.113 -> 10.0.106-servicing.26176.117) Microsoft.Web.Xdt (Version 3.2.6 -> 3.2.6) System.CommandLine (Version 2.0.6 -> 2.0.6) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 262 insertions(+), 262 deletions(-) diff --git a/NuGet.config b/NuGet.config index 4950d4c01bdc..f0871aea246b 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 17dd5067d527..ce327bd23989 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 + 10.0.6-servicing.26176.117 + 10.0.6-servicing.26176.117 + 10.0.6-servicing.26176.117 + 10.0.6-servicing.26176.117 10.0.6 - 10.0.6-servicing.26174.113 + 10.0.6-servicing.26176.117 10.0.6 10.0.6 10.0.6 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26174.113 + 10.0.6-servicing.26176.117 10.0.6 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26174.113 + 10.0.6-servicing.26176.117 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.0-preview.26174.113 + 10.0.6-servicing.26176.117 + 10.0.6-servicing.26176.117 + 10.0.0-preview.26176.117 10.0.6 10.0.6 18.0.11 - 18.0.11-servicing-26174-113 - 7.0.2-rc.17513 + 18.0.11-servicing-26176-117 + 7.0.2-rc.17717 10.0.106 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 10.0.0-preview.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 2.0.0-preview.1.26174.113 + 5.0.0-2.26176.117 + 5.0.0-2.26176.117 + 5.0.0-2.26176.117 + 5.0.0-2.26176.117 + 5.0.0-2.26176.117 + 5.0.0-2.26176.117 + 5.0.0-2.26176.117 + 10.0.0-preview.26176.117 + 5.0.0-2.26176.117 + 5.0.0-2.26176.117 + 2.0.0-preview.1.26176.117 2.2.6 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 + 10.0.0-beta.26176.117 + 10.0.0-beta.26176.117 + 10.0.0-beta.26176.117 + 10.0.0-beta.26176.117 + 10.0.0-beta.26176.117 + 10.0.0-beta.26176.117 10.0.6 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 + 10.0.6-servicing.26176.117 + 10.0.6-servicing.26176.117 + 10.0.0-beta.26176.117 + 10.0.0-beta.26176.117 10.0.6 10.0.6 10.0.6 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 14.0.106-servicing.26174.113 + 14.0.106-servicing.26176.117 10.0.6 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 10.0.6-servicing.26174.113 + 5.0.0-2.26176.117 + 5.0.0-2.26176.117 + 10.0.6-servicing.26176.117 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26174.113 - 10.0.6-servicing.26174.113 - 18.0.2-release-26174-113 + 10.0.0-preview.26176.117 + 10.0.6-servicing.26176.117 + 18.0.2-release-26176-117 10.0.6 - 10.0.6-servicing.26174.113 + 10.0.6-servicing.26176.117 10.0.106 10.0.106 10.0.106 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.106 10.0.106 10.0.106 - 10.0.106-servicing.26174.113 + 10.0.106-servicing.26176.117 10.0.106 - 10.0.106-servicing.26174.113 + 10.0.106-servicing.26176.117 10.0.106 10.0.106 - 10.0.106-servicing.26174.113 - 18.0.2-release-26174-113 - 18.0.2-release-26174-113 + 10.0.106-servicing.26176.117 + 18.0.2-release-26176-117 + 18.0.2-release-26176-117 3.2.6 10.0.6 - 10.0.6-servicing.26174.113 + 10.0.6-servicing.26176.117 10.0.6 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 + 7.0.2-rc.17717 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 66edec17a66a..8178e175e099 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 diff --git a/global.json b/global.json index 9e488dee1037..b78a234428e7 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.113", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.113", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.117", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.117", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From d4ba56f2ac28ac7511add25caef996ada4bdc66b Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Fri, 27 Mar 2026 09:35:06 +0100 Subject: [PATCH 052/230] Add skill for incremental building (#53479) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/copilot-instructions.md | 1 + .github/copilot/skills/incremental-test.md | 104 +++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 .github/copilot/skills/incremental-test.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index fba4fc668af4..5cb5d96045cd 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -21,6 +21,7 @@ Testing: - Examples: - `dotnet test test/dotnet.Tests/dotnet.Tests.csproj --filter "Name~ItShowsTheAppropriateMessageToTheUser"` - `dotnet exec artifacts/bin/redist/Debug/dotnet.Tests.dll -method "*ItShowsTheAppropriateMessageToTheUser*"` +- For incremental test runs of `dotnet.Tests` (avoids slow full `build.cmd`), see the skill at `.github/copilot/skills/incremental-test.md`. In short: build only the modified projects, copy their output DLLs into the redist SDK layout, then run the tests. - To test CLI command changes: - Build the redist SDK: `./build.sh` from repo root - Create a dogfood environment: `source eng/dogfood.sh` diff --git a/.github/copilot/skills/incremental-test.md b/.github/copilot/skills/incremental-test.md new file mode 100644 index 000000000000..a15c42f6cd28 --- /dev/null +++ b/.github/copilot/skills/incremental-test.md @@ -0,0 +1,104 @@ +# Incremental Test Runner for dotnet.Tests + +This skill enables fast incremental test runs of `dotnet.Tests` without a full `build.cmd` rebuild. +Use it after making source code changes to quickly build only the modified projects and deploy their outputs into the redist SDK layout so tests can run against them. + +## Prerequisites + +- A full build must have been completed at least once (via `build.cmd` or `build.sh`) so that the redist SDK layout exists at `artifacts\bin\redist\Debug\dotnet\sdk\\`. +- This workflow uses Windows/PowerShell commands and paths. On macOS/Linux, substitute forward slashes and use `cp` instead of `Copy-Item`. + +## When to use + +Use this skill when you need to run `dotnet.Tests` after modifying source code in one or more SDK projects. It avoids the slow full `build.cmd` by only rebuilding the changed projects and copying their output DLLs into the redist layout. + +## Workflow + +### Step 1: Identify modified projects + +Determine which projects have been modified. Use context from: +- The files you just edited in this session. +- Or `git status`/`git diff` to find changed `.cs` files and map them to their `.csproj` projects. + +### Step 2: Build modified projects + +Build each modified project individually using the repo-local dotnet: + +``` +.\.dotnet\dotnet build -c Debug +``` + +For example: +``` +.\.dotnet\dotnet build src\Cli\Microsoft.DotNet.Cli.Utils\Microsoft.DotNet.Cli.Utils.csproj -c Debug +``` + +If the `dotnet` CLI project itself was modified, build it: +``` +.\.dotnet\dotnet build src\Cli\dotnet\dotnet.csproj -c Debug +``` + +### Step 3: Copy output DLLs to the redist SDK layout + +Discover the SDK version directory name: +```powershell +$sdkVersion = (Get-ChildItem artifacts\bin\redist\Debug\dotnet\sdk -Directory | Sort-Object LastWriteTime -Descending | Select-Object -First 1).Name +``` + +For each modified project, copy its output DLL (and any satellite assemblies) from the project's build output to the redist SDK directory: + +``` +Source: artifacts\bin\\Debug\net10.0\.dll +Target: artifacts\bin\redist\Debug\dotnet\sdk\\ +``` + +For example: +```powershell +Copy-Item artifacts\bin\Microsoft.DotNet.ProjectTools\Debug\net10.0\Microsoft.DotNet.ProjectTools.dll artifacts\bin\redist\Debug\dotnet\sdk\$sdkVersion\ +Copy-Item artifacts\bin\Microsoft.DotNet.Cli.Utils\Debug\net10.0\Microsoft.DotNet.Cli.Utils.dll artifacts\bin\redist\Debug\dotnet\sdk\$sdkVersion\ +``` + +The `dotnet` project is special — it builds into `artifacts\bin\dotnet\Debug\net10.0\` and its `dotnet.dll` must be copied to the SDK directory: +```powershell +Copy-Item artifacts\bin\dotnet\Debug\net10.0\dotnet.dll artifacts\bin\redist\Debug\dotnet\sdk\$sdkVersion\ +``` + +**Important notes:** +- For typical incremental edits, only copy DLLs that are **already present** in the target directory. If your change introduces a new shipped assembly or moves assemblies, you will need a full `build.cmd`/`build.sh` to update the layout correctly. +- Some projects multi-target (e.g., `net10.0` and `net472`). Always use the `net10.0` output. +- If localization resource DLLs were changed (in subdirectories like `cs\`, `de\`, etc.), copy those too. + +### Step 4: Build the test project (if test code was modified) + +The test project `test\dotnet.Tests\dotnet.Tests.csproj` outputs directly to `artifacts\bin\redist\Debug\` (via `TestHostFolder`), so just build it: + +``` +.\.dotnet\dotnet build test\dotnet.Tests\dotnet.Tests.csproj +``` + +### Step 5: Run the tests + +Run specific tests: +``` +.\.dotnet\dotnet exec artifacts\bin\redist\Debug\dotnet.Tests.dll -method "*TestMethodName*" +``` + +Or run filtered tests via `dotnet test`: +``` +.\.dotnet\dotnet test test\dotnet.Tests\dotnet.Tests.csproj --no-build --filter "Name~TestMethodName" +``` + +## Common project paths + +| Assembly | Project Path | +|---|---| +| `dotnet.dll` | `src\Cli\dotnet\dotnet.csproj` | +| `Microsoft.DotNet.Cli.Utils.dll` | `src\Cli\Microsoft.DotNet.Cli.Utils\Microsoft.DotNet.Cli.Utils.csproj` | +| `Microsoft.DotNet.Cli.Definitions.dll` | `src\Cli\Microsoft.DotNet.Cli.Definitions\Microsoft.DotNet.Cli.Definitions.csproj` | +| `Microsoft.DotNet.Cli.CoreUtils.dll` | `src\Cli\Microsoft.DotNet.Cli.CoreUtils\Microsoft.DotNet.Cli.CoreUtils.csproj` | +| `Microsoft.DotNet.Configurer.dll` | `src\Cli\Microsoft.DotNet.Configurer\Microsoft.DotNet.Configurer.csproj` | +| `Microsoft.DotNet.ProjectTools.dll` | `src\Microsoft.DotNet.ProjectTools\Microsoft.DotNet.ProjectTools.csproj` | +| `Microsoft.DotNet.NativeWrapper.dll` | `src\Resolvers\Microsoft.DotNet.NativeWrapper\Microsoft.DotNet.NativeWrapper.csproj` | +| `Microsoft.DotNet.TemplateLocator.dll` | `src\Microsoft.DotNet.TemplateLocator\Microsoft.DotNet.TemplateLocator.csproj` | +| `Microsoft.DotNet.InternalAbstractions.dll` | `src\Cli\Microsoft.DotNet.InternalAbstractions\Microsoft.DotNet.InternalAbstractions.csproj` | +| `dotnet.Tests.dll` | `test\dotnet.Tests\dotnet.Tests.csproj` | From 4e5aa575d2162d798bf9dec70e53db6d04b19cb0 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Fri, 27 Mar 2026 10:42:55 -0700 Subject: [PATCH 053/230] Apply fork changes: Copilot PAT pool, improved prompts, and API header Cherry-picked changes from marcpopMSFT/sdk main branch: - Switch from GitHub Models to Copilot PAT pool with select-copilot-pat action - Upgrade AI model to gpt-4.1 and improve tactics prompt instructions - Add required Copilot-Integration-Id header to API call - Fix prompt variable reference (split system/user messages) - Update PR description with tactics when no linked issue found - Add pull-requests: write permission for PR body updates Co-authored-by: Marc Paine Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/actions/select-copilot-pat/README.md | 93 +++++++++++ .github/actions/select-copilot-pat/action.yml | 53 ++++++ .../workflows/update-tactics-on-comment.yml | 157 ++++++++++++++---- 3 files changed, 275 insertions(+), 28 deletions(-) create mode 100644 .github/actions/select-copilot-pat/README.md create mode 100644 .github/actions/select-copilot-pat/action.yml diff --git a/.github/actions/select-copilot-pat/README.md b/.github/actions/select-copilot-pat/README.md new file mode 100644 index 000000000000..f23b69f5b3c6 --- /dev/null +++ b/.github/actions/select-copilot-pat/README.md @@ -0,0 +1,93 @@ +# Select Copilot PAT + +Selects a random Copilot PAT from a numbered pool of secrets. This addresses +limitations that arise from having a single PAT shared across all workflows +that call the Copilot API, such as rate-limiting. + +> **This is a stop-gap workaround.** As soon as organization/enterprise billing +> is offered for agentic workflows, this approach will be removed. + +Based on the pattern established in [dotnet/runtime#126057](https://github.com/dotnet/runtime/pull/126057). + +## Repository Onboarding + +1. Copy this `select-copilot-pat` folder into the repository under + `.github/actions/select-copilot-pat`, including both the `README.md` + and `action.yml`. +2. Add repository secrets named `COPILOT_PAT_0` through `COPILOT_PAT_9` + (you only need as many as you have team members contributing PATs). +3. Reference the action in your workflow (see Usage below). + +## PAT Creation + +[Use this link to prefill the PAT creation form with the required settings][create-pat]: + +1. **Resource owner** is your **user account**, not an organization. +2. **Copilot Requests (Read)** must be the only permission granted. +3. **8-day expiration** must be used, which enforces a weekly renewal. +4. **Repository access** set to **Public repositories** only. + +Team members providing PATs should set weekly recurring reminders to +regenerate and update their PATs in the repository secrets. + +PATs are added through **Settings > Secrets and variables > Actions**, +saved as **Repository secrets** matching the `COPILOT_PAT_<0-9>` naming +convention. This can also be done using the GitHub CLI: + +```sh +gh secret set "COPILOT_PAT_0" --body "" --repo dotnet/sdk +``` + +## Usage + +Add a job that selects a PAT, then consume it in downstream jobs: + +```yaml +jobs: + select-pat: + name: Select Copilot PAT + runs-on: ubuntu-latest + outputs: + copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} + steps: + - name: Checkout select-copilot-pat action + uses: actions/checkout@v6 + with: + persist-credentials: false + sparse-checkout: .github/actions/select-copilot-pat + sparse-checkout-cone-mode: true + fetch-depth: 1 + + - id: select-copilot-pat + name: Select Copilot token from pool + uses: ./.github/actions/select-copilot-pat + env: + SECRET_0: ${{ secrets.COPILOT_PAT_0 }} + SECRET_1: ${{ secrets.COPILOT_PAT_1 }} + # ... up to SECRET_9 + + my-ai-job: + needs: [select-pat] + steps: + - name: Call Copilot API + env: + COPILOT_TOKEN: ${{ needs.select-pat.outputs.copilot_pat_number == '0' && secrets.COPILOT_PAT_0 || needs.select-pat.outputs.copilot_pat_number == '1' && secrets.COPILOT_PAT_1 || '' }} + run: | + curl -X POST https://api.githubcopilot.com/chat/completions \ + -H "Authorization: Bearer $COPILOT_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"model":"gpt-4o-mini","messages":[...]}' +``` + +## Output Attribution + +Team members' PATs are _only_ used for Copilot API requests. All other +workflow outputs (issues, comments, labels) use the `github-actions[bot]` +token and are attributed accordingly. + +## References + +- [dotnet/runtime#126057 — Set up GitHub Agentic Workflows](https://github.com/dotnet/runtime/pull/126057) +- [PAT creation link][create-pat] + +[create-pat]: https://github.com/settings/personal-access-tokens/new?name=dotnet%20org%20agentic%20workflows&description=GitHub+Agentic+Workflows+-+Copilot+API+authentication.++Used+for+dotnet+org+workflows.+MUST+be+configured+with+only+Copilot+Requests+permissions+and+user+account+as+resource+owner.+Weekly+expiration+and+required+renewal.&user_copilot_requests=read&expires_in=8 diff --git a/.github/actions/select-copilot-pat/action.yml b/.github/actions/select-copilot-pat/action.yml new file mode 100644 index 000000000000..198eb0393dbf --- /dev/null +++ b/.github/actions/select-copilot-pat/action.yml @@ -0,0 +1,53 @@ +name: 'Select Copilot PAT from Pool' +description: > + Selects a random Copilot PAT from a numbered pool of secrets. Secrets + are passed as environment variables SECRET_0 through SECRET_9 + by the calling workflow step. + +inputs: + random-seed: + description: 'A seed number to use for the random PAT selection, for deterministic selection if needed.' + required: false + default: '' + +outputs: + copilot_pat_number: + description: 'The 0-9 secret number selected from the pool of specified secrets' + value: ${{ steps.select-pat-number.outputs.copilot_pat_number }} + +runs: + using: composite + steps: + - id: select-pat-number + shell: bash + env: + RANDOM_SEED: ${{ inputs.random-seed }} + run: | + # Collect all secret numbers with non-empty values from SECRET_0..SECRET_9 + PAT_NUMBERS=() + for i in $(seq 0 9); do + var="SECRET_${i}" + val="${!var}" + if [ -n "$val" ]; then + PAT_NUMBERS+=(${i}) + fi + done + + # If none of the secrets in the pool have values, then emit a warning and do not + # set an output value. The consumer can then fall back to using COPILOT_GITHUB_TOKEN. + if [ ${#PAT_NUMBERS[@]} -eq 0 ]; then + echo "::warning::None of the specified secrets had values (checked SECRET_0 through SECRET_9)" + exit 0 + fi + + # Select a random index using the seed if specified + if [ -n "$RANDOM_SEED" ]; then + RANDOM=$RANDOM_SEED + fi + + PAT_INDEX=$(( RANDOM % ${#PAT_NUMBERS[@]} )) + PAT_NUMBER="${PAT_NUMBERS[$PAT_INDEX]}" + echo "Selected token ${PAT_NUMBER} (index: ${PAT_INDEX}; pool size: ${#PAT_NUMBERS[@]})" + + # Set the PAT number as the output + echo "copilot_pat_number=${PAT_NUMBER}" >> "$GITHUB_OUTPUT" diff --git a/.github/workflows/update-tactics-on-comment.yml b/.github/workflows/update-tactics-on-comment.yml index bbc0ac3ed913..fd51e9e9334d 100644 --- a/.github/workflows/update-tactics-on-comment.yml +++ b/.github/workflows/update-tactics-on-comment.yml @@ -10,7 +10,8 @@ permissions: env: REPO_NAME: ${{ github.event.repository.name }} RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} - AI_MODEL: gpt-4o-mini + AI_MODEL: gpt-4.1 + COPILOT_API_URL: https://api.githubcopilot.com/chat/completions jobs: authorize: @@ -123,9 +124,40 @@ jobs: core.setOutput('pr_number', String(pr.data.number)); + select-pat: + name: Select Copilot PAT + needs: authorize + if: needs.authorize.outputs.should_run == 'true' + runs-on: ubuntu-latest + outputs: + copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} + steps: + - name: Checkout select-copilot-pat action + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + with: + persist-credentials: false + sparse-checkout: .github/actions/select-copilot-pat + sparse-checkout-cone-mode: true + fetch-depth: 1 + + - id: select-copilot-pat + name: Select Copilot token from pool + uses: ./.github/actions/select-copilot-pat + env: + SECRET_0: ${{ secrets.COPILOT_PAT_0 }} + SECRET_1: ${{ secrets.COPILOT_PAT_1 }} + SECRET_2: ${{ secrets.COPILOT_PAT_2 }} + SECRET_3: ${{ secrets.COPILOT_PAT_3 }} + SECRET_4: ${{ secrets.COPILOT_PAT_4 }} + SECRET_5: ${{ secrets.COPILOT_PAT_5 }} + SECRET_6: ${{ secrets.COPILOT_PAT_6 }} + SECRET_7: ${{ secrets.COPILOT_PAT_7 }} + SECRET_8: ${{ secrets.COPILOT_PAT_8 }} + SECRET_9: ${{ secrets.COPILOT_PAT_9 }} + update: name: Generate and Apply Tactics - needs: authorize + needs: [authorize, select-pat] if: needs.authorize.outputs.should_run == 'true' runs-on: ubuntu-latest permissions: @@ -234,7 +266,18 @@ jobs: id: ai-generate uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 env: - GH_MODELS_TOKEN: ${{ github.token }} + # Resolve the selected PAT from the pool; fall back to empty string if no PATs configured + COPILOT_PAT_NUMBER: ${{ needs.select-pat.outputs.copilot_pat_number }} + COPILOT_PAT_0: ${{ secrets.COPILOT_PAT_0 }} + COPILOT_PAT_1: ${{ secrets.COPILOT_PAT_1 }} + COPILOT_PAT_2: ${{ secrets.COPILOT_PAT_2 }} + COPILOT_PAT_3: ${{ secrets.COPILOT_PAT_3 }} + COPILOT_PAT_4: ${{ secrets.COPILOT_PAT_4 }} + COPILOT_PAT_5: ${{ secrets.COPILOT_PAT_5 }} + COPILOT_PAT_6: ${{ secrets.COPILOT_PAT_6 }} + COPILOT_PAT_7: ${{ secrets.COPILOT_PAT_7 }} + COPILOT_PAT_8: ${{ secrets.COPILOT_PAT_8 }} + COPILOT_PAT_9: ${{ secrets.COPILOT_PAT_9 }} PR_TITLE: ${{ steps.gather.outputs.pr_title }} PR_BODY: ${{ steps.gather.outputs.pr_body }} PR_AUTHOR: ${{ steps.gather.outputs.pr_author }} @@ -247,6 +290,16 @@ jobs: PR_NUMBER: ${{ needs.authorize.outputs.pr_number }} with: script: | + // Resolve the Copilot PAT from the selected pool number + const patNumber = process.env.COPILOT_PAT_NUMBER; + let copilotToken = ''; + if (patNumber) { + copilotToken = process.env[`COPILOT_PAT_${patNumber}`] || ''; + } + if (!copilotToken) { + core.setFailed('No Copilot PAT available. Configure COPILOT_PAT_0..9 repository secrets. See .github/actions/select-copilot-pat/README.md for setup instructions.'); + return; + } const n = '\n'; const prNumber = process.env.PR_NUMBER; const prTitle = process.env.PR_TITLE; @@ -259,11 +312,15 @@ jobs: const issueTitle = process.env.ISSUE_TITLE || '(none)'; const issueBody = process.env.ISSUE_BODY || '(none)'; - const prompt = [ - 'You are helping fill in a "tactics" template for a servicing pull request in the dotnet/sdk repository.', - '', - 'A servicing PR targets a release branch and requires extra scrutiny. Fill in five sections based on the provided context.', - '', + const systemMessage = [ + 'You are an expert .NET SDK engineer helping fill in a "tactics" template for a servicing pull request.', + 'A servicing PR targets a stable release branch (e.g. release/9.0.1xx) and undergoes extra scrutiny before merging.', + 'Your job is to produce accurate, specific, and informative tactics based solely on the context provided.', + 'Do not speculate or invent details that are not present in the context.', + 'If information for a section is genuinely not available, say so clearly rather than writing a vague placeholder.', + ].join(n); + + const userPrompt = [ `## PR #${prNumber}: ${prTitle}`, `**Author:** @${prAuthor}`, `**Target branch:** ${prBaseRef}`, @@ -287,14 +344,14 @@ jobs: '', '---', '', - 'Based on all of the above, fill in the tactics template. Be concise but accurate.', + 'Based on all of the above, fill in the tactics template. Be specific and detailed — avoid vague statements.', '', 'Guidelines per section:', - '- **Summary**: 1-3 sentences describing what change is being made and why.', - '- **Customer Impact**: How does this affect customers? Include the type of failure (build error, runtime error, etc.), severity, and affected SDK version(s).', - '- **Regression?**: Was this introduced by a specific PR or SDK version? Answer "Yes, from #N" or "Yes, from vX.Y.Z" if known, otherwise "No" or "Unknown".', - '- **Testing**: What automated and/or manual testing was done? Check PR comments for evidence of private or manual validation.', - '- **Risk**: Rate as Low, Medium, or High with a one-sentence justification.', + '- **Summary**: 2-4 sentences. State the root cause of the bug or regression being fixed, describe the exact code change made to address it, and explain why this fix is appropriate for a servicing release.', + '- **Customer Impact**: Describe concretely how customers are affected: the symptom (e.g. build error, runtime crash, incorrect output), the exact SDK version(s) impacted, the frequency/severity (all users vs. specific scenario), and any known workarounds.', + '- **Regression?**: Was this introduced by a specific PR or SDK version? Answer "Yes, introduced in #N (description)" or "Yes, introduced in vX.Y.Z" if known. If not a regression or unclear, say "No" or "Unknown — not enough information to determine origin".', + '- **Testing**: List all forms of validation: unit tests added or modified, integration tests, manual repro steps from PR comments, private/lab testing, and CI results. If only CI ran, say so explicitly.', + '- **Risk**: Rate as Low, Medium, or High. Justify the rating by referencing the scope of the change (e.g. lines changed, components touched), test coverage, and any known edge cases or risks.', '', 'Respond with ONLY the filled template in exactly this format. Do not include any preamble or text outside the sections:', '', @@ -319,23 +376,28 @@ jobs: '[your text here]', ].join(n); - const response = await fetch('https://models.inference.ai.azure.com/chat/completions', { + const response = await fetch(process.env.COPILOT_API_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', - 'Authorization': `Bearer ${process.env.GH_MODELS_TOKEN}`, + 'Authorization': `Bearer ${copilotToken}`, + 'Copilot-Integration-Id': 'vscode-chat', }, body: JSON.stringify({ model: process.env.AI_MODEL, - messages: [{ role: 'user', content: prompt }], - max_tokens: 800, // Five short sections; 800 tokens is sufficient - temperature: 0.2, // Low temperature for factual, consistent output + messages: [ + { role: 'system', content: systemMessage }, + { role: 'user', content: userPrompt }, + ], + max_tokens: 800, + temperature: 0.2, }), }); if (!response.ok) { const text = await response.text(); - throw new Error(`AI API call failed (${response.status}): ${text}`); + const sanitized = text.replace(/Bearer [a-zA-Z0-9_\-]+/gi, 'Bearer [REDACTED]'); + throw new Error(`AI API call failed (${response.status}): ${sanitized}`); } const data = await response.json(); @@ -433,26 +495,65 @@ jobs: - name: Comment on PR - No linked issue found if: steps.gather.outputs.issue_number == '' uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + env: + TACTICS_CONTENT: ${{ steps.ai-generate.outputs.tactics_content }} + PR_NUMBER: ${{ needs.authorize.outputs.pr_number }} + PR_BODY: ${{ steps.gather.outputs.pr_body }} with: github-token: ${{ github.token }} script: | const { owner, repo } = context.repo; - await github.rest.issues.createComment({ - owner, - repo, - issue_number: Number(context.payload.issue.number), - body: '⚠️ Could not find a linked issue for this PR. Please specify the issue number explicitly using `/tactics `.', - }); + const prNumber = Number(process.env.PR_NUMBER); + const tacticsContent = process.env.TACTICS_CONTENT || ''; + const currentBody = process.env.PR_BODY || ''; + + if (tacticsContent) { + const beginMarker = ''; + const endMarker = ''; + const tacticsBlock = `${beginMarker}\n## Tactics\n\n*Generated from PR #${prNumber} (no linked issue found)*\n\n${tacticsContent}\n${endMarker}`; + + let newBody; + if (currentBody.includes(beginMarker)) { + const regex = new RegExp(`${beginMarker}[\\s\\S]*?${endMarker}`, 'g'); + newBody = currentBody.replace(regex, tacticsBlock); + } else { + newBody = currentBody.trimEnd() + '\n\n' + tacticsBlock; + } + + await github.rest.pulls.update({ + owner, + repo, + pull_number: prNumber, + body: newBody, + }); + + core.info(`Updated PR #${prNumber} description with tactics content.`); + + await github.rest.issues.createComment({ + owner, + repo, + issue_number: Number(context.payload.issue.number), + body: `⚠️ No linked issue found for this PR. Tactics have been added to the PR description instead. To apply tactics to a specific issue, use \`/tactics \`. See [workflow details](${process.env.RUN_URL}).`, + }); + } else { + await github.rest.issues.createComment({ + owner, + repo, + issue_number: Number(context.payload.issue.number), + body: '⚠️ Could not find a linked issue for this PR and no tactics were generated. Please specify the issue number explicitly using `/tactics `.', + }); + } + await github.rest.reactions.createForIssueComment({ owner, repo, comment_id: Number(context.payload.comment.id), - content: 'confused', + content: '+1', }); report-failure: name: Report Failure - needs: [authorize, update] + needs: [authorize, select-pat, update] if: needs.authorize.outputs.should_run == 'true' && needs.authorize.result == 'success' && failure() runs-on: ubuntu-latest permissions: From e76fe19460e65b6df1691db559140bb5cef46ad8 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 28 Mar 2026 02:03:18 +0000 Subject: [PATCH 054/230] Update dependencies from https://github.com/microsoft/testfx build 20260327.4 On relative base path root Microsoft.Testing.Platform From Version 2.2.0-preview.26174.1 -> To Version 2.2.1-preview.26177.4 MSTest From Version 4.2.0-preview.26174.1 -> To Version 4.2.1-preview.26177.4 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 34cd4f25902b..9cbad830b6ee 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 - 2.2.0-preview.26176.6 - 4.2.0-preview.26176.6 + 2.2.1-preview.26177.4 + 4.2.1-preview.26177.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 1f9a4a3da45c..a1549244e65b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -561,13 +561,13 @@ https://github.com/dotnet/dotnet 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/microsoft/testfx - a6a857248711507fe51224a90eaecef43f436f8c + 4bc0cfcc420247cf6111fca7f8e914a9706634dd - + https://github.com/microsoft/testfx - a6a857248711507fe51224a90eaecef43f436f8c + 4bc0cfcc420247cf6111fca7f8e914a9706634dd https://github.com/dotnet/dotnet From d59c0811aa7503dfabccab14863a6a0e8375f08b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 28 Mar 2026 02:04:07 +0000 Subject: [PATCH 055/230] Update dependencies from https://github.com/microsoft/testfx build 20260327.4 On relative base path root Microsoft.Testing.Platform From Version 2.2.0-preview.26174.1 -> To Version 2.2.1-preview.26177.4 MSTest From Version 4.2.0-preview.26174.1 -> To Version 4.2.1-preview.26177.4 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 343d14f11a94..e1ed9e66f269 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 - 2.2.0-preview.26176.6 - 4.2.0-preview.26176.6 + 2.2.1-preview.26177.4 + 4.2.1-preview.26177.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index d8798b6776fd..90401b2e8b5f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -560,13 +560,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - a6a857248711507fe51224a90eaecef43f436f8c + 4bc0cfcc420247cf6111fca7f8e914a9706634dd - + https://github.com/microsoft/testfx - a6a857248711507fe51224a90eaecef43f436f8c + 4bc0cfcc420247cf6111fca7f8e914a9706634dd https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From 24ddee2bc03d0db324d2ce0f9fe48d4cd1a6bf25 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 28 Mar 2026 03:09:42 +0000 Subject: [PATCH 056/230] Update dependencies from build 308170 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.6-servicing.26176.117 -> 10.0.6-servicing.26177.110) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.6 -> 10.0.6) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26176.117 -> 10.0.0-preview.26177.110) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26176-117 -> 18.0.11-servicing-26177-110) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.17717 -> 7.0.2-rc.17810) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.106 -> 10.0.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26176.117 -> 5.0.0-2.26177.110) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26176.117 -> 2.0.0-preview.1.26177.110) Microsoft.DiaSymReader (Version 2.2.6 -> 2.2.6) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26176.117 -> 10.0.0-beta.26177.110) Microsoft.FSharp.Compiler (Version 14.0.106-servicing.26176.117 -> 14.0.106-servicing.26177.110) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26176-117 -> 18.0.2-release-26177-110) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.106-servicing.26176.117 -> 10.0.106-servicing.26177.110) Microsoft.Web.Xdt (Version 3.2.6 -> 3.2.6) System.CommandLine (Version 2.0.6 -> 2.0.6) [[ commit created by automation ]] --- NuGet.config | 1 - eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 261 insertions(+), 262 deletions(-) diff --git a/NuGet.config b/NuGet.config index f0871aea246b..0c7505bf1ba0 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,6 @@ - diff --git a/eng/Version.Details.props b/eng/Version.Details.props index ce327bd23989..67ae5cb611f0 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26176.117 - 10.0.6-servicing.26176.117 - 10.0.6-servicing.26176.117 - 10.0.6-servicing.26176.117 + 10.0.6-servicing.26177.110 + 10.0.6-servicing.26177.110 + 10.0.6-servicing.26177.110 + 10.0.6-servicing.26177.110 10.0.6 - 10.0.6-servicing.26176.117 + 10.0.6-servicing.26177.110 10.0.6 10.0.6 10.0.6 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26176.117 + 10.0.6-servicing.26177.110 10.0.6 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26176.117 + 10.0.6-servicing.26177.110 10.0.6 - 10.0.6-servicing.26176.117 - 10.0.6-servicing.26176.117 - 10.0.0-preview.26176.117 + 10.0.6-servicing.26177.110 + 10.0.6-servicing.26177.110 + 10.0.0-preview.26177.110 10.0.6 10.0.6 18.0.11 - 18.0.11-servicing-26176-117 - 7.0.2-rc.17717 + 18.0.11-servicing-26177-110 + 7.0.2-rc.17810 10.0.106 - 5.0.0-2.26176.117 - 5.0.0-2.26176.117 - 5.0.0-2.26176.117 - 5.0.0-2.26176.117 - 5.0.0-2.26176.117 - 5.0.0-2.26176.117 - 5.0.0-2.26176.117 - 10.0.0-preview.26176.117 - 5.0.0-2.26176.117 - 5.0.0-2.26176.117 - 2.0.0-preview.1.26176.117 + 5.0.0-2.26177.110 + 5.0.0-2.26177.110 + 5.0.0-2.26177.110 + 5.0.0-2.26177.110 + 5.0.0-2.26177.110 + 5.0.0-2.26177.110 + 5.0.0-2.26177.110 + 10.0.0-preview.26177.110 + 5.0.0-2.26177.110 + 5.0.0-2.26177.110 + 2.0.0-preview.1.26177.110 2.2.6 - 10.0.0-beta.26176.117 - 10.0.0-beta.26176.117 - 10.0.0-beta.26176.117 - 10.0.0-beta.26176.117 - 10.0.0-beta.26176.117 - 10.0.0-beta.26176.117 + 10.0.0-beta.26177.110 + 10.0.0-beta.26177.110 + 10.0.0-beta.26177.110 + 10.0.0-beta.26177.110 + 10.0.0-beta.26177.110 + 10.0.0-beta.26177.110 10.0.6 10.0.6 - 10.0.6-servicing.26176.117 - 10.0.6-servicing.26176.117 - 10.0.0-beta.26176.117 - 10.0.0-beta.26176.117 + 10.0.6-servicing.26177.110 + 10.0.6-servicing.26177.110 + 10.0.0-beta.26177.110 + 10.0.0-beta.26177.110 10.0.6 10.0.6 10.0.6 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 14.0.106-servicing.26176.117 + 14.0.106-servicing.26177.110 10.0.6 - 5.0.0-2.26176.117 - 5.0.0-2.26176.117 - 10.0.6-servicing.26176.117 + 5.0.0-2.26177.110 + 5.0.0-2.26177.110 + 10.0.6-servicing.26177.110 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26176.117 - 10.0.6-servicing.26176.117 - 18.0.2-release-26176-117 + 10.0.0-preview.26177.110 + 10.0.6-servicing.26177.110 + 18.0.2-release-26177-110 10.0.6 - 10.0.6-servicing.26176.117 + 10.0.6-servicing.26177.110 10.0.106 10.0.106 10.0.106 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.106 10.0.106 10.0.106 - 10.0.106-servicing.26176.117 + 10.0.106-servicing.26177.110 10.0.106 - 10.0.106-servicing.26176.117 + 10.0.106-servicing.26177.110 10.0.106 10.0.106 - 10.0.106-servicing.26176.117 - 18.0.2-release-26176-117 - 18.0.2-release-26176-117 + 10.0.106-servicing.26177.110 + 18.0.2-release-26177-110 + 18.0.2-release-26177-110 3.2.6 10.0.6 - 10.0.6-servicing.26176.117 + 10.0.6-servicing.26177.110 10.0.6 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 - 7.0.2-rc.17717 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 + 7.0.2-rc.17810 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 8178e175e099..43eee7938d4a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - 8dc731afc09c5dca3dc7cee575f3bf0c61c2d919 + 6713f124fc53de19b420be2e0247d8f80868edb2 diff --git a/global.json b/global.json index b78a234428e7..97e18dab0241 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.117", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.117", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26177.110", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26177.110", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 1ae44458279d677e98439776d3dca7da331821a3 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sat, 28 Mar 2026 12:06:57 +0100 Subject: [PATCH 057/230] [release/10.0.3xx] Source code updates from dotnet/dotnet (#53618) Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index bc03bc8ecdb2..84866cc30e00 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26176.111 + 10.0.0-preview.26177.108 10.0.5 10.0.5 - 18.6.0-preview-26176-111 - 18.6.0-preview-26176-111 - 7.6.0-rc.17711 - 10.0.300-alpha.26176.111 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 - 10.0.0-preview.26176.111 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 + 18.6.0-preview-26177-108 + 18.6.0-preview-26177-108 + 7.6.0-rc.17808 + 10.0.300-alpha.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 10.0.0-preview.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26176.111 - 10.0.0-beta.26176.111 - 10.0.0-beta.26176.111 - 10.0.0-beta.26176.111 - 10.0.0-beta.26176.111 - 10.0.0-beta.26176.111 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26176.111 - 10.0.0-beta.26176.111 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26176.111 + 15.2.300-servicing.26177.108 10.0.5 - 5.6.0-2.26176.111 - 5.6.0-2.26176.111 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26176.111 + 10.0.0-preview.26177.108 10.0.5-servicing.26153.111 - 18.3.0-release-26176-111 + 18.3.0-release-26177-108 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26176.111 - 10.0.300-alpha.26176.111 - 10.0.300-alpha.26176.111 - 10.0.300-alpha.26176.111 - 10.0.300-alpha.26176.111 - 10.0.300-preview.26176.111 - 10.0.300-preview.26176.111 - 10.0.300-preview.26176.111 - 10.0.300-preview.26176.111 - 10.0.300-preview.26176.111 - 10.0.300-preview.26176.111 - 10.0.300-preview.26176.111 - 10.0.300-preview.26176.111 - 10.0.300-preview.26176.111 - 18.3.0-release-26176-111 - 18.3.0-release-26176-111 + 10.0.300-alpha.26177.108 + 10.0.300-alpha.26177.108 + 10.0.300-alpha.26177.108 + 10.0.300-alpha.26177.108 + 10.0.300-alpha.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 18.3.0-release-26177-108 + 18.3.0-release-26177-108 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 - 7.6.0-rc.17711 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 33aee755526f..a86870b4ccf5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 42d6a4c2c669419a1f10edac6999d02dc2c204ac + cf1948f9c20bc33556719613def8cbbf05e9865f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index ec391a7b8286..be9a12a56f75 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.111", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.111", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26177.108", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26177.108", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 78b0f83de951c6b2a1661fc516bc4bf1f80477d2 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Sat, 28 Mar 2026 04:41:41 -0700 Subject: [PATCH 058/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2938097 --- src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf index 949d8ff029b7..0c3e1c231eb2 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf @@ -1339,7 +1339,7 @@ Nástroj {1} (verze {2}) se úspěšně nainstaloval. Do souboru manifestu {3} s A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + K dispozici je novější verze nástroje {0} (verze{1}). Zvažte aktualizaci souboru manifestu. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf index 6268859bf8c5..71c827109717 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf @@ -1339,7 +1339,7 @@ Das Tool "{1}" (Version {2}) wurde erfolgreich installiert. Der Eintrag wird der A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + Eine neuere Version des Tools „{0}“ ist verfügbar (Version „{1}“). Aktualisieren Sie bestenfalls Ihre Manifestdatei. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf index 323fa4f3e421..5d5198d5e4d7 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf @@ -1339,7 +1339,7 @@ La herramienta "{1}" (versión "{2}") se instaló correctamente. Se ha agregado A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + Hay disponible una versión más reciente de la herramienta ''{0}'' (versión ''{1}''). Considere la posibilidad de actualizar el archivo de manifiesto. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf index ad6fcc2de5ba..5cbb4801ae70 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf @@ -1339,7 +1339,7 @@ L'outil '{1}' (version '{2}') a été correctement installé. L'entrée est ajou A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + Une version plus récente de l’outil « {0} » est disponible (version « {1} »). Pensez à mettre à jour votre fichier manifeste. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf index aa395fb773c2..1517e846f0e5 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf @@ -1339,7 +1339,7 @@ Lo strumento '{1}' versione '{2}' è stato installato. La voce è stata aggiunta A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + È disponibile una versione più recente dello strumento "{0}" (versione "{1}"). Considerare di aggiornare il file manifesto. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf index 91efd4721d19..8919ef774606 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf @@ -1339,7 +1339,7 @@ Narzędzie „{1}” (wersja „{2}”) zostało pomyślnie zainstalowane. Wpis A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + Dostępna jest nowsza wersja narzędzia „{0}” (wersja „{1}”). Rozważ zaktualizowanie pliku manifestu. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf index 6538926d0aed..37cf2fda2adc 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf @@ -1339,7 +1339,7 @@ A ferramenta '{1}' (versão '{2}') foi instalada com êxito. A entrada foi adici A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + Uma versão mais recente da ferramenta "{0}" está disponível (versão "{1}"). Considere atualizar o arquivo de manifesto. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf index 6b5c4b7a2392..e795d89891e2 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf @@ -1339,7 +1339,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + 有較新版本的工具 '{0}' 可用 (版本 '{1}')。請考慮更新您的資訊清單檔。 From b8ff208352b69a604269e457d03804c0816f1dc6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 01:40:24 +0000 Subject: [PATCH 059/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 270 +++++++-------- eng/Version.Details.xml | 681 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 481 insertions(+), 480 deletions(-) diff --git a/NuGet.config b/NuGet.config index 4950d4c01bdc..62cec2f1e957 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 9cbad830b6ee..b23906261702 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,142 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.0-preview.26174.113 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26174-113 - 7.0.2-rc.17513 - 10.0.106 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 10.0.0-preview.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 2.0.0-preview.1.26174.113 - 2.2.6 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26174.113 - 10.0.6 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26174.114 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26174-114 + 7.3.0-rc.17514 + 10.0.202 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 10.0.0-preview.26174.114 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26174.114 + 10.0.0-beta.26174.114 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26174.114 + 10.0.4 + 5.3.0-2.26174.114 + 5.3.0-2.26174.114 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26174.113 - 10.0.6-servicing.26174.113 - 18.0.2-release-26174-113 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26174.113 - 10.0.106 - 10.0.106-servicing.26174.113 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26174.113 - 18.0.2-release-26174-113 - 18.0.2-release-26174-113 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26174.114 + 10.0.4-servicing.26119.110 + 18.3.0-release-26174-114 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26174.114 + 10.0.202 + 10.0.202-servicing.26174.114 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26174.114 + 18.3.0-release-26174-114 + 18.3.0-release-26174-114 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 7.3.0-rc.17514 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 - 2.2.1-preview.26177.4 - 4.2.1-preview.26177.4 + 2.2.0-preview.26174.1 + 4.2.0-preview.26174.1 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a1549244e65b..847dd2a16208 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 3f7694a10a5075ca61531ca4aa99082acdef048f - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + 926d2f3fbfce8f04a1c05e743d28715d93baa5bb - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + 926d2f3fbfce8f04a1c05e743d28715d93baa5bb - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 9e488dee1037..8205f49bb392 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.113", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.113", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.114", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.114", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From e8edd90810e634a6f6f8075b6277d0dbc0bd3e9f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 01:41:30 +0000 Subject: [PATCH 060/230] Reset files to release/10.0.3xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 1 - eng/Version.Details.props | 274 ++++++++++--------- eng/Version.Details.xml | 551 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 425 insertions(+), 407 deletions(-) diff --git a/NuGet.config b/NuGet.config index 62cec2f1e957..f3f728c95515 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,6 @@ - diff --git a/eng/Version.Details.props b/eng/Version.Details.props index e1ed9e66f269..84866cc30e00 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,145 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.0-preview.26174.114 - 10.0.4 - 10.0.4 - 18.3.3 - 18.3.3-servicing-26174-114 - 7.3.0-rc.17514 - 10.0.202 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 10.0.0-preview.26174.114 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 2.0.0-preview.1.26119.110 - 2.2.4 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.0-beta.26174.114 - 10.0.0-beta.26174.114 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 15.2.202-servicing.26174.114 - 10.0.4 - 5.3.0-2.26174.114 - 5.3.0-2.26174.114 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-preview.26177.108 + 10.0.5 + 10.0.5 + 18.6.0-preview-26177-108 + 18.6.0-preview-26177-108 + 7.6.0-rc.17808 + 10.0.300-alpha.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 10.0.0-preview.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 2.0.0-preview.1.26153.111 + 2.2.5 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-beta.26177.108 + 10.0.0-beta.26177.108 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 15.2.300-servicing.26177.108 + 10.0.5 + 5.6.0-2.26177.108 + 5.6.0-2.26177.108 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26174.114 - 10.0.4-servicing.26119.110 - 18.3.0-release-26174-114 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26174.114 - 10.0.202 - 10.0.202-servicing.26174.114 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26174.114 - 18.3.0-release-26174-114 - 18.3.0-release-26174-114 - 3.2.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 7.3.0-rc.17514 - 10.0.4 - 2.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 + 10.0.0-preview.26177.108 + 10.0.5-servicing.26153.111 + 18.3.0-release-26177-108 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.300-alpha.26177.108 + 10.0.300-alpha.26177.108 + 10.0.300-alpha.26177.108 + 10.0.300-alpha.26177.108 + 10.0.300-alpha.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 10.0.300-preview.26177.108 + 18.3.0-release-26177-108 + 18.3.0-release-26177-108 + 3.2.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 7.6.0-rc.17808 + 10.0.5 + 2.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 - 2.2.1-preview.26177.4 - 4.2.1-preview.26177.4 + 2.1.0-preview.25571.1 + 4.1.0-preview.25571.1 @@ -190,6 +193,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion) $(MicrosoftDeploymentDotNetReleasesPackageVersion) $(MicrosoftDiaSymReaderPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) @@ -201,9 +205,11 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) $(MicrosoftExtensionsDependencyModelPackageVersion) $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 90401b2e8b5f..a86870b4ccf5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 @@ -68,170 +68,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f + + + https://github.com/dotnet/dotnet + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 + + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://github.com/dotnet/dotnet - 3f7694a10a5075ca61531ca4aa99082acdef048f + cf1948f9c20bc33556719613def8cbbf05e9865f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 diff --git a/global.json b/global.json index 8205f49bb392..be9a12a56f75 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.201", + "dotnet": "10.0.105", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.114", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.114", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26177.108", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26177.108", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 06d787f1d08036d6d645a28a253f5ed8a8a9f116 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Sun, 29 Mar 2026 19:27:45 -0700 Subject: [PATCH 061/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2938919 --- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index 50e25379136a..775a01a53db6 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -1339,7 +1339,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + ツール '{0}' の新しいバージョン (バージョン '{1}') が使用可能です。マニフェスト ファイルの更新を検討してください。 diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf index 8e11b85aec17..7a5f96cd6908 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf @@ -1339,7 +1339,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + 도구 '{0}'의 최신 버전을 사용할 수 있습니다(버전 '{1}'). 매니페스트 파일을 업데이트해 보세요. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index 94c78c2068bc..69230de66319 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -1339,7 +1339,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + Доступна новая версия инструмента "{0}" (версия "{1}"). Рассмотрите возможность обновить файл манифеста. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf index 9dc6ccad5ace..d8e935cf8383 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf @@ -1339,7 +1339,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + '{0}' aracının daha yeni bir sürümü kullanılabilir ('{1}' sürümü). Bildirim dosyanızı güncelleştirmeyi göz önünde bulundurun. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf index 4f4a1765f804..832fdc332137 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf @@ -1339,7 +1339,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. - A newer version of tool '{0}' is available (version '{1}'). Consider updating your manifest file. + 工具“{0}”有新版本可用(版本“{1}”)。请考虑更新清单文件。 From 2d58d49008a0c21f8f1d369f8186d0f91f779b6e Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Mon, 30 Mar 2026 13:09:52 +0000 Subject: [PATCH 062/230] Update dependencies from build 308358 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26177.108 -> 10.0.0-preview.26180.104) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26177-108 -> 18.6.0-preview-26180-104) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.17808 -> 7.6.0-rc.18104) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26177.108 -> 10.0.300-alpha.26180.104) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26177.108 -> 5.6.0-2.26180.104) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26177.108 -> 10.0.0-beta.26180.104) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26177.108 -> 15.2.300-servicing.26180.104) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26177-108 -> 18.3.0-release-26180-104) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26177.108 -> 10.0.300-preview.26180.104) [[ commit created by automation ]] --- eng/Version.Details.props | 124 ++++----- eng/Version.Details.xml | 250 +++++++++--------- eng/common/core-templates/job/onelocbuild.yml | 4 +- .../job/publish-build-assets.yml | 4 +- .../core-templates/post-build/post-build.yml | 16 +- .../variables/pool-providers.yml | 2 +- .../templates/variables/pool-providers.yml | 2 +- global.json | 4 +- 8 files changed, 203 insertions(+), 203 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 84866cc30e00..5597527a5d41 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26177.108 + 10.0.0-preview.26180.104 10.0.5 10.0.5 - 18.6.0-preview-26177-108 - 18.6.0-preview-26177-108 - 7.6.0-rc.17808 - 10.0.300-alpha.26177.108 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 - 10.0.0-preview.26177.108 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 + 18.6.0-preview-26180-104 + 18.6.0-preview-26180-104 + 7.6.0-rc.18104 + 10.0.300-alpha.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 10.0.0-preview.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26177.108 - 10.0.0-beta.26177.108 - 10.0.0-beta.26177.108 - 10.0.0-beta.26177.108 - 10.0.0-beta.26177.108 - 10.0.0-beta.26177.108 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26177.108 - 10.0.0-beta.26177.108 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26177.108 + 15.2.300-servicing.26180.104 10.0.5 - 5.6.0-2.26177.108 - 5.6.0-2.26177.108 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26177.108 + 10.0.0-preview.26180.104 10.0.5-servicing.26153.111 - 18.3.0-release-26177-108 + 18.3.0-release-26180-104 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26177.108 - 10.0.300-alpha.26177.108 - 10.0.300-alpha.26177.108 - 10.0.300-alpha.26177.108 - 10.0.300-alpha.26177.108 - 10.0.300-preview.26177.108 - 10.0.300-preview.26177.108 - 10.0.300-preview.26177.108 - 10.0.300-preview.26177.108 - 10.0.300-preview.26177.108 - 10.0.300-preview.26177.108 - 10.0.300-preview.26177.108 - 10.0.300-preview.26177.108 - 10.0.300-preview.26177.108 - 18.3.0-release-26177-108 - 18.3.0-release-26177-108 + 10.0.300-alpha.26180.104 + 10.0.300-alpha.26180.104 + 10.0.300-alpha.26180.104 + 10.0.300-alpha.26180.104 + 10.0.300-alpha.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 18.3.0-release-26180-104 + 18.3.0-release-26180-104 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 - 7.6.0-rc.17808 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a86870b4ccf5..09d45bf23ba1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - cf1948f9c20bc33556719613def8cbbf05e9865f + 36b89c782bda10112c52396d9f0fe18171b60604 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index c5788829a872..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index b955fac6e13f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -74,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index b942a79ef02d..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -120,7 +120,7 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng @@ -164,14 +164,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -225,14 +225,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -286,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/global.json b/global.json index be9a12a56f75..d998ac645145 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26177.108", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26177.108", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.104", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.104", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 7fc5e2f19a66ee58120bb3c2ba677766494f30d5 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Mon, 30 Mar 2026 21:41:24 +0000 Subject: [PATCH 063/230] Update dependencies from build 308437 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26176.114 -> 10.0.0-preview.26180.114) Microsoft.Build (Version 18.3.3 -> 18.3.3) Microsoft.Build.Localization (Version 18.3.3-servicing-26176-114 -> 18.3.3-servicing-26180-114) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.3.0-rc.17714 -> 7.3.0-rc.18114) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.202 -> 10.0.202) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.3.0-2.26176.114 -> 5.3.0-2.26180.114) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26176.114 -> 10.0.0-beta.26180.114) Microsoft.FSharp.Compiler (Version 15.2.202-servicing.26176.114 -> 15.2.202-servicing.26180.114) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26176-114 -> 18.3.0-release-26180-114) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.202-servicing.26176.114 -> 10.0.202-servicing.26180.114) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 96 ++++++++--------- eng/Version.Details.xml | 220 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 161 insertions(+), 161 deletions(-) diff --git a/NuGet.config b/NuGet.config index ea88a8aa62a2..c8d51c022f14 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 350a426430c3..637812431e37 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,37 +30,37 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4-servicing.26119.110 10.0.4-servicing.26119.110 - 10.0.0-preview.26176.114 + 10.0.0-preview.26180.114 10.0.4 10.0.4 18.3.3 - 18.3.3-servicing-26176-114 - 7.3.0-rc.17714 + 18.3.3-servicing-26180-114 + 7.3.0-rc.18114 10.0.202 - 5.3.0-2.26176.114 - 5.3.0-2.26176.114 - 5.3.0-2.26176.114 - 5.3.0-2.26176.114 - 5.3.0-2.26176.114 - 5.3.0-2.26176.114 - 5.3.0-2.26176.114 - 5.3.0-2.26176.114 - 10.0.0-preview.26176.114 - 5.3.0-2.26176.114 - 5.3.0-2.26176.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 10.0.0-preview.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 2.0.0-preview.1.26119.110 2.2.4 - 10.0.0-beta.26176.114 - 10.0.0-beta.26176.114 - 10.0.0-beta.26176.114 - 10.0.0-beta.26176.114 - 10.0.0-beta.26176.114 - 10.0.0-beta.26176.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 10.0.4 10.0.4 10.0.4-servicing.26119.110 - 10.0.0-beta.26176.114 - 10.0.0-beta.26176.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 10.0.4 10.0.4 10.0.4 @@ -70,17 +70,17 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 10.0.4 - 15.2.202-servicing.26176.114 + 15.2.202-servicing.26180.114 10.0.4 - 5.3.0-2.26176.114 - 5.3.0-2.26176.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 10.0.4-servicing.26119.110 10.0.4 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26176.114 + 10.0.0-preview.26180.114 10.0.4-servicing.26119.110 - 18.3.0-release-26176-114 + 18.3.0-release-26180-114 10.0.4 10.0.4-servicing.26119.110 10.0.202 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.202 10.0.202 10.0.202 - 10.0.202-servicing.26176.114 + 10.0.202-servicing.26180.114 10.0.202 - 10.0.202-servicing.26176.114 + 10.0.202-servicing.26180.114 10.0.202 10.0.202 - 10.0.202-servicing.26176.114 - 18.3.0-release-26176-114 - 18.3.0-release-26176-114 + 10.0.202-servicing.26180.114 + 18.3.0-release-26180-114 + 18.3.0-release-26180-114 3.2.4 10.0.4 10.0.4-servicing.26119.110 10.0.4 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 - 7.3.0-rc.17714 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 10.0.4 2.0.4 10.0.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index d1e82a2f6428..918d7947fc04 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -74,136 +74,136 @@ https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -370,25 +370,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -407,27 +407,27 @@ https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb @@ -514,9 +514,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -524,37 +524,37 @@ - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - fe2ab887a1f927eecfd09ddfc4fb8e2ddf1607ee + 08b48122393c7197185c7d08212395087ce706bb https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index ffbb7f865b84..b57f2cd3f739 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26176.114", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26176.114", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.114", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.114", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 6c53e98084dbf53bb271d3ddf266d016ba34fb9e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 01:46:38 +0000 Subject: [PATCH 064/230] Reset files to release/10.0.3xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 1 - eng/Version.Details.props | 274 ++++----- eng/Version.Details.xml | 551 +++++++++--------- eng/common/core-templates/job/onelocbuild.yml | 4 +- .../job/publish-build-assets.yml | 4 +- .../core-templates/post-build/post-build.yml | 16 +- .../variables/pool-providers.yml | 2 +- .../templates/variables/pool-providers.yml | 2 +- global.json | 6 +- 9 files changed, 439 insertions(+), 421 deletions(-) diff --git a/NuGet.config b/NuGet.config index c8d51c022f14..f3f728c95515 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,6 @@ - diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 637812431e37..5597527a5d41 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,145 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.0-preview.26180.114 - 10.0.4 - 10.0.4 - 18.3.3 - 18.3.3-servicing-26180-114 - 7.3.0-rc.18114 - 10.0.202 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 10.0.0-preview.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 2.0.0-preview.1.26119.110 - 2.2.4 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 15.2.202-servicing.26180.114 - 10.0.4 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-preview.26180.104 + 10.0.5 + 10.0.5 + 18.6.0-preview-26180-104 + 18.6.0-preview-26180-104 + 7.6.0-rc.18104 + 10.0.300-alpha.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 10.0.0-preview.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 2.0.0-preview.1.26153.111 + 2.2.5 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-beta.26180.104 + 10.0.0-beta.26180.104 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 15.2.300-servicing.26180.104 + 10.0.5 + 5.6.0-2.26180.104 + 5.6.0-2.26180.104 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26180.114 - 10.0.4-servicing.26119.110 - 18.3.0-release-26180-114 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26180.114 - 10.0.202 - 10.0.202-servicing.26180.114 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26180.114 - 18.3.0-release-26180-114 - 18.3.0-release-26180-114 - 3.2.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 10.0.4 - 2.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 + 10.0.0-preview.26180.104 + 10.0.5-servicing.26153.111 + 18.3.0-release-26180-104 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.300-alpha.26180.104 + 10.0.300-alpha.26180.104 + 10.0.300-alpha.26180.104 + 10.0.300-alpha.26180.104 + 10.0.300-alpha.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 10.0.300-preview.26180.104 + 18.3.0-release-26180-104 + 18.3.0-release-26180-104 + 3.2.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 7.6.0-rc.18104 + 10.0.5 + 2.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 - 2.2.1-preview.26177.4 - 4.2.1-preview.26177.4 + 2.1.0-preview.25571.1 + 4.1.0-preview.25571.1 @@ -190,6 +193,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion) $(MicrosoftDeploymentDotNetReleasesPackageVersion) $(MicrosoftDiaSymReaderPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) @@ -201,9 +205,11 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) $(MicrosoftExtensionsDependencyModelPackageVersion) $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 918d7947fc04..09d45bf23ba1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 @@ -68,170 +68,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 + + + https://github.com/dotnet/dotnet + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 + + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 36b89c782bda10112c52396d9f0fe18171b60604 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index c5788829a872..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index b955fac6e13f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -74,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index b942a79ef02d..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -120,7 +120,7 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng @@ -164,14 +164,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -225,14 +225,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -286,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/global.json b/global.json index b57f2cd3f739..d998ac645145 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.201", + "dotnet": "10.0.105", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.114", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.114", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.104", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.104", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From f6f7b04928daf23b4619afc55a28eb113d93f2d3 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 31 Mar 2026 02:03:33 +0000 Subject: [PATCH 065/230] Update dependencies from https://github.com/microsoft/testfx build 20260330.5 On relative base path root Microsoft.Testing.Platform From Version 2.2.1-preview.26177.4 -> To Version 2.2.1-preview.26180.5 MSTest From Version 4.2.1-preview.26177.4 -> To Version 4.2.1-preview.26180.5 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 9cbad830b6ee..38321fab2619 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 - 2.2.1-preview.26177.4 - 4.2.1-preview.26177.4 + 2.2.1-preview.26180.5 + 4.2.1-preview.26180.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a1549244e65b..552bb094a2cc 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -561,13 +561,13 @@ https://github.com/dotnet/dotnet 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 https://github.com/dotnet/dotnet From edef559d3cc90296f347fdeb5a114a3ae4d30b18 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 31 Mar 2026 02:03:59 +0000 Subject: [PATCH 066/230] Update dependencies from https://github.com/microsoft/testfx build 20260330.5 On relative base path root Microsoft.Testing.Platform From Version 2.2.1-preview.26177.4 -> To Version 2.2.1-preview.26180.5 MSTest From Version 4.2.1-preview.26177.4 -> To Version 4.2.1-preview.26180.5 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 637812431e37..eb799f1ed009 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 - 2.2.1-preview.26177.4 - 4.2.1-preview.26177.4 + 2.2.1-preview.26180.5 + 4.2.1-preview.26180.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 918d7947fc04..3767e7cbed0d 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -560,13 +560,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 - + https://github.com/microsoft/testfx - 4bc0cfcc420247cf6111fca7f8e914a9706634dd + f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From f9c27821ebe37cd5f78511853693d972f521b970 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 31 Mar 2026 02:36:52 +0000 Subject: [PATCH 067/230] Update dependencies from build 308463 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26180.104 -> 10.0.0-preview.26180.119) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26180-104 -> 18.6.0-preview-26180-119) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.18104 -> 7.6.0-rc.18119) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26180.104 -> 10.0.300-alpha.26180.119) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26180.104 -> 5.6.0-2.26180.119) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26180.104 -> 10.0.0-beta.26180.119) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26180.104 -> 15.2.300-servicing.26180.119) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26180-104 -> 18.3.0-release-26180-119) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26180.104 -> 10.0.300-preview.26180.119) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 5597527a5d41..8997ace284db 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26180.104 + 10.0.0-preview.26180.119 10.0.5 10.0.5 - 18.6.0-preview-26180-104 - 18.6.0-preview-26180-104 - 7.6.0-rc.18104 - 10.0.300-alpha.26180.104 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 - 10.0.0-preview.26180.104 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 + 18.6.0-preview-26180-119 + 18.6.0-preview-26180-119 + 7.6.0-rc.18119 + 10.0.300-alpha.26180.119 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 + 10.0.0-preview.26180.119 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26180.104 - 10.0.0-beta.26180.104 - 10.0.0-beta.26180.104 - 10.0.0-beta.26180.104 - 10.0.0-beta.26180.104 - 10.0.0-beta.26180.104 + 10.0.0-beta.26180.119 + 10.0.0-beta.26180.119 + 10.0.0-beta.26180.119 + 10.0.0-beta.26180.119 + 10.0.0-beta.26180.119 + 10.0.0-beta.26180.119 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26180.104 - 10.0.0-beta.26180.104 + 10.0.0-beta.26180.119 + 10.0.0-beta.26180.119 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26180.104 + 15.2.300-servicing.26180.119 10.0.5 - 5.6.0-2.26180.104 - 5.6.0-2.26180.104 + 5.6.0-2.26180.119 + 5.6.0-2.26180.119 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26180.104 + 10.0.0-preview.26180.119 10.0.5-servicing.26153.111 - 18.3.0-release-26180-104 + 18.3.0-release-26180-119 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26180.104 - 10.0.300-alpha.26180.104 - 10.0.300-alpha.26180.104 - 10.0.300-alpha.26180.104 - 10.0.300-alpha.26180.104 - 10.0.300-preview.26180.104 - 10.0.300-preview.26180.104 - 10.0.300-preview.26180.104 - 10.0.300-preview.26180.104 - 10.0.300-preview.26180.104 - 10.0.300-preview.26180.104 - 10.0.300-preview.26180.104 - 10.0.300-preview.26180.104 - 10.0.300-preview.26180.104 - 18.3.0-release-26180-104 - 18.3.0-release-26180-104 + 10.0.300-alpha.26180.119 + 10.0.300-alpha.26180.119 + 10.0.300-alpha.26180.119 + 10.0.300-alpha.26180.119 + 10.0.300-alpha.26180.119 + 10.0.300-preview.26180.119 + 10.0.300-preview.26180.119 + 10.0.300-preview.26180.119 + 10.0.300-preview.26180.119 + 10.0.300-preview.26180.119 + 10.0.300-preview.26180.119 + 10.0.300-preview.26180.119 + 10.0.300-preview.26180.119 + 10.0.300-preview.26180.119 + 18.3.0-release-26180-119 + 18.3.0-release-26180-119 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 - 7.6.0-rc.18104 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 + 7.6.0-rc.18119 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 09d45bf23ba1..2370d1885233 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 - + https://github.com/dotnet/dotnet - 36b89c782bda10112c52396d9f0fe18171b60604 + 8a5b648d38af07762128f9304e1e36fc819bcb57 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index d998ac645145..0d6de2a51448 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.104", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.104", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.119", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.119", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 4db0972d066ff52fd52a9bd8af3c9ebb2a346fb4 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 31 Mar 2026 02:58:01 +0000 Subject: [PATCH 068/230] Update dependencies from build 308465 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26180.114 -> 10.0.0-preview.26180.121) Microsoft.Build (Version 18.3.3 -> 18.3.3) Microsoft.Build.Localization (Version 18.3.3-servicing-26180-114 -> 18.3.3-servicing-26180-121) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.3.0-rc.18114 -> 7.3.0-rc.18121) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.202 -> 10.0.202) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.3.0-2.26180.114 -> 5.3.0-2.26180.121) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26180.114 -> 10.0.0-beta.26180.121) Microsoft.FSharp.Compiler (Version 15.2.202-servicing.26180.114 -> 15.2.202-servicing.26180.121) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26180-114 -> 18.3.0-release-26180-121) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.202-servicing.26180.114 -> 10.0.202-servicing.26180.121) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 96 ++++++++--------- eng/Version.Details.xml | 220 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 161 insertions(+), 161 deletions(-) diff --git a/NuGet.config b/NuGet.config index c8d51c022f14..65b4b1763b0a 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 637812431e37..8dfbc720db39 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,37 +30,37 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4-servicing.26119.110 10.0.4-servicing.26119.110 - 10.0.0-preview.26180.114 + 10.0.0-preview.26180.121 10.0.4 10.0.4 18.3.3 - 18.3.3-servicing-26180-114 - 7.3.0-rc.18114 + 18.3.3-servicing-26180-121 + 7.3.0-rc.18121 10.0.202 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 - 10.0.0-preview.26180.114 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 + 5.3.0-2.26180.121 + 5.3.0-2.26180.121 + 5.3.0-2.26180.121 + 5.3.0-2.26180.121 + 5.3.0-2.26180.121 + 5.3.0-2.26180.121 + 5.3.0-2.26180.121 + 5.3.0-2.26180.121 + 10.0.0-preview.26180.121 + 5.3.0-2.26180.121 + 5.3.0-2.26180.121 2.0.0-preview.1.26119.110 2.2.4 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 + 10.0.0-beta.26180.121 + 10.0.0-beta.26180.121 + 10.0.0-beta.26180.121 + 10.0.0-beta.26180.121 + 10.0.0-beta.26180.121 + 10.0.0-beta.26180.121 10.0.4 10.0.4 10.0.4-servicing.26119.110 - 10.0.0-beta.26180.114 - 10.0.0-beta.26180.114 + 10.0.0-beta.26180.121 + 10.0.0-beta.26180.121 10.0.4 10.0.4 10.0.4 @@ -70,17 +70,17 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 10.0.4 - 15.2.202-servicing.26180.114 + 15.2.202-servicing.26180.121 10.0.4 - 5.3.0-2.26180.114 - 5.3.0-2.26180.114 + 5.3.0-2.26180.121 + 5.3.0-2.26180.121 10.0.4-servicing.26119.110 10.0.4 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26180.114 + 10.0.0-preview.26180.121 10.0.4-servicing.26119.110 - 18.3.0-release-26180-114 + 18.3.0-release-26180-121 10.0.4 10.0.4-servicing.26119.110 10.0.202 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.202 10.0.202 10.0.202 - 10.0.202-servicing.26180.114 + 10.0.202-servicing.26180.121 10.0.202 - 10.0.202-servicing.26180.114 + 10.0.202-servicing.26180.121 10.0.202 10.0.202 - 10.0.202-servicing.26180.114 - 18.3.0-release-26180-114 - 18.3.0-release-26180-114 + 10.0.202-servicing.26180.121 + 18.3.0-release-26180-121 + 18.3.0-release-26180-121 3.2.4 10.0.4 10.0.4-servicing.26119.110 10.0.4 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 - 7.3.0-rc.18114 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 + 7.3.0-rc.18121 10.0.4 2.0.4 10.0.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 918d7947fc04..a2a36ff1587f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -74,136 +74,136 @@ https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -370,25 +370,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -407,27 +407,27 @@ https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a @@ -514,9 +514,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -524,37 +524,37 @@ - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a - + https://github.com/dotnet/dotnet - 08b48122393c7197185c7d08212395087ce706bb + 570bc3952d2503b378ad4be4387e0077dc360d7a https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index b57f2cd3f739..26279bb55a34 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.114", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.114", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.121", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.121", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 92264c351c87765798c16bf02af31ee3602ae9ae Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 05:44:53 +0000 Subject: [PATCH 069/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 270 +++++++-------- eng/Version.Details.xml | 681 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 481 insertions(+), 480 deletions(-) diff --git a/NuGet.config b/NuGet.config index 4950d4c01bdc..c8d51c022f14 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 38321fab2619..637812431e37 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,142 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.0-preview.26174.113 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26174-113 - 7.0.2-rc.17513 - 10.0.106 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 10.0.0-preview.26174.113 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 2.0.0-preview.1.26174.113 - 2.2.6 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6-servicing.26174.113 - 10.0.0-beta.26174.113 - 10.0.0-beta.26174.113 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26174.113 - 10.0.6 - 5.0.0-2.26174.113 - 5.0.0-2.26174.113 - 10.0.6-servicing.26174.113 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26180.114 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26180-114 + 7.3.0-rc.18114 + 10.0.202 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 10.0.0-preview.26180.114 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26180.114 + 10.0.0-beta.26180.114 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26180.114 + 10.0.4 + 5.3.0-2.26180.114 + 5.3.0-2.26180.114 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26174.113 - 10.0.6-servicing.26174.113 - 18.0.2-release-26174-113 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26174.113 - 10.0.106 - 10.0.106-servicing.26174.113 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26174.113 - 18.0.2-release-26174-113 - 18.0.2-release-26174-113 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26174.113 - 10.0.6 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 7.0.2-rc.17513 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26180.114 + 10.0.4-servicing.26119.110 + 18.3.0-release-26180-114 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26180.114 + 10.0.202 + 10.0.202-servicing.26180.114 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26180.114 + 18.3.0-release-26180-114 + 18.3.0-release-26180-114 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 7.3.0-rc.18114 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 - 2.2.1-preview.26180.5 - 4.2.1-preview.26180.5 + 2.2.1-preview.26177.4 + 4.2.1-preview.26177.4 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 552bb094a2cc..918d7947fc04 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - + https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + 08b48122393c7197185c7d08212395087ce706bb - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 4bc0cfcc420247cf6111fca7f8e914a9706634dd - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 4bc0cfcc420247cf6111fca7f8e914a9706634dd - - https://github.com/dotnet/dotnet - 645374ace1c8bbeb07aac743552acc62bbb2c34b + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 9e488dee1037..b57f2cd3f739 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26174.113", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26174.113", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.114", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.114", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 9341350c27b777f366fa08d3c1b5d1094b3327ec Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 21:03:31 +0000 Subject: [PATCH 070/230] [release/10.0.3xx] Source code updates from dotnet/dotnet (#53646) [release/10.0.3xx] Source code updates from dotnet/dotnet --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 8997ace284db..9a96f6c22287 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26180.119 + 10.0.0-preview.26181.102 10.0.5 10.0.5 - 18.6.0-preview-26180-119 - 18.6.0-preview-26180-119 - 7.6.0-rc.18119 - 10.0.300-alpha.26180.119 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 - 10.0.0-preview.26180.119 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 + 18.6.0-preview-26181-102 + 18.6.0-preview-26181-102 + 7.6.0-rc.18202 + 10.0.300-alpha.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 10.0.0-preview.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26180.119 - 10.0.0-beta.26180.119 - 10.0.0-beta.26180.119 - 10.0.0-beta.26180.119 - 10.0.0-beta.26180.119 - 10.0.0-beta.26180.119 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26180.119 - 10.0.0-beta.26180.119 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26180.119 + 15.2.300-servicing.26181.102 10.0.5 - 5.6.0-2.26180.119 - 5.6.0-2.26180.119 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26180.119 + 10.0.0-preview.26181.102 10.0.5-servicing.26153.111 - 18.3.0-release-26180-119 + 18.3.0-release-26181-102 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26180.119 - 10.0.300-alpha.26180.119 - 10.0.300-alpha.26180.119 - 10.0.300-alpha.26180.119 - 10.0.300-alpha.26180.119 - 10.0.300-preview.26180.119 - 10.0.300-preview.26180.119 - 10.0.300-preview.26180.119 - 10.0.300-preview.26180.119 - 10.0.300-preview.26180.119 - 10.0.300-preview.26180.119 - 10.0.300-preview.26180.119 - 10.0.300-preview.26180.119 - 10.0.300-preview.26180.119 - 18.3.0-release-26180-119 - 18.3.0-release-26180-119 + 10.0.300-alpha.26181.102 + 10.0.300-alpha.26181.102 + 10.0.300-alpha.26181.102 + 10.0.300-alpha.26181.102 + 10.0.300-alpha.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 18.3.0-release-26181-102 + 18.3.0-release-26181-102 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 - 7.6.0-rc.18119 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 2370d1885233..50f781fc3a4f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - 8a5b648d38af07762128f9304e1e36fc819bcb57 + 316ff509dbc8840485db58992554d05588dd606e https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 0d6de2a51448..8591b36d562e 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.119", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.119", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26181.102", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26181.102", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 132a6044a2af8a3fb03ebf1bb57c70b5e87f61bb Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 1 Apr 2026 00:57:31 +0000 Subject: [PATCH 071/230] Update dependencies from build 308657 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26181.102 -> 10.0.0-preview.26181.114) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26181-102 -> 18.6.0-preview-26181-114) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.18202 -> 7.6.0-rc.18214) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26181.102 -> 10.0.300-alpha.26181.114) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26181.102 -> 5.6.0-2.26181.114) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26181.102 -> 10.0.0-beta.26181.114) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26181.102 -> 15.2.300-servicing.26181.114) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26181-102 -> 18.3.0-release-26181-114) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26181.102 -> 10.0.300-preview.26181.114) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 9a96f6c22287..b906b3246197 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26181.102 + 10.0.0-preview.26181.114 10.0.5 10.0.5 - 18.6.0-preview-26181-102 - 18.6.0-preview-26181-102 - 7.6.0-rc.18202 - 10.0.300-alpha.26181.102 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 - 10.0.0-preview.26181.102 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 + 18.6.0-preview-26181-114 + 18.6.0-preview-26181-114 + 7.6.0-rc.18214 + 10.0.300-alpha.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 10.0.0-preview.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26181.102 - 10.0.0-beta.26181.102 - 10.0.0-beta.26181.102 - 10.0.0-beta.26181.102 - 10.0.0-beta.26181.102 - 10.0.0-beta.26181.102 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26181.102 - 10.0.0-beta.26181.102 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26181.102 + 15.2.300-servicing.26181.114 10.0.5 - 5.6.0-2.26181.102 - 5.6.0-2.26181.102 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26181.102 + 10.0.0-preview.26181.114 10.0.5-servicing.26153.111 - 18.3.0-release-26181-102 + 18.3.0-release-26181-114 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26181.102 - 10.0.300-alpha.26181.102 - 10.0.300-alpha.26181.102 - 10.0.300-alpha.26181.102 - 10.0.300-alpha.26181.102 - 10.0.300-preview.26181.102 - 10.0.300-preview.26181.102 - 10.0.300-preview.26181.102 - 10.0.300-preview.26181.102 - 10.0.300-preview.26181.102 - 10.0.300-preview.26181.102 - 10.0.300-preview.26181.102 - 10.0.300-preview.26181.102 - 10.0.300-preview.26181.102 - 18.3.0-release-26181-102 - 18.3.0-release-26181-102 + 10.0.300-alpha.26181.114 + 10.0.300-alpha.26181.114 + 10.0.300-alpha.26181.114 + 10.0.300-alpha.26181.114 + 10.0.300-alpha.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 18.3.0-release-26181-114 + 18.3.0-release-26181-114 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 - 7.6.0-rc.18202 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 50f781fc3a4f..7414e8a5ca1e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - 316ff509dbc8840485db58992554d05588dd606e + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 8591b36d562e..fb2fbc7b6528 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26181.102", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26181.102", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26181.114", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26181.114", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From fad4afb2349c7e49c9be78dc18f520d5ce176747 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 1 Apr 2026 01:07:06 +0000 Subject: [PATCH 072/230] Update dependencies from build 308659 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26180.121 -> 10.0.0-preview.26181.113) Microsoft.Build (Version 18.3.3 -> 18.3.3) Microsoft.Build.Localization (Version 18.3.3-servicing-26180-121 -> 18.3.3-servicing-26181-113) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.3.0-rc.18121 -> 7.3.0-rc.18213) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.202 -> 10.0.202) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.3.0-2.26180.121 -> 5.3.0-2.26181.113) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26180.121 -> 10.0.0-beta.26181.113) Microsoft.FSharp.Compiler (Version 15.2.202-servicing.26180.121 -> 15.2.202-servicing.26181.113) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26180-121 -> 18.3.0-release-26181-113) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.202-servicing.26180.121 -> 10.0.202-servicing.26181.113) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 96 ++++++++--------- eng/Version.Details.xml | 220 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 161 insertions(+), 161 deletions(-) diff --git a/NuGet.config b/NuGet.config index 65b4b1763b0a..c1cfdbe848e6 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 28aa29f36c98..bcffdc1c7854 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,37 +30,37 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4-servicing.26119.110 10.0.4-servicing.26119.110 - 10.0.0-preview.26180.121 + 10.0.0-preview.26181.113 10.0.4 10.0.4 18.3.3 - 18.3.3-servicing-26180-121 - 7.3.0-rc.18121 + 18.3.3-servicing-26181-113 + 7.3.0-rc.18213 10.0.202 - 5.3.0-2.26180.121 - 5.3.0-2.26180.121 - 5.3.0-2.26180.121 - 5.3.0-2.26180.121 - 5.3.0-2.26180.121 - 5.3.0-2.26180.121 - 5.3.0-2.26180.121 - 5.3.0-2.26180.121 - 10.0.0-preview.26180.121 - 5.3.0-2.26180.121 - 5.3.0-2.26180.121 + 5.3.0-2.26181.113 + 5.3.0-2.26181.113 + 5.3.0-2.26181.113 + 5.3.0-2.26181.113 + 5.3.0-2.26181.113 + 5.3.0-2.26181.113 + 5.3.0-2.26181.113 + 5.3.0-2.26181.113 + 10.0.0-preview.26181.113 + 5.3.0-2.26181.113 + 5.3.0-2.26181.113 2.0.0-preview.1.26119.110 2.2.4 - 10.0.0-beta.26180.121 - 10.0.0-beta.26180.121 - 10.0.0-beta.26180.121 - 10.0.0-beta.26180.121 - 10.0.0-beta.26180.121 - 10.0.0-beta.26180.121 + 10.0.0-beta.26181.113 + 10.0.0-beta.26181.113 + 10.0.0-beta.26181.113 + 10.0.0-beta.26181.113 + 10.0.0-beta.26181.113 + 10.0.0-beta.26181.113 10.0.4 10.0.4 10.0.4-servicing.26119.110 - 10.0.0-beta.26180.121 - 10.0.0-beta.26180.121 + 10.0.0-beta.26181.113 + 10.0.0-beta.26181.113 10.0.4 10.0.4 10.0.4 @@ -70,17 +70,17 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 10.0.4 - 15.2.202-servicing.26180.121 + 15.2.202-servicing.26181.113 10.0.4 - 5.3.0-2.26180.121 - 5.3.0-2.26180.121 + 5.3.0-2.26181.113 + 5.3.0-2.26181.113 10.0.4-servicing.26119.110 10.0.4 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26180.121 + 10.0.0-preview.26181.113 10.0.4-servicing.26119.110 - 18.3.0-release-26180-121 + 18.3.0-release-26181-113 10.0.4 10.0.4-servicing.26119.110 10.0.202 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.202 10.0.202 10.0.202 - 10.0.202-servicing.26180.121 + 10.0.202-servicing.26181.113 10.0.202 - 10.0.202-servicing.26180.121 + 10.0.202-servicing.26181.113 10.0.202 10.0.202 - 10.0.202-servicing.26180.121 - 18.3.0-release-26180-121 - 18.3.0-release-26180-121 + 10.0.202-servicing.26181.113 + 18.3.0-release-26181-113 + 18.3.0-release-26181-113 3.2.4 10.0.4 10.0.4-servicing.26119.110 10.0.4 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 - 7.3.0-rc.18121 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 + 7.3.0-rc.18213 10.0.4 2.0.4 10.0.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a1ce30d8dad8..6a9fbed43b25 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -74,136 +74,136 @@ https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -370,25 +370,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -407,27 +407,27 @@ https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 @@ -514,9 +514,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -524,37 +524,37 @@ - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 - + https://github.com/dotnet/dotnet - 570bc3952d2503b378ad4be4387e0077dc360d7a + fa63ad2d80458a4bfadade9bac84c8818bcb5f40 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 26279bb55a34..ada45c5decd7 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26180.121", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26180.121", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26181.113", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26181.113", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 0418e806c220bdc7c11b4997ba3476ed651b7ac5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 05:41:07 +0000 Subject: [PATCH 073/230] Reset files to release/10.0.3xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 1 - eng/Version.Details.props | 274 ++++----- eng/Version.Details.xml | 551 +++++++++--------- eng/common/core-templates/job/onelocbuild.yml | 4 +- .../job/publish-build-assets.yml | 4 +- .../core-templates/post-build/post-build.yml | 16 +- .../variables/pool-providers.yml | 2 +- .../templates/variables/pool-providers.yml | 2 +- global.json | 6 +- 9 files changed, 439 insertions(+), 421 deletions(-) diff --git a/NuGet.config b/NuGet.config index c1cfdbe848e6..f3f728c95515 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,6 @@ - diff --git a/eng/Version.Details.props b/eng/Version.Details.props index bcffdc1c7854..9a96f6c22287 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,145 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.0-preview.26181.113 - 10.0.4 - 10.0.4 - 18.3.3 - 18.3.3-servicing-26181-113 - 7.3.0-rc.18213 - 10.0.202 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 10.0.0-preview.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 2.0.0-preview.1.26119.110 - 2.2.4 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 15.2.202-servicing.26181.113 - 10.0.4 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-preview.26181.102 + 10.0.5 + 10.0.5 + 18.6.0-preview-26181-102 + 18.6.0-preview-26181-102 + 7.6.0-rc.18202 + 10.0.300-alpha.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 10.0.0-preview.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 2.0.0-preview.1.26153.111 + 2.2.5 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-beta.26181.102 + 10.0.0-beta.26181.102 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 15.2.300-servicing.26181.102 + 10.0.5 + 5.6.0-2.26181.102 + 5.6.0-2.26181.102 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26181.113 - 10.0.4-servicing.26119.110 - 18.3.0-release-26181-113 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26181.113 - 10.0.202 - 10.0.202-servicing.26181.113 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26181.113 - 18.3.0-release-26181-113 - 18.3.0-release-26181-113 - 3.2.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 10.0.4 - 2.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 + 10.0.0-preview.26181.102 + 10.0.5-servicing.26153.111 + 18.3.0-release-26181-102 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.300-alpha.26181.102 + 10.0.300-alpha.26181.102 + 10.0.300-alpha.26181.102 + 10.0.300-alpha.26181.102 + 10.0.300-alpha.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 10.0.300-preview.26181.102 + 18.3.0-release-26181-102 + 18.3.0-release-26181-102 + 3.2.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 7.6.0-rc.18202 + 10.0.5 + 2.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 - 2.2.1-preview.26180.5 - 4.2.1-preview.26180.5 + 2.1.0-preview.25571.1 + 4.1.0-preview.25571.1 @@ -190,6 +193,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion) $(MicrosoftDeploymentDotNetReleasesPackageVersion) $(MicrosoftDiaSymReaderPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) @@ -201,9 +205,11 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) $(MicrosoftExtensionsDependencyModelPackageVersion) $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 6a9fbed43b25..50f781fc3a4f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 @@ -68,170 +68,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e + + + https://github.com/dotnet/dotnet + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 + + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + 316ff509dbc8840485db58992554d05588dd606e - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index c5788829a872..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index b955fac6e13f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -74,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index b942a79ef02d..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -120,7 +120,7 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng @@ -164,14 +164,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -225,14 +225,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -286,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/global.json b/global.json index ada45c5decd7..8591b36d562e 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.201", + "dotnet": "10.0.105", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26181.113", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26181.113", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26181.102", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26181.102", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 8de657c3d9fc99318a173d466f968f70a30de45d Mon Sep 17 00:00:00 2001 From: Youssef Victor Date: Wed, 1 Apr 2026 14:34:10 +0200 Subject: [PATCH 074/230] dotnet test MTP: Disable ANSI output in LLM environments (#53654) --- .../Commands/Test/MTP/MicrosoftTestingPlatformTestCommand.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Cli/dotnet/Commands/Test/MTP/MicrosoftTestingPlatformTestCommand.cs b/src/Cli/dotnet/Commands/Test/MTP/MicrosoftTestingPlatformTestCommand.cs index b12dc97e5a47..e92590025594 100644 --- a/src/Cli/dotnet/Commands/Test/MTP/MicrosoftTestingPlatformTestCommand.cs +++ b/src/Cli/dotnet/Commands/Test/MTP/MicrosoftTestingPlatformTestCommand.cs @@ -7,6 +7,7 @@ using Microsoft.DotNet.Cli.CommandLine; using Microsoft.DotNet.Cli.Commands.Test.Terminal; using Microsoft.DotNet.Cli.Extensions; +using Microsoft.DotNet.Cli.Telemetry; namespace Microsoft.DotNet.Cli.Commands.Test; @@ -106,7 +107,9 @@ private void InitializeOutput(int degreeOfParallelism, ParseResult parseResult, bool inCI = string.Equals(Environment.GetEnvironmentVariable("TF_BUILD"), "true", StringComparison.OrdinalIgnoreCase) || string.Equals(Environment.GetEnvironmentVariable("GITHUB_ACTIONS"), "true", StringComparison.OrdinalIgnoreCase); AnsiMode ansiMode = AnsiMode.AnsiIfPossible; - if (noAnsi) + // In LLM environments, prefer simple text output so that LLM can parse it easily. + // Note that NoAnsi also implies no progress. + if (noAnsi || new LLMEnvironmentDetectorForTelemetry().IsLLMEnvironment()) { // User explicitly specified --no-ansi. // We should respect that. From 0c32f0a712a49ff04b309c87b90410633dcafc59 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 1 Apr 2026 12:47:33 +0000 Subject: [PATCH 075/230] Update dependencies from build 308746 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26181.113 -> 10.0.0-preview.26201.103) Microsoft.Build (Version 18.3.3 -> 18.3.3) Microsoft.Build.Localization (Version 18.3.3-servicing-26181-113 -> 18.3.3-servicing-26201-103) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.3.0-rc.18213 -> 7.3.0-rc.20203) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.202 -> 10.0.202) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.3.0-2.26181.113 -> 5.3.0-2.26201.103) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26181.113 -> 10.0.0-beta.26201.103) Microsoft.FSharp.Compiler (Version 15.2.202-servicing.26181.113 -> 15.2.202-servicing.26201.103) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26181-113 -> 18.3.0-release-26201-103) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.202-servicing.26181.113 -> 10.0.202-servicing.26201.103) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 96 ++++++++--------- eng/Version.Details.xml | 220 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 161 insertions(+), 161 deletions(-) diff --git a/NuGet.config b/NuGet.config index c1cfdbe848e6..9c862cf686ff 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index bcffdc1c7854..c21415fe4d95 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,37 +30,37 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4-servicing.26119.110 10.0.4-servicing.26119.110 - 10.0.0-preview.26181.113 + 10.0.0-preview.26201.103 10.0.4 10.0.4 18.3.3 - 18.3.3-servicing-26181-113 - 7.3.0-rc.18213 + 18.3.3-servicing-26201-103 + 7.3.0-rc.20203 10.0.202 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 - 10.0.0-preview.26181.113 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 10.0.0-preview.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 2.0.0-preview.1.26119.110 2.2.4 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 10.0.4 10.0.4 10.0.4-servicing.26119.110 - 10.0.0-beta.26181.113 - 10.0.0-beta.26181.113 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 10.0.4 10.0.4 10.0.4 @@ -70,17 +70,17 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 10.0.4 - 15.2.202-servicing.26181.113 + 15.2.202-servicing.26201.103 10.0.4 - 5.3.0-2.26181.113 - 5.3.0-2.26181.113 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 10.0.4-servicing.26119.110 10.0.4 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26181.113 + 10.0.0-preview.26201.103 10.0.4-servicing.26119.110 - 18.3.0-release-26181-113 + 18.3.0-release-26201-103 10.0.4 10.0.4-servicing.26119.110 10.0.202 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.202 10.0.202 10.0.202 - 10.0.202-servicing.26181.113 + 10.0.202-servicing.26201.103 10.0.202 - 10.0.202-servicing.26181.113 + 10.0.202-servicing.26201.103 10.0.202 10.0.202 - 10.0.202-servicing.26181.113 - 18.3.0-release-26181-113 - 18.3.0-release-26181-113 + 10.0.202-servicing.26201.103 + 18.3.0-release-26201-103 + 18.3.0-release-26201-103 3.2.4 10.0.4 10.0.4-servicing.26119.110 10.0.4 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 - 7.3.0-rc.18213 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 10.0.4 2.0.4 10.0.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 6a9fbed43b25..04a422f4cd4f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -74,136 +74,136 @@ https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -370,25 +370,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -407,27 +407,27 @@ https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 @@ -514,9 +514,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -524,37 +524,37 @@ - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - fa63ad2d80458a4bfadade9bac84c8818bcb5f40 + bedfad885dfe093ebb122a44e74133e192fa34d0 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index ada45c5decd7..9c08fe17131e 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26181.113", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26181.113", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26201.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26201.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 293be9964e8fb1ef4815192e10b2810fbe64d86f Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 1 Apr 2026 10:42:48 -0500 Subject: [PATCH 076/230] [dotnet-watch] Add device selection support (#53631) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds device selection to dotnet-watch for MAUI/mobile scenarios, mirroring the `dotnet-run` device selection flow from the spec (`documentation/specs/dotnet-run-for-maui.md`). Merged `TargetFrameworkSelectionPrompt` and the new device prompt into a single `WatchSelectionPrompt` (library) / `SpectreWatchSelectionPrompt` (console app), keeping Spectre.Console isolated to the console app project. After TFM selection, `HotReloadDotNetWatcher` calls the `ComputeAvailableDevices` MSBuild target via in-process MSBuild. A single device is auto-selected; multiple devices show an interactive Spectre prompt with search. The selected device and its `RuntimeIdentifier` are passed to `dotnet build` (`-p:Device`, `-p:RuntimeIdentifier`) and to the launched dotnet run subprocess (`--device`). A re-restore is performed when the device provides a `RuntimeIdentifier` not present in the original restore. Adds `--device` CLI option to `dotnet-watch` for pre-specifying a device. Tests: - Unit tests for prompt selection, search, caching, and `FormatDevice` - E2E tests using `DotnetRunDevices` test asset: interactive device selection, single-device auto-select Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Tomáš Matoušek --- .../Server/AspireWatcherLauncher.cs | 2 +- src/Dotnet.Watch/Watch/Build/BuildNames.cs | 1 + .../Watch/Build/EvaluationResult.cs | 14 +- .../Watch/Build/LoadedProjectGraph.cs | 5 +- .../Watch/Build/ProjectGraphFactory.cs | 8 +- .../Watch/Context/ProjectOptions.cs | 12 + .../Watch/HotReload/HotReloadDotNetWatcher.cs | 182 ++++++++++++--- .../Watch/Process/ProjectLauncher.cs | 12 + .../UI/BuildParametersSelectionPrompt.cs | 49 ++++ src/Dotnet.Watch/Watch/UI/DeviceInfo.cs | 9 + src/Dotnet.Watch/Watch/UI/IReporter.cs | 1 + .../UI/TargetFrameworkSelectionPrompt.cs | 28 --- .../CommandLine/CommandLineOptions.cs | 3 + .../DotnetWatchCommandDefinition.cs | 13 +- src/Dotnet.Watch/dotnet-watch/Program.cs | 6 +- src/Dotnet.Watch/dotnet-watch/Resources.resx | 9 + ... SpectreBuildParametersSelectionPrompt.cs} | 53 ++++- .../dotnet-watch/Watch/BuildEvaluator.cs | 7 + .../Watch/MsBuildFileSetFactory.cs | 5 +- .../dotnet-watch/xlf/Resources.cs.xlf | 15 ++ .../dotnet-watch/xlf/Resources.de.xlf | 15 ++ .../dotnet-watch/xlf/Resources.es.xlf | 15 ++ .../dotnet-watch/xlf/Resources.fr.xlf | 15 ++ .../dotnet-watch/xlf/Resources.it.xlf | 15 ++ .../dotnet-watch/xlf/Resources.ja.xlf | 15 ++ .../dotnet-watch/xlf/Resources.ko.xlf | 15 ++ .../dotnet-watch/xlf/Resources.pl.xlf | 15 ++ .../dotnet-watch/xlf/Resources.pt-BR.xlf | 15 ++ .../dotnet-watch/xlf/Resources.ru.xlf | 15 ++ .../dotnet-watch/xlf/Resources.tr.xlf | 15 ++ .../dotnet-watch/xlf/Resources.zh-Hans.xlf | 15 ++ .../dotnet-watch/xlf/Resources.zh-Hant.xlf | 15 ++ .../Build/EvaluationTests.cs | 6 +- .../Build/ProjectGraphFactoryTests.cs | 8 +- .../BuildParametersSelectionPromptTests.cs | 221 ++++++++++++++++++ .../HotReload/BuildProjectsTests.cs | 12 +- .../HotReload/CompilationHandlerTests.cs | 2 +- .../HotReload/MauiHotReloadTests.cs | 45 ++++ .../TargetFrameworkSelectionPromptTests.cs | 95 -------- .../TestUtilities/DotNetWatchTestBase.cs | 2 +- .../TestUtilities/MockFileSetFactory.cs | 1 + .../TestUtilities/TestOptions.cs | 1 + 42 files changed, 823 insertions(+), 184 deletions(-) create mode 100644 src/Dotnet.Watch/Watch/UI/BuildParametersSelectionPrompt.cs create mode 100644 src/Dotnet.Watch/Watch/UI/DeviceInfo.cs delete mode 100644 src/Dotnet.Watch/Watch/UI/TargetFrameworkSelectionPrompt.cs rename src/Dotnet.Watch/dotnet-watch/UI/{SpectreTargetFrameworkSelectionPrompt.cs => SpectreBuildParametersSelectionPrompt.cs} (64%) create mode 100644 test/dotnet-watch.Tests/HotReload/BuildParametersSelectionPromptTests.cs delete mode 100644 test/dotnet-watch.Tests/HotReload/TargetFrameworkSelectionPromptTests.cs diff --git a/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs b/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs index e95e07914929..ea8f75b1e53b 100644 --- a/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs +++ b/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs @@ -40,7 +40,7 @@ protected async Task LaunchWatcherAsync( try { - var watcher = new HotReloadDotNetWatcher(context, Console, processLauncherFactory, targetFrameworkSelectionPrompt: null); + var watcher = new HotReloadDotNetWatcher(context, Console, processLauncherFactory, selectionPrompt: null); await watcher.WatchAsync(cancellationSource.Token); } catch (OperationCanceledException) when (shutdownHandler.CancellationToken.IsCancellationRequested) diff --git a/src/Dotnet.Watch/Watch/Build/BuildNames.cs b/src/Dotnet.Watch/Watch/Build/BuildNames.cs index d7ad8b1acbbd..69eeff0a97be 100644 --- a/src/Dotnet.Watch/Watch/Build/BuildNames.cs +++ b/src/Dotnet.Watch/Watch/Build/BuildNames.cs @@ -55,6 +55,7 @@ internal static class TargetNames public const string ResolveReferencedProjectsStaticWebAssets = nameof(ResolveReferencedProjectsStaticWebAssets); public const string GenerateComputedBuildStaticWebAssets = nameof(GenerateComputedBuildStaticWebAssets); public const string ReferenceCopyLocalPathsOutputGroup = nameof(ReferenceCopyLocalPathsOutputGroup); + public const string ComputeAvailableDevices = nameof(ComputeAvailableDevices); } internal static class ProjectCapability diff --git a/src/Dotnet.Watch/Watch/Build/EvaluationResult.cs b/src/Dotnet.Watch/Watch/Build/EvaluationResult.cs index c429d5681b4b..ebf115ff3c02 100644 --- a/src/Dotnet.Watch/Watch/Build/EvaluationResult.cs +++ b/src/Dotnet.Watch/Watch/Build/EvaluationResult.cs @@ -14,12 +14,11 @@ internal sealed class EvaluationResult( LoadedProjectGraph projectGraph, IReadOnlyDictionary restoredProjectInstances, IReadOnlyDictionary files, - IReadOnlyDictionary staticWebAssetsManifests, - ProjectBuildManager buildManager) + IReadOnlyDictionary staticWebAssetsManifests) { public IReadOnlyDictionary Files => files; public LoadedProjectGraph ProjectGraph => projectGraph; - public ProjectBuildManager BuildManager => buildManager; + public ProjectBuildManager BuildManager => projectGraph.BuildManager; public readonly FilePathExclusions ItemExclusions = projectGraph != null ? FilePathExclusions.Create(projectGraph.Graph) : FilePathExclusions.Empty; @@ -70,14 +69,11 @@ public static ImmutableDictionary GetGlobalBuildProperties(IEnum var projectLoadingStopwatch = Stopwatch.StartNew(); var stopwatch = Stopwatch.StartNew(); - var buildReporter = new BuildReporter(projectGraph.Logger, globalOptions, environmentOptions); - var buildManager = new ProjectBuildManager(projectGraph.ProjectCollection, buildReporter); - if (restore) { var restoreRequests = projectGraph.Graph.GraphRoots.Select(node => BuildRequest.Create(node.ProjectInstance, [TargetNames.Restore])).ToArray(); - if (await buildManager.BuildAsync( + if (await projectGraph.BuildManager.BuildAsync( restoreRequests, onFailure: failedInstance => { @@ -108,7 +104,7 @@ public static ImmutableDictionary GetGlobalBuildProperties(IEnum var buildRequests = CreateDesignTimeBuildRequests(projectGraph.Graph, mainProjectTargetFramework, environmentOptions.SuppressHandlingStaticWebAssets).ToImmutableArray(); - var buildResults = await buildManager.BuildAsync( + var buildResults = await projectGraph.BuildManager.BuildAsync( buildRequests, onFailure: failedInstance => { @@ -132,7 +128,7 @@ public static ImmutableDictionary GetGlobalBuildProperties(IEnum BuildReporter.ReportWatchedFiles(logger, fileItems); - return new EvaluationResult(projectGraph, restoredProjectInstances, fileItems, staticWebAssetManifests, buildManager); + return new EvaluationResult(projectGraph, restoredProjectInstances, fileItems, staticWebAssetManifests); } // internal for testing diff --git a/src/Dotnet.Watch/Watch/Build/LoadedProjectGraph.cs b/src/Dotnet.Watch/Watch/Build/LoadedProjectGraph.cs index a05f0fa9873a..3378e758bb2b 100644 --- a/src/Dotnet.Watch/Watch/Build/LoadedProjectGraph.cs +++ b/src/Dotnet.Watch/Watch/Build/LoadedProjectGraph.cs @@ -7,7 +7,7 @@ namespace Microsoft.DotNet.Watch; -internal sealed class LoadedProjectGraph(ProjectGraph graph, ProjectCollection collection, ILogger logger) +internal sealed class LoadedProjectGraph(ProjectGraph graph, ProjectCollection collection, ILogger logger, GlobalOptions globalOptions, EnvironmentOptions environmentOptions) { // full path of proj file to list of nodes representing all target frameworks of the project (excluding outer build nodes): private readonly IReadOnlyDictionary> _innerBuildNodes = @@ -20,6 +20,9 @@ internal sealed class LoadedProjectGraph(ProjectGraph graph, ProjectCollection c .Concat(graph.ProjectNodes.Select(p => p.ProjectInstance.FullPath)) .ToHashSet(PathUtilities.OSSpecificPathComparer)); + public readonly ProjectBuildManager BuildManager = + new(collection, new BuildReporter(logger, globalOptions, environmentOptions)); + public ProjectGraph Graph => graph; public ILogger Logger => logger; public ProjectCollection ProjectCollection => collection; diff --git a/src/Dotnet.Watch/Watch/Build/ProjectGraphFactory.cs b/src/Dotnet.Watch/Watch/Build/ProjectGraphFactory.cs index ec6583add8f8..0e98272acd92 100644 --- a/src/Dotnet.Watch/Watch/Build/ProjectGraphFactory.cs +++ b/src/Dotnet.Watch/Watch/Build/ProjectGraphFactory.cs @@ -18,7 +18,9 @@ internal sealed class ProjectGraphFactory( ImmutableArray rootProjects, string? virtualProjectTargetFramework, ImmutableDictionary buildProperties, - ILogger logger) + ILogger logger, + GlobalOptions globalOptions, + EnvironmentOptions environmentOptions) { /// /// Reuse with XML element caching to improve performance. @@ -60,7 +62,9 @@ private static string GetProductTargetFramework() var graph = new LoadedProjectGraph( new ProjectGraph(entryPoints, _collection, (path, globalProperties, collection) => CreateProjectInstance(path, globalProperties, collection, logger), cancellationToken), _collection, - logger); + logger, + globalOptions, + environmentOptions); logger.LogDebug("Project graph loaded in {Time}s.", stopwatch.Elapsed.TotalSeconds.ToString("0.0")); return graph; diff --git a/src/Dotnet.Watch/Watch/Context/ProjectOptions.cs b/src/Dotnet.Watch/Watch/Context/ProjectOptions.cs index 24c868c05798..2d37673aa282 100644 --- a/src/Dotnet.Watch/Watch/Context/ProjectOptions.cs +++ b/src/Dotnet.Watch/Watch/Context/ProjectOptions.cs @@ -22,6 +22,18 @@ internal sealed record ProjectOptions /// public string? TargetFramework { get; init; } + /// + /// Device identifier to use when launching the project. + /// If the project supports device selection and is null + /// the user will be prompted for a device in interactive mode. + /// + public string? Device { get; init; } + + /// + /// RuntimeIdentifier provided by the selected device, if any. + /// + public string? DeviceRuntimeIdentifier { get; init; } + /// /// No value indicates that no launch profile should be used. /// Null value indicates that the default launch profile should be used. diff --git a/src/Dotnet.Watch/Watch/HotReload/HotReloadDotNetWatcher.cs b/src/Dotnet.Watch/Watch/HotReload/HotReloadDotNetWatcher.cs index 9ac8aacf40c7..301a7adea0f9 100644 --- a/src/Dotnet.Watch/Watch/HotReload/HotReloadDotNetWatcher.cs +++ b/src/Dotnet.Watch/Watch/HotReload/HotReloadDotNetWatcher.cs @@ -4,6 +4,7 @@ using System.Collections.Immutable; using System.Diagnostics; using System.Text.Encodings.Web; +using Microsoft.Build.Execution; using Microsoft.CodeAnalysis; using Microsoft.DotNet.HotReload; using Microsoft.Extensions.Logging; @@ -18,18 +19,23 @@ internal sealed class HotReloadDotNetWatcher private readonly IConsole _console; private readonly IRuntimeProcessLauncherFactory? _runtimeProcessLauncherFactory; private readonly RestartPrompt? _rudeEditRestartPrompt; - private readonly TargetFrameworkSelectionPrompt? _targetFrameworkSelectionPrompt; + private readonly BuildParametersSelectionPrompt? _selectionPrompt; private readonly DotNetWatchContext _context; private readonly ProjectGraphFactory _designTimeBuildGraphFactory; internal Task? Test_FileChangesCompletedTask { get; set; } - public HotReloadDotNetWatcher(DotNetWatchContext context, IConsole console, IRuntimeProcessLauncherFactory? runtimeProcessLauncherFactory, TargetFrameworkSelectionPrompt? targetFrameworkSelectionPrompt) + public HotReloadDotNetWatcher( + DotNetWatchContext context, + IConsole console, + IRuntimeProcessLauncherFactory? runtimeProcessLauncherFactory, + BuildParametersSelectionPrompt? selectionPrompt) { _context = context; _console = console; _runtimeProcessLauncherFactory = runtimeProcessLauncherFactory; + _selectionPrompt = selectionPrompt; if (!context.Options.NonInteractive) { var consoleInput = new ConsoleInputReader(_console, context.Options.LogLevel, context.EnvironmentOptions.SuppressEmojis); @@ -41,7 +47,6 @@ public HotReloadDotNetWatcher(DotNetWatchContext context, IConsole console, IRun } _rudeEditRestartPrompt = new RestartPrompt(context.Logger, consoleInput, noPrompt ? true : null); - _targetFrameworkSelectionPrompt = targetFrameworkSelectionPrompt; } _designTimeBuildGraphFactory = new ProjectGraphFactory( @@ -50,7 +55,9 @@ public HotReloadDotNetWatcher(DotNetWatchContext context, IConsole console, IRun buildProperties: EvaluationResult.GetGlobalBuildProperties( context.BuildArguments, context.EnvironmentOptions), - context.BuildLogger); + context.BuildLogger, + context.Options, + context.EnvironmentOptions); } public async Task WatchAsync(CancellationToken shutdownCancellationToken) @@ -95,7 +102,8 @@ public async Task WatchAsync(CancellationToken shutdownCancellationToken) _context.RootProjects, fileWatcher, _context.MainProjectOptions, - frameworkSelector: _targetFrameworkSelectionPrompt != null ? _targetFrameworkSelectionPrompt.SelectAsync : null, + frameworkSelector: _selectionPrompt != null ? _selectionPrompt.SelectTargetFrameworkAsync : null, + deviceSelector: _selectionPrompt != null ? _selectionPrompt.SelectDeviceAsync : null, iterationCancellationToken); // Try load project graph and perform design-time build even if the build failed. @@ -142,7 +150,12 @@ public async Task WatchAsync(CancellationToken shutdownCancellationToken) var mainProjectOptions = _context.MainProjectOptions; if (mainProjectOptions != null) { - mainProjectOptions = mainProjectOptions with { TargetFramework = rootProjectsBuildResult.MainProjectTargetFramework }; + mainProjectOptions = mainProjectOptions with + { + TargetFramework = rootProjectsBuildResult.MainProjectTargetFramework, + Device = rootProjectsBuildResult.SelectedDevice, + DeviceRuntimeIdentifier = rootProjectsBuildResult.SelectedDeviceRuntimeIdentifier, + }; if (projectGraph.Graph.GraphRoots.Single()?.GetCapabilities().Contains(AspireServiceFactory.AppHostProjectCapability) == true) { @@ -272,6 +285,7 @@ [.. updates.ProjectsToRebuild.Select(ProjectRepresentation.FromProjectOrEntryPoi fileWatcher, mainProjectOptions, frameworkSelector: null, + deviceSelector: null, iterationCancellationToken); if (result.Success) @@ -939,9 +953,11 @@ private enum BuildAction } // internal for testing - internal sealed class BuildProjectsResult(string? mainProjectTargetFramework, LoadedProjectGraph? projectGraph, bool success) + internal sealed class BuildProjectsResult(string? mainProjectTargetFramework, string? selectedDevice, string? selectedDeviceRuntimeIdentifier, LoadedProjectGraph? projectGraph, bool success) { public string? MainProjectTargetFramework { get; } = mainProjectTargetFramework; + public string? SelectedDevice { get; } = selectedDevice; + public string? SelectedDeviceRuntimeIdentifier { get; } = selectedDeviceRuntimeIdentifier; public LoadedProjectGraph? ProjectGraph { get; } = projectGraph; public bool Success { get; } = success; } @@ -952,12 +968,15 @@ internal async Task BuildProjectsAsync( FileWatcher fileWatcher, ProjectOptions? mainProjectOptions, Func, CancellationToken, ValueTask>? frameworkSelector, + Func, CancellationToken, ValueTask>? deviceSelector, CancellationToken cancellationToken) { Debug.Assert(projects.Any()); LoadedProjectGraph? projectGraph = null; var targetFramework = mainProjectOptions?.TargetFramework; + var selectedDevice = mainProjectOptions?.Device; + var selectedDeviceRuntimeIdentifier = mainProjectOptions?.DeviceRuntimeIdentifier; _context.Logger.Log(MessageDescriptor.BuildStartedNotification, projects); @@ -965,20 +984,22 @@ internal async Task BuildProjectsAsync( fileWatcher.SuppressEvents = true; try { - var success = await BuildWithFrameworkSelectionAsync(); + var success = await BuildWithFrameworkAndDeviceSelectionAsync(); _context.Logger.Log(MessageDescriptor.BuildCompletedNotification, (projects, success)); - return new BuildProjectsResult(targetFramework, projectGraph, success); + return new BuildProjectsResult(targetFramework, selectedDevice, selectedDeviceRuntimeIdentifier, projectGraph, success); } finally { fileWatcher.SuppressEvents = false; } - async ValueTask BuildWithFrameworkSelectionAsync() + async ValueTask BuildWithFrameworkAndDeviceSelectionAsync() { + var needsFrameworkSelection = targetFramework == null && frameworkSelector != null; + var needsDeviceSelection = selectedDevice == null && deviceSelector != null; + if (mainProjectOptions == null || - frameworkSelector == null || - targetFramework != null || + (!needsFrameworkSelection && !needsDeviceSelection) || !mainProjectOptions.Representation.IsProjectFile) { return await BuildAsync(BuildAction.RestoreAndBuild, targetFramework); @@ -997,28 +1018,62 @@ async ValueTask BuildWithFrameworkSelectionAsync() } var rootProject = projectGraph.Graph.GraphRoots.Single().ProjectInstance; - if (rootProject.GetTargetFramework() is var framework and not "") - { - targetFramework = framework; - } - else if (rootProject.GetTargetFrameworks() is var frameworks and not []) + + // Select target framework if needed: + if (needsFrameworkSelection) { - targetFramework = await frameworkSelector(frameworks, cancellationToken); + Debug.Assert(frameworkSelector is not null); + + if (rootProject.GetTargetFramework() is var framework and not "") + { + targetFramework = framework; + } + else if (rootProject.GetTargetFrameworks() is var frameworks and not []) + { + targetFramework = await frameworkSelector(frameworks, cancellationToken); + } + else + { + _context.BuildLogger.LogError("Project '{Path}' does not specify a target framework.", rootProject.FullPath); + return false; + } } - else + + // Select device if needed: + if (needsDeviceSelection + && rootProject.Targets.ContainsKey(TargetNames.ComputeAvailableDevices)) { - _context.BuildLogger.LogError("Project '{Path}' does not specify a target framework.", rootProject.FullPath); - return false; + Debug.Assert(deviceSelector is not null); + + var deviceInfo = await TrySelectDeviceAsync(projectGraph, rootProject, targetFramework, deviceSelector, cancellationToken); + if (deviceInfo == null) + { + return false; + } + + selectedDevice = deviceInfo.Id; + selectedDeviceRuntimeIdentifier = deviceInfo.RuntimeIdentifier; + _context.Logger.LogDebug("Selected device: {DeviceId}", selectedDevice); + + // If the device provides a RuntimeIdentifier, re-restore so the assets file + // includes the RID target. This mirrors the dotnet-run behavior. + if (!string.IsNullOrEmpty(selectedDeviceRuntimeIdentifier)) + { + if (!await BuildAsync(BuildAction.RestoreOnly, targetFramework, deviceInfo)) + { + return false; + } + } } - return await BuildAsync(BuildAction.BuildOnly, targetFramework); + return await BuildAsync(BuildAction.BuildOnly, targetFramework, selectedDevice != null ? new DeviceInfo(selectedDevice, null, null, null, selectedDeviceRuntimeIdentifier) : null); } - async Task BuildAsync(BuildAction action, string? targetFramework) + async Task BuildAsync(BuildAction action, string? targetFramework, DeviceInfo? device = null) { if (projects is [var singleProject]) { - return await BuildFileOrProjectOrSolutionAsync(singleProject.ProjectOrEntryPointFilePath, targetFramework, action, cancellationToken); + return await BuildFileOrProjectOrSolutionAsync(singleProject.ProjectOrEntryPointFilePath, targetFramework, device, action, cancellationToken); } // TODO: workaround for https://github.com/dotnet/sdk/issues/51311 @@ -1027,7 +1082,7 @@ async Task BuildAsync(BuildAction action, string? targetFramework) if (projectPaths is [var singleProjectPath]) { - if (!await BuildFileOrProjectOrSolutionAsync(singleProjectPath, targetFramework, action, cancellationToken)) + if (!await BuildFileOrProjectOrSolutionAsync(singleProjectPath, targetFramework, device, action, cancellationToken)) { return false; } @@ -1047,7 +1102,7 @@ async Task BuildAsync(BuildAction action, string? targetFramework) try { - if (!await BuildFileOrProjectOrSolutionAsync(solutionFile, targetFramework, action, cancellationToken)) + if (!await BuildFileOrProjectOrSolutionAsync(solutionFile, targetFramework, device, action, cancellationToken)) { return false; } @@ -1068,7 +1123,7 @@ async Task BuildAsync(BuildAction action, string? targetFramework) // To maximize parallelism of building dependencies, build file-based projects after all physical projects: foreach (var file in projects.Where(p => p.EntryPointFilePath != null).Select(p => p.EntryPointFilePath!)) { - if (!await BuildFileOrProjectOrSolutionAsync(file, targetFramework, action, cancellationToken)) + if (!await BuildFileOrProjectOrSolutionAsync(file, targetFramework, device, action, cancellationToken)) { return false; } @@ -1078,7 +1133,67 @@ async Task BuildAsync(BuildAction action, string? targetFramework) } } - private async Task BuildFileOrProjectOrSolutionAsync(string path, string? targetFramework, BuildAction action, CancellationToken cancellationToken) + /// + /// Computes available devices and selects one. + /// Auto-selects a single device when only one is available; otherwise uses the provided device selector. + /// Returns null if no devices are available (error). + /// + private async Task TrySelectDeviceAsync( + LoadedProjectGraph projectGraph, + ProjectInstance rootProject, + string? targetFramework, + Func, CancellationToken, ValueTask> deviceSelector, + CancellationToken cancellationToken) + { + // Get the project node for the selected TFM so device computation is correct. + var projectNode = projectGraph.TryGetProjectNode(rootProject.FullPath, targetFramework); + if (projectNode == null) + { + return null; + } + + var projectInstance = projectNode.ProjectInstance.DeepCopy(); + + var results = await projectGraph.BuildManager.BuildAsync( + [BuildRequest.Create(projectInstance, [TargetNames.ComputeAvailableDevices])], + onFailure: _ => true, + operationName: TargetNames.ComputeAvailableDevices, + cancellationToken); + + if (results is not [var result] || !result.IsSuccess + || !result.TargetResults.TryGetValue(TargetNames.ComputeAvailableDevices, out var targetResult)) + { + _context.Logger.LogDebug("ComputeAvailableDevices target failed or returned no output."); + return null; + } + + var devices = new List(targetResult.Items.Length); + foreach (var item in targetResult.Items) + { + devices.Add(new DeviceInfo( + item.ItemSpec, + item.GetMetadata("Description"), + item.GetMetadata("Type"), + item.GetMetadata("Status"), + item.GetMetadata("RuntimeIdentifier"))); + } + + if (devices.Count == 0) + { + _context.Logger.Log(MessageDescriptor.NoDevicesAvailable); + return null; + } + + // Auto-select if only one device is available. + if (devices.Count == 1) + { + return devices[0]; + } + + return await deviceSelector(devices, cancellationToken); + } + + private async Task BuildFileOrProjectOrSolutionAsync(string path, string? targetFramework, DeviceInfo? device, BuildAction action, CancellationToken cancellationToken) { var arguments = new List { @@ -1094,6 +1209,17 @@ private async Task BuildFileOrProjectOrSolutionAsync(string path, string? arguments.Add(targetFramework); } + if (device != null) + { + arguments.Add($"-p:Device={device.Id}"); + + if (!string.IsNullOrEmpty(device.RuntimeIdentifier)) + { + arguments.Add("--runtime"); + arguments.Add(device.RuntimeIdentifier); + } + } + if (action == BuildAction.BuildOnly) { arguments.Add("--no-restore"); diff --git a/src/Dotnet.Watch/Watch/Process/ProjectLauncher.cs b/src/Dotnet.Watch/Watch/Process/ProjectLauncher.cs index 8b4b1707fefc..b905506370e9 100644 --- a/src/Dotnet.Watch/Watch/Process/ProjectLauncher.cs +++ b/src/Dotnet.Watch/Watch/Process/ProjectLauncher.cs @@ -111,6 +111,18 @@ private static IReadOnlyList GetProcessArguments(ProjectOptions projectO arguments.Add(projectOptions.TargetFramework); } + if (projectOptions.Device != null) + { + arguments.Add("--device"); + arguments.Add(projectOptions.Device); + + if (projectOptions.DeviceRuntimeIdentifier != null) + { + arguments.Add("--runtime"); + arguments.Add(projectOptions.DeviceRuntimeIdentifier); + } + } + foreach (var (name, value) in environmentBuilder) { arguments.Add("-e"); diff --git a/src/Dotnet.Watch/Watch/UI/BuildParametersSelectionPrompt.cs b/src/Dotnet.Watch/Watch/UI/BuildParametersSelectionPrompt.cs new file mode 100644 index 000000000000..68373e512213 --- /dev/null +++ b/src/Dotnet.Watch/Watch/UI/BuildParametersSelectionPrompt.cs @@ -0,0 +1,49 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.DotNet.Watch; + +/// +/// Abstract base for interactive selection prompts in dotnet-watch. +/// Provides target framework and device selection with caching across watch restarts. +/// +internal abstract class BuildParametersSelectionPrompt : IDisposable +{ + public IReadOnlyList? PreviousTargetFrameworks { get; set; } + public string? PreviousFrameworkSelection { get; set; } + + public IReadOnlyList? PreviousDevices { get; set; } + public DeviceInfo? PreviousDeviceSelection { get; set; } + + public async ValueTask SelectTargetFrameworkAsync(IReadOnlyList targetFrameworks, CancellationToken cancellationToken) + { + var orderedTargetFrameworks = targetFrameworks.Order(StringComparer.OrdinalIgnoreCase).ToArray(); + + if (PreviousFrameworkSelection != null && PreviousTargetFrameworks?.SequenceEqual(orderedTargetFrameworks, StringComparer.OrdinalIgnoreCase) == true) + { + return PreviousFrameworkSelection; + } + + PreviousTargetFrameworks = orderedTargetFrameworks; + PreviousFrameworkSelection = await PromptForTargetFrameworkAsync(targetFrameworks, cancellationToken); + return PreviousFrameworkSelection; + } + + public async ValueTask SelectDeviceAsync(IReadOnlyList devices, CancellationToken cancellationToken) + { + if (PreviousDeviceSelection != null && PreviousDevices?.SequenceEqual(devices) == true) + { + return PreviousDeviceSelection; + } + + PreviousDevices = devices; + PreviousDeviceSelection = await PromptForDeviceAsync(devices, cancellationToken); + return PreviousDeviceSelection; + } + + protected abstract Task PromptForTargetFrameworkAsync(IReadOnlyList targetFrameworks, CancellationToken cancellationToken); + + protected abstract Task PromptForDeviceAsync(IReadOnlyList devices, CancellationToken cancellationToken); + + public virtual void Dispose() { } +} diff --git a/src/Dotnet.Watch/Watch/UI/DeviceInfo.cs b/src/Dotnet.Watch/Watch/UI/DeviceInfo.cs new file mode 100644 index 000000000000..623e3cd25b76 --- /dev/null +++ b/src/Dotnet.Watch/Watch/UI/DeviceInfo.cs @@ -0,0 +1,9 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.DotNet.Watch; + +/// +/// Represents a device item returned from the ComputeAvailableDevices MSBuild target. +/// +internal sealed record DeviceInfo(string Id, string? Description, string? Type, string? Status, string? RuntimeIdentifier); diff --git a/src/Dotnet.Watch/Watch/UI/IReporter.cs b/src/Dotnet.Watch/Watch/UI/IReporter.cs index bf72afd13e11..000ca3015327 100644 --- a/src/Dotnet.Watch/Watch/UI/IReporter.cs +++ b/src/Dotnet.Watch/Watch/UI/IReporter.cs @@ -282,6 +282,7 @@ public static MessageDescriptor GetDescriptor(EventId id) public static readonly MessageDescriptor> BuildStartedNotification = CreateNotification>(); public static readonly MessageDescriptor<(IEnumerable projects, bool success)> BuildCompletedNotification = CreateNotification<(IEnumerable projects, bool success)>(); public static readonly MessageDescriptor ManifestFileNotFound = Create(LogEvents.ManifestFileNotFound, Emoji.Default); + public static readonly MessageDescriptor NoDevicesAvailable = Create("No devices are available for this project.", Emoji.Error, LogLevel.Error); } internal sealed class MessageDescriptor(string? format, Emoji emoji, LogLevel level, EventId id) diff --git a/src/Dotnet.Watch/Watch/UI/TargetFrameworkSelectionPrompt.cs b/src/Dotnet.Watch/Watch/UI/TargetFrameworkSelectionPrompt.cs deleted file mode 100644 index 1d7a801ce347..000000000000 --- a/src/Dotnet.Watch/Watch/UI/TargetFrameworkSelectionPrompt.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace Microsoft.DotNet.Watch; - -internal abstract class TargetFrameworkSelectionPrompt : IDisposable -{ - public IReadOnlyList? PreviousTargetFrameworks { get; set; } - public string? PreviousSelection { get; set; } - - public async ValueTask SelectAsync(IReadOnlyList targetFrameworks, CancellationToken cancellationToken) - { - var orderedTargetFrameworks = targetFrameworks.Order(StringComparer.OrdinalIgnoreCase).ToArray(); - - if (PreviousSelection != null && PreviousTargetFrameworks?.SequenceEqual(orderedTargetFrameworks, StringComparer.OrdinalIgnoreCase) == true) - { - return PreviousSelection; - } - - PreviousTargetFrameworks = orderedTargetFrameworks; - PreviousSelection = await PromptAsync(targetFrameworks, cancellationToken); - return PreviousSelection; - } - - protected abstract Task PromptAsync(IReadOnlyList targetFrameworks, CancellationToken cancellationToken); - - public virtual void Dispose() { } -} diff --git a/src/Dotnet.Watch/dotnet-watch/CommandLine/CommandLineOptions.cs b/src/Dotnet.Watch/dotnet-watch/CommandLine/CommandLineOptions.cs index 9d25af712486..6662b89fa9a1 100644 --- a/src/Dotnet.Watch/dotnet-watch/CommandLine/CommandLineOptions.cs +++ b/src/Dotnet.Watch/dotnet-watch/CommandLine/CommandLineOptions.cs @@ -26,6 +26,7 @@ internal sealed class CommandLineOptions public string? FilePath { get; init; } public string? ProjectPath { get; init; } public string? TargetFramework { get; init; } + public string? Device { get; init; } public Optional LaunchProfileName { get; init; } /// @@ -162,6 +163,7 @@ internal sealed class CommandLineOptions LaunchProfileName = launchProfile, BuildArguments = buildArguments, TargetFramework = parseResult.GetValue(definition.FrameworkOption), + Device = parseResult.GetValue(definition.DeviceOption), }; } @@ -360,6 +362,7 @@ public ProjectOptions GetMainProjectOptions(ProjectRepresentation project, strin Representation = project, WorkingDirectory = workingDirectory, TargetFramework = TargetFramework, + Device = Device, Command = Command, CommandArguments = CommandArguments, LaunchEnvironmentVariables = [], diff --git a/src/Dotnet.Watch/dotnet-watch/CommandLine/DotnetWatchCommandDefinition.cs b/src/Dotnet.Watch/dotnet-watch/CommandLine/DotnetWatchCommandDefinition.cs index 71bbfa3bd255..41480589da5b 100644 --- a/src/Dotnet.Watch/dotnet-watch/CommandLine/DotnetWatchCommandDefinition.cs +++ b/src/Dotnet.Watch/dotnet-watch/CommandLine/DotnetWatchCommandDefinition.cs @@ -25,6 +25,15 @@ internal sealed class DotnetWatchCommandDefinition : RootCommand HelpName = CommandDefinitionStrings.FrameworkArgumentName, }; + /// + /// Specifies the device to run on. The watcher passes the value explicitly instead of forwarding the subcommand's --device option. + /// + public readonly Option DeviceOption = new("--device") + { + Description = Resources.Help_Device, + HelpName = "DEVICE_ID", + }; + // Options we need to know about. They are passed through to the subcommand if the subcommand supports them. public readonly Option ShortProjectOption = new("-p") @@ -80,6 +89,7 @@ public DotnetWatchCommandDefinition() Options.Add(NoHotReloadOption); Options.Add(NonInteractiveOption); Options.Add(FrameworkOption); + Options.Add(DeviceOption); Options.Add(LongProjectOption); Options.Add(ShortProjectOption); @@ -118,5 +128,6 @@ public bool IsWatchOption(Option option) option == ListOption || option == NoHotReloadOption || option == NonInteractiveOption || - option == FrameworkOption; + option == FrameworkOption || + option == DeviceOption; } diff --git a/src/Dotnet.Watch/dotnet-watch/Program.cs b/src/Dotnet.Watch/dotnet-watch/Program.cs index 9dc9b9c41d84..c4cd7ab0600c 100644 --- a/src/Dotnet.Watch/dotnet-watch/Program.cs +++ b/src/Dotnet.Watch/dotnet-watch/Program.cs @@ -265,9 +265,8 @@ internal async Task RunAsync() if (IsHotReloadEnabled()) { - using var tfmPrompt = context.Options.NonInteractive ? null - : new SpectreTargetFrameworkSelectionPrompt(console); - var watcher = new HotReloadDotNetWatcher(context, console, runtimeProcessLauncherFactory: null, tfmPrompt); + using var selectionPrompt = context.Options.NonInteractive ? null : new SpectreBuildParametersSelectionPrompt(console); + var watcher = new HotReloadDotNetWatcher(context, console, runtimeProcessLauncherFactory: null, selectionPrompt); await watcher.WatchAsync(shutdownHandler.CancellationToken); } else if (mainProjectOptions.Representation.EntryPointFilePath != null) @@ -347,6 +346,7 @@ private async Task ListFilesAsync(ProcessRunner processRunner, Cancellation options.BuildArguments, processRunner, buildLogger, + options.GlobalOptions, environmentOptions); if (await fileSetFactory.TryCreateAsync(requireProjectGraph: null, cancellationToken) is not { } evaluationResult) diff --git a/src/Dotnet.Watch/dotnet-watch/Resources.resx b/src/Dotnet.Watch/dotnet-watch/Resources.resx index 9892790f4556..9ae47329057a 100644 --- a/src/Dotnet.Watch/dotnet-watch/Resources.resx +++ b/src/Dotnet.Watch/dotnet-watch/Resources.resx @@ -147,12 +147,21 @@ Type to search + + Select a device to run on: + + + Move up and down to reveal more devices + Runs dotnet-watch in non-interactive mode. This option is only supported when running with Hot Reload enabled. Use this option to prevent console input from being captured. + + The device identifier to run on (e.g. emulator, simulator, or physical device). + Suppress hot reload for supported apps. diff --git a/src/Dotnet.Watch/dotnet-watch/UI/SpectreTargetFrameworkSelectionPrompt.cs b/src/Dotnet.Watch/dotnet-watch/UI/SpectreBuildParametersSelectionPrompt.cs similarity index 64% rename from src/Dotnet.Watch/dotnet-watch/UI/SpectreTargetFrameworkSelectionPrompt.cs rename to src/Dotnet.Watch/dotnet-watch/UI/SpectreBuildParametersSelectionPrompt.cs index 6d68048d8413..7119266ef65b 100644 --- a/src/Dotnet.Watch/dotnet-watch/UI/SpectreTargetFrameworkSelectionPrompt.cs +++ b/src/Dotnet.Watch/dotnet-watch/UI/SpectreBuildParametersSelectionPrompt.cs @@ -6,9 +6,13 @@ namespace Microsoft.DotNet.Watch; -internal sealed class SpectreTargetFrameworkSelectionPrompt(IAnsiConsole console) : TargetFrameworkSelectionPrompt +internal sealed class SpectreBuildParametersSelectionPrompt(IAnsiConsole console) : BuildParametersSelectionPrompt { - public SpectreTargetFrameworkSelectionPrompt(IConsole watchConsole) + private const string CyanMarkup = "[cyan]"; + private const string GrayMarkup = "[gray]"; + private const string EndMarkup = "[/]"; + + public SpectreBuildParametersSelectionPrompt(IConsole watchConsole) : this(CreateConsole(watchConsole)) { } @@ -16,12 +20,12 @@ public SpectreTargetFrameworkSelectionPrompt(IConsole watchConsole) public override void Dispose() => (console as IDisposable)?.Dispose(); - protected override Task PromptAsync(IReadOnlyList targetFrameworks, CancellationToken cancellationToken) + protected override Task PromptForTargetFrameworkAsync(IReadOnlyList targetFrameworks, CancellationToken cancellationToken) { var prompt = new SelectionPrompt() - .Title($"[cyan]{Markup.Escape(Resources.SelectTargetFrameworkPrompt)}[/]") + .Title($"{CyanMarkup}{Markup.Escape(Resources.SelectTargetFrameworkPrompt)}{EndMarkup}") .PageSize(10) - .MoreChoicesText($"[gray]({Markup.Escape(Resources.MoreFrameworksText)})[/]") + .MoreChoicesText($"{GrayMarkup}({Markup.Escape(Resources.MoreFrameworksText)}){EndMarkup}") .AddChoices(targetFrameworks) .EnableSearch() .SearchPlaceholderText(Resources.SearchPlaceholderText); @@ -29,6 +33,45 @@ protected override Task PromptAsync(IReadOnlyList targetFramewor return prompt.ShowAsync(console, cancellationToken); } + protected override Task PromptForDeviceAsync(IReadOnlyList devices, CancellationToken cancellationToken) + { + var prompt = new SelectionPrompt() + .Title($"{CyanMarkup}{Markup.Escape(Resources.SelectDevicePrompt)}{EndMarkup}") + .PageSize(10) + .MoreChoicesText($"{GrayMarkup}({Markup.Escape(Resources.MoreDevicesText)}){EndMarkup}") + .AddChoices(devices) + .UseConverter(FormatDevice) + .EnableSearch() + .SearchPlaceholderText(Resources.SearchPlaceholderText); + + return prompt.ShowAsync(console, cancellationToken); + } + + internal static string FormatDevice(DeviceInfo device) + { + var display = device.Id; + if (!string.IsNullOrWhiteSpace(device.Description)) + { + display += $" - {device.Description}"; + } + + if (!string.IsNullOrWhiteSpace(device.Type)) + { + display += $" ({device.Type}"; + if (!string.IsNullOrWhiteSpace(device.Status)) + { + display += $", {device.Status}"; + } + display += ")"; + } + else if (!string.IsNullOrWhiteSpace(device.Status)) + { + display += $" ({device.Status})"; + } + + return display; + } + private static IAnsiConsole CreateConsole(IConsole watchConsole) { if (!Console.IsInputRedirected) diff --git a/src/Dotnet.Watch/dotnet-watch/Watch/BuildEvaluator.cs b/src/Dotnet.Watch/dotnet-watch/Watch/BuildEvaluator.cs index eb76068b0812..4b0576dd3461 100644 --- a/src/Dotnet.Watch/dotnet-watch/Watch/BuildEvaluator.cs +++ b/src/Dotnet.Watch/dotnet-watch/Watch/BuildEvaluator.cs @@ -51,6 +51,7 @@ protected virtual MSBuildFileSetFactory CreateMSBuildFileSetFactory() _context.BuildArguments, _context.ProcessRunner, _context.BuildLogger, + _context.Options, _context.EnvironmentOptions); } @@ -88,6 +89,12 @@ public IReadOnlyList GetProcessArguments(int iteration) arguments.Add(MainProjectOptions.TargetFramework); } + if (MainProjectOptions.Device != null) + { + arguments.Add("--device"); + arguments.Add(MainProjectOptions.Device); + } + arguments.AddRange(MainProjectOptions.CommandArguments); return arguments; diff --git a/src/Dotnet.Watch/dotnet-watch/Watch/MsBuildFileSetFactory.cs b/src/Dotnet.Watch/dotnet-watch/Watch/MsBuildFileSetFactory.cs index 4f94e8535980..aa61f05d95e7 100644 --- a/src/Dotnet.Watch/dotnet-watch/Watch/MsBuildFileSetFactory.cs +++ b/src/Dotnet.Watch/dotnet-watch/Watch/MsBuildFileSetFactory.cs @@ -22,6 +22,7 @@ internal class MSBuildFileSetFactory( IEnumerable buildArguments, ProcessRunner processRunner, ILogger logger, + GlobalOptions globalOptions, EnvironmentOptions environmentOptions) { private const string TargetName = "GenerateWatchList"; @@ -33,7 +34,9 @@ internal class MSBuildFileSetFactory( [new ProjectRepresentation(rootProjectFile, entryPointFilePath: null)], targetFramework, buildProperties: BuildUtilities.ParseBuildProperties(buildArguments).ToImmutableDictionary(keySelector: arg => arg.key, elementSelector: arg => arg.value), - logger); + logger, + globalOptions, + environmentOptions); internal sealed class EvaluationResult(IReadOnlyDictionary files, LoadedProjectGraph? projectGraph) { diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.cs.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.cs.xlf index d44e81ef9897..f06aeb552b1d 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.cs.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.cs.xlf @@ -95,6 +95,11 @@ Examples: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Examples: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks Posunutím nahoru a dolů zobrazíte další architektury. @@ -152,6 +162,11 @@ Examples: Zadejte hledaný text + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: Vyberte cílovou architekturu, která se má spustit: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.de.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.de.xlf index 1dd6e1c6c3ab..643eacbe4bf0 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.de.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.de.xlf @@ -95,6 +95,11 @@ Beispiele: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Beispiele: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks Nach oben und unten bewegen, um weitere Frameworks anzuzeigen @@ -152,6 +162,11 @@ Beispiele: Suchtext eingeben + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: Wählen Sie das auszuführende Zielframework aus: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.es.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.es.xlf index 8cd88128ff69..c1c2adc95b72 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.es.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.es.xlf @@ -95,6 +95,11 @@ Ejemplos: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Ejemplos: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks Subir y bajar para mostrar más marcos @@ -152,6 +162,11 @@ Ejemplos: Escriba para buscar + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: Seleccione la plataforma de destino que se va a ejecutar: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.fr.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.fr.xlf index 1e6fb5271f98..c379df1f5d20 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.fr.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.fr.xlf @@ -95,6 +95,11 @@ Exemples : + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Exemples : + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks Montez et descendez pour afficher plus de frameworks @@ -152,6 +162,11 @@ Exemples : Entrer le texte à rechercher + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: Sélectionner le framework cible pour exécuter : diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.it.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.it.xlf index 6d6d78443c19..4510f1cb2753 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.it.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.it.xlf @@ -95,6 +95,11 @@ Esempi: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Esempi: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks Spostarsi verso l'alto o verso il basso per visualizzare altri framework @@ -152,6 +162,11 @@ Esempi: Digita per cercare + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: Selezionare il framework di destinazione da eseguire: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ja.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ja.xlf index 3b70dc72fdd9..b2f96c858610 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ja.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ja.xlf @@ -95,6 +95,11 @@ Examples: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Examples: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks 上下に移動して、さらに多くのフレームワークを表示 @@ -152,6 +162,11 @@ Examples: 入力して検索します + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: 実行するターゲット フレームワークを選択してください: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ko.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ko.xlf index c18faac8548f..3c3a704d8771 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ko.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ko.xlf @@ -95,6 +95,11 @@ Examples: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Examples: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks 더 많은 프레임워크를 보려면 위아래로 이동하세요. @@ -152,6 +162,11 @@ Examples: 검색할 형식 + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: 실행할 대상 프레임워크 선택: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pl.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pl.xlf index 11e12cce9089..9485c3e73f08 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pl.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pl.xlf @@ -95,6 +95,11 @@ Przykłady: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Przykłady: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks Przesuń w górę lub w dół, aby zobaczyć więcej struktur @@ -152,6 +162,11 @@ Przykłady: Wpisz, aby wyszukać + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: Wybierz docelową strukturę do uruchomienia: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pt-BR.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pt-BR.xlf index c2cf90dbc1f4..23b7b384d57d 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pt-BR.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pt-BR.xlf @@ -95,6 +95,11 @@ Exemplos: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Exemplos: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks Mover para cima e para baixo para ver mais estruturas @@ -152,6 +162,11 @@ Exemplos: Digitar para pesquisar + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: Selecione a estrutura de destino para executar: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ru.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ru.xlf index 16b322cb7c73..db2a5678d77f 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ru.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ru.xlf @@ -95,6 +95,11 @@ Examples: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Examples: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks Прокрутите вверх и вниз, чтобы увидеть больше платформ @@ -152,6 +162,11 @@ Examples: Введите текст для поиска + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: Выберите целевую платформу для запуска: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.tr.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.tr.xlf index 54425fd1bf8d..62d1c81aa127 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.tr.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.tr.xlf @@ -95,6 +95,11 @@ Açıklamalar: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Açıklamalar: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks Yukarı ve aşağı hareket ederek daha fazla çerçeve görüntüleyin @@ -152,6 +162,11 @@ Açıklamalar: Aramak için yazın + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: Çalıştırmak için hedef çerçeveyi seçin: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hans.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hans.xlf index fd7b9fd06974..6f0a97b938bb 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hans.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hans.xlf @@ -96,6 +96,11 @@ Examples: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -143,6 +148,11 @@ Examples: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks 上移或下移以显示更多框架 @@ -153,6 +163,11 @@ Examples: 键入以搜索 + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: 选择要运行的目标框架: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hant.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hant.xlf index 7a132b3aaf28..f31ba66d99d2 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hant.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hant.xlf @@ -95,6 +95,11 @@ Examples: + + The device identifier to run on (e.g. emulator, simulator, or physical device). + The device identifier to run on (e.g. emulator, simulator, or physical device). + + Lists all discovered files without starting the watcher. @@ -142,6 +147,11 @@ Examples: + + Move up and down to reveal more devices + Move up and down to reveal more devices + + Move up and down to reveal more frameworks 上下移動以顯示更多的架構 @@ -152,6 +162,11 @@ Examples: 要搜尋的類型 + + Select a device to run on: + Select a device to run on: + + Select the target framework to run: 選取要執行的目標架構: diff --git a/test/dotnet-watch.Tests/Build/EvaluationTests.cs b/test/dotnet-watch.Tests/Build/EvaluationTests.cs index 3ca413fa1842..4b8f5c6f0652 100644 --- a/test/dotnet-watch.Tests/Build/EvaluationTests.cs +++ b/test/dotnet-watch.Tests/Build/EvaluationTests.cs @@ -442,7 +442,7 @@ public async Task ProjectReferences_Graph() var options = TestOptions.GetEnvironmentOptions(workingDirectory: testDirectory); var processRunner = new ProcessRunner(processCleanupTimeout: TimeSpan.Zero); - var filesetFactory = new MSBuildFileSetFactory(projectA, targetFramework: null, buildArguments: ["/p:_DotNetWatchTraceOutput=true"], processRunner, _logger, options); + var filesetFactory = new MSBuildFileSetFactory(projectA, targetFramework: null, buildArguments: ["/p:_DotNetWatchTraceOutput=true"], processRunner, _logger, TestOptions.GlobalOptions, options); var result = await filesetFactory.TryCreateAsync(requireProjectGraph: null, CancellationToken.None); Assert.NotNull(result); @@ -506,7 +506,7 @@ public async Task MsbuildOutput() var options = TestOptions.GetEnvironmentOptions(workingDirectory: Path.GetDirectoryName(project1Path)!); var processRunner = new ProcessRunner(processCleanupTimeout: TimeSpan.Zero); - var factory = new MSBuildFileSetFactory(project1Path, targetFramework: null, buildArguments: [], processRunner, _logger, options); + var factory = new MSBuildFileSetFactory(project1Path, targetFramework: null, buildArguments: [], processRunner, _logger, TestOptions.GlobalOptions, options); var result = await factory.TryCreateAsync(requireProjectGraph: null, CancellationToken.None); Assert.Null(result); @@ -543,7 +543,7 @@ async Task VerifyTargetsEvaluation() var options = TestOptions.GetEnvironmentOptions(workingDirectory: testDir) with { TestOutput = testDir }; var processRunner = new ProcessRunner(processCleanupTimeout: TimeSpan.Zero); var buildArguments = targetFramework != null ? new[] { "/p:TargetFramework=" + targetFramework } : []; - var factory = new MSBuildFileSetFactory(rootProjectPath, targetFramework: null, buildArguments, processRunner, _logger, options); + var factory = new MSBuildFileSetFactory(rootProjectPath, targetFramework: null, buildArguments, processRunner, _logger, TestOptions.GlobalOptions, options); var targetsResult = await factory.TryCreateAsync(requireProjectGraph: null, CancellationToken.None); Assert.NotNull(targetsResult); diff --git a/test/dotnet-watch.Tests/Build/ProjectGraphFactoryTests.cs b/test/dotnet-watch.Tests/Build/ProjectGraphFactoryTests.cs index fbcbb8404f8a..3f0322c2c0bb 100644 --- a/test/dotnet-watch.Tests/Build/ProjectGraphFactoryTests.cs +++ b/test/dotnet-watch.Tests/Build/ProjectGraphFactoryTests.cs @@ -20,7 +20,7 @@ public void RegularProject() var projectPath = Path.Combine(testAsset.Path, "WatchNoDepsApp.csproj"); var projectRepr = new ProjectRepresentation(projectPath, entryPointFilePath: null); - var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger); + var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions(asset: testAsset)); var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, CancellationToken.None); Assert.NotNull(graph); @@ -40,7 +40,7 @@ public void VirtualProject() """); var projectRepr = new ProjectRepresentation(projectPath: null, entryPointFilePath); - var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger); + var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions()); var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, CancellationToken.None); Assert.NotNull(graph); @@ -60,7 +60,7 @@ public void VirtualProject_Error() """); var projectRepr = new ProjectRepresentation(projectPath: null, entryPointFilePath); - var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger); + var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions()); var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, CancellationToken.None); Assert.Null(graph); @@ -92,7 +92,7 @@ public void VirtualProject_ProjectDirective() """); var projectRepr = new ProjectRepresentation(projectPath: null, entryPointFilePath); - var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger); + var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions(asset: testAsset)); var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, CancellationToken.None); Assert.NotNull(graph); diff --git a/test/dotnet-watch.Tests/HotReload/BuildParametersSelectionPromptTests.cs b/test/dotnet-watch.Tests/HotReload/BuildParametersSelectionPromptTests.cs new file mode 100644 index 000000000000..091146408807 --- /dev/null +++ b/test/dotnet-watch.Tests/HotReload/BuildParametersSelectionPromptTests.cs @@ -0,0 +1,221 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using SpectreTestConsole = Spectre.Console.Testing.TestConsole; + +namespace Microsoft.DotNet.Watch.UnitTests; + +public class BuildParametersSelectionPromptTests +{ + private static DeviceInfo[] CreateTestDevices() => + [ + new("emulator-5554", "Pixel 7 - API 35", "Emulator", "Online", "android-x64"), + new("emulator-5555", "Pixel 7 - API 36", "Emulator", "Online", "android-x64"), + new("0A041FDD400327", "Pixel 7 Pro", "Device", "Online", "android-arm64"), + ]; + + [Theory] + [CombinatorialData] + public async Task SelectsFrameworkByArrowKeysAndEnter([CombinatorialRange(0, count: 3)] int index) + { + var console = new SpectreTestConsole(); + console.Profile.Capabilities.Interactive = true; + + for (var i = 0; i < index; i++) + { + console.Input.PushKey(ConsoleKey.DownArrow); + } + console.Input.PushKey(ConsoleKey.Enter); + + var frameworks = new[] { "net7.0", "net8.0", "net9.0" }; + var prompt = new SpectreBuildParametersSelectionPrompt(console); + + var result = await prompt.SelectTargetFrameworkAsync(frameworks, CancellationToken.None); + Assert.Equal(frameworks[index], result); + Assert.Equal(frameworks[index], prompt.PreviousFrameworkSelection); + } + + [Theory] + [CombinatorialData] + public async Task PreviousFrameworkSelectionIsReusedWhenUnchanged([CombinatorialRange(0, count: 3)] int index) + { + var console = new SpectreTestConsole(); + console.Profile.Capabilities.Interactive = true; + + for (var i = 0; i < index; i++) + { + console.Input.PushKey(ConsoleKey.DownArrow); + } + console.Input.PushKey(ConsoleKey.Enter); + + var frameworks = new[] { "net7.0", "net8.0", "net9.0" }; + var prompt = new SpectreBuildParametersSelectionPrompt(console); + + var first = await prompt.SelectTargetFrameworkAsync(frameworks, CancellationToken.None); + Assert.Equal(frameworks[index], first); + + // Same frameworks (reordered, different casing) should reuse previous selection without prompting + var second = await prompt.SelectTargetFrameworkAsync(["NET9.0", "net7.0", "net8.0"], CancellationToken.None); + Assert.Equal(first, second); + } + + [Fact] + public async Task PromptsAgainWhenFrameworksChange() + { + var console = new SpectreTestConsole(); + console.Profile.Capabilities.Interactive = true; + + console.Input.PushKey(ConsoleKey.Enter); + console.Input.PushKey(ConsoleKey.DownArrow); + console.Input.PushKey(ConsoleKey.Enter); + + var prompt = new SpectreBuildParametersSelectionPrompt(console); + + var first = await prompt.SelectTargetFrameworkAsync(["net7.0", "net8.0", "net9.0"], CancellationToken.None); + Assert.Equal("net7.0", first); + + var second = await prompt.SelectTargetFrameworkAsync(["net9.0", "net10.0"], CancellationToken.None); + Assert.Equal("net10.0", second); + } + + [Fact] + public async Task SelectsFrameworkBySearchText() + { + var console = new SpectreTestConsole(); + console.Profile.Capabilities.Interactive = true; + + console.Input.PushText("net9.0"); + console.Input.PushKey(ConsoleKey.Enter); + + var frameworks = new[] { "net7.0", "net8.0", "net9.0", "net10.0" }; + var prompt = new SpectreBuildParametersSelectionPrompt(console); + + var result = await prompt.SelectTargetFrameworkAsync(frameworks, CancellationToken.None); + Assert.Equal("net9.0", result); + } + + [Fact] + public async Task SelectsFirstDeviceByEnter() + { + var console = new SpectreTestConsole(); + console.Profile.Capabilities.Interactive = true; + + console.Input.PushKey(ConsoleKey.Enter); + + var devices = CreateTestDevices(); + var prompt = new SpectreBuildParametersSelectionPrompt(console); + + var result = await prompt.SelectDeviceAsync(devices, CancellationToken.None); + Assert.Equal(devices[0], result); + Assert.Equal(devices[0], prompt.PreviousDeviceSelection); + } + + [Fact] + public async Task SelectsDeviceBySearchText() + { + var console = new SpectreTestConsole(); + console.Profile.Capabilities.Interactive = true; + + console.Input.PushText("Pixel 7 Pro"); + console.Input.PushKey(ConsoleKey.Enter); + + var devices = CreateTestDevices(); + var prompt = new SpectreBuildParametersSelectionPrompt(console); + + var result = await prompt.SelectDeviceAsync(devices, CancellationToken.None); + Assert.Equal("0A041FDD400327", result.Id); + Assert.Equal("android-arm64", result.RuntimeIdentifier); + } + + [Fact] + public async Task PreviousDeviceSelectionIsReusedWhenUnchanged() + { + var console = new SpectreTestConsole(); + console.Profile.Capabilities.Interactive = true; + + console.Input.PushKey(ConsoleKey.Enter); + + var devices = CreateTestDevices(); + var prompt = new SpectreBuildParametersSelectionPrompt(console); + + var first = await prompt.SelectDeviceAsync(devices, CancellationToken.None); + Assert.Equal(devices[0], first); + + // Same devices should reuse previous selection without prompting + var second = await prompt.SelectDeviceAsync(devices, CancellationToken.None); + Assert.Equal(first, second); + } + + [Fact] + public async Task PromptsAgainWhenDevicesChange() + { + var console = new SpectreTestConsole(); + console.Profile.Capabilities.Interactive = true; + + console.Input.PushKey(ConsoleKey.Enter); + console.Input.PushText("iPhone 15"); + console.Input.PushKey(ConsoleKey.Enter); + + var prompt = new SpectreBuildParametersSelectionPrompt(console); + + var first = await prompt.SelectDeviceAsync(CreateTestDevices(), CancellationToken.None); + Assert.Equal("emulator-5554", first.Id); + + DeviceInfo[] newDevices = + [ + new("sim-1", "iPhone 14 - iOS 18.6", "Simulator", "Booted", "iossimulator-arm64"), + new("sim-2", "iPhone 15 - iOS 26.0", "Simulator", "Shutdown", "iossimulator-arm64"), + ]; + var second = await prompt.SelectDeviceAsync(newDevices, CancellationToken.None); + Assert.Equal("sim-2", second.Id); + } + + [Fact] + public async Task SelectsDeviceBySearchingId() + { + var console = new SpectreTestConsole(); + console.Profile.Capabilities.Interactive = true; + + console.Input.PushText("emulator-5555"); + console.Input.PushKey(ConsoleKey.Enter); + + var devices = CreateTestDevices(); + var prompt = new SpectreBuildParametersSelectionPrompt(console); + + var result = await prompt.SelectDeviceAsync(devices, CancellationToken.None); + Assert.Equal("emulator-5555", result.Id); + Assert.Equal("android-x64", result.RuntimeIdentifier); + } + + [Fact] + public void FormatDevice_WithAllMetadata() + { + var device = new DeviceInfo("emulator-5554", "Pixel 7 - API 35", "Emulator", "Online", "android-x64"); + var formatted = SpectreBuildParametersSelectionPrompt.FormatDevice(device); + Assert.Equal("emulator-5554 - Pixel 7 - API 35 (Emulator, Online)", formatted); + } + + [Fact] + public void FormatDevice_WithoutType() + { + var device = new DeviceInfo("device-1", "My Phone", null, "Connected", null); + var formatted = SpectreBuildParametersSelectionPrompt.FormatDevice(device); + Assert.Equal("device-1 - My Phone (Connected)", formatted); + } + + [Fact] + public void FormatDevice_WithoutStatus() + { + var device = new DeviceInfo("device-1", "My Phone", "Device", null, null); + var formatted = SpectreBuildParametersSelectionPrompt.FormatDevice(device); + Assert.Equal("device-1 - My Phone (Device)", formatted); + } + + [Fact] + public void FormatDevice_IdOnly() + { + var device = new DeviceInfo("device-1", null, null, null, null); + var formatted = SpectreBuildParametersSelectionPrompt.FormatDevice(device); + Assert.Equal("device-1", formatted); + } +} diff --git a/test/dotnet-watch.Tests/HotReload/BuildProjectsTests.cs b/test/dotnet-watch.Tests/HotReload/BuildProjectsTests.cs index 3f73a014018a..15b0bcb6c3b6 100644 --- a/test/dotnet-watch.Tests/HotReload/BuildProjectsTests.cs +++ b/test/dotnet-watch.Tests/HotReload/BuildProjectsTests.cs @@ -50,7 +50,7 @@ public TestContext(ITestOutputHelper output, ImmutableArray + /// Tests device selection in dotnet-watch using the DotnetRunDevices test asset, + /// which provides ComputeAvailableDevices and DeployToDevice MSBuild targets. + /// + [Fact] + public async Task SelectsDevice() + { + var testAsset = TestAssets.CopyTestAsset("DotnetRunDevices") + .WithSource(); + + var tfm = ToolsetInfo.CurrentTargetFramework; + + // Start watch with ReadKeyFromStdin so we can interact with Spectre prompts. + // Pass --framework to skip TFM selection and focus on device selection. + App.Start(testAsset, ["-f", tfm], testFlags: TestFlags.ReadKeyFromStdin); + + // Wait for the device selection prompt + await App.WaitUntilOutputContains(Resources.SelectDevicePrompt); + + // Type to search for "test-device-1" and select it + foreach (var c in "test-device-1") + { + App.SendKey(c); + } + App.SendKey('\r'); + + // The app should launch and print the selected device + await App.WaitUntilOutputContains("Device: test-device-1"); + } + + [Fact] + public async Task AutoSelectsSingleDevice() + { + var testAsset = TestAssets.CopyTestAsset("DotnetRunDevices") + .WithSource(); + + var tfm = ToolsetInfo.CurrentTargetFramework; + + // SingleDevice=true makes ComputeAvailableDevices return only one device. + App.Start(testAsset, ["-f", tfm, "--property", "SingleDevice=true"], testFlags: TestFlags.ReadKeyFromStdin); + + // Should auto-select without prompting and launch the app + await App.WaitUntilOutputContains("Device: single-device"); + } } diff --git a/test/dotnet-watch.Tests/HotReload/TargetFrameworkSelectionPromptTests.cs b/test/dotnet-watch.Tests/HotReload/TargetFrameworkSelectionPromptTests.cs deleted file mode 100644 index a25cd6bc4a6b..000000000000 --- a/test/dotnet-watch.Tests/HotReload/TargetFrameworkSelectionPromptTests.cs +++ /dev/null @@ -1,95 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using SpectreTestConsole = Spectre.Console.Testing.TestConsole; - -namespace Microsoft.DotNet.Watch.UnitTests; - -public class TargetFrameworkSelectionPromptTests -{ - [Theory] - [CombinatorialData] - public async Task SelectsFrameworkByArrowKeysAndEnter([CombinatorialRange(0, count: 3)] int index) - { - var console = new SpectreTestConsole(); - console.Profile.Capabilities.Interactive = true; - - // Press DownArrow 'index' times to move to the desired item, then Enter to select - for (var i = 0; i < index; i++) - { - console.Input.PushKey(ConsoleKey.DownArrow); - } - console.Input.PushKey(ConsoleKey.Enter); - - var frameworks = new[] { "net7.0", "net8.0", "net9.0" }; - var prompt = new SpectreTargetFrameworkSelectionPrompt(console); - - var result = await prompt.SelectAsync(frameworks, CancellationToken.None); - Assert.Equal(frameworks[index], result); - Assert.Equal(frameworks[index], prompt.PreviousSelection); - } - - [Theory] - [CombinatorialData] - public async Task PreviousSelectionIsReusedWhenFrameworksUnchanged([CombinatorialRange(0, count: 3)] int index) - { - var console = new SpectreTestConsole(); - console.Profile.Capabilities.Interactive = true; - - // First selection via key presses - for (var i = 0; i < index; i++) - { - console.Input.PushKey(ConsoleKey.DownArrow); - } - console.Input.PushKey(ConsoleKey.Enter); - - var frameworks = new[] { "net7.0", "net8.0", "net9.0" }; - var prompt = new SpectreTargetFrameworkSelectionPrompt(console); - - var first = await prompt.SelectAsync(frameworks, CancellationToken.None); - Assert.Equal(frameworks[index], first); - - // Same frameworks (reordered, different casing) should reuse previous selection without prompting - var second = await prompt.SelectAsync(["NET9.0", "net7.0", "net8.0"], CancellationToken.None); - Assert.Equal(first, second); - } - - [Fact] - public async Task PromptsAgainWhenFrameworksChange() - { - var console = new SpectreTestConsole(); - console.Profile.Capabilities.Interactive = true; - - // First selection: pick first item - console.Input.PushKey(ConsoleKey.Enter); - // Second selection (after frameworks change): pick second item - console.Input.PushKey(ConsoleKey.DownArrow); - console.Input.PushKey(ConsoleKey.Enter); - - var prompt = new SpectreTargetFrameworkSelectionPrompt(console); - - var first = await prompt.SelectAsync(["net7.0", "net8.0", "net9.0"], CancellationToken.None); - Assert.Equal("net7.0", first); - - // Different set of frameworks — should prompt again - var second = await prompt.SelectAsync(["net9.0", "net10.0"], CancellationToken.None); - Assert.Equal("net10.0", second); - } - - [Fact] - public async Task SelectsFrameworkBySearchText() - { - var console = new SpectreTestConsole(); - console.Profile.Capabilities.Interactive = true; - - // Type "net9.0" to filter, then Enter to select the match - console.Input.PushText("net9.0"); - console.Input.PushKey(ConsoleKey.Enter); - - var frameworks = new[] { "net7.0", "net8.0", "net9.0", "net10.0" }; - var prompt = new SpectreTargetFrameworkSelectionPrompt(console); - - var result = await prompt.SelectAsync(frameworks, CancellationToken.None); - Assert.Equal("net9.0", result); - } -} diff --git a/test/dotnet-watch.Tests/TestUtilities/DotNetWatchTestBase.cs b/test/dotnet-watch.Tests/TestUtilities/DotNetWatchTestBase.cs index 3bbbeddb34d3..4e95ae6e6fc3 100644 --- a/test/dotnet-watch.Tests/TestUtilities/DotNetWatchTestBase.cs +++ b/test/dotnet-watch.Tests/TestUtilities/DotNetWatchTestBase.cs @@ -98,7 +98,7 @@ internal InProcTestWatcher CreateInProcWatcher(TestAsset testAsset, string[] arg }); var context = program.CreateContext(processRunner); - var watcher = new HotReloadDotNetWatcher(context, console, runtimeProcessLauncherFactory: factory, targetFrameworkSelectionPrompt: null); + var watcher = new HotReloadDotNetWatcher(context, console, runtimeProcessLauncherFactory: factory, selectionPrompt: null); var shutdownSource = new CancellationTokenSource(); return new InProcTestWatcher(Logger, watcher, context, eventObserver, reporter, console, serviceHolder, shutdownSource); diff --git a/test/dotnet-watch.Tests/TestUtilities/MockFileSetFactory.cs b/test/dotnet-watch.Tests/TestUtilities/MockFileSetFactory.cs index f5065d47dfb6..c057afa3829b 100644 --- a/test/dotnet-watch.Tests/TestUtilities/MockFileSetFactory.cs +++ b/test/dotnet-watch.Tests/TestUtilities/MockFileSetFactory.cs @@ -11,6 +11,7 @@ internal class MockFileSetFactory() : MSBuildFileSetFactory( buildArguments: [], new ProcessRunner(processCleanupTimeout: TimeSpan.Zero), NullLogger.Instance, + TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions(Environment.CurrentDirectory) is var options ? options : options) { public Func? TryCreateImpl; diff --git a/test/dotnet-watch.Tests/TestUtilities/TestOptions.cs b/test/dotnet-watch.Tests/TestUtilities/TestOptions.cs index 3744a59299b2..9e4d691b2975 100644 --- a/test/dotnet-watch.Tests/TestUtilities/TestOptions.cs +++ b/test/dotnet-watch.Tests/TestUtilities/TestOptions.cs @@ -12,6 +12,7 @@ internal static class TestOptions public static int GetTestPort() => Interlocked.Increment(ref s_testPort); + public static readonly GlobalOptions GlobalOptions = new() { BinaryLogPath = "msbuild.binlog" }; public static readonly ProjectOptions ProjectOptions = GetProjectOptions(GetCommandLineOptions([])); public static EnvironmentOptions GetEnvironmentOptions(string workingDirectory = "", TestAsset? asset = null) From 20867643ee23f1fe7f4ad440e69e3567da7c8350 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 1 Apr 2026 12:53:59 -0500 Subject: [PATCH 077/230] [dotnet-watch] Fix WebSocket transport crash on Ctrl+R restart (#53648) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: https://github.com/dotnet/sdk/issues/53634 When a mobile/WebSocket app is shut down (Ctrl+C) or restarted (Ctrl+R), the child process is killed which closes the TCP connection. Kestrel tears down the HTTP context, and then `RunningProject.DisposeAsync` tries to dispose the WebSocket — hitting an `ObjectDisposedException` on the already-disposed `IFeatureCollection`. The `ListenForResponsesAsync` loop also logs a spurious `WebSocketException` error. **Fixes:** - `RequestHandler.Dispose`: catch `ObjectDisposedException` when the underlying Kestrel HTTP context is already torn down - `IsExpectedConnectionTermination`: treat `WebSocketException` as expected when the socket state is `Aborted` (remote disconnected) **Tests:** - `CtrlC_ShutsDownCleanly`: verifies clean shutdown with WebSocket transport - `CtrlR_RestartsCleanly`: verifies restart without `WebSocketException` or `ObjectDisposedException` errors Both tests fail without the fix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../WebSocketClientTransport.cs | 19 ++++++- .../HotReload/MobileHotReloadTests.cs | 51 +++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/Dotnet.Watch/HotReloadClient/WebSocketClientTransport.cs b/src/Dotnet.Watch/HotReloadClient/WebSocketClientTransport.cs index 6bcc49d6e7fe..6bc21e5b9451 100644 --- a/src/Dotnet.Watch/HotReloadClient/WebSocketClientTransport.cs +++ b/src/Dotnet.Watch/HotReloadClient/WebSocketClientTransport.cs @@ -44,7 +44,9 @@ public override void Dispose() } public override bool IsExpectedConnectionTermination(Exception exception, CancellationToken cancellationToken) - => cancellationToken.IsCancellationRequested; + => cancellationToken.IsCancellationRequested + || exception is ObjectDisposedException + || (exception is System.Net.WebSockets.WebSocketException && _handler.IsClientSocketAborted); /// /// Creates and starts a new instance. @@ -86,6 +88,9 @@ private sealed class RequestHandler(ILogger logger) : IDisposable private WebSocket? _clientSocket; + public bool IsClientSocketAborted + => _clientSocket?.State is System.Net.WebSockets.WebSocketState.Aborted; + // Reused across WriteAsync calls to avoid allocations. // WriteAsync is invoked under a semaphore in DefaultHotReloadClient. private MemoryStream? _sendBuffer; @@ -95,7 +100,17 @@ public void Dispose() logger.LogDebug("Disposing agent websocket transport"); _sendBuffer?.Dispose(); - _clientSocket?.Dispose(); + + try + { + _clientSocket?.Dispose(); + } + catch (ObjectDisposedException) + { + // The underlying HTTP context may already be disposed when the + // child process was terminated (e.g. Ctrl+R restart). + } + SharedSecretProvider.Dispose(); } diff --git a/test/dotnet-watch.Tests/HotReload/MobileHotReloadTests.cs b/test/dotnet-watch.Tests/HotReload/MobileHotReloadTests.cs index 6a99baab6982..87c369d77d69 100644 --- a/test/dotnet-watch.Tests/HotReload/MobileHotReloadTests.cs +++ b/test/dotnet-watch.Tests/HotReload/MobileHotReloadTests.cs @@ -38,4 +38,55 @@ public async Task HotReload_WithWebSocketCapability() await App.AssertOutputLineStartsWith("Changed!"); } + + [Fact] + public async Task CtrlC_ShutsDownCleanly() + { + var testAsset = TestAssets.CopyTestAsset("WatchMobileApp") + .WithSource(); + + App.Start(testAsset, [], testFlags: TestFlags.ReadKeyFromStdin); + + await App.WaitUntilOutputContains("Started"); + await App.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); + await App.WaitUntilOutputContains(WebSocketServerStartedPattern); + await App.WaitUntilOutputContains("WebSocket client connected"); + + App.Process.ClearOutput(); + App.SendControlC(); + + await App.WaitUntilOutputContains(MessageDescriptor.ShutdownRequested); + await App.WaitUntilOutputContains("exited with exit code"); + + App.AssertOutputDoesNotContain("ObjectDisposedException"); + App.AssertOutputDoesNotContain("WebSocketException"); + App.AssertOutputDoesNotContain("An unexpected error occurred"); + } + + [Fact] + public async Task CtrlR_RestartsCleanly() + { + var testAsset = TestAssets.CopyTestAsset("WatchMobileApp") + .WithSource(); + + App.Start(testAsset, [], testFlags: TestFlags.ReadKeyFromStdin); + + await App.WaitUntilOutputContains("Started"); + await App.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); + await App.WaitUntilOutputContains(WebSocketServerStartedPattern); + await App.WaitUntilOutputContains("WebSocket client connected"); + + App.Process.ClearOutput(); + App.SendControlR(); + + await App.WaitUntilOutputContains(MessageDescriptor.RestartRequested); + + // App should restart and output "Started" again (iteration 2) + await App.WaitUntilOutputContains("DOTNET_WATCH_ITERATION = 2"); + await App.WaitUntilOutputContains("Started"); + + App.AssertOutputDoesNotContain("ObjectDisposedException"); + App.AssertOutputDoesNotContain("WebSocketException"); + App.AssertOutputDoesNotContain("An unexpected error occurred"); + } } From a38aeea27e006b790f38236648c5620f4bc4c7ef Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 2 Apr 2026 00:59:01 +0000 Subject: [PATCH 078/230] Update dependencies from build 308845 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26181.114 -> 10.0.0-preview.26201.115) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26181-114 -> 18.6.0-preview-26201-115) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.18214 -> 7.6.0-rc.20215) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26181.114 -> 10.0.300-alpha.26201.115) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26181.114 -> 5.7.0-1.26201.115) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26181.114 -> 10.0.0-beta.26201.115) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26181.114 -> 15.2.300-servicing.26201.115) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26181-114 -> 18.3.0-release-26201-115) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26181.114 -> 10.0.300-preview.26201.115) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index b906b3246197..1cae23ee41c3 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26181.114 + 10.0.0-preview.26201.115 10.0.5 10.0.5 - 18.6.0-preview-26181-114 - 18.6.0-preview-26181-114 - 7.6.0-rc.18214 - 10.0.300-alpha.26181.114 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 - 10.0.0-preview.26181.114 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 + 18.6.0-preview-26201-115 + 18.6.0-preview-26201-115 + 7.6.0-rc.20215 + 10.0.300-alpha.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 10.0.0-preview.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26181.114 - 10.0.0-beta.26181.114 - 10.0.0-beta.26181.114 - 10.0.0-beta.26181.114 - 10.0.0-beta.26181.114 - 10.0.0-beta.26181.114 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26181.114 - 10.0.0-beta.26181.114 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26181.114 + 15.2.300-servicing.26201.115 10.0.5 - 5.6.0-2.26181.114 - 5.6.0-2.26181.114 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26181.114 + 10.0.0-preview.26201.115 10.0.5-servicing.26153.111 - 18.3.0-release-26181-114 + 18.3.0-release-26201-115 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26181.114 - 10.0.300-alpha.26181.114 - 10.0.300-alpha.26181.114 - 10.0.300-alpha.26181.114 - 10.0.300-alpha.26181.114 - 10.0.300-preview.26181.114 - 10.0.300-preview.26181.114 - 10.0.300-preview.26181.114 - 10.0.300-preview.26181.114 - 10.0.300-preview.26181.114 - 10.0.300-preview.26181.114 - 10.0.300-preview.26181.114 - 10.0.300-preview.26181.114 - 10.0.300-preview.26181.114 - 18.3.0-release-26181-114 - 18.3.0-release-26181-114 + 10.0.300-alpha.26201.115 + 10.0.300-alpha.26201.115 + 10.0.300-alpha.26201.115 + 10.0.300-alpha.26201.115 + 10.0.300-alpha.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 18.3.0-release-26201-115 + 18.3.0-release-26201-115 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 - 7.6.0-rc.18214 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 7414e8a5ca1e..56e7b7fa356a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index fb2fbc7b6528..be9322509d64 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26181.114", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26181.114", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26201.115", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26201.115", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From a0c56e35cbdb7e52f5d6f8630af3e9c1e42a4f05 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 2 Apr 2026 02:04:00 +0000 Subject: [PATCH 079/230] Update dependencies from https://github.com/microsoft/testfx build 20260401.3 On relative base path root Microsoft.Testing.Platform From Version 2.2.1-preview.26180.5 -> To Version 2.2.1-preview.26201.3 MSTest From Version 4.2.1-preview.26180.5 -> To Version 4.2.1-preview.26201.3 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 38321fab2619..f1cc0da76bc4 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 - 2.2.1-preview.26180.5 - 4.2.1-preview.26180.5 + 2.2.1-preview.26201.3 + 4.2.1-preview.26201.3 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 552bb094a2cc..e4e66d308d43 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -561,13 +561,13 @@ https://github.com/dotnet/dotnet 645374ace1c8bbeb07aac743552acc62bbb2c34b - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 4b12ce96553c32c1038bf81176b98a79994d6967 - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 4b12ce96553c32c1038bf81176b98a79994d6967 https://github.com/dotnet/dotnet From 19a1789f6b2641b6f7439e97447db866aedcf38b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 2 Apr 2026 02:05:03 +0000 Subject: [PATCH 080/230] Update dependencies from https://github.com/microsoft/testfx build 20260401.3 On relative base path root Microsoft.Testing.Platform From Version 2.2.1-preview.26180.5 -> To Version 2.2.1-preview.26201.3 MSTest From Version 4.2.1-preview.26180.5 -> To Version 4.2.1-preview.26201.3 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index bcffdc1c7854..a29cc1275c97 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 - 2.2.1-preview.26180.5 - 4.2.1-preview.26180.5 + 2.2.1-preview.26201.3 + 4.2.1-preview.26201.3 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 6a9fbed43b25..1f812db7307d 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -560,13 +560,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 4b12ce96553c32c1038bf81176b98a79994d6967 - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 4b12ce96553c32c1038bf81176b98a79994d6967 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From 267608f3b5c39fc73b457e3629c2ff204929987d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 04:25:30 +0000 Subject: [PATCH 081/230] Reset files to release/10.0.3xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 1 - eng/Version.Details.props | 274 ++++----- eng/Version.Details.xml | 551 +++++++++--------- eng/common/core-templates/job/onelocbuild.yml | 4 +- .../job/publish-build-assets.yml | 4 +- .../core-templates/post-build/post-build.yml | 16 +- .../variables/pool-providers.yml | 2 +- .../templates/variables/pool-providers.yml | 2 +- global.json | 6 +- 9 files changed, 439 insertions(+), 421 deletions(-) diff --git a/NuGet.config b/NuGet.config index 9c862cf686ff..f3f728c95515 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,6 @@ - diff --git a/eng/Version.Details.props b/eng/Version.Details.props index c21415fe4d95..b906b3246197 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,145 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.0-preview.26201.103 - 10.0.4 - 10.0.4 - 18.3.3 - 18.3.3-servicing-26201-103 - 7.3.0-rc.20203 - 10.0.202 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 10.0.0-preview.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 2.0.0-preview.1.26119.110 - 2.2.4 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 15.2.202-servicing.26201.103 - 10.0.4 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-preview.26181.114 + 10.0.5 + 10.0.5 + 18.6.0-preview-26181-114 + 18.6.0-preview-26181-114 + 7.6.0-rc.18214 + 10.0.300-alpha.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 10.0.0-preview.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 2.0.0-preview.1.26153.111 + 2.2.5 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-beta.26181.114 + 10.0.0-beta.26181.114 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 15.2.300-servicing.26181.114 + 10.0.5 + 5.6.0-2.26181.114 + 5.6.0-2.26181.114 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26201.103 - 10.0.4-servicing.26119.110 - 18.3.0-release-26201-103 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26201.103 - 10.0.202 - 10.0.202-servicing.26201.103 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26201.103 - 18.3.0-release-26201-103 - 18.3.0-release-26201-103 - 3.2.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 10.0.4 - 2.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 + 10.0.0-preview.26181.114 + 10.0.5-servicing.26153.111 + 18.3.0-release-26181-114 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.300-alpha.26181.114 + 10.0.300-alpha.26181.114 + 10.0.300-alpha.26181.114 + 10.0.300-alpha.26181.114 + 10.0.300-alpha.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 10.0.300-preview.26181.114 + 18.3.0-release-26181-114 + 18.3.0-release-26181-114 + 3.2.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 7.6.0-rc.18214 + 10.0.5 + 2.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 - 2.2.1-preview.26180.5 - 4.2.1-preview.26180.5 + 2.1.0-preview.25571.1 + 4.1.0-preview.25571.1 @@ -190,6 +193,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion) $(MicrosoftDeploymentDotNetReleasesPackageVersion) $(MicrosoftDiaSymReaderPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) @@ -201,9 +205,11 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) $(MicrosoftExtensionsDependencyModelPackageVersion) $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 04a422f4cd4f..7414e8a5ca1e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 @@ -68,170 +68,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + + + https://github.com/dotnet/dotnet + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 + + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 9e81c6a776124fa0edef3e69dfd96bf9775a8231 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index c5788829a872..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index b955fac6e13f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -74,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index b942a79ef02d..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -120,7 +120,7 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng @@ -164,14 +164,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -225,14 +225,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -286,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/global.json b/global.json index 9c08fe17131e..fb2fbc7b6528 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.201", + "dotnet": "10.0.105", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26201.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26201.103", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26181.114", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26181.114", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 6a69913bbf308d26eb2c1c634d1460fe6bc16456 Mon Sep 17 00:00:00 2001 From: "Donna Chen (BEYONDSOFT CONSULTING INC)" Date: Thu, 2 Apr 2026 14:36:02 +0800 Subject: [PATCH 082/230] Update MTP help snapshot to include stdout/stderr options --- .../MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/dotnet.Tests/CommandTests/Test/snapshots/MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt b/test/dotnet.Tests/CommandTests/Test/snapshots/MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt index 9e788f97f5c9..7245366a7906 100644 --- a/test/dotnet.Tests/CommandTests/Test/snapshots/MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt +++ b/test/dotnet.Tests/CommandTests/Test/snapshots/MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt @@ -63,4 +63,8 @@ Platform Options: Extension Options: --report-trx Enable generating TRX report - --report-trx-filename The name of the generated TRX report \ No newline at end of file + --report-trx-filename The name of the generated TRX report + --show-stderr Determines when to show captured error output of a test. + Valid values are 'All', 'Failed', 'None'. Default is 'All'. + --show-stdout Determines when to show captured standard output of a test. + Valid values are 'All', 'Failed', 'None'. Default is 'All'. \ No newline at end of file From 817ff5af02b0abd5c91520a20be95fe357eb2138 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 2 Apr 2026 02:04:00 +0000 Subject: [PATCH 083/230] Update dependencies from https://github.com/microsoft/testfx build 20260401.3 On relative base path root Microsoft.Testing.Platform From Version 2.2.1-preview.26180.5 -> To Version 2.2.1-preview.26201.3 MSTest From Version 4.2.1-preview.26180.5 -> To Version 4.2.1-preview.26201.3 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index c21415fe4d95..9b819db01096 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 - 2.2.1-preview.26180.5 - 4.2.1-preview.26180.5 + 2.2.1-preview.26201.3 + 4.2.1-preview.26201.3 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 04a422f4cd4f..a419825ec2fa 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -560,13 +560,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 4b12ce96553c32c1038bf81176b98a79994d6967 - + https://github.com/microsoft/testfx - f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 + 4b12ce96553c32c1038bf81176b98a79994d6967 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From d4ad376a39cff96c16049b8c23af342f7578495f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 06:31:08 +0000 Subject: [PATCH 084/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 9b819db01096..c21415fe4d95 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 - 2.2.1-preview.26201.3 - 4.2.1-preview.26201.3 + 2.2.1-preview.26180.5 + 4.2.1-preview.26180.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a419825ec2fa..04a422f4cd4f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -560,13 +560,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + f8dc21bde0c93918c9847361eb3bf41a9ed3d5f2 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From 7a2dde8d2363530a294e48a1ef33202144f916ea Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 2 Apr 2026 16:10:29 +0000 Subject: [PATCH 085/230] Update dependencies from build 308997 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26201.103 -> 10.0.0-preview.26202.103) Microsoft.Build (Version 18.3.3 -> 18.3.3) Microsoft.Build.Localization (Version 18.3.3-servicing-26201-103 -> 18.3.3-servicing-26202-103) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.3.0-rc.20203 -> 7.3.0-rc.20303) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.202 -> 10.0.202) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.3.0-2.26201.103 -> 5.3.0-2.26202.103) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26201.103 -> 10.0.0-beta.26202.103) Microsoft.FSharp.Compiler (Version 15.2.202-servicing.26201.103 -> 15.2.202-servicing.26202.103) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26201-103 -> 18.3.0-release-26202-103) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.202-servicing.26201.103 -> 10.0.202-servicing.26202.103) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 96 ++++---- eng/Version.Details.xml | 220 +++++++++--------- eng/common/core-templates/job/onelocbuild.yml | 4 +- .../job/publish-build-assets.yml | 4 +- .../core-templates/post-build/post-build.yml | 16 +- .../variables/pool-providers.yml | 2 +- .../templates/variables/pool-providers.yml | 2 +- global.json | 4 +- 9 files changed, 175 insertions(+), 175 deletions(-) diff --git a/NuGet.config b/NuGet.config index 9c862cf686ff..903609549285 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index c21415fe4d95..2c894263688d 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,37 +30,37 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4-servicing.26119.110 10.0.4-servicing.26119.110 - 10.0.0-preview.26201.103 + 10.0.0-preview.26202.103 10.0.4 10.0.4 18.3.3 - 18.3.3-servicing-26201-103 - 7.3.0-rc.20203 + 18.3.3-servicing-26202-103 + 7.3.0-rc.20303 10.0.202 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 10.0.0-preview.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.0-preview.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 2.0.0-preview.1.26119.110 2.2.4 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 10.0.4 10.0.4 10.0.4-servicing.26119.110 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 10.0.4 10.0.4 10.0.4 @@ -70,17 +70,17 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 10.0.4 - 15.2.202-servicing.26201.103 + 15.2.202-servicing.26202.103 10.0.4 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 10.0.4-servicing.26119.110 10.0.4 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26201.103 + 10.0.0-preview.26202.103 10.0.4-servicing.26119.110 - 18.3.0-release-26201-103 + 18.3.0-release-26202-103 10.0.4 10.0.4-servicing.26119.110 10.0.202 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.202 10.0.202 10.0.202 - 10.0.202-servicing.26201.103 + 10.0.202-servicing.26202.103 10.0.202 - 10.0.202-servicing.26201.103 + 10.0.202-servicing.26202.103 10.0.202 10.0.202 - 10.0.202-servicing.26201.103 - 18.3.0-release-26201-103 - 18.3.0-release-26201-103 + 10.0.202-servicing.26202.103 + 18.3.0-release-26202-103 + 18.3.0-release-26202-103 3.2.4 10.0.4 10.0.4-servicing.26119.110 10.0.4 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 10.0.4 2.0.4 10.0.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 04a422f4cd4f..cf281438cf1e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -74,136 +74,136 @@ https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -370,25 +370,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -407,27 +407,27 @@ https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f @@ -514,9 +514,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -524,37 +524,37 @@ - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 0c538445912b51b36242aac75dd5e81265bbe37f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index c5788829a872..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index b955fac6e13f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -74,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index b942a79ef02d..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -120,7 +120,7 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng @@ -164,14 +164,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -225,14 +225,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -286,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/global.json b/global.json index 9c08fe17131e..0552121a41ea 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26201.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26201.103", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26202.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26202.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 8d3f653826d7ca0cf75d3b5781f4930d7c21fbaa Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 2 Apr 2026 13:16:02 -0500 Subject: [PATCH 086/230] [dotnet watch] Fix target framework selector being stuck (#53675) Testing `dotnet-watch` end-to end on a `dotnet new maui` project... I found the Spectre.Console input was just "stuck", neither up/down arrows or typing to search did anything! `PhysicalConsole` runs `Console.ReadKey()` in a tight background loop, consuming all key presses and dispatching them via the `KeyPressed` event. When `SpectreBuildParametersSelectionPrompt` returned `AnsiConsole.Console` for non-redirected stdin, Spectre.Console would also call `Console.ReadKey()` internally, creating a race where `PhysicalConsole` steals every key press and the selection prompt appears completely stuck (arrow keys, typing, and search all do nothing). Fix by always using `KeyPressedAnsiConsole`, which reads keys from `PhysicalConsole.KeyPressed` events instead of competing for `Console.ReadKey()`. This ensures a single key reader (`PhysicalConsole`) distributes keys to all consumers including Spectre.Console. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../UI/SpectreBuildParametersSelectionPrompt.cs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Dotnet.Watch/dotnet-watch/UI/SpectreBuildParametersSelectionPrompt.cs b/src/Dotnet.Watch/dotnet-watch/UI/SpectreBuildParametersSelectionPrompt.cs index 7119266ef65b..6ad7c6e35c86 100644 --- a/src/Dotnet.Watch/dotnet-watch/UI/SpectreBuildParametersSelectionPrompt.cs +++ b/src/Dotnet.Watch/dotnet-watch/UI/SpectreBuildParametersSelectionPrompt.cs @@ -74,15 +74,10 @@ internal static string FormatDevice(DeviceInfo device) private static IAnsiConsole CreateConsole(IConsole watchConsole) { - if (!Console.IsInputRedirected) - { - return AnsiConsole.Console; - } - - // When stdin is redirected (e.g. in integration tests), Spectre.Console detects - // non-interactive mode and refuses to prompt. Create a console with forced - // interactivity that reads keys from IConsole.KeyPressed (fed by - // PhysicalConsole.ListenToStandardInputAsync). + // Always read keys from IConsole.KeyPressed (fed by PhysicalConsole) instead of + // letting Spectre.Console call Console.ReadKey() directly. PhysicalConsole already + // owns the Console.ReadKey() loop, so a second reader would race with it and never + // receive any key presses, making the selection prompt appear stuck. var ansiConsole = AnsiConsole.Create(new AnsiConsoleSettings { Ansi = AnsiSupport.Yes, From 0e77baecb8805431648a1a2033846ce40eca61f4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 18:50:20 +0000 Subject: [PATCH 087/230] Reset files to release/10.0.3xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 1 - eng/Version.Details.props | 274 ++++----- eng/Version.Details.xml | 551 +++++++++--------- eng/common/core-templates/job/onelocbuild.yml | 4 +- .../job/publish-build-assets.yml | 4 +- .../core-templates/post-build/post-build.yml | 16 +- .../variables/pool-providers.yml | 2 +- .../templates/variables/pool-providers.yml | 2 +- global.json | 6 +- 9 files changed, 439 insertions(+), 421 deletions(-) diff --git a/NuGet.config b/NuGet.config index 9c862cf686ff..f3f728c95515 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,6 @@ - diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 9b819db01096..1cae23ee41c3 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,145 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.0-preview.26201.103 - 10.0.4 - 10.0.4 - 18.3.3 - 18.3.3-servicing-26201-103 - 7.3.0-rc.20203 - 10.0.202 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 10.0.0-preview.26201.103 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 2.0.0-preview.1.26119.110 - 2.2.4 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.0-beta.26201.103 - 10.0.0-beta.26201.103 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 15.2.202-servicing.26201.103 - 10.0.4 - 5.3.0-2.26201.103 - 5.3.0-2.26201.103 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-preview.26201.115 + 10.0.5 + 10.0.5 + 18.6.0-preview-26201-115 + 18.6.0-preview-26201-115 + 7.6.0-rc.20215 + 10.0.300-alpha.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 10.0.0-preview.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 2.0.0-preview.1.26153.111 + 2.2.5 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-beta.26201.115 + 10.0.0-beta.26201.115 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 15.2.300-servicing.26201.115 + 10.0.5 + 5.7.0-1.26201.115 + 5.7.0-1.26201.115 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26201.103 - 10.0.4-servicing.26119.110 - 18.3.0-release-26201-103 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26201.103 - 10.0.202 - 10.0.202-servicing.26201.103 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26201.103 - 18.3.0-release-26201-103 - 18.3.0-release-26201-103 - 3.2.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 7.3.0-rc.20203 - 10.0.4 - 2.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 + 10.0.0-preview.26201.115 + 10.0.5-servicing.26153.111 + 18.3.0-release-26201-115 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.300-alpha.26201.115 + 10.0.300-alpha.26201.115 + 10.0.300-alpha.26201.115 + 10.0.300-alpha.26201.115 + 10.0.300-alpha.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 10.0.300-preview.26201.115 + 18.3.0-release-26201-115 + 18.3.0-release-26201-115 + 3.2.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 7.6.0-rc.20215 + 10.0.5 + 2.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 - 2.2.1-preview.26201.3 - 4.2.1-preview.26201.3 + 2.1.0-preview.25571.1 + 4.1.0-preview.25571.1 @@ -190,6 +193,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion) $(MicrosoftDeploymentDotNetReleasesPackageVersion) $(MicrosoftDiaSymReaderPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) @@ -201,9 +205,11 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) $(MicrosoftExtensionsDependencyModelPackageVersion) $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a419825ec2fa..56e7b7fa356a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 @@ -68,170 +68,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + + + https://github.com/dotnet/dotnet + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 + + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://github.com/dotnet/dotnet - bedfad885dfe093ebb122a44e74133e192fa34d0 + 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index c5788829a872..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index b955fac6e13f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -74,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index b942a79ef02d..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -120,7 +120,7 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng @@ -164,14 +164,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -225,14 +225,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -286,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/global.json b/global.json index 9c08fe17131e..be9322509d64 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.201", + "dotnet": "10.0.105", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26201.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26201.103", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26201.115", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26201.115", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From f3b759a5ab58422d09ab64b147e1baa69318ffd4 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Thu, 2 Apr 2026 16:02:02 -0700 Subject: [PATCH 088/230] Add new package source for dotnet-dotnet --- NuGet.config | 1 + 1 file changed, 1 insertion(+) diff --git a/NuGet.config b/NuGet.config index 0c7505bf1ba0..4950d4c01bdc 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,6 +4,7 @@ + From 5a4ab0d76da7c5bbb43fd893b44d5ff8f58f5275 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 00:47:50 +0000 Subject: [PATCH 089/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 266 +++++++-------- eng/Version.Details.xml | 673 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 475 insertions(+), 474 deletions(-) diff --git a/NuGet.config b/NuGet.config index 4950d4c01bdc..9c862cf686ff 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 0fe4aaebb82f..9b819db01096 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,139 +8,139 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 - 10.0.6 - 10.0.6-servicing.26177.110 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26177.110 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26177.110 - 10.0.6 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 - 10.0.0-preview.26177.110 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26177-110 - 7.0.2-rc.17810 - 10.0.106 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 10.0.0-preview.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 2.0.0-preview.1.26177.110 - 2.2.6 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26177.110 - 10.0.6 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 10.0.6-servicing.26177.110 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26201.103 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26201-103 + 7.3.0-rc.20203 + 10.0.202 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 10.0.0-preview.26201.103 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26201.103 + 10.0.0-beta.26201.103 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26201.103 + 10.0.4 + 5.3.0-2.26201.103 + 5.3.0-2.26201.103 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26177.110 - 10.0.6-servicing.26177.110 - 18.0.2-release-26177-110 - 10.0.6 - 10.0.6-servicing.26177.110 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26177.110 - 10.0.106 - 10.0.106-servicing.26177.110 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26177.110 - 18.0.2-release-26177-110 - 18.0.2-release-26177-110 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26177.110 - 10.0.6 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26201.103 + 10.0.4-servicing.26119.110 + 18.3.0-release-26201-103 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26201.103 + 10.0.202 + 10.0.202-servicing.26201.103 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26201.103 + 18.3.0-release-26201-103 + 18.3.0-release-26201-103 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 7.3.0-rc.20203 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 2.2.1-preview.26201.3 4.2.1-preview.26201.3 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 778daf5c201f..a419825ec2fa 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + bedfad885dfe093ebb122a44e74133e192fa34d0 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 https://github.com/microsoft/testfx @@ -569,9 +568,9 @@ https://github.com/microsoft/testfx 4b12ce96553c32c1038bf81176b98a79994d6967 - - https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 97e18dab0241..9c08fe17131e 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26177.110", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26177.110", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26201.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26201.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 8be57555cd38a209e64e86d57da14b6b151ad864 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 3 Apr 2026 02:04:06 +0000 Subject: [PATCH 090/230] Update dependencies from https://github.com/microsoft/testfx build 20260402.5 On relative base path root Microsoft.Testing.Platform From Version 2.2.1-preview.26201.3 -> To Version 2.3.0-preview.26202.5 MSTest From Version 4.2.1-preview.26201.3 -> To Version 4.3.0-preview.26202.5 --- NuGet.config | 2 +- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/NuGet.config b/NuGet.config index 4950d4c01bdc..345e68b146c5 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 0fe4aaebb82f..5696f7b49e9c 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 - 2.2.1-preview.26201.3 - 4.2.1-preview.26201.3 + 2.3.0-preview.26202.5 + 4.3.0-preview.26202.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 778daf5c201f..e30d6335ee61 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -561,13 +561,13 @@ https://github.com/dotnet/dotnet 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 https://github.com/dotnet/dotnet From f228ec1fadbe95b61f5deea3a8e8d81785f5c472 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 3 Apr 2026 02:04:20 +0000 Subject: [PATCH 091/230] Update dependencies from https://github.com/microsoft/testfx build 20260402.5 On relative base path root Microsoft.Testing.Platform From Version 2.2.1-preview.26201.3 -> To Version 2.3.0-preview.26202.5 MSTest From Version 4.2.1-preview.26201.3 -> To Version 4.3.0-preview.26202.5 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 9b819db01096..b659ff349c63 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 - 2.2.1-preview.26201.3 - 4.2.1-preview.26201.3 + 2.3.0-preview.26202.5 + 4.3.0-preview.26202.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a419825ec2fa..98c4d2484670 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -560,13 +560,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From 82b410f121b23ad972e8d32f9553021925299794 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 3 Apr 2026 10:06:33 +0000 Subject: [PATCH 092/230] Update dependencies from build 309086 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26201.115 -> 10.0.0-preview.26202.115) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26201-115 -> 18.6.0-preview-26202-115) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.20215 -> 7.6.0-rc.20315) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26201.115 -> 10.0.300-alpha.26202.115) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.7.0-1.26201.115 -> 5.6.0-2.26202.115) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26201.115 -> 10.0.0-beta.26202.115) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26201.115 -> 15.2.300-servicing.26202.115) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26201-115 -> 18.3.0-release-26202-115) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26201.115 -> 10.0.300-preview.26202.115) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 1cae23ee41c3..a2206a79f514 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26201.115 + 10.0.0-preview.26202.115 10.0.5 10.0.5 - 18.6.0-preview-26201-115 - 18.6.0-preview-26201-115 - 7.6.0-rc.20215 - 10.0.300-alpha.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 10.0.0-preview.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 + 18.6.0-preview-26202-115 + 18.6.0-preview-26202-115 + 7.6.0-rc.20315 + 10.0.300-alpha.26202.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 + 10.0.0-preview.26202.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 + 10.0.0-beta.26202.115 + 10.0.0-beta.26202.115 + 10.0.0-beta.26202.115 + 10.0.0-beta.26202.115 + 10.0.0-beta.26202.115 + 10.0.0-beta.26202.115 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 + 10.0.0-beta.26202.115 + 10.0.0-beta.26202.115 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26201.115 + 15.2.300-servicing.26202.115 10.0.5 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 + 5.6.0-2.26202.115 + 5.6.0-2.26202.115 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26201.115 + 10.0.0-preview.26202.115 10.0.5-servicing.26153.111 - 18.3.0-release-26201-115 + 18.3.0-release-26202-115 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26201.115 - 10.0.300-alpha.26201.115 - 10.0.300-alpha.26201.115 - 10.0.300-alpha.26201.115 - 10.0.300-alpha.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 18.3.0-release-26201-115 - 18.3.0-release-26201-115 + 10.0.300-alpha.26202.115 + 10.0.300-alpha.26202.115 + 10.0.300-alpha.26202.115 + 10.0.300-alpha.26202.115 + 10.0.300-alpha.26202.115 + 10.0.300-preview.26202.115 + 10.0.300-preview.26202.115 + 10.0.300-preview.26202.115 + 10.0.300-preview.26202.115 + 10.0.300-preview.26202.115 + 10.0.300-preview.26202.115 + 10.0.300-preview.26202.115 + 10.0.300-preview.26202.115 + 10.0.300-preview.26202.115 + 18.3.0-release-26202-115 + 18.3.0-release-26202-115 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 + 7.6.0-rc.20315 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 56e7b7fa356a..e547f6a9862e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + ebb056e47019472309f80ec9f344aa8844ddd186 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index be9322509d64..5f70a0f12404 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26201.115", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26201.115", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26202.115", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26202.115", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From c44ea579cd3f0dd932f2186b8fb75b8c755e2843 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Fri, 3 Apr 2026 10:08:27 -0700 Subject: [PATCH 093/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2943136 --- src/Dotnet.Watch/dotnet-watch/xlf/Resources.cs.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.de.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.es.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.fr.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.it.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.ja.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.ko.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.pl.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.pt-BR.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.ru.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.tr.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hans.xlf | 6 +++--- src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hant.xlf | 6 +++--- 13 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.cs.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.cs.xlf index f06aeb552b1d..f10d70160ee3 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.cs.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.cs.xlf @@ -97,7 +97,7 @@ Examples: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + Identifikátor zařízení pro spuštění (například emulátor, simulátor nebo fyzické zařízení) @@ -149,7 +149,7 @@ Examples: Move up and down to reveal more devices - Move up and down to reveal more devices + Posunutím nahoru a dolů zobrazíte další zařízení. @@ -164,7 +164,7 @@ Examples: Select a device to run on: - Select a device to run on: + Vyberte zařízení pro spuštění: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.de.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.de.xlf index 643eacbe4bf0..0da4f1d4ae74 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.de.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.de.xlf @@ -97,7 +97,7 @@ Beispiele: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + Der Gerätebezeichner, auf dem ausgeführt werden soll (z. B. Emulator, Simulator oder physisches Gerät). @@ -149,7 +149,7 @@ Beispiele: Move up and down to reveal more devices - Move up and down to reveal more devices + Nach oben und unten bewegen, um weitere Geräte anzuzeigen @@ -164,7 +164,7 @@ Beispiele: Select a device to run on: - Select a device to run on: + Wählen Sie ein Gerät aus, auf dem ausgeführt werden soll: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.es.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.es.xlf index c1c2adc95b72..951dad323b0d 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.es.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.es.xlf @@ -97,7 +97,7 @@ Ejemplos: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + Identificador de dispositivo en el que se va a ejecutar (por ejemplo, emulador, simulador o dispositivo físico). @@ -149,7 +149,7 @@ Ejemplos: Move up and down to reveal more devices - Move up and down to reveal more devices + Subir y bajar para mostrar más dispositivos @@ -164,7 +164,7 @@ Ejemplos: Select a device to run on: - Select a device to run on: + Seleccione un dispositivo en el que se ejecutará: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.fr.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.fr.xlf index c379df1f5d20..43191ac6d6ac 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.fr.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.fr.xlf @@ -97,7 +97,7 @@ Exemples : The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + Identificateur de l’appareil sur lequel effectuer une exécution (par exemple, émulateur, simulateur ou appareil physique) @@ -149,7 +149,7 @@ Exemples : Move up and down to reveal more devices - Move up and down to reveal more devices + Montez et descendez pour afficher plus d’appareils @@ -164,7 +164,7 @@ Exemples : Select a device to run on: - Select a device to run on: + Sélectionnez un appareil sur lequel exécuter : diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.it.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.it.xlf index 4510f1cb2753..23f2c34d4240 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.it.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.it.xlf @@ -97,7 +97,7 @@ Esempi: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + Identificatore del dispositivo su cui eseguire l'operazione (ad es. emulatore, simulatore o dispositivo fisico). @@ -149,7 +149,7 @@ Esempi: Move up and down to reveal more devices - Move up and down to reveal more devices + Scorri verso l'alto o verso il basso per visualizzare altri dispositivi @@ -164,7 +164,7 @@ Esempi: Select a device to run on: - Select a device to run on: + Selezionare un dispositivo in cui eseguire: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ja.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ja.xlf index b2f96c858610..5474128bd40d 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ja.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ja.xlf @@ -97,7 +97,7 @@ Examples: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + 実行するデバイス識別子 (エミュレーター、シミュレーター、物理デバイスなど)。 @@ -149,7 +149,7 @@ Examples: Move up and down to reveal more devices - Move up and down to reveal more devices + 上下に移動すると、さらに多くのデバイスを表示できます @@ -164,7 +164,7 @@ Examples: Select a device to run on: - Select a device to run on: + 実行するデバイスを選択します。 diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ko.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ko.xlf index 3c3a704d8771..a76cc7864e9e 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ko.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ko.xlf @@ -97,7 +97,7 @@ Examples: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + 실행할 디바이스 식별자(예: 에뮬레이터, 시뮬레이터 또는 물리적 디바이스)입니다. @@ -149,7 +149,7 @@ Examples: Move up and down to reveal more devices - Move up and down to reveal more devices + 위아래로 이동하여 더 많은 장치 보기 @@ -164,7 +164,7 @@ Examples: Select a device to run on: - Select a device to run on: + 실행할 장치 선택: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pl.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pl.xlf index 9485c3e73f08..b51db4ff6528 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pl.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pl.xlf @@ -97,7 +97,7 @@ Przykłady: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + Identyfikator urządzenia do uruchomienia (np. emulator, symulator lub urządzenie fizyczne). @@ -149,7 +149,7 @@ Przykłady: Move up and down to reveal more devices - Move up and down to reveal more devices + Przesuń w górę i w dół, aby odkryć więcej urządzeń @@ -164,7 +164,7 @@ Przykłady: Select a device to run on: - Select a device to run on: + Wybierz urządzenie do uruchomienia: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pt-BR.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pt-BR.xlf index 23b7b384d57d..cc40ef9740d3 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pt-BR.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.pt-BR.xlf @@ -97,7 +97,7 @@ Exemplos: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + O identificador de dispositivo no qual executar (por exemplo, emulador, simulador ou dispositivo físico). @@ -149,7 +149,7 @@ Exemplos: Move up and down to reveal more devices - Move up and down to reveal more devices + Mover para cima e para baixo para revelar mais dispositivos @@ -164,7 +164,7 @@ Exemplos: Select a device to run on: - Select a device to run on: + Selecione um dispositivo no qual executar: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ru.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ru.xlf index db2a5678d77f..998b18468708 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ru.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.ru.xlf @@ -97,7 +97,7 @@ Examples: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + Идентификатор устройства (например, эмулятора, симулятора или физического устройства), на котором будет выполнен запуск. @@ -149,7 +149,7 @@ Examples: Move up and down to reveal more devices - Move up and down to reveal more devices + Прокрутите вверх и вниз, чтобы увидеть большее количество устройств @@ -164,7 +164,7 @@ Examples: Select a device to run on: - Select a device to run on: + Выберите устройство, на котором следует произвести запуск: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.tr.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.tr.xlf index 62d1c81aa127..fc441b9e6d3e 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.tr.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.tr.xlf @@ -97,7 +97,7 @@ Açıklamalar: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + Çalıştırılacak cihaz tanımlayıcısı (örneğin emülatör, simülatör veya fiziksel cihaz). @@ -149,7 +149,7 @@ Açıklamalar: Move up and down to reveal more devices - Move up and down to reveal more devices + Yukarı ve aşağı hareket ederek daha fazla cihaz görüntüleyin @@ -164,7 +164,7 @@ Açıklamalar: Select a device to run on: - Select a device to run on: + Çalıştırılacak cihazı seçin: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hans.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hans.xlf index 6f0a97b938bb..d6e0e639cbc9 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hans.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hans.xlf @@ -98,7 +98,7 @@ Examples: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + 要在其上运行的设备标识符(例如仿真器、模拟器或物理设备)。 @@ -150,7 +150,7 @@ Examples: Move up and down to reveal more devices - Move up and down to reveal more devices + 上下移动以显示更多设备 @@ -165,7 +165,7 @@ Examples: Select a device to run on: - Select a device to run on: + 选择运行设备: diff --git a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hant.xlf b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hant.xlf index f31ba66d99d2..ae4b67e8d1cd 100644 --- a/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hant.xlf +++ b/src/Dotnet.Watch/dotnet-watch/xlf/Resources.zh-Hant.xlf @@ -97,7 +97,7 @@ Examples: The device identifier to run on (e.g. emulator, simulator, or physical device). - The device identifier to run on (e.g. emulator, simulator, or physical device). + 要執行的裝置識別碼 (例如仿真器、模擬器或實體裝置)。 @@ -149,7 +149,7 @@ Examples: Move up and down to reveal more devices - Move up and down to reveal more devices + 上下移動以顯示更多的裝置 @@ -164,7 +164,7 @@ Examples: Select a device to run on: - Select a device to run on: + 選取要在下列位置執行的裝置: From 0a70ab2bcdc57eb3734adde030c9faf2e76bc90f Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 3 Apr 2026 21:15:35 +0000 Subject: [PATCH 094/230] Update dependencies from build 309163 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26202.115 -> 10.0.0-preview.26203.103) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26202-115 -> 18.6.0-preview-26203-103) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.20315 -> 7.6.0-rc.20403) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26202.115 -> 10.0.300-alpha.26203.103) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26202.115 -> 5.6.0-2.26203.103) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26202.115 -> 10.0.0-beta.26203.103) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26202.115 -> 15.2.300-servicing.26203.103) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26202-115 -> 18.3.0-release-26203-103) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26202.115 -> 10.0.300-preview.26203.103) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index a2206a79f514..491dc26a99e9 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26202.115 + 10.0.0-preview.26203.103 10.0.5 10.0.5 - 18.6.0-preview-26202-115 - 18.6.0-preview-26202-115 - 7.6.0-rc.20315 - 10.0.300-alpha.26202.115 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 - 10.0.0-preview.26202.115 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 + 18.6.0-preview-26203-103 + 18.6.0-preview-26203-103 + 7.6.0-rc.20403 + 10.0.300-alpha.26203.103 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 + 10.0.0-preview.26203.103 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26202.115 - 10.0.0-beta.26202.115 - 10.0.0-beta.26202.115 - 10.0.0-beta.26202.115 - 10.0.0-beta.26202.115 - 10.0.0-beta.26202.115 + 10.0.0-beta.26203.103 + 10.0.0-beta.26203.103 + 10.0.0-beta.26203.103 + 10.0.0-beta.26203.103 + 10.0.0-beta.26203.103 + 10.0.0-beta.26203.103 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26202.115 - 10.0.0-beta.26202.115 + 10.0.0-beta.26203.103 + 10.0.0-beta.26203.103 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26202.115 + 15.2.300-servicing.26203.103 10.0.5 - 5.6.0-2.26202.115 - 5.6.0-2.26202.115 + 5.6.0-2.26203.103 + 5.6.0-2.26203.103 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26202.115 + 10.0.0-preview.26203.103 10.0.5-servicing.26153.111 - 18.3.0-release-26202-115 + 18.3.0-release-26203-103 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26202.115 - 10.0.300-alpha.26202.115 - 10.0.300-alpha.26202.115 - 10.0.300-alpha.26202.115 - 10.0.300-alpha.26202.115 - 10.0.300-preview.26202.115 - 10.0.300-preview.26202.115 - 10.0.300-preview.26202.115 - 10.0.300-preview.26202.115 - 10.0.300-preview.26202.115 - 10.0.300-preview.26202.115 - 10.0.300-preview.26202.115 - 10.0.300-preview.26202.115 - 10.0.300-preview.26202.115 - 18.3.0-release-26202-115 - 18.3.0-release-26202-115 + 10.0.300-alpha.26203.103 + 10.0.300-alpha.26203.103 + 10.0.300-alpha.26203.103 + 10.0.300-alpha.26203.103 + 10.0.300-alpha.26203.103 + 10.0.300-preview.26203.103 + 10.0.300-preview.26203.103 + 10.0.300-preview.26203.103 + 10.0.300-preview.26203.103 + 10.0.300-preview.26203.103 + 10.0.300-preview.26203.103 + 10.0.300-preview.26203.103 + 10.0.300-preview.26203.103 + 10.0.300-preview.26203.103 + 18.3.0-release-26203-103 + 18.3.0-release-26203-103 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 - 7.6.0-rc.20315 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 + 7.6.0-rc.20403 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e547f6a9862e..2c121a919b78 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd - + https://github.com/dotnet/dotnet - ebb056e47019472309f80ec9f344aa8844ddd186 + 82cc23e8bf849c3b4dfbe21d337d22929903f6fd https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 5f70a0f12404..d904258e86c7 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26202.115", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26202.115", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From e47d48bb219a2a5fa47354f8ce920b44711e14f7 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 4 Apr 2026 00:25:41 +0000 Subject: [PATCH 095/230] Update dependencies from build 309184 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26203.103 -> 10.0.0-preview.26203.106) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26203-103 -> 18.6.0-preview-26203-106) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.20403 -> 7.6.0-rc.20406) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26203.103 -> 10.0.300-alpha.26203.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26203.103 -> 5.6.0-2.26203.106) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26203.103 -> 10.0.0-beta.26203.106) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26203.103 -> 15.2.300-servicing.26203.106) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26203-103 -> 18.3.0-release-26203-106) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26203.103 -> 10.0.300-preview.26203.106) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 491dc26a99e9..40b8f31a30ed 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26203.103 + 10.0.0-preview.26203.106 10.0.5 10.0.5 - 18.6.0-preview-26203-103 - 18.6.0-preview-26203-103 - 7.6.0-rc.20403 - 10.0.300-alpha.26203.103 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 - 10.0.0-preview.26203.103 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 + 18.6.0-preview-26203-106 + 18.6.0-preview-26203-106 + 7.6.0-rc.20406 + 10.0.300-alpha.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 10.0.0-preview.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26203.103 - 10.0.0-beta.26203.103 - 10.0.0-beta.26203.103 - 10.0.0-beta.26203.103 - 10.0.0-beta.26203.103 - 10.0.0-beta.26203.103 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26203.103 - 10.0.0-beta.26203.103 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26203.103 + 15.2.300-servicing.26203.106 10.0.5 - 5.6.0-2.26203.103 - 5.6.0-2.26203.103 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26203.103 + 10.0.0-preview.26203.106 10.0.5-servicing.26153.111 - 18.3.0-release-26203-103 + 18.3.0-release-26203-106 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26203.103 - 10.0.300-alpha.26203.103 - 10.0.300-alpha.26203.103 - 10.0.300-alpha.26203.103 - 10.0.300-alpha.26203.103 - 10.0.300-preview.26203.103 - 10.0.300-preview.26203.103 - 10.0.300-preview.26203.103 - 10.0.300-preview.26203.103 - 10.0.300-preview.26203.103 - 10.0.300-preview.26203.103 - 10.0.300-preview.26203.103 - 10.0.300-preview.26203.103 - 10.0.300-preview.26203.103 - 18.3.0-release-26203-103 - 18.3.0-release-26203-103 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 18.3.0-release-26203-106 + 18.3.0-release-26203-106 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 - 7.6.0-rc.20403 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 2c121a919b78..d144b971620b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 82cc23e8bf849c3b4dfbe21d337d22929903f6fd + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index d904258e86c7..8fafeae1ec8a 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.103", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.106", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.106", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 7da796b0236b97c74c854bcaa16c5755a6181f94 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 4 Apr 2026 02:05:04 +0000 Subject: [PATCH 096/230] Update dependencies from https://github.com/microsoft/testfx build 20260403.1 On relative base path root Microsoft.Testing.Platform From Version 2.3.0-preview.26202.5 -> To Version 2.3.0-preview.26203.1 MSTest From Version 4.3.0-preview.26202.5 -> To Version 4.3.0-preview.26203.1 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 5696f7b49e9c..672fad5a5892 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 - 2.3.0-preview.26202.5 - 4.3.0-preview.26202.5 + 2.3.0-preview.26203.1 + 4.3.0-preview.26203.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e30d6335ee61..3f404c44b161 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -561,13 +561,13 @@ https://github.com/dotnet/dotnet 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/microsoft/testfx - cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + d87a52f4bfbce16e059acfe31c166827a39654ca - + https://github.com/microsoft/testfx - cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + d87a52f4bfbce16e059acfe31c166827a39654ca https://github.com/dotnet/dotnet From a33d85e119608e7236e827345ba9d90fc11c3720 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 4 Apr 2026 06:35:47 +0000 Subject: [PATCH 097/230] Update dependencies from build 309217 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.6-servicing.26177.110 -> 10.0.6-servicing.26203.109) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.6 -> 10.0.6) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26177.110 -> 10.0.0-preview.26203.109) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26177-110 -> 18.0.11-servicing-26203-109) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.17810 -> 7.0.2-rc.20409) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.106 -> 10.0.106) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26177.110 -> 5.0.0-2.26203.109) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26177.110 -> 2.0.0-preview.1.26203.109) Microsoft.DiaSymReader (Version 2.2.6 -> 2.2.6) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26177.110 -> 10.0.0-beta.26203.109) Microsoft.FSharp.Compiler (Version 14.0.106-servicing.26177.110 -> 14.0.106-servicing.26203.109) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26177-110 -> 18.0.2-release-26203-109) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.106-servicing.26177.110 -> 10.0.106-servicing.26203.109) Microsoft.Web.Xdt (Version 3.2.6 -> 3.2.6) System.CommandLine (Version 2.0.6 -> 2.0.6) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 126 +++--- eng/Version.Details.xml | 392 +++++++++--------- eng/common/core-templates/job/onelocbuild.yml | 4 +- .../job/publish-build-assets.yml | 4 +- .../core-templates/post-build/post-build.yml | 16 +- .../variables/pool-providers.yml | 2 +- .../templates/variables/pool-providers.yml | 2 +- global.json | 4 +- 9 files changed, 276 insertions(+), 276 deletions(-) diff --git a/NuGet.config b/NuGet.config index 345e68b146c5..e226baf9b0b6 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 5696f7b49e9c..94492476bae6 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 10.0.6 - 10.0.6-servicing.26177.110 + 10.0.6-servicing.26203.109 10.0.6 10.0.6 10.0.6 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26177.110 + 10.0.6-servicing.26203.109 10.0.6 10.0.6 10.0.6 10.0.6 - 10.0.6-servicing.26177.110 + 10.0.6-servicing.26203.109 10.0.6 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 - 10.0.0-preview.26177.110 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.0-preview.26203.109 10.0.6 10.0.6 18.0.11 - 18.0.11-servicing-26177-110 - 7.0.2-rc.17810 + 18.0.11-servicing-26203-109 + 7.0.2-rc.20409 10.0.106 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 10.0.0-preview.26177.110 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 2.0.0-preview.1.26177.110 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 10.0.0-preview.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 2.0.0-preview.1.26203.109 2.2.6 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 10.0.6 10.0.6 - 10.0.6-servicing.26177.110 - 10.0.6-servicing.26177.110 - 10.0.0-beta.26177.110 - 10.0.0-beta.26177.110 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 10.0.6 10.0.6 10.0.6 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 14.0.106-servicing.26177.110 + 14.0.106-servicing.26203.109 10.0.6 - 5.0.0-2.26177.110 - 5.0.0-2.26177.110 - 10.0.6-servicing.26177.110 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 10.0.6-servicing.26203.109 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26177.110 - 10.0.6-servicing.26177.110 - 18.0.2-release-26177-110 + 10.0.0-preview.26203.109 + 10.0.6-servicing.26203.109 + 18.0.2-release-26203-109 10.0.6 - 10.0.6-servicing.26177.110 + 10.0.6-servicing.26203.109 10.0.106 10.0.106 10.0.106 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.106 10.0.106 10.0.106 - 10.0.106-servicing.26177.110 + 10.0.106-servicing.26203.109 10.0.106 - 10.0.106-servicing.26177.110 + 10.0.106-servicing.26203.109 10.0.106 10.0.106 - 10.0.106-servicing.26177.110 - 18.0.2-release-26177-110 - 18.0.2-release-26177-110 + 10.0.106-servicing.26203.109 + 18.0.2-release-26203-109 + 18.0.2-release-26203-109 3.2.6 10.0.6 - 10.0.6-servicing.26177.110 + 10.0.6-servicing.26203.109 10.0.6 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 - 7.0.2-rc.17810 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e30d6335ee61..3a7cdb3a56c8 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - + https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - 6713f124fc53de19b420be2e0247d8f80868edb2 + 6165bd7ac3499cb712ca489f2ce44bb665174a1a diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index c5788829a872..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index b955fac6e13f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -74,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index b942a79ef02d..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -120,7 +120,7 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng @@ -164,14 +164,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -225,14 +225,14 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) @@ -286,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/global.json b/global.json index 97e18dab0241..6f9207378ac4 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26177.110", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26177.110", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.109", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.109", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 5c4940ec9750e04f9257e0cd8b06f54b5e280844 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sun, 5 Apr 2026 02:03:01 +0000 Subject: [PATCH 098/230] Update dependencies from https://github.com/microsoft/testfx build 20260403.3 On relative base path root Microsoft.Testing.Platform From Version 2.3.0-preview.26202.5 -> To Version 2.3.0-preview.26203.3 MSTest From Version 4.3.0-preview.26202.5 -> To Version 4.3.0-preview.26203.3 --- eng/Version.Details.props | 4 ++-- eng/Version.Details.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 672fad5a5892..f8bea6ed36aa 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -142,8 +142,8 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 - 2.3.0-preview.26203.1 - 4.3.0-preview.26203.1 + 2.3.0-preview.26203.3 + 4.3.0-preview.26203.3 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 3f404c44b161..aae7ae7637f5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -561,13 +561,13 @@ https://github.com/dotnet/dotnet 6713f124fc53de19b420be2e0247d8f80868edb2 - + https://github.com/microsoft/testfx - d87a52f4bfbce16e059acfe31c166827a39654ca + 1ddd2f1a558e9c79b5327c5ccc0e9e89df39d4da - + https://github.com/microsoft/testfx - d87a52f4bfbce16e059acfe31c166827a39654ca + 1ddd2f1a558e9c79b5327c5ccc0e9e89df39d4da https://github.com/dotnet/dotnet From a8dbc31e0975c4f56698a68f1ee990b70a4c96c7 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Mon, 6 Apr 2026 16:05:49 -0700 Subject: [PATCH 099/230] prevent running on forks Co-authored-by: Jeff Handley --- .github/workflows/update-tactics-on-comment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-tactics-on-comment.yml b/.github/workflows/update-tactics-on-comment.yml index fd51e9e9334d..05b0acb742d2 100644 --- a/.github/workflows/update-tactics-on-comment.yml +++ b/.github/workflows/update-tactics-on-comment.yml @@ -16,7 +16,7 @@ env: jobs: authorize: name: Authorize Request - if: github.event.issue.pull_request + if: (!github.event.repository.fork) && (github.event.issue.pull_request) runs-on: ubuntu-latest permissions: contents: read From 625894fcb7d818c8f42a7433803b74c4c89eb625 Mon Sep 17 00:00:00 2001 From: Youssef Victor Date: Tue, 7 Apr 2026 16:37:07 +0200 Subject: [PATCH 100/230] Update Version.Details.props --- eng/Version.Details.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 1cae23ee41c3..0e586b495ffc 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -145,8 +145,8 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 - 2.1.0-preview.25571.1 - 4.1.0-preview.25571.1 + 2.1.0-preview.26201.3 + 4.1.0-preview.26201.3 From 054c2b5172bd9ef469864b571ec6b7f5aaa726cb Mon Sep 17 00:00:00 2001 From: Youssef Victor Date: Tue, 7 Apr 2026 16:37:54 +0200 Subject: [PATCH 101/230] Update Version.Details.xml --- eng/Version.Details.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 56e7b7fa356a..84930a45e4cf 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -573,13 +573,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/microsoft/testfx - 43e592148ac1c7916908477bdffcf2a345affa6d + 4b12ce96553c32c1038bf81176b98a79994d6967 - + https://github.com/microsoft/testfx - 43e592148ac1c7916908477bdffcf2a345affa6d + 4b12ce96553c32c1038bf81176b98a79994d6967 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From 454bc1c26d237a499d07aa64f2cec8b9e3820afd Mon Sep 17 00:00:00 2001 From: vseanreesermsft <78103370+vseanreesermsft@users.noreply.github.com> Date: Tue, 7 Apr 2026 13:28:45 -0700 Subject: [PATCH 102/230] Update branding on release/9.0.3xx --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index 0ed9bb77bdb0..01368d5dccdf 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -6,7 +6,7 @@ 9 0 3 - 13 + 14 From 25847653f98273f87f4dbd34859d82f82cd4e402 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Tue, 7 Apr 2026 14:04:59 -0700 Subject: [PATCH 103/230] Replace tactics workflow with agentic workflow Convert update-tactics-on-comment from a traditional GitHub Actions workflow (.yml) to a GitHub Agentic Workflow (.md + .lock.yml). The agentic workflow uses Copilot to analyze PR context and generate tactics, replacing ~580 lines of JavaScript/YAML with a natural language prompt. Key changes: - Add .md source with YAML frontmatter and AI prompt - Add compiled .lock.yml (generated by gh aw compile) - Remove original .yml workflow - Set target: '*' on update-issue/update-pull-request safe-outputs for issue_comment trigger compatibility - Set add-comment max: 3 to allow status reporting Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../update-tactics-on-comment.lock.yml | 1344 +++++++++++++++++ .../workflows/update-tactics-on-comment.md | 197 +++ .../workflows/update-tactics-on-comment.yml | 581 ------- 3 files changed, 1541 insertions(+), 581 deletions(-) create mode 100644 .github/workflows/update-tactics-on-comment.lock.yml create mode 100644 .github/workflows/update-tactics-on-comment.md delete mode 100644 .github/workflows/update-tactics-on-comment.yml diff --git a/.github/workflows/update-tactics-on-comment.lock.yml b/.github/workflows/update-tactics-on-comment.lock.yml new file mode 100644 index 000000000000..7461b474d267 --- /dev/null +++ b/.github/workflows/update-tactics-on-comment.lock.yml @@ -0,0 +1,1344 @@ +# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"01ad8ca7141fcb9b5808ae6845dd1decef839fbdd9ce6a6719beaf76b40cf482","compiler_version":"v0.67.1","strict":true,"agent_id":"copilot"} +# ___ _ _ +# / _ \ | | (_) +# | |_| | __ _ ___ _ __ | |_ _ ___ +# | _ |/ _` |/ _ \ '_ \| __| |/ __| +# | | | | (_| | __/ | | | |_| | (__ +# \_| |_/\__, |\___|_| |_|\__|_|\___| +# __/ | +# _ _ |___/ +# | | | | / _| | +# | | | | ___ _ __ _ __| |_| | _____ ____ +# | |/\| |/ _ \ '__| |/ /| _| |/ _ \ \ /\ / / ___| +# \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ +# \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ +# +# This file was automatically generated by gh-aw (v0.67.1). DO NOT EDIT. +# +# To update this file, edit the corresponding .md file and run: +# gh aw compile +# Not all edits will cause changes to this file. +# +# For more information: https://github.github.com/gh-aw/introduction/overview/ +# +# +# Secrets used: +# - COPILOT_GITHUB_TOKEN +# - COPILOT_PAT_0 +# - COPILOT_PAT_1 +# - COPILOT_PAT_2 +# - COPILOT_PAT_3 +# - COPILOT_PAT_4 +# - COPILOT_PAT_5 +# - COPILOT_PAT_6 +# - COPILOT_PAT_7 +# - COPILOT_PAT_8 +# - COPILOT_PAT_9 +# - GH_AW_GITHUB_MCP_SERVER_TOKEN +# - GH_AW_GITHUB_TOKEN +# - GITHUB_TOKEN +# +# Custom actions used: +# - actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 +# - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 +# - actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 +# - actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 +# - github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + +name: "Update Tactics On Comment" +"on": + issue_comment: + types: + - created + # steps: # Steps injected into pre-activation job + # - name: Checkout the select-copilot-pat action folder + # uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + # with: + # fetch-depth: 1 + # persist-credentials: false + # sparse-checkout: .github/actions/select-copilot-pat + # sparse-checkout-cone-mode: true + # - env: + # SECRET_0: ${{ secrets.COPILOT_PAT_0 }} + # SECRET_1: ${{ secrets.COPILOT_PAT_1 }} + # SECRET_2: ${{ secrets.COPILOT_PAT_2 }} + # SECRET_3: ${{ secrets.COPILOT_PAT_3 }} + # SECRET_4: ${{ secrets.COPILOT_PAT_4 }} + # SECRET_5: ${{ secrets.COPILOT_PAT_5 }} + # SECRET_6: ${{ secrets.COPILOT_PAT_6 }} + # SECRET_7: ${{ secrets.COPILOT_PAT_7 }} + # SECRET_8: ${{ secrets.COPILOT_PAT_8 }} + # SECRET_9: ${{ secrets.COPILOT_PAT_9 }} + # id: select-copilot-pat + # name: Select Copilot token from pool + # uses: ./.github/actions/select-copilot-pat + +permissions: {} + +concurrency: + group: "gh-aw-${{ github.workflow }}-${{ github.event.issue.number || github.run_id }}" + +run-name: "Update Tactics On Comment" + +jobs: + activation: + needs: pre_activation + if: needs.pre_activation.outputs.activated == 'true' + runs-on: ubuntu-slim + permissions: + contents: read + outputs: + body: ${{ steps.sanitized.outputs.body }} + comment_id: "" + comment_repo: "" + lockdown_check_failed: ${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }} + model: ${{ steps.generate_aw_info.outputs.model }} + secret_verification_result: ${{ steps.validate-secret.outputs.verification_result }} + setup-trace-id: ${{ steps.setup.outputs.trace-id }} + text: ${{ steps.sanitized.outputs.text }} + title: ${{ steps.sanitized.outputs.title }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.pre_activation.outputs.setup-trace-id }} + - name: Generate agentic run info + id: generate_aw_info + env: + GH_AW_INFO_ENGINE_ID: "copilot" + GH_AW_INFO_ENGINE_NAME: "GitHub Copilot CLI" + GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || 'auto' }} + GH_AW_INFO_VERSION: "latest" + GH_AW_INFO_AGENT_VERSION: "latest" + GH_AW_INFO_CLI_VERSION: "v0.67.1" + GH_AW_INFO_WORKFLOW_NAME: "Update Tactics On Comment" + GH_AW_INFO_EXPERIMENTAL: "false" + GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true" + GH_AW_INFO_STAGED: "false" + GH_AW_INFO_ALLOWED_DOMAINS: '["defaults"]' + GH_AW_INFO_FIREWALL_ENABLED: "true" + GH_AW_INFO_AWF_VERSION: "v0.25.13" + GH_AW_INFO_AWMG_VERSION: "" + GH_AW_INFO_FIREWALL_TYPE: "squid" + GH_AW_COMPILED_STRICT: "true" + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs'); + await main(core, context); + - name: Validate COPILOT_GITHUB_TOKEN secret + id: validate-secret + run: ${RUNNER_TEMP}/gh-aw/actions/validate_multi_secret.sh COPILOT_GITHUB_TOKEN 'GitHub Copilot CLI' https://github.github.com/gh-aw/reference/engines/#github-copilot-default + env: + COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} + - name: Checkout .github and .agents folders + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + sparse-checkout: | + .github + .agents + sparse-checkout-cone-mode: true + fetch-depth: 1 + - name: Check workflow lock file + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_WORKFLOW_FILE: "update-tactics-on-comment.lock.yml" + GH_AW_CONTEXT_WORKFLOW_REF: "${{ github.workflow_ref }}" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_workflow_timestamp_api.cjs'); + await main(); + - name: Check compile-agentic version + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_COMPILED_VERSION: "v0.67.1" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_version_updates.cjs'); + await main(); + - name: Compute current body text + id: sanitized + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/compute_text.cjs'); + await main(); + - name: Create prompt with built-in context + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_SAFE_OUTPUTS: ${{ runner.temp }}/gh-aw/safeoutputs/outputs.jsonl + GH_AW_GITHUB_ACTOR: ${{ github.actor }} + GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} + GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} + GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} + GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} + GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} + GH_AW_IS_PR_COMMENT: ${{ github.event.issue.pull_request && 'true' || '' }} + # poutine:ignore untrusted_checkout_exec + run: | + bash ${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh + { + cat << 'GH_AW_PROMPT_f7cb0ab26633bbf6_EOF' + + GH_AW_PROMPT_f7cb0ab26633bbf6_EOF + cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md" + cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md" + cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md" + cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md" + cat << 'GH_AW_PROMPT_f7cb0ab26633bbf6_EOF' + + Tools: add_comment(max:3), update_issue, update_pull_request, add_labels, missing_tool, missing_data, noop + + + The following GitHub context information is available for this workflow: + {{#if __GH_AW_GITHUB_ACTOR__ }} + - **actor**: __GH_AW_GITHUB_ACTOR__ + {{/if}} + {{#if __GH_AW_GITHUB_REPOSITORY__ }} + - **repository**: __GH_AW_GITHUB_REPOSITORY__ + {{/if}} + {{#if __GH_AW_GITHUB_WORKSPACE__ }} + - **workspace**: __GH_AW_GITHUB_WORKSPACE__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ }} + - **issue-number**: #__GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ }} + - **discussion-number**: #__GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ }} + - **pull-request-number**: #__GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ + {{/if}} + {{#if __GH_AW_GITHUB_EVENT_COMMENT_ID__ }} + - **comment-id**: __GH_AW_GITHUB_EVENT_COMMENT_ID__ + {{/if}} + {{#if __GH_AW_GITHUB_RUN_ID__ }} + - **workflow-run-id**: __GH_AW_GITHUB_RUN_ID__ + {{/if}} + + + GH_AW_PROMPT_f7cb0ab26633bbf6_EOF + cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md" + if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then + cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md" + fi + cat << 'GH_AW_PROMPT_f7cb0ab26633bbf6_EOF' + + {{#runtime-import .github/workflows/update-tactics-on-comment.md}} + GH_AW_PROMPT_f7cb0ab26633bbf6_EOF + } > "$GH_AW_PROMPT" + - name: Interpolate variables and render templates + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_GITHUB_ACTOR: ${{ github.actor }} + GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} + GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/interpolate_prompt.cjs'); + await main(); + - name: Substitute placeholders + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_GITHUB_ACTOR: ${{ github.actor }} + GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} + GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }} + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} + GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} + GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} + GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} + GH_AW_IS_PR_COMMENT: ${{ github.event.issue.pull_request && 'true' || '' }} + GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: ${{ needs.pre_activation.outputs.activated }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + + const substitutePlaceholders = require('${{ runner.temp }}/gh-aw/actions/substitute_placeholders.cjs'); + + // Call the substitution function + return await substitutePlaceholders({ + file: process.env.GH_AW_PROMPT, + substitutions: { + GH_AW_GITHUB_ACTOR: process.env.GH_AW_GITHUB_ACTOR, + GH_AW_GITHUB_EVENT_COMMENT_ID: process.env.GH_AW_GITHUB_EVENT_COMMENT_ID, + GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: process.env.GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER, + GH_AW_GITHUB_EVENT_ISSUE_NUMBER: process.env.GH_AW_GITHUB_EVENT_ISSUE_NUMBER, + GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: process.env.GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER, + GH_AW_GITHUB_REPOSITORY: process.env.GH_AW_GITHUB_REPOSITORY, + GH_AW_GITHUB_RUN_ID: process.env.GH_AW_GITHUB_RUN_ID, + GH_AW_GITHUB_WORKSPACE: process.env.GH_AW_GITHUB_WORKSPACE, + GH_AW_IS_PR_COMMENT: process.env.GH_AW_IS_PR_COMMENT, + GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: process.env.GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED + } + }); + - name: Validate prompt placeholders + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + # poutine:ignore untrusted_checkout_exec + run: bash ${RUNNER_TEMP}/gh-aw/actions/validate_prompt_placeholders.sh + - name: Print prompt + env: + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + # poutine:ignore untrusted_checkout_exec + run: bash ${RUNNER_TEMP}/gh-aw/actions/print_prompt_summary.sh + - name: Upload activation artifact + if: success() + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + with: + name: activation + path: | + /tmp/gh-aw/aw_info.json + /tmp/gh-aw/aw-prompts/prompt.txt + /tmp/gh-aw/github_rate_limits.jsonl + if-no-files-found: ignore + retention-days: 1 + + agent: + needs: activation + runs-on: ubuntu-latest + permissions: + contents: read + issues: read + pull-requests: read + env: + DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} + GH_AW_ASSETS_ALLOWED_EXTS: "" + GH_AW_ASSETS_BRANCH: "" + GH_AW_ASSETS_MAX_SIZE_KB: 0 + GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs + GH_AW_WORKFLOW_ID_SANITIZED: updatetacticsoncomment + outputs: + checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }} + effective_tokens: ${{ steps.parse-mcp-gateway.outputs.effective_tokens }} + has_patch: ${{ steps.collect_output.outputs.has_patch }} + inference_access_error: ${{ steps.detect-inference-error.outputs.inference_access_error || 'false' }} + model: ${{ needs.activation.outputs.model }} + output: ${{ steps.collect_output.outputs.output }} + output_types: ${{ steps.collect_output.outputs.output_types }} + setup-trace-id: ${{ steps.setup.outputs.trace-id }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + - name: Set runtime paths + id: set-runtime-paths + run: | + echo "GH_AW_SAFE_OUTPUTS=${RUNNER_TEMP}/gh-aw/safeoutputs/outputs.jsonl" >> "$GITHUB_OUTPUT" + echo "GH_AW_SAFE_OUTPUTS_CONFIG_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" >> "$GITHUB_OUTPUT" + echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json" >> "$GITHUB_OUTPUT" + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - name: Create gh-aw temp directory + run: bash ${RUNNER_TEMP}/gh-aw/actions/create_gh_aw_tmp_dir.sh + - name: Configure gh CLI for GitHub Enterprise + run: bash ${RUNNER_TEMP}/gh-aw/actions/configure_gh_for_ghe.sh + env: + GH_TOKEN: ${{ github.token }} + - name: Configure Git credentials + env: + REPO_NAME: ${{ github.repository }} + SERVER_URL: ${{ github.server_url }} + GITHUB_TOKEN: ${{ github.token }} + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + git config --global am.keepcr true + # Re-authenticate git with GitHub token + SERVER_URL_STRIPPED="${SERVER_URL#https://}" + git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git" + echo "Git configured with standard GitHub Actions identity" + - name: Checkout PR branch + id: checkout-pr + if: | + github.event.pull_request || github.event.issue.pull_request + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + with: + github-token: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/checkout_pr_branch.cjs'); + await main(); + - name: Install GitHub Copilot CLI + run: ${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh latest + env: + GH_HOST: github.com + - name: Install AWF binary + run: bash ${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh v0.25.13 + - name: Determine automatic lockdown mode for GitHub MCP Server + id: determine-automatic-lockdown + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }} + GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }} + with: + script: | + const determineAutomaticLockdown = require('${{ runner.temp }}/gh-aw/actions/determine_automatic_lockdown.cjs'); + await determineAutomaticLockdown(github, context, core); + - name: Download container images + run: bash ${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh ghcr.io/github/gh-aw-firewall/agent:0.25.13 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.13 ghcr.io/github/gh-aw-firewall/squid:0.25.13 ghcr.io/github/gh-aw-mcpg:v0.2.14 ghcr.io/github/github-mcp-server:v0.32.0 node:lts-alpine + - name: Write Safe Outputs Config + run: | + mkdir -p ${RUNNER_TEMP}/gh-aw/safeoutputs + mkdir -p /tmp/gh-aw/safeoutputs + mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs + cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/config.json << 'GH_AW_SAFE_OUTPUTS_CONFIG_4ee15e6ef326cc5e_EOF' + {"add_comment":{"max":3},"add_labels":{},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{},"update_issue":{"allow_body":true,"max":1,"target":"*"},"update_pull_request":{"allow_body":true,"allow_title":true,"max":1,"target":"*"}} + GH_AW_SAFE_OUTPUTS_CONFIG_4ee15e6ef326cc5e_EOF + - name: Write Safe Outputs Tools + run: | + cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/tools_meta.json << 'GH_AW_SAFE_OUTPUTS_TOOLS_META_ded16b126e45dd95_EOF' + { + "description_suffixes": { + "add_comment": " CONSTRAINTS: Maximum 3 comment(s) can be added.", + "update_issue": " CONSTRAINTS: Maximum 1 issue(s) can be updated. Target: *.", + "update_pull_request": " CONSTRAINTS: Maximum 1 pull request(s) can be updated. Target: *." + }, + "repo_params": {}, + "dynamic_tools": [] + } + GH_AW_SAFE_OUTPUTS_TOOLS_META_ded16b126e45dd95_EOF + cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/validation.json << 'GH_AW_SAFE_OUTPUTS_VALIDATION_63b99ee7c6c2a583_EOF' + { + "add_comment": { + "defaultMax": 1, + "fields": { + "body": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "item_number": { + "issueOrPRNumber": true + }, + "repo": { + "type": "string", + "maxLength": 256 + } + } + }, + "add_labels": { + "defaultMax": 5, + "fields": { + "item_number": { + "issueNumberOrTemporaryId": true + }, + "labels": { + "required": true, + "type": "array", + "itemType": "string", + "itemSanitize": true, + "itemMaxLength": 128 + }, + "repo": { + "type": "string", + "maxLength": 256 + } + } + }, + "missing_data": { + "defaultMax": 20, + "fields": { + "alternatives": { + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "context": { + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "data_type": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, + "reason": { + "type": "string", + "sanitize": true, + "maxLength": 256 + } + } + }, + "missing_tool": { + "defaultMax": 20, + "fields": { + "alternatives": { + "type": "string", + "sanitize": true, + "maxLength": 512 + }, + "reason": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "tool": { + "type": "string", + "sanitize": true, + "maxLength": 128 + } + } + }, + "noop": { + "defaultMax": 1, + "fields": { + "message": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 65000 + } + } + }, + "report_incomplete": { + "defaultMax": 5, + "fields": { + "details": { + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "reason": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 1024 + } + } + }, + "update_issue": { + "defaultMax": 1, + "fields": { + "assignees": { + "type": "array", + "itemType": "string", + "itemSanitize": true, + "itemMaxLength": 39 + }, + "body": { + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "issue_number": { + "issueOrPRNumber": true + }, + "labels": { + "type": "array", + "itemType": "string", + "itemSanitize": true, + "itemMaxLength": 128 + }, + "milestone": { + "optionalPositiveInteger": true + }, + "operation": { + "type": "string", + "enum": [ + "replace", + "append", + "prepend", + "replace-island" + ] + }, + "repo": { + "type": "string", + "maxLength": 256 + }, + "status": { + "type": "string", + "enum": [ + "open", + "closed" + ] + }, + "title": { + "type": "string", + "sanitize": true, + "maxLength": 128 + } + }, + "customValidation": "requiresOneOf:status,title,body" + }, + "update_pull_request": { + "defaultMax": 1, + "fields": { + "body": { + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "draft": { + "type": "boolean" + }, + "operation": { + "type": "string", + "enum": [ + "replace", + "append", + "prepend" + ] + }, + "pull_request_number": { + "issueOrPRNumber": true + }, + "repo": { + "type": "string", + "maxLength": 256 + }, + "title": { + "type": "string", + "sanitize": true, + "maxLength": 256 + } + }, + "customValidation": "requiresOneOf:title,body" + } + } + GH_AW_SAFE_OUTPUTS_VALIDATION_63b99ee7c6c2a583_EOF + node ${RUNNER_TEMP}/gh-aw/actions/generate_safe_outputs_tools.cjs + - name: Generate Safe Outputs MCP Server Config + id: safe-outputs-config + run: | + # Generate a secure random API key (360 bits of entropy, 40+ chars) + # Mask immediately to prevent timing vulnerabilities + API_KEY=$(openssl rand -base64 45 | tr -d '/+=') + echo "::add-mask::${API_KEY}" + + PORT=3001 + + # Set outputs for next steps + { + echo "safe_outputs_api_key=${API_KEY}" + echo "safe_outputs_port=${PORT}" + } >> "$GITHUB_OUTPUT" + + echo "Safe Outputs MCP server will run on port ${PORT}" + + - name: Start Safe Outputs MCP HTTP Server + id: safe-outputs-start + env: + DEBUG: '*' + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-config.outputs.safe_outputs_port }} + GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-config.outputs.safe_outputs_api_key }} + GH_AW_SAFE_OUTPUTS_TOOLS_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/tools.json + GH_AW_SAFE_OUTPUTS_CONFIG_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/config.json + GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs + run: | + # Environment variables are set above to prevent template injection + export DEBUG + export GH_AW_SAFE_OUTPUTS + export GH_AW_SAFE_OUTPUTS_PORT + export GH_AW_SAFE_OUTPUTS_API_KEY + export GH_AW_SAFE_OUTPUTS_TOOLS_PATH + export GH_AW_SAFE_OUTPUTS_CONFIG_PATH + export GH_AW_MCP_LOG_DIR + + bash ${RUNNER_TEMP}/gh-aw/actions/start_safe_outputs_server.sh + + - name: Start MCP Gateway + id: start-mcp-gateway + env: + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-start.outputs.api_key }} + GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-start.outputs.port }} + GITHUB_MCP_GUARD_MIN_INTEGRITY: ${{ steps.determine-automatic-lockdown.outputs.min_integrity }} + GITHUB_MCP_GUARD_REPOS: ${{ steps.determine-automatic-lockdown.outputs.repos }} + GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + run: | + set -eo pipefail + mkdir -p /tmp/gh-aw/mcp-config + + # Export gateway environment variables for MCP config and gateway script + export MCP_GATEWAY_PORT="80" + export MCP_GATEWAY_DOMAIN="host.docker.internal" + MCP_GATEWAY_API_KEY=$(openssl rand -base64 45 | tr -d '/+=') + echo "::add-mask::${MCP_GATEWAY_API_KEY}" + export MCP_GATEWAY_API_KEY + export MCP_GATEWAY_PAYLOAD_DIR="/tmp/gh-aw/mcp-payloads" + mkdir -p "${MCP_GATEWAY_PAYLOAD_DIR}" + export MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD="524288" + export DEBUG="*" + + export GH_AW_ENGINE="copilot" + export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.2.14' + + mkdir -p /home/runner/.copilot + cat << GH_AW_MCP_CONFIG_e019437147a17257_EOF | bash ${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh + { + "mcpServers": { + "github": { + "type": "stdio", + "container": "ghcr.io/github/github-mcp-server:v0.32.0", + "env": { + "GITHUB_HOST": "\${GITHUB_SERVER_URL}", + "GITHUB_PERSONAL_ACCESS_TOKEN": "\${GITHUB_MCP_SERVER_TOKEN}", + "GITHUB_READ_ONLY": "1", + "GITHUB_TOOLSETS": "context,repos,issues,pull_requests" + }, + "guard-policies": { + "allow-only": { + "min-integrity": "$GITHUB_MCP_GUARD_MIN_INTEGRITY", + "repos": "$GITHUB_MCP_GUARD_REPOS" + } + } + }, + "safeoutputs": { + "type": "http", + "url": "http://host.docker.internal:$GH_AW_SAFE_OUTPUTS_PORT", + "headers": { + "Authorization": "\${GH_AW_SAFE_OUTPUTS_API_KEY}" + }, + "guard-policies": { + "write-sink": { + "accept": [ + "*" + ] + } + } + } + }, + "gateway": { + "port": $MCP_GATEWAY_PORT, + "domain": "${MCP_GATEWAY_DOMAIN}", + "apiKey": "${MCP_GATEWAY_API_KEY}", + "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" + } + } + GH_AW_MCP_CONFIG_e019437147a17257_EOF + - name: Download activation artifact + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: activation + path: /tmp/gh-aw + - name: Clean git credentials + continue-on-error: true + run: bash ${RUNNER_TEMP}/gh-aw/actions/clean_git_credentials.sh + - name: Execute GitHub Copilot CLI + id: agentic_execution + # Copilot CLI tool arguments (sorted): + timeout-minutes: 20 + run: | + set -o pipefail + touch /tmp/gh-aw/agent-step-summary.md + # shellcheck disable=SC1003 + sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --exclude-env GITHUB_MCP_SERVER_TOKEN --exclude-env MCP_GATEWAY_API_KEY --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.13 --skip-pull --enable-api-proxy \ + -- /bin/bash -c '/usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --allow-all-tools --allow-all-paths --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log + env: + COPILOT_AGENT_RUNNER_TYPE: STANDALONE + COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} + COPILOT_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || '' }} + GH_AW_MCP_CONFIG: /home/runner/.copilot/mcp-config.json + GH_AW_PHASE: agent + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_VERSION: v0.67.1 + GITHUB_API_URL: ${{ github.api_url }} + GITHUB_AW: true + GITHUB_HEAD_REF: ${{ github.head_ref }} + GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + GITHUB_REF_NAME: ${{ github.ref_name }} + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_STEP_SUMMARY: /tmp/gh-aw/agent-step-summary.md + GITHUB_WORKSPACE: ${{ github.workspace }} + GIT_AUTHOR_EMAIL: github-actions[bot]@users.noreply.github.com + GIT_AUTHOR_NAME: github-actions[bot] + GIT_COMMITTER_EMAIL: github-actions[bot]@users.noreply.github.com + GIT_COMMITTER_NAME: github-actions[bot] + XDG_CONFIG_HOME: /home/runner + - name: Detect inference access error + id: detect-inference-error + if: always() + continue-on-error: true + run: bash ${RUNNER_TEMP}/gh-aw/actions/detect_inference_access_error.sh + - name: Configure Git credentials + env: + REPO_NAME: ${{ github.repository }} + SERVER_URL: ${{ github.server_url }} + GITHUB_TOKEN: ${{ github.token }} + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + git config --global am.keepcr true + # Re-authenticate git with GitHub token + SERVER_URL_STRIPPED="${SERVER_URL#https://}" + git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git" + echo "Git configured with standard GitHub Actions identity" + - name: Copy Copilot session state files to logs + if: always() + continue-on-error: true + run: bash ${RUNNER_TEMP}/gh-aw/actions/copy_copilot_session_state.sh + - name: Stop MCP Gateway + if: always() + continue-on-error: true + env: + MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }} + MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }} + GATEWAY_PID: ${{ steps.start-mcp-gateway.outputs.gateway-pid }} + run: | + bash ${RUNNER_TEMP}/gh-aw/actions/stop_mcp_gateway.sh "$GATEWAY_PID" + - name: Redact secrets in logs + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/redact_secrets.cjs'); + await main(); + env: + GH_AW_SECRET_NAMES: 'COPILOT_GITHUB_TOKEN,COPILOT_PAT_0,COPILOT_PAT_1,COPILOT_PAT_2,COPILOT_PAT_3,COPILOT_PAT_4,COPILOT_PAT_5,COPILOT_PAT_6,COPILOT_PAT_7,COPILOT_PAT_8,COPILOT_PAT_9,GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN' + SECRET_COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} + SECRET_COPILOT_PAT_0: ${{ secrets.COPILOT_PAT_0 }} + SECRET_COPILOT_PAT_1: ${{ secrets.COPILOT_PAT_1 }} + SECRET_COPILOT_PAT_2: ${{ secrets.COPILOT_PAT_2 }} + SECRET_COPILOT_PAT_3: ${{ secrets.COPILOT_PAT_3 }} + SECRET_COPILOT_PAT_4: ${{ secrets.COPILOT_PAT_4 }} + SECRET_COPILOT_PAT_5: ${{ secrets.COPILOT_PAT_5 }} + SECRET_COPILOT_PAT_6: ${{ secrets.COPILOT_PAT_6 }} + SECRET_COPILOT_PAT_7: ${{ secrets.COPILOT_PAT_7 }} + SECRET_COPILOT_PAT_8: ${{ secrets.COPILOT_PAT_8 }} + SECRET_COPILOT_PAT_9: ${{ secrets.COPILOT_PAT_9 }} + SECRET_GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }} + SECRET_GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }} + SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Append agent step summary + if: always() + run: bash ${RUNNER_TEMP}/gh-aw/actions/append_agent_step_summary.sh + - name: Copy Safe Outputs + if: always() + env: + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + run: | + mkdir -p /tmp/gh-aw + cp "$GH_AW_SAFE_OUTPUTS" /tmp/gh-aw/safeoutputs.jsonl 2>/dev/null || true + - name: Ingest agent output + id: collect_output + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} + GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_API_URL: ${{ github.api_url }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/collect_ndjson_output.cjs'); + await main(); + - name: Parse agent logs for step summary + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_AGENT_OUTPUT: /tmp/gh-aw/sandbox/agent/logs/ + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_copilot_log.cjs'); + await main(); + - name: Parse MCP Gateway logs for step summary + if: always() + id: parse-mcp-gateway + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_mcp_gateway_log.cjs'); + await main(); + - name: Print firewall logs + if: always() + continue-on-error: true + env: + AWF_LOGS_DIR: /tmp/gh-aw/sandbox/firewall/logs + run: | + # Fix permissions on firewall logs so they can be uploaded as artifacts + # AWF runs with sudo, creating files owned by root + sudo chmod -R a+r /tmp/gh-aw/sandbox/firewall/logs 2>/dev/null || true + # Only run awf logs summary if awf command exists (it may not be installed if workflow failed before install step) + if command -v awf &> /dev/null; then + awf logs summary | tee -a "$GITHUB_STEP_SUMMARY" + else + echo 'AWF binary not installed, skipping firewall log summary' + fi + - name: Parse token usage for step summary + if: always() + continue-on-error: true + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_token_usage.cjs'); + await main(); + - name: Write agent output placeholder if missing + if: always() + run: | + if [ ! -f /tmp/gh-aw/agent_output.json ]; then + echo '{"items":[]}' > /tmp/gh-aw/agent_output.json + fi + - name: Upload agent artifacts + if: always() + continue-on-error: true + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + with: + name: agent + path: | + /tmp/gh-aw/aw-prompts/prompt.txt + /tmp/gh-aw/sandbox/agent/logs/ + /tmp/gh-aw/redacted-urls.log + /tmp/gh-aw/mcp-logs/ + /tmp/gh-aw/agent_usage.json + /tmp/gh-aw/agent-stdio.log + /tmp/gh-aw/agent/ + /tmp/gh-aw/github_rate_limits.jsonl + /tmp/gh-aw/safeoutputs.jsonl + /tmp/gh-aw/agent_output.json + /tmp/gh-aw/aw-*.patch + /tmp/gh-aw/aw-*.bundle + if-no-files-found: ignore + - name: Upload firewall audit logs + if: always() + continue-on-error: true + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + with: + name: firewall-audit-logs + path: | + /tmp/gh-aw/sandbox/firewall/logs/ + /tmp/gh-aw/sandbox/firewall/audit/ + if-no-files-found: ignore + + conclusion: + needs: + - activation + - agent + - detection + - safe_outputs + if: always() && (needs.agent.result != 'skipped' || needs.activation.outputs.lockdown_check_failed == 'true') + runs-on: ubuntu-slim + permissions: + contents: read + discussions: write + issues: write + pull-requests: write + concurrency: + group: "gh-aw-conclusion-update-tactics-on-comment" + cancel-in-progress: false + outputs: + incomplete_count: ${{ steps.report_incomplete.outputs.incomplete_count }} + noop_message: ${{ steps.noop.outputs.noop_message }} + tools_reported: ${{ steps.missing_tool.outputs.tools_reported }} + total_count: ${{ steps.missing_tool.outputs.total_count }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + - name: Download agent output artifact + id: download-agent-output + continue-on-error: true + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: agent + path: /tmp/gh-aw/ + - name: Setup agent output environment variable + id: setup-agent-output-env + if: steps.download-agent-output.outcome == 'success' + run: | + mkdir -p /tmp/gh-aw/ + find "/tmp/gh-aw/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" + - name: Process No-Op Messages + id: noop + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_NOOP_MAX: "1" + GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} + GH_AW_NOOP_REPORT_AS_ISSUE: "true" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_noop_message.cjs'); + await main(); + - name: Record Missing Tool + id: missing_tool + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_MISSING_TOOL_CREATE_ISSUE: "true" + GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/missing_tool.cjs'); + await main(); + - name: Record Incomplete + id: report_incomplete + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true" + GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_incomplete_handler.cjs'); + await main(); + - name: Handle Agent Failure + id: handle_agent_failure + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} + GH_AW_WORKFLOW_ID: "update-tactics-on-comment" + GH_AW_ENGINE_ID: "copilot" + GH_AW_SECRET_VERIFICATION_RESULT: ${{ needs.activation.outputs.secret_verification_result }} + GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }} + GH_AW_INFERENCE_ACCESS_ERROR: ${{ needs.agent.outputs.inference_access_error }} + GH_AW_LOCKDOWN_CHECK_FAILED: ${{ needs.activation.outputs.lockdown_check_failed }} + GH_AW_GROUP_REPORTS: "false" + GH_AW_FAILURE_REPORT_AS_ISSUE: "true" + GH_AW_TIMEOUT_MINUTES: "20" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_agent_failure.cjs'); + await main(); + + detection: + needs: + - activation + - agent + if: > + always() && needs.agent.result != 'skipped' && (needs.agent.outputs.output_types != '' || needs.agent.outputs.has_patch == 'true') + runs-on: ubuntu-latest + permissions: + contents: read + outputs: + detection_conclusion: ${{ steps.detection_conclusion.outputs.conclusion }} + detection_success: ${{ steps.detection_conclusion.outputs.success }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + - name: Download agent output artifact + id: download-agent-output + continue-on-error: true + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: agent + path: /tmp/gh-aw/ + - name: Setup agent output environment variable + id: setup-agent-output-env + if: steps.download-agent-output.outcome == 'success' + run: | + mkdir -p /tmp/gh-aw/ + find "/tmp/gh-aw/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" + - name: Checkout repository for patch context + if: needs.agent.outputs.has_patch == 'true' + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + # --- Threat Detection --- + - name: Download container images + run: bash ${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh ghcr.io/github/gh-aw-firewall/agent:0.25.13 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.13 ghcr.io/github/gh-aw-firewall/squid:0.25.13 + - name: Check if detection needed + id: detection_guard + if: always() + env: + OUTPUT_TYPES: ${{ needs.agent.outputs.output_types }} + HAS_PATCH: ${{ needs.agent.outputs.has_patch }} + run: | + if [[ -n "$OUTPUT_TYPES" || "$HAS_PATCH" == "true" ]]; then + echo "run_detection=true" >> "$GITHUB_OUTPUT" + echo "Detection will run: output_types=$OUTPUT_TYPES, has_patch=$HAS_PATCH" + else + echo "run_detection=false" >> "$GITHUB_OUTPUT" + echo "Detection skipped: no agent outputs or patches to analyze" + fi + - name: Clear MCP configuration for detection + if: always() && steps.detection_guard.outputs.run_detection == 'true' + run: | + rm -f /tmp/gh-aw/mcp-config/mcp-servers.json + rm -f /home/runner/.copilot/mcp-config.json + rm -f "$GITHUB_WORKSPACE/.gemini/settings.json" + - name: Prepare threat detection files + if: always() && steps.detection_guard.outputs.run_detection == 'true' + run: | + mkdir -p /tmp/gh-aw/threat-detection/aw-prompts + cp /tmp/gh-aw/aw-prompts/prompt.txt /tmp/gh-aw/threat-detection/aw-prompts/prompt.txt 2>/dev/null || true + cp /tmp/gh-aw/agent_output.json /tmp/gh-aw/threat-detection/agent_output.json 2>/dev/null || true + for f in /tmp/gh-aw/aw-*.patch; do + [ -f "$f" ] && cp "$f" /tmp/gh-aw/threat-detection/ 2>/dev/null || true + done + for f in /tmp/gh-aw/aw-*.bundle; do + [ -f "$f" ] && cp "$f" /tmp/gh-aw/threat-detection/ 2>/dev/null || true + done + echo "Prepared threat detection files:" + ls -la /tmp/gh-aw/threat-detection/ 2>/dev/null || true + - name: Setup threat detection + if: always() && steps.detection_guard.outputs.run_detection == 'true' + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + WORKFLOW_NAME: "Update Tactics On Comment" + WORKFLOW_DESCRIPTION: "No description provided" + HAS_PATCH: ${{ needs.agent.outputs.has_patch }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/setup_threat_detection.cjs'); + await main(); + - name: Ensure threat-detection directory and log + if: always() && steps.detection_guard.outputs.run_detection == 'true' + run: | + mkdir -p /tmp/gh-aw/threat-detection + touch /tmp/gh-aw/threat-detection/detection.log + - name: Install GitHub Copilot CLI + run: ${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh latest + env: + GH_HOST: github.com + - name: Install AWF binary + run: bash ${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh v0.25.13 + - name: Execute GitHub Copilot CLI + if: always() && steps.detection_guard.outputs.run_detection == 'true' + id: detection_agentic_execution + # Copilot CLI tool arguments (sorted): + timeout-minutes: 20 + run: | + set -o pipefail + touch /tmp/gh-aw/agent-step-summary.md + # shellcheck disable=SC1003 + sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,github.com,host.docker.internal,telemetry.enterprise.githubcopilot.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.13 --skip-pull --enable-api-proxy \ + -- /bin/bash -c '/usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --allow-all-tools --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/threat-detection/detection.log + env: + COPILOT_AGENT_RUNNER_TYPE: STANDALONE + COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} + COPILOT_MODEL: ${{ vars.GH_AW_MODEL_DETECTION_COPILOT || '' }} + GH_AW_PHASE: detection + GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt + GH_AW_VERSION: v0.67.1 + GITHUB_API_URL: ${{ github.api_url }} + GITHUB_AW: true + GITHUB_HEAD_REF: ${{ github.head_ref }} + GITHUB_REF_NAME: ${{ github.ref_name }} + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_STEP_SUMMARY: /tmp/gh-aw/agent-step-summary.md + GITHUB_WORKSPACE: ${{ github.workspace }} + GIT_AUTHOR_EMAIL: github-actions[bot]@users.noreply.github.com + GIT_AUTHOR_NAME: github-actions[bot] + GIT_COMMITTER_EMAIL: github-actions[bot]@users.noreply.github.com + GIT_COMMITTER_NAME: github-actions[bot] + XDG_CONFIG_HOME: /home/runner + - name: Upload threat detection log + if: always() && steps.detection_guard.outputs.run_detection == 'true' + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + with: + name: detection + path: /tmp/gh-aw/threat-detection/detection.log + if-no-files-found: ignore + - name: Parse and conclude threat detection + id: detection_conclusion + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + RUN_DETECTION: ${{ steps.detection_guard.outputs.run_detection }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_threat_detection_results.cjs'); + await main(); + + pre_activation: + runs-on: ubuntu-slim + outputs: + activated: ${{ steps.check_membership.outputs.is_team_member == 'true' }} + copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} + matched_command: '' + select-copilot-pat_result: ${{ steps.select-copilot-pat.outcome }} + setup-trace-id: ${{ steps.setup.outputs.trace-id }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + - name: Check team membership for workflow + id: check_membership + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_REQUIRED_ROLES: "admin,maintainer,write" + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); + await main(); + - name: Checkout the select-copilot-pat action folder + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 1 + persist-credentials: false + sparse-checkout: .github/actions/select-copilot-pat + sparse-checkout-cone-mode: true + - name: Select Copilot token from pool + id: select-copilot-pat + uses: ./.github/actions/select-copilot-pat + env: + SECRET_0: ${{ secrets.COPILOT_PAT_0 }} + SECRET_1: ${{ secrets.COPILOT_PAT_1 }} + SECRET_2: ${{ secrets.COPILOT_PAT_2 }} + SECRET_3: ${{ secrets.COPILOT_PAT_3 }} + SECRET_4: ${{ secrets.COPILOT_PAT_4 }} + SECRET_5: ${{ secrets.COPILOT_PAT_5 }} + SECRET_6: ${{ secrets.COPILOT_PAT_6 }} + SECRET_7: ${{ secrets.COPILOT_PAT_7 }} + SECRET_8: ${{ secrets.COPILOT_PAT_8 }} + SECRET_9: ${{ secrets.COPILOT_PAT_9 }} + + safe_outputs: + needs: + - activation + - agent + - detection + if: (!cancelled()) && needs.agent.result != 'skipped' && needs.detection.result == 'success' + runs-on: ubuntu-slim + permissions: + contents: read + discussions: write + issues: write + pull-requests: write + timeout-minutes: 15 + env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/update-tactics-on-comment" + GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }} + GH_AW_ENGINE_ID: "copilot" + GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }} + GH_AW_WORKFLOW_ID: "update-tactics-on-comment" + GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + outputs: + code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }} + code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }} + comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }} + comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }} + create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }} + create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }} + process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }} + process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }} + steps: + - name: Setup Scripts + id: setup + uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + with: + destination: ${{ runner.temp }}/gh-aw/actions + job-name: ${{ github.job }} + trace-id: ${{ needs.activation.outputs.setup-trace-id }} + - name: Download agent output artifact + id: download-agent-output + continue-on-error: true + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: agent + path: /tmp/gh-aw/ + - name: Setup agent output environment variable + id: setup-agent-output-env + if: steps.download-agent-output.outcome == 'success' + run: | + mkdir -p /tmp/gh-aw/ + find "/tmp/gh-aw/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" + - name: Configure GH_HOST for enterprise compatibility + id: ghes-host-config + shell: bash + run: | + # Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct + # GitHub instance (GHES/GHEC). On github.com this is a harmless no-op. + GH_HOST="${GITHUB_SERVER_URL#https://}" + GH_HOST="${GH_HOST#http://}" + echo "GH_HOST=${GH_HOST}" >> "$GITHUB_ENV" + - name: Process Safe Outputs + id: process_safe_outputs + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_API_URL: ${{ github.api_url }} + GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":3},\"add_labels\":{},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"},\"report_incomplete\":{},\"update_issue\":{\"allow_body\":true,\"max\":1,\"target\":\"*\"},\"update_pull_request\":{\"allow_body\":true,\"allow_title\":true,\"max\":1,\"target\":\"*\"}}" + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/safe_output_handler_manager.cjs'); + await main(); + - name: Upload Safe Output Items + if: always() + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + with: + name: safe-output-items + path: /tmp/gh-aw/safe-output-items.jsonl + if-no-files-found: ignore + diff --git a/.github/workflows/update-tactics-on-comment.md b/.github/workflows/update-tactics-on-comment.md new file mode 100644 index 000000000000..de32f6188c6e --- /dev/null +++ b/.github/workflows/update-tactics-on-comment.md @@ -0,0 +1,197 @@ +--- +permissions: + contents: read + issues: read + pull-requests: read + +network: + allowed: + - defaults + +safe-outputs: + add-comment: + max: 3 + add-labels: + update-issue: + target: "*" + update-pull-request: + target: "*" + noop: + +on: + issue_comment: + types: [created] + +# ############################################################### +# Override the COPILOT_GITHUB_TOKEN secret usage for the workflow +# with a randomly-selected token from a pool of secrets. +# +# As soon as organization-level billing is offered for Agentic +# Workflows, this stop-gap approach will be removed. +# +# See: /.github/actions/select-copilot-pat/README.md +# ############################################################### + + # Add the pre-activation step of selecting a random PAT from the supplied secrets + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + name: Checkout the select-copilot-pat action folder + with: + persist-credentials: false + sparse-checkout: .github/actions/select-copilot-pat + sparse-checkout-cone-mode: true + fetch-depth: 1 + + - id: select-copilot-pat + name: Select Copilot token from pool + uses: ./.github/actions/select-copilot-pat + env: + SECRET_0: ${{ secrets.COPILOT_PAT_0 }} + SECRET_1: ${{ secrets.COPILOT_PAT_1 }} + SECRET_2: ${{ secrets.COPILOT_PAT_2 }} + SECRET_3: ${{ secrets.COPILOT_PAT_3 }} + SECRET_4: ${{ secrets.COPILOT_PAT_4 }} + SECRET_5: ${{ secrets.COPILOT_PAT_5 }} + SECRET_6: ${{ secrets.COPILOT_PAT_6 }} + SECRET_7: ${{ secrets.COPILOT_PAT_7 }} + SECRET_8: ${{ secrets.COPILOT_PAT_8 }} + SECRET_9: ${{ secrets.COPILOT_PAT_9 }} + +# Add the pre-activation output of the randomly selected PAT +jobs: + pre-activation: + outputs: + copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} + +# Override the COPILOT_GITHUB_TOKEN expression used in the activation job +# Consume the PAT number from the pre-activation step and select the corresponding secret +engine: + id: copilot + env: + # We cannot use line breaks in this expression as it leads to a syntax error in the compiled workflow + # If none of the `COPILOT_PAT_#` secrets were selected, then the default COPILOT_GITHUB_TOKEN is used + COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} +--- + +## Update Tactics on Command + +You are an expert .NET SDK engineer who helps fill in "tactics" for servicing pull requests in the dotnet/sdk repository. A servicing PR targets a stable release branch (e.g. `release/9.0.1xx`) and undergoes extra scrutiny before merging. Your job is to produce accurate, specific, and informative tactics based on the PR context. + +### Trigger Context + +- **Comment ID**: `${{ github.event.comment.id }}` +- **Issue/PR number**: `${{ github.event.issue.number }}` +- **Repository**: `${{ github.repository }}` +- **Triggering actor**: `${{ github.actor }}` +- **Run URL**: `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}` + +### Your Task + +Follow these steps precisely: + +#### Step 1: Validate the command + +Use the GitHub API to fetch the comment with ID `${{ github.event.comment.id }}` on issue/PR #`${{ github.event.issue.number }}` in this repository. Read its body text. + +The comment body **must** start with `/tactics` (case-insensitive). The comment may optionally include an issue number after the command (e.g. `/tactics 12345`). + +- If the comment does **not** start with `/tactics`, call the `noop` tool with a message indicating the comment was not a `/tactics` command and stop. Do nothing else. +- Use the GitHub API to check if issue #`${{ github.event.issue.number }}` is a pull request. If it is **not** a pull request, call the `noop` tool noting this command only works on PRs and stop. + +#### Step 2: Verify authorization + +Use the GitHub API to check the repository collaborator permission level for `${{ github.actor }}`. + +- If the actor does **not** have write or admin access, use the `add-comment` tool to post a comment on PR #`${{ github.event.issue.number }}` explaining that only collaborators with write access may trigger this workflow, then stop. + +#### Step 3: React to the request + +Add an 👀 (eyes) reaction to the triggering comment (comment ID: `${{ github.event.comment.id }}`) to signal that the workflow has started. + +#### Step 4: Gather PR context + +For PR #`${{ github.event.issue.number }}`, gather the following information: + +1. **PR details**: title, description/body, author, target (base) branch +2. **Files changed**: list filenames with addition/deletion counts (up to 20 files) +3. **PR comments**: all non-bot issue-level comments (exclude the triggering `/tactics` comment) +4. **Review comments**: all non-bot code-level review comments, including which file they reference +5. **Linked issue**: If the `/tactics` command included an issue number, use that. Otherwise, parse the PR body for keywords like `fixes #N`, `closes #N`, or `resolves #N` to find a linked issue. If found, fetch the issue title and body. + +#### Step 5: Generate tactics + +Based on all the gathered context, produce a tactics analysis following this exact template. Be specific and detailed—avoid vague statements. Do not speculate or invent details not present in the context. If information for a section is genuinely unavailable, say so clearly. + +**Guidelines per section:** + +- **Summary**: 2-4 sentences. State the root cause of the bug or regression being fixed, describe the exact code change made to address it, and explain why this fix is appropriate for a servicing release. +- **Customer Impact**: Describe concretely how customers are affected: the symptom (e.g. build error, runtime crash, incorrect output), the exact SDK version(s) impacted, the frequency/severity (all users vs. specific scenario), and any known workarounds. +- **Regression?**: Was this introduced by a specific PR or SDK version? Answer "Yes, introduced in #N (description)" or "Yes, introduced in vX.Y.Z" if known. If not a regression or unclear, say "No" or "Unknown — not enough information to determine origin". +- **Testing**: List all forms of validation: unit tests added or modified, integration tests, manual repro steps from PR comments, private/lab testing, and CI results. If only CI ran, say so explicitly. +- **Risk**: Rate as Low, Medium, or High. Justify the rating by referencing the scope of the change (e.g. lines changed, components touched), test coverage, and any known edge cases or risks. + +The output format must be exactly: + +``` +### Summary + +[your text] + +### Customer Impact + +[your text] + +### Regression? + +[your text] + +### Testing + +[your text] + +### Risk + +[your text] +``` + +#### Step 6: Apply tactics and report status + +**If a linked issue was found:** + +1. Update the issue body by adding (or replacing) a tactics section delimited by `` and `` markers. The section should contain: + ``` + + ## Tactics + + *Generated from PR #[PR number]* + + [generated tactics content] + + ``` + If the markers already exist in the body, replace the content between them. Otherwise, append the block at the end. + +2. Add the `Servicing-consider` label to the issue. + +3. Post a comment on the PR: "✅ Tactics have been added to issue #[issue number] and the `Servicing-consider` label has been applied. See [workflow details](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})." + +4. Add a 👍 (+1) reaction to the triggering comment. + +**If no linked issue was found:** + +1. Update the **PR description** instead, using the same `` / `` markers, with a note that no linked issue was found. + +2. Post a comment on the PR: "⚠️ No linked issue found for this PR. Tactics have been added to the PR description instead. To apply tactics to a specific issue, use `/tactics `. See [workflow details](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})." + +3. Add a 👍 (+1) reaction to the triggering comment. + +#### Step 7: Report completion + +Call the `noop` tool with a well-formatted markdown summary of what was done, including the PR number, issue number (if applicable), and a brief snippet of the generated tactics. + +### Error Handling + +If any step fails unexpectedly: + +1. Post a comment on PR #`${{ github.event.issue.number }}`: "❌ Failed to generate or apply tactics. Please check [the workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details." +2. Add a 😕 (confused) reaction to the triggering comment (ID: `${{ github.event.comment.id }}`). +3. Call the `noop` tool with the error details. diff --git a/.github/workflows/update-tactics-on-comment.yml b/.github/workflows/update-tactics-on-comment.yml deleted file mode 100644 index 05b0acb742d2..000000000000 --- a/.github/workflows/update-tactics-on-comment.yml +++ /dev/null @@ -1,581 +0,0 @@ -name: Update Tactics on command - -on: - issue_comment: - types: [created] - -permissions: - contents: read - -env: - REPO_NAME: ${{ github.event.repository.name }} - RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} - AI_MODEL: gpt-4.1 - COPILOT_API_URL: https://api.githubcopilot.com/chat/completions - -jobs: - authorize: - name: Authorize Request - if: (!github.event.repository.fork) && (github.event.issue.pull_request) - runs-on: ubuntu-latest - permissions: - contents: read - issues: write - pull-requests: write - outputs: - should_run: ${{ steps.command-filter.outputs.should_run }} - issue_number: ${{ steps.command-filter.outputs.issue_number }} - pr_number: ${{ steps.metadata.outputs.pr_number }} - - steps: - - name: Evaluate comment command - id: command-filter - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - env: - COMMENT_BODY: ${{ github.event.comment.body }} # GH Has a Character Limit which prevents overflow issues. https://github.com/dead-claudia/github-limits - with: - script: | - const body = (process.env.COMMENT_BODY || '').trim(); - const match = body.match(/^\/tactics(?:\s+(\d+))?(?:\s|$)/i); - const shouldRun = !!match; - core.setOutput('should_run', String(shouldRun)); - core.setOutput('issue_number', (match && match[1]) ? match[1] : ''); - if (!shouldRun) { - core.info('Comment does not invoke /tactics. Skipping workflow.'); - } - - - name: Ensure commenter is trusted - if: steps.command-filter.outputs.should_run == 'true' - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - with: - github-token: ${{ github.token }} - script: | - const { owner, repo } = context.repo; - const username = context.payload.comment.user.login; - - if (!username) { - throw new Error('Unable to resolve commenter username from event payload.'); - } - - try { - const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({ - owner, - repo, - username, - }); - - const allowed = ['admin', 'write']; - if (!allowed.includes(permission.permission)) { - throw new Error(`@${username} has "${permission.permission}" access.`); - } - - core.info(`Verified ${username} has ${permission.permission} access.`); - } catch (error) { - throw new Error(`Only collaborators with write access may trigger this workflow. ${error.message || error}`); - } - - - name: React to comment - if: steps.command-filter.outputs.should_run == 'true' - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - with: - github-token: ${{ github.token }} - script: | - const { owner, repo } = context.repo; - const commentId = context.payload.comment?.id; - if (!commentId) { - core.warning('No comment ID found on payload; skipping reaction.'); - return; - } - - await github.rest.reactions.createForIssueComment({ - owner, - repo, - comment_id: Number(commentId), - content: 'eyes', - }); - - - name: Comment on PR - Started - if: steps.command-filter.outputs.should_run == 'true' - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - env: - COMMENT_BODY: ${{ format('▶️ Tactics update workflow started. Track progress in [this workflow run]({0}).', env.RUN_URL) }} - with: - github-token: ${{ github.token }} - script: | - const { owner, repo } = context.repo; - await github.rest.issues.createComment({ - owner, - repo, - issue_number: Number(context.payload.issue.number), - body: process.env.COMMENT_BODY, - }); - - - name: Capture PR metadata - id: metadata - if: steps.command-filter.outputs.should_run == 'true' - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - with: - script: | - const pr = await github.rest.pulls.get({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: context.payload.issue.number, - }); - - core.setOutput('pr_number', String(pr.data.number)); - - select-pat: - name: Select Copilot PAT - needs: authorize - if: needs.authorize.outputs.should_run == 'true' - runs-on: ubuntu-latest - outputs: - copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} - steps: - - name: Checkout select-copilot-pat action - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 - with: - persist-credentials: false - sparse-checkout: .github/actions/select-copilot-pat - sparse-checkout-cone-mode: true - fetch-depth: 1 - - - id: select-copilot-pat - name: Select Copilot token from pool - uses: ./.github/actions/select-copilot-pat - env: - SECRET_0: ${{ secrets.COPILOT_PAT_0 }} - SECRET_1: ${{ secrets.COPILOT_PAT_1 }} - SECRET_2: ${{ secrets.COPILOT_PAT_2 }} - SECRET_3: ${{ secrets.COPILOT_PAT_3 }} - SECRET_4: ${{ secrets.COPILOT_PAT_4 }} - SECRET_5: ${{ secrets.COPILOT_PAT_5 }} - SECRET_6: ${{ secrets.COPILOT_PAT_6 }} - SECRET_7: ${{ secrets.COPILOT_PAT_7 }} - SECRET_8: ${{ secrets.COPILOT_PAT_8 }} - SECRET_9: ${{ secrets.COPILOT_PAT_9 }} - - update: - name: Generate and Apply Tactics - needs: [authorize, select-pat] - if: needs.authorize.outputs.should_run == 'true' - runs-on: ubuntu-latest - permissions: - contents: read - issues: write - models: read - pull-requests: write - - steps: - - name: Gather PR and issue data - id: gather - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - env: - EXPLICIT_ISSUE_NUMBER: ${{ needs.authorize.outputs.issue_number }} - PR_NUMBER: ${{ needs.authorize.outputs.pr_number }} - with: - github-token: ${{ github.token }} - script: | - const { owner, repo } = context.repo; - const prNumber = Number(process.env.PR_NUMBER); - - // Get PR details - const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number: prNumber }); - - // Get PR comments (issue-level) - const { data: comments } = await github.rest.issues.listComments({ - owner, repo, issue_number: prNumber, per_page: 100, - }); - - // Get PR review comments (code-level) - const { data: reviewComments } = await github.rest.pulls.listReviewComments({ - owner, repo, pull_number: prNumber, per_page: 100, - }); - - // Get files changed for context - const { data: files } = await github.rest.pulls.listFiles({ - owner, repo, pull_number: prNumber, per_page: 100, - }); - - // Find linked issue: explicit argument takes priority, then parse PR body - let issueNumber = process.env.EXPLICIT_ISSUE_NUMBER - ? Number(process.env.EXPLICIT_ISSUE_NUMBER) - : null; - - if (!issueNumber) { - const body = pr.body || ''; - const pattern = /(?:fix(?:es|ed)?|close[sd]?|resolve[sd]?)\s+#(\d+)/gi; - const match = pattern.exec(body); - if (match) { - issueNumber = Number(match[1]); - core.info(`Auto-detected linked issue #${issueNumber} from PR body.`); - } - } - - // Limit text fields to avoid exceeding GitHub Actions output size and AI token limits - const MAX_TEXT_LENGTH = 4000; - const MAX_REVIEW_COMMENT_LENGTH = 2000; - - let issueTitle = ''; - let issueBody = ''; - if (issueNumber) { - try { - const { data: issue } = await github.rest.issues.get({ owner, repo, issue_number: issueNumber }); - issueTitle = issue.title; - issueBody = (issue.body || '').substring(0, MAX_TEXT_LENGTH); - core.info(`Fetched issue #${issueNumber}: ${issueTitle}`); - } catch (e) { - core.warning(`Could not fetch issue #${issueNumber}: ${e.message}`); - issueNumber = null; - } - } else { - core.warning('No linked issue found. Specify one explicitly with /tactics .'); - } - - const filesSummary = files - .slice(0, 20) - .map(f => `${f.filename} (+${f.additions}/-${f.deletions})`) - .join('\n'); - - // Exclude bot comments and the triggering /tactics comment itself - const triggeringCommentId = context.payload.comment.id; - const userComments = comments - .filter(c => c.id !== triggeringCommentId && !c.user.login.includes('[bot]')) - .map(c => `@${c.user.login}: ${c.body}`) - .join('\n\n---\n\n') - .substring(0, MAX_TEXT_LENGTH); - - const reviewCommentsSummary = reviewComments - .filter(c => !c.user.login.includes('[bot]')) - .map(c => `@${c.user.login} on \`${c.path}\`: ${c.body}`) - .join('\n\n---\n\n') - .substring(0, MAX_REVIEW_COMMENT_LENGTH); - - core.setOutput('pr_title', pr.title); - core.setOutput('pr_body', (pr.body || '').substring(0, MAX_TEXT_LENGTH)); - core.setOutput('pr_author', pr.user.login); - core.setOutput('pr_base_ref', pr.base.ref); - core.setOutput('files_summary', filesSummary); - core.setOutput('comments_summary', userComments); - core.setOutput('review_comments_summary', reviewCommentsSummary); - core.setOutput('issue_number', issueNumber ? String(issueNumber) : ''); - core.setOutput('issue_title', issueTitle); - core.setOutput('issue_body', issueBody); - - - name: Generate tactics with AI - id: ai-generate - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - env: - # Resolve the selected PAT from the pool; fall back to empty string if no PATs configured - COPILOT_PAT_NUMBER: ${{ needs.select-pat.outputs.copilot_pat_number }} - COPILOT_PAT_0: ${{ secrets.COPILOT_PAT_0 }} - COPILOT_PAT_1: ${{ secrets.COPILOT_PAT_1 }} - COPILOT_PAT_2: ${{ secrets.COPILOT_PAT_2 }} - COPILOT_PAT_3: ${{ secrets.COPILOT_PAT_3 }} - COPILOT_PAT_4: ${{ secrets.COPILOT_PAT_4 }} - COPILOT_PAT_5: ${{ secrets.COPILOT_PAT_5 }} - COPILOT_PAT_6: ${{ secrets.COPILOT_PAT_6 }} - COPILOT_PAT_7: ${{ secrets.COPILOT_PAT_7 }} - COPILOT_PAT_8: ${{ secrets.COPILOT_PAT_8 }} - COPILOT_PAT_9: ${{ secrets.COPILOT_PAT_9 }} - PR_TITLE: ${{ steps.gather.outputs.pr_title }} - PR_BODY: ${{ steps.gather.outputs.pr_body }} - PR_AUTHOR: ${{ steps.gather.outputs.pr_author }} - PR_BASE_REF: ${{ steps.gather.outputs.pr_base_ref }} - FILES_SUMMARY: ${{ steps.gather.outputs.files_summary }} - COMMENTS_SUMMARY: ${{ steps.gather.outputs.comments_summary }} - REVIEW_COMMENTS_SUMMARY: ${{ steps.gather.outputs.review_comments_summary }} - ISSUE_TITLE: ${{ steps.gather.outputs.issue_title }} - ISSUE_BODY: ${{ steps.gather.outputs.issue_body }} - PR_NUMBER: ${{ needs.authorize.outputs.pr_number }} - with: - script: | - // Resolve the Copilot PAT from the selected pool number - const patNumber = process.env.COPILOT_PAT_NUMBER; - let copilotToken = ''; - if (patNumber) { - copilotToken = process.env[`COPILOT_PAT_${patNumber}`] || ''; - } - if (!copilotToken) { - core.setFailed('No Copilot PAT available. Configure COPILOT_PAT_0..9 repository secrets. See .github/actions/select-copilot-pat/README.md for setup instructions.'); - return; - } - const n = '\n'; - const prNumber = process.env.PR_NUMBER; - const prTitle = process.env.PR_TITLE; - const prAuthor = process.env.PR_AUTHOR; - const prBaseRef = process.env.PR_BASE_REF; - const prBody = process.env.PR_BODY || '(no description)'; - const filesSummary = process.env.FILES_SUMMARY || '(none)'; - const commentsSummary = process.env.COMMENTS_SUMMARY || '(none)'; - const reviewComments = process.env.REVIEW_COMMENTS_SUMMARY || '(none)'; - const issueTitle = process.env.ISSUE_TITLE || '(none)'; - const issueBody = process.env.ISSUE_BODY || '(none)'; - - const systemMessage = [ - 'You are an expert .NET SDK engineer helping fill in a "tactics" template for a servicing pull request.', - 'A servicing PR targets a stable release branch (e.g. release/9.0.1xx) and undergoes extra scrutiny before merging.', - 'Your job is to produce accurate, specific, and informative tactics based solely on the context provided.', - 'Do not speculate or invent details that are not present in the context.', - 'If information for a section is genuinely not available, say so clearly rather than writing a vague placeholder.', - ].join(n); - - const userPrompt = [ - `## PR #${prNumber}: ${prTitle}`, - `**Author:** @${prAuthor}`, - `**Target branch:** ${prBaseRef}`, - '', - '### PR Description', - prBody, - '', - '### Files Changed', - filesSummary, - '', - '### PR Comments (may include manual testing details)', - commentsSummary, - '', - '### Code Review Comments', - reviewComments, - '', - '## Linked Issue', - `**Title:** ${issueTitle}`, - '**Description:**', - issueBody, - '', - '---', - '', - 'Based on all of the above, fill in the tactics template. Be specific and detailed — avoid vague statements.', - '', - 'Guidelines per section:', - '- **Summary**: 2-4 sentences. State the root cause of the bug or regression being fixed, describe the exact code change made to address it, and explain why this fix is appropriate for a servicing release.', - '- **Customer Impact**: Describe concretely how customers are affected: the symptom (e.g. build error, runtime crash, incorrect output), the exact SDK version(s) impacted, the frequency/severity (all users vs. specific scenario), and any known workarounds.', - '- **Regression?**: Was this introduced by a specific PR or SDK version? Answer "Yes, introduced in #N (description)" or "Yes, introduced in vX.Y.Z" if known. If not a regression or unclear, say "No" or "Unknown — not enough information to determine origin".', - '- **Testing**: List all forms of validation: unit tests added or modified, integration tests, manual repro steps from PR comments, private/lab testing, and CI results. If only CI ran, say so explicitly.', - '- **Risk**: Rate as Low, Medium, or High. Justify the rating by referencing the scope of the change (e.g. lines changed, components touched), test coverage, and any known edge cases or risks.', - '', - 'Respond with ONLY the filled template in exactly this format. Do not include any preamble or text outside the sections:', - '', - '### Summary', - '', - '[your text here]', - '', - '### Customer Impact', - '', - '[your text here]', - '', - '### Regression?', - '', - '[your text here]', - '', - '### Testing', - '', - '[your text here]', - '', - '### Risk', - '', - '[your text here]', - ].join(n); - - const response = await fetch(process.env.COPILOT_API_URL, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${copilotToken}`, - 'Copilot-Integration-Id': 'vscode-chat', - }, - body: JSON.stringify({ - model: process.env.AI_MODEL, - messages: [ - { role: 'system', content: systemMessage }, - { role: 'user', content: userPrompt }, - ], - max_tokens: 800, - temperature: 0.2, - }), - }); - - if (!response.ok) { - const text = await response.text(); - const sanitized = text.replace(/Bearer [a-zA-Z0-9_\-]+/gi, 'Bearer [REDACTED]'); - throw new Error(`AI API call failed (${response.status}): ${sanitized}`); - } - - const data = await response.json(); - const tactics = data.choices[0].message.content.trim(); - core.info('AI-generated tactics content:\n' + tactics); - core.setOutput('tactics_content', tactics); - - - name: Update issue with tactics - id: update-issue - if: steps.gather.outputs.issue_number != '' - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - env: - ISSUE_NUMBER: ${{ steps.gather.outputs.issue_number }} - ISSUE_BODY: ${{ steps.gather.outputs.issue_body }} - TACTICS_CONTENT: ${{ steps.ai-generate.outputs.tactics_content }} - PR_NUMBER: ${{ needs.authorize.outputs.pr_number }} - with: - github-token: ${{ github.token }} - script: | - const { owner, repo } = context.repo; - const issueNumber = Number(process.env.ISSUE_NUMBER); - const prNumber = Number(process.env.PR_NUMBER); - const tacticsContent = process.env.TACTICS_CONTENT; - const currentBody = process.env.ISSUE_BODY || ''; - - const beginMarker = ''; - const endMarker = ''; - const tacticsBlock = `${beginMarker}\n## Tactics\n\n*Generated from PR #${prNumber}*\n\n${tacticsContent}\n${endMarker}`; - - let newBody; - if (currentBody.includes(beginMarker)) { - // Replace existing tactics section if present (idempotent re-runs) - const regex = new RegExp(`${beginMarker}[\\s\\S]*?${endMarker}`, 'g'); - newBody = currentBody.replace(regex, tacticsBlock); - } else { - // Append new tactics section to the existing issue body - newBody = currentBody.trimEnd() + '\n\n' + tacticsBlock; - } - - await github.rest.issues.update({ - owner, - repo, - issue_number: issueNumber, - body: newBody, - }); - - core.info(`Updated issue #${issueNumber} with tactics content.`); - - - name: Add Servicing-consider label to issue - if: steps.gather.outputs.issue_number != '' - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - env: - ISSUE_NUMBER: ${{ steps.gather.outputs.issue_number }} - with: - github-token: ${{ github.token }} - script: | - const { owner, repo } = context.repo; - const issueNumber = Number(process.env.ISSUE_NUMBER); - try { - await github.rest.issues.addLabels({ - owner, - repo, - issue_number: issueNumber, - labels: ['Servicing-consider'], - }); - core.info(`Added 'Servicing-consider' label to issue #${issueNumber}.`); - } catch (error) { - core.warning(`Could not add 'Servicing-consider' label to issue #${issueNumber}: ${error.message}`); - } - - - name: Comment on PR - Success - if: steps.gather.outputs.issue_number != '' - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - env: - ISSUE_NUMBER: ${{ steps.gather.outputs.issue_number }} - with: - github-token: ${{ github.token }} - script: | - const { owner, repo } = context.repo; - const issueNumber = process.env.ISSUE_NUMBER; - const body = `✅ Tactics have been added to issue #${issueNumber} and the \`Servicing-consider\` label has been applied. See [workflow details](${process.env.RUN_URL}).`; - await github.rest.issues.createComment({ - owner, - repo, - issue_number: Number(context.payload.issue.number), - body, - }); - await github.rest.reactions.createForIssueComment({ - owner, - repo, - comment_id: Number(context.payload.comment.id), - content: '+1', - }); - - - name: Comment on PR - No linked issue found - if: steps.gather.outputs.issue_number == '' - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - env: - TACTICS_CONTENT: ${{ steps.ai-generate.outputs.tactics_content }} - PR_NUMBER: ${{ needs.authorize.outputs.pr_number }} - PR_BODY: ${{ steps.gather.outputs.pr_body }} - with: - github-token: ${{ github.token }} - script: | - const { owner, repo } = context.repo; - const prNumber = Number(process.env.PR_NUMBER); - const tacticsContent = process.env.TACTICS_CONTENT || ''; - const currentBody = process.env.PR_BODY || ''; - - if (tacticsContent) { - const beginMarker = ''; - const endMarker = ''; - const tacticsBlock = `${beginMarker}\n## Tactics\n\n*Generated from PR #${prNumber} (no linked issue found)*\n\n${tacticsContent}\n${endMarker}`; - - let newBody; - if (currentBody.includes(beginMarker)) { - const regex = new RegExp(`${beginMarker}[\\s\\S]*?${endMarker}`, 'g'); - newBody = currentBody.replace(regex, tacticsBlock); - } else { - newBody = currentBody.trimEnd() + '\n\n' + tacticsBlock; - } - - await github.rest.pulls.update({ - owner, - repo, - pull_number: prNumber, - body: newBody, - }); - - core.info(`Updated PR #${prNumber} description with tactics content.`); - - await github.rest.issues.createComment({ - owner, - repo, - issue_number: Number(context.payload.issue.number), - body: `⚠️ No linked issue found for this PR. Tactics have been added to the PR description instead. To apply tactics to a specific issue, use \`/tactics \`. See [workflow details](${process.env.RUN_URL}).`, - }); - } else { - await github.rest.issues.createComment({ - owner, - repo, - issue_number: Number(context.payload.issue.number), - body: '⚠️ Could not find a linked issue for this PR and no tactics were generated. Please specify the issue number explicitly using `/tactics `.', - }); - } - - await github.rest.reactions.createForIssueComment({ - owner, - repo, - comment_id: Number(context.payload.comment.id), - content: '+1', - }); - - report-failure: - name: Report Failure - needs: [authorize, select-pat, update] - if: needs.authorize.outputs.should_run == 'true' && needs.authorize.result == 'success' && failure() - runs-on: ubuntu-latest - permissions: - issues: write - pull-requests: write - - steps: - - name: Comment on PR - Failure - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 - with: - github-token: ${{ github.token }} - script: | - const { owner, repo } = context.repo; - await github.rest.issues.createComment({ - owner, - repo, - issue_number: Number(context.payload.issue.number), - body: `❌ Failed to generate or apply tactics. Please check [the workflow run](${process.env.RUN_URL}) for details.`, - }); - await github.rest.reactions.createForIssueComment({ - owner, - repo, - comment_id: Number(context.payload.comment.id), - content: 'confused', - }); From 19633cda6455e80c562b857dfb8cad005da0470d Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Tue, 7 Apr 2026 16:35:37 -0700 Subject: [PATCH 104/230] Rename tactics workflow to 'Add Tactics Template on Comment' Rename .md workflow file and regenerate lock file via gh aw compile. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- ... add-tactics-template-on-comment.lock.yml} | 32 +++++++++---------- ....md => add-tactics-template-on-comment.md} | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) rename .github/workflows/{update-tactics-on-comment.lock.yml => add-tactics-template-on-comment.lock.yml} (98%) rename .github/workflows/{update-tactics-on-comment.md => add-tactics-template-on-comment.md} (99%) diff --git a/.github/workflows/update-tactics-on-comment.lock.yml b/.github/workflows/add-tactics-template-on-comment.lock.yml similarity index 98% rename from .github/workflows/update-tactics-on-comment.lock.yml rename to .github/workflows/add-tactics-template-on-comment.lock.yml index 7461b474d267..f202f592044b 100644 --- a/.github/workflows/update-tactics-on-comment.lock.yml +++ b/.github/workflows/add-tactics-template-on-comment.lock.yml @@ -45,7 +45,7 @@ # - actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 # - github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 -name: "Update Tactics On Comment" +name: "Add Tactics Template On Comment" "on": issue_comment: types: @@ -78,7 +78,7 @@ permissions: {} concurrency: group: "gh-aw-${{ github.workflow }}-${{ github.event.issue.number || github.run_id }}" -run-name: "Update Tactics On Comment" +run-name: "Add Tactics Template On Comment" jobs: activation: @@ -114,7 +114,7 @@ jobs: GH_AW_INFO_VERSION: "latest" GH_AW_INFO_AGENT_VERSION: "latest" GH_AW_INFO_CLI_VERSION: "v0.67.1" - GH_AW_INFO_WORKFLOW_NAME: "Update Tactics On Comment" + GH_AW_INFO_WORKFLOW_NAME: "Add Tactics Template On Comment" GH_AW_INFO_EXPERIMENTAL: "false" GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true" GH_AW_INFO_STAGED: "false" @@ -148,7 +148,7 @@ jobs: - name: Check workflow lock file uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 env: - GH_AW_WORKFLOW_FILE: "update-tactics-on-comment.lock.yml" + GH_AW_WORKFLOW_FILE: "add-tactics-template-on-comment.lock.yml" GH_AW_CONTEXT_WORKFLOW_REF: "${{ github.workflow_ref }}" with: script: | @@ -238,7 +238,7 @@ jobs: fi cat << 'GH_AW_PROMPT_f7cb0ab26633bbf6_EOF' - {{#runtime-import .github/workflows/update-tactics-on-comment.md}} + {{#runtime-import .github/workflows/add-tactics-template-on-comment.md}} GH_AW_PROMPT_f7cb0ab26633bbf6_EOF } > "$GH_AW_PROMPT" - name: Interpolate variables and render templates @@ -328,7 +328,7 @@ jobs: GH_AW_ASSETS_BRANCH: "" GH_AW_ASSETS_MAX_SIZE_KB: 0 GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs - GH_AW_WORKFLOW_ID_SANITIZED: updatetacticsoncomment + GH_AW_WORKFLOW_ID_SANITIZED: addtacticstemplateoncomment outputs: checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }} effective_tokens: ${{ steps.parse-mcp-gateway.outputs.effective_tokens }} @@ -959,7 +959,7 @@ jobs: issues: write pull-requests: write concurrency: - group: "gh-aw-conclusion-update-tactics-on-comment" + group: "gh-aw-conclusion-add-tactics-template-on-comment" cancel-in-progress: false outputs: incomplete_count: ${{ steps.report_incomplete.outputs.incomplete_count }} @@ -994,7 +994,7 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_NOOP_MAX: "1" - GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} GH_AW_NOOP_REPORT_AS_ISSUE: "true" @@ -1011,7 +1011,7 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_MISSING_TOOL_CREATE_ISSUE: "true" - GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -1025,7 +1025,7 @@ jobs: env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true" - GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -1039,10 +1039,10 @@ jobs: uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} - GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} - GH_AW_WORKFLOW_ID: "update-tactics-on-comment" + GH_AW_WORKFLOW_ID: "add-tactics-template-on-comment" GH_AW_ENGINE_ID: "copilot" GH_AW_SECRET_VERIFICATION_RESULT: ${{ needs.activation.outputs.secret_verification_result }} GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }} @@ -1139,7 +1139,7 @@ jobs: if: always() && steps.detection_guard.outputs.run_detection == 'true' uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 env: - WORKFLOW_NAME: "Update Tactics On Comment" + WORKFLOW_NAME: "Add Tactics Template On Comment" WORKFLOW_DESCRIPTION: "No description provided" HAS_PATCH: ${{ needs.agent.outputs.has_patch }} with: @@ -1272,12 +1272,12 @@ jobs: pull-requests: write timeout-minutes: 15 env: - GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/update-tactics-on-comment" + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/add-tactics-template-on-comment" GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }} GH_AW_ENGINE_ID: "copilot" GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }} - GH_AW_WORKFLOW_ID: "update-tactics-on-comment" - GH_AW_WORKFLOW_NAME: "Update Tactics On Comment" + GH_AW_WORKFLOW_ID: "add-tactics-template-on-comment" + GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" outputs: code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }} code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }} diff --git a/.github/workflows/update-tactics-on-comment.md b/.github/workflows/add-tactics-template-on-comment.md similarity index 99% rename from .github/workflows/update-tactics-on-comment.md rename to .github/workflows/add-tactics-template-on-comment.md index de32f6188c6e..2a7cb642968e 100644 --- a/.github/workflows/update-tactics-on-comment.md +++ b/.github/workflows/add-tactics-template-on-comment.md @@ -73,7 +73,7 @@ engine: COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} --- -## Update Tactics on Command +## Add Tactics Template on Comment You are an expert .NET SDK engineer who helps fill in "tactics" for servicing pull requests in the dotnet/sdk repository. A servicing PR targets a stable release branch (e.g. `release/9.0.1xx`) and undergoes extra scrutiny before merging. Your job is to produce accurate, specific, and informative tactics based on the PR context. From 87ba49e522ea7e1db5748fe69ed7d1d6d5af4162 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 03:11:48 +0000 Subject: [PATCH 105/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 266 +++++++-------- eng/Version.Details.xml | 673 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 475 insertions(+), 474 deletions(-) diff --git a/NuGet.config b/NuGet.config index e226baf9b0b6..903609549285 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 94492476bae6..1a73d58a3c79 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,139 +8,139 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-preview.26203.109 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26203-109 - 7.0.2-rc.20409 - 10.0.106 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.0-preview.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 2.0.0-preview.1.26203.109 - 2.2.6 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26203.109 - 10.0.6 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26202.103 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26202-103 + 7.3.0-rc.20303 + 10.0.202 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.0-preview.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26202.103 + 10.0.4 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26203.109 - 10.0.6-servicing.26203.109 - 18.0.2-release-26203-109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 18.0.2-release-26203-109 - 18.0.2-release-26203-109 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26202.103 + 10.0.4-servicing.26119.110 + 18.3.0-release-26202-103 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 18.3.0-release-26202-103 + 18.3.0-release-26202-103 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 2.3.0-preview.26202.5 4.3.0-preview.26202.5 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 3a7cdb3a56c8..a1ff22313714 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 https://github.com/microsoft/testfx @@ -569,9 +568,9 @@ https://github.com/microsoft/testfx cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 6f9207378ac4..0552121a41ea 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.109", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.109", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26202.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26202.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 872c41311658fd364e4dff47f4ea60d63c8fd724 Mon Sep 17 00:00:00 2001 From: elias Date: Wed, 8 Apr 2026 14:50:23 +0200 Subject: [PATCH 106/230] Ignore Cache files generated by Official C# Dev Kit --- .../content/Gitignore/.gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitignore/.gitignore b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitignore/.gitignore index 3b15c69e8ec2..1fb4cc73a492 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitignore/.gitignore +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitignore/.gitignore @@ -394,6 +394,9 @@ FodyWeavers.xsd !.vscode/extensions.json *.code-workspace +# Offical VS Code C# Dev Kit Extension exclusion +*.lscache + # Local History for Visual Studio Code .history/ From ac5ec799af2fdcf5531b7f303b18f72eb3fd10f7 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 8 Apr 2026 16:23:05 +0000 Subject: [PATCH 107/230] Update dependencies from build 309470 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26202.103 -> 10.0.0-preview.26208.102) Microsoft.Build (Version 18.3.3 -> 18.3.3) Microsoft.Build.Localization (Version 18.3.3-servicing-26202-103 -> 18.3.3-servicing-26208-102) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.3.0-rc.20303 -> 7.3.0-rc.20902) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.202 -> 10.0.202) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.3.0-2.26202.103 -> 5.3.0-2.26208.102) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26202.103 -> 10.0.0-beta.26208.102) Microsoft.FSharp.Compiler (Version 15.2.202-servicing.26202.103 -> 15.2.202-servicing.26208.102) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26202-103 -> 18.3.0-release-26208-102) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.202-servicing.26202.103 -> 10.0.202-servicing.26208.102) [[ commit created by automation ]] --- NuGet.config | 2 +- eng/Version.Details.props | 96 ++++++++--------- eng/Version.Details.xml | 220 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 161 insertions(+), 161 deletions(-) diff --git a/NuGet.config b/NuGet.config index 903609549285..612e59b10559 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 1a73d58a3c79..74e42fd4114f 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,37 +30,37 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4-servicing.26119.110 10.0.4-servicing.26119.110 - 10.0.0-preview.26202.103 + 10.0.0-preview.26208.102 10.0.4 10.0.4 18.3.3 - 18.3.3-servicing-26202-103 - 7.3.0-rc.20303 + 18.3.3-servicing-26208-102 + 7.3.0-rc.20902 10.0.202 - 5.3.0-2.26202.103 - 5.3.0-2.26202.103 - 5.3.0-2.26202.103 - 5.3.0-2.26202.103 - 5.3.0-2.26202.103 - 5.3.0-2.26202.103 - 5.3.0-2.26202.103 - 5.3.0-2.26202.103 - 10.0.0-preview.26202.103 - 5.3.0-2.26202.103 - 5.3.0-2.26202.103 + 5.3.0-2.26208.102 + 5.3.0-2.26208.102 + 5.3.0-2.26208.102 + 5.3.0-2.26208.102 + 5.3.0-2.26208.102 + 5.3.0-2.26208.102 + 5.3.0-2.26208.102 + 5.3.0-2.26208.102 + 10.0.0-preview.26208.102 + 5.3.0-2.26208.102 + 5.3.0-2.26208.102 2.0.0-preview.1.26119.110 2.2.4 - 10.0.0-beta.26202.103 - 10.0.0-beta.26202.103 - 10.0.0-beta.26202.103 - 10.0.0-beta.26202.103 - 10.0.0-beta.26202.103 - 10.0.0-beta.26202.103 + 10.0.0-beta.26208.102 + 10.0.0-beta.26208.102 + 10.0.0-beta.26208.102 + 10.0.0-beta.26208.102 + 10.0.0-beta.26208.102 + 10.0.0-beta.26208.102 10.0.4 10.0.4 10.0.4-servicing.26119.110 - 10.0.0-beta.26202.103 - 10.0.0-beta.26202.103 + 10.0.0-beta.26208.102 + 10.0.0-beta.26208.102 10.0.4 10.0.4 10.0.4 @@ -70,17 +70,17 @@ This file should be imported by eng/Versions.props 10.0.4 10.0.4 10.0.4 - 15.2.202-servicing.26202.103 + 15.2.202-servicing.26208.102 10.0.4 - 5.3.0-2.26202.103 - 5.3.0-2.26202.103 + 5.3.0-2.26208.102 + 5.3.0-2.26208.102 10.0.4-servicing.26119.110 10.0.4 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26202.103 + 10.0.0-preview.26208.102 10.0.4-servicing.26119.110 - 18.3.0-release-26202-103 + 18.3.0-release-26208-102 10.0.4 10.0.4-servicing.26119.110 10.0.202 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.202 10.0.202 10.0.202 - 10.0.202-servicing.26202.103 + 10.0.202-servicing.26208.102 10.0.202 - 10.0.202-servicing.26202.103 + 10.0.202-servicing.26208.102 10.0.202 10.0.202 - 10.0.202-servicing.26202.103 - 18.3.0-release-26202-103 - 18.3.0-release-26202-103 + 10.0.202-servicing.26208.102 + 18.3.0-release-26208-102 + 18.3.0-release-26208-102 3.2.4 10.0.4 10.0.4-servicing.26119.110 10.0.4 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 - 7.3.0-rc.20303 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 + 7.3.0-rc.20902 10.0.4 2.0.4 10.0.4 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a1ff22313714..ae26dac1d072 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -74,136 +74,136 @@ https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -370,25 +370,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -407,27 +407,27 @@ https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 @@ -514,9 +514,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -524,37 +524,37 @@ - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 - + https://github.com/dotnet/dotnet - 0c538445912b51b36242aac75dd5e81265bbe37f + ca08b17aa41cb6c2cf159f3bb7925210147a9510 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 0552121a41ea..80afb86eeaec 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26202.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26202.103", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26208.102", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26208.102", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From d7cac53966f5263c7c82b3f38cc1d140179aa004 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Wed, 8 Apr 2026 11:20:06 -0700 Subject: [PATCH 108/230] =?UTF-8?q?Update=20Helix=20queue=20names:=20vs202?= =?UTF-8?q?2.pre=20=E2=86=92=20vs2022?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The windows.amd64.vs2022.pre.open and windows.amd64.vs2022.pre queues have been renamed to windows.amd64.vs2022.open and windows.amd64.vs2022 respectively. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .vsts-ci.yml | 2 +- .vsts-pr.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vsts-ci.yml b/.vsts-ci.yml index b4c1eb53de50..10e64d3ae170 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -107,7 +107,7 @@ extends: name: $(DncEngInternalBuildPool) image: windows.vs2022.amd64 os: windows - helixTargetQueue: windows.amd64.vs2022.pre + helixTargetQueue: windows.amd64.vs2022 oneESCompat: templateFolderName: templates-official publishTaskPrefix: 1ES. diff --git a/.vsts-pr.yml b/.vsts-pr.yml index 5cd62e9de328..c47f854922f5 100644 --- a/.vsts-pr.yml +++ b/.vsts-pr.yml @@ -45,7 +45,7 @@ stages: name: $(DncEngPublicBuildPool) demands: ImageOverride -equals windows.vs2022.amd64.open os: windows - helixTargetQueue: windows.amd64.vs2022.pre.open + helixTargetQueue: windows.amd64.vs2022.open ############### LINUX ############### - template: /eng/pipelines/templates/jobs/sdk-job-matrix.yml From e94b91d653bab653b982afea9e7d9e1f03b9a280 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 18 Mar 2026 21:53:38 +0000 Subject: [PATCH 109/230] Update dependencies from https://github.com/dotnet/roslyn-analyzers build 20260318.1 On relative base path root Microsoft.SourceBuild.Intermediate.roslyn-analyzers , Microsoft.CodeAnalysis.NetAnalyzers From Version 9.0.0-preview.26055.3 -> To Version 9.0.0-preview.26168.1 --- NuGet.config | 7 ------- eng/Version.Details.xml | 8 ++++---- eng/Versions.props | 2 +- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/NuGet.config b/NuGet.config index e4b7dcd1b1e0..4460caf81a88 100644 --- a/NuGet.config +++ b/NuGet.config @@ -24,10 +24,8 @@ - - @@ -37,13 +35,11 @@ - - @@ -72,13 +68,10 @@ - - - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 62fe950cdf54..764a4b0e87c5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -374,18 +374,18 @@ 63ae81154c50a1cf9287cc47d8351d55b4289e6d - + https://github.com/dotnet/roslyn-analyzers - 742cc53ecfc7e7245f950e5ba58268ed2829913c + 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 https://github.com/dotnet/roslyn 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn-analyzers - 742cc53ecfc7e7245f950e5ba58268ed2829913c + 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 diff --git a/eng/Versions.props b/eng/Versions.props index 01368d5dccdf..b0b89a9ff312 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -160,7 +160,7 @@ - 9.0.0-preview.26055.3 + 9.0.0-preview.26168.1 3.12.0-beta1.26064.1 From 30d3c4e28fce2c5b88d1f77dbe4b358a364f1a1b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sun, 22 Mar 2026 08:56:49 +0000 Subject: [PATCH 110/230] Update dependencies from https://github.com/dotnet/roslyn-analyzers build 20260322.3 On relative base path root Microsoft.SourceBuild.Intermediate.roslyn-analyzers , Microsoft.CodeAnalysis.NetAnalyzers From Version 9.0.0-preview.26055.3 -> To Version 9.0.0-preview.26172.3 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 764a4b0e87c5..6da48ee06579 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -374,7 +374,7 @@ 63ae81154c50a1cf9287cc47d8351d55b4289e6d - + https://github.com/dotnet/roslyn-analyzers 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 @@ -383,7 +383,7 @@ 450493a9b4ec6337bced0120e97cb76f4ed783db - + https://github.com/dotnet/roslyn-analyzers 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 diff --git a/eng/Versions.props b/eng/Versions.props index b0b89a9ff312..929c8cfcad07 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -160,7 +160,7 @@ - 9.0.0-preview.26168.1 + 9.0.0-preview.26172.3 3.12.0-beta1.26064.1 From 6bcfed02166a3f9e236f11392235ad0813f77e69 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 07:07:50 +0000 Subject: [PATCH 111/230] Reset files to release/10.0.1xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 59 +- eng/Version.Details.props | 290 +++++ eng/Version.Details.xml | 1081 ++++++++--------- eng/common/CIBuild.cmd | 2 +- eng/common/SetupNugetSources.ps1 | 90 +- eng/common/SetupNugetSources.sh | 192 +-- eng/common/build.ps1 | 11 +- eng/common/build.sh | 33 +- eng/common/cibuild.sh | 2 +- eng/common/core-templates/job/job.yml | 48 +- eng/common/core-templates/job/onelocbuild.yml | 39 +- .../job/publish-build-assets.yml | 83 +- .../core-templates/job/source-build.yml | 15 +- .../job/source-index-stage1.yml | 47 +- .../core-templates/jobs/codeql-build.yml | 1 - eng/common/core-templates/jobs/jobs.yml | 15 +- .../core-templates/jobs/source-build.yml | 23 +- .../core-templates/post-build/post-build.yml | 42 +- .../steps/cleanup-microbuild.yml | 28 + .../core-templates/steps/generate-sbom.yml | 2 +- .../steps/get-delegation-sas.yml | 11 +- .../steps/install-microbuild.yml | 110 ++ .../core-templates/steps/publish-logs.yml | 8 +- .../core-templates/steps/source-build.yml | 88 +- .../steps/source-index-stage1-publish.yml | 35 + eng/common/cross/arm64/tizen/tizen.patch | 2 +- eng/common/cross/build-android-rootfs.sh | 49 +- eng/common/cross/build-rootfs.sh | 237 ++-- eng/common/cross/install-debs.py | 334 +++++ eng/common/cross/tizen-build-rootfs.sh | 0 eng/common/cross/tizen-fetch.sh | 9 +- eng/common/cross/toolchain.cmake | 82 +- eng/common/darc-init.sh | 2 +- eng/common/dotnet.cmd | 7 + eng/common/dotnet.ps1 | 11 + eng/common/dotnet.sh | 26 + eng/common/generate-locproject.ps1 | 49 +- eng/common/generate-sbom-prep.sh | 0 eng/common/native/install-dependencies.sh | 62 + eng/common/post-build/publish-using-darc.ps1 | 9 +- eng/common/post-build/redact-logs.ps1 | 5 +- eng/common/sdk-task.ps1 | 14 +- eng/common/sdk-task.sh | 121 ++ eng/common/sdl/packages.config | 2 +- eng/common/templates-official/job/job.yml | 4 +- .../steps/publish-build-artifacts.yml | 7 +- .../steps/source-index-stage1-publish.yml | 7 + .../variables/pool-providers.yml | 2 +- eng/common/templates/job/job.yml | 4 +- .../steps/publish-build-artifacts.yml | 8 +- .../steps/source-index-stage1-publish.yml | 7 + eng/common/templates/steps/vmr-sync.yml | 186 +++ .../templates/variables/pool-providers.yml | 2 +- eng/common/templates/vmr-build-pr.yml | 43 + eng/common/tools.ps1 | 71 +- eng/common/tools.sh | 81 +- eng/common/vmr-sync.ps1 | 164 +++ eng/common/vmr-sync.sh | 227 ++++ global.json | 21 +- 59 files changed, 2940 insertions(+), 1270 deletions(-) create mode 100644 eng/Version.Details.props mode change 100644 => 100755 eng/common/SetupNugetSources.sh create mode 100644 eng/common/core-templates/steps/cleanup-microbuild.yml create mode 100644 eng/common/core-templates/steps/install-microbuild.yml create mode 100644 eng/common/core-templates/steps/source-index-stage1-publish.yml create mode 100755 eng/common/cross/install-debs.py mode change 100644 => 100755 eng/common/cross/tizen-build-rootfs.sh mode change 100644 => 100755 eng/common/cross/tizen-fetch.sh create mode 100644 eng/common/dotnet.cmd create mode 100644 eng/common/dotnet.ps1 create mode 100755 eng/common/dotnet.sh mode change 100644 => 100755 eng/common/generate-sbom-prep.sh create mode 100755 eng/common/native/install-dependencies.sh create mode 100755 eng/common/sdk-task.sh create mode 100644 eng/common/templates-official/steps/source-index-stage1-publish.yml create mode 100644 eng/common/templates/steps/source-index-stage1-publish.yml create mode 100644 eng/common/templates/steps/vmr-sync.yml create mode 100644 eng/common/templates/vmr-build-pr.yml create mode 100755 eng/common/vmr-sync.ps1 create mode 100755 eng/common/vmr-sync.sh diff --git a/NuGet.config b/NuGet.config index e4b7dcd1b1e0..e226baf9b0b6 100644 --- a/NuGet.config +++ b/NuGet.config @@ -3,48 +3,15 @@ - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - @@ -55,6 +22,8 @@ + + @@ -64,22 +33,14 @@ + + + - - - - - - - - - - - diff --git a/eng/Version.Details.props b/eng/Version.Details.props new file mode 100644 index 000000000000..94492476bae6 --- /dev/null +++ b/eng/Version.Details.props @@ -0,0 +1,290 @@ + + + + + 2.1.0 + + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.0-preview.26203.109 + 10.0.6 + 10.0.6 + 18.0.11 + 18.0.11-servicing-26203-109 + 7.0.2-rc.20409 + 10.0.106 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 10.0.0-preview.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 2.0.0-preview.1.26203.109 + 2.2.6 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 14.0.106-servicing.26203.109 + 10.0.6 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6 + 10.0.0-preview.7.25377.103 + 10.0.0-preview.26203.109 + 10.0.6-servicing.26203.109 + 18.0.2-release-26203-109 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106-servicing.26203.109 + 10.0.106 + 10.0.106-servicing.26203.109 + 10.0.106 + 10.0.106 + 10.0.106-servicing.26203.109 + 18.0.2-release-26203-109 + 18.0.2-release-26203-109 + 3.2.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 10.0.6 + 2.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + + 2.3.0-preview.26202.5 + 4.3.0-preview.26202.5 + + + + + $(NETStandardLibraryRefPackageVersion) + + $(dotnetdevcertsPackageVersion) + $(dotnetuserjwtsPackageVersion) + $(dotnetusersecretsPackageVersion) + $(MicrosoftAspNetCoreAnalyzersPackageVersion) + $(MicrosoftAspNetCoreAppRefPackageVersion) + $(MicrosoftAspNetCoreAppRefInternalPackageVersion) + $(MicrosoftAspNetCoreAuthenticationFacebookPackageVersion) + $(MicrosoftAspNetCoreAuthenticationGooglePackageVersion) + $(MicrosoftAspNetCoreAuthenticationMicrosoftAccountPackageVersion) + $(MicrosoftAspNetCoreAuthorizationPackageVersion) + $(MicrosoftAspNetCoreComponentsPackageVersion) + $(MicrosoftAspNetCoreComponentsAnalyzersPackageVersion) + $(MicrosoftAspNetCoreComponentsFormsPackageVersion) + $(MicrosoftAspNetCoreComponentsSdkAnalyzersPackageVersion) + $(MicrosoftAspNetCoreComponentsWebPackageVersion) + $(MicrosoftAspNetCoreComponentsWebAssemblyPackageVersion) + $(MicrosoftAspNetCoreComponentsWebAssemblyServerPackageVersion) + $(MicrosoftAspNetCoreComponentsWebViewPackageVersion) + $(MicrosoftAspNetCoreDeveloperCertificatesXPlatPackageVersion) + $(MicrosoftAspNetCoreMetadataPackageVersion) + $(MicrosoftAspNetCoreMvcAnalyzersPackageVersion) + $(MicrosoftAspNetCoreMvcApiAnalyzersPackageVersion) + $(MicrosoftAspNetCoreMvcRazorExtensionsToolingInternalPackageVersion) + $(MicrosoftAspNetCoreTestHostPackageVersion) + $(MicrosoftBclAsyncInterfacesPackageVersion) + $(MicrosoftBuildPackageVersion) + $(MicrosoftBuildLocalizationPackageVersion) + $(MicrosoftBuildNuGetSdkResolverPackageVersion) + $(MicrosoftBuildTasksGitPackageVersion) + $(MicrosoftCodeAnalysisPackageVersion) + $(MicrosoftCodeAnalysisBuildClientPackageVersion) + $(MicrosoftCodeAnalysisCSharpPackageVersion) + $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) + $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) + $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) + $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftDeploymentDotNetReleasesPackageVersion) + $(MicrosoftDiaSymReaderPackageVersion) + $(MicrosoftDotNetArcadeSdkPackageVersion) + $(MicrosoftDotNetBuildTasksInstallersPackageVersion) + $(MicrosoftDotNetBuildTasksTemplatingPackageVersion) + $(MicrosoftDotNetBuildTasksWorkloadsPackageVersion) + $(MicrosoftDotNetHelixSdkPackageVersion) + $(MicrosoftDotNetSignToolPackageVersion) + $(MicrosoftDotNetWebItemTemplates100PackageVersion) + $(MicrosoftDotNetWebProjectTemplates100PackageVersion) + $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) + $(MicrosoftDotNetXliffTasksPackageVersion) + $(MicrosoftDotNetXUnitExtensionsPackageVersion) + $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyModelPackageVersion) + $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) + $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) + $(MicrosoftExtensionsFileSystemGlobbingPackageVersion) + $(MicrosoftExtensionsLoggingPackageVersion) + $(MicrosoftExtensionsLoggingAbstractionsPackageVersion) + $(MicrosoftExtensionsLoggingConsolePackageVersion) + $(MicrosoftExtensionsObjectPoolPackageVersion) + $(MicrosoftFSharpCompilerPackageVersion) + $(MicrosoftJSInteropPackageVersion) + $(MicrosoftNetCompilersToolsetPackageVersion) + $(MicrosoftNetCompilersToolsetFrameworkPackageVersion) + $(MicrosoftNETHostModelPackageVersion) + $(MicrosoftNETILLinkTasksPackageVersion) + $(MicrosoftNETRuntimeEmscripten3156Cachewinx64PackageVersion) + $(MicrosoftNETRuntimeEmscriptenSdkInternalPackageVersion) + $(MicrosoftNETSdkRazorSourceGeneratorsTransportPackageVersion) + $(MicrosoftNETSdkWindowsDesktopPackageVersion) + $(MicrosoftNETTestSdkPackageVersion) + $(MicrosoftNETCoreAppRefPackageVersion) + $(MicrosoftNETCorePlatformsPackageVersion) + $(MicrosoftSourceLinkAzureReposGitPackageVersion) + $(MicrosoftSourceLinkBitbucketGitPackageVersion) + $(MicrosoftSourceLinkCommonPackageVersion) + $(MicrosoftSourceLinkGitHubPackageVersion) + $(MicrosoftSourceLinkGitLabPackageVersion) + $(MicrosoftTemplateEngineAbstractionsPackageVersion) + $(MicrosoftTemplateEngineAuthoringTemplateVerifierPackageVersion) + $(MicrosoftTemplateEngineEdgePackageVersion) + $(MicrosoftTemplateEngineMocksPackageVersion) + $(MicrosoftTemplateEngineOrchestratorRunnableProjectsPackageVersion) + $(MicrosoftTemplateEngineTestHelperPackageVersion) + $(MicrosoftTemplateEngineUtilsPackageVersion) + $(MicrosoftTemplateSearchCommonPackageVersion) + $(MicrosoftTemplateSearchTemplateDiscoveryPackageVersion) + $(MicrosoftTestPlatformBuildPackageVersion) + $(MicrosoftTestPlatformCLIPackageVersion) + $(MicrosoftWebXdtPackageVersion) + $(MicrosoftWin32SystemEventsPackageVersion) + $(MicrosoftWindowsDesktopAppInternalPackageVersion) + $(MicrosoftWindowsDesktopAppRefPackageVersion) + $(NuGetBuildTasksPackageVersion) + $(NuGetBuildTasksConsolePackageVersion) + $(NuGetBuildTasksPackPackageVersion) + $(NuGetCommandLineXPlatPackageVersion) + $(NuGetCommandsPackageVersion) + $(NuGetCommonPackageVersion) + $(NuGetConfigurationPackageVersion) + $(NuGetCredentialsPackageVersion) + $(NuGetDependencyResolverCorePackageVersion) + $(NuGetFrameworksPackageVersion) + $(NuGetLibraryModelPackageVersion) + $(NuGetLocalizationPackageVersion) + $(NuGetPackagingPackageVersion) + $(NuGetProjectModelPackageVersion) + $(NuGetProtocolPackageVersion) + $(NuGetVersioningPackageVersion) + $(SystemCodeDomPackageVersion) + $(SystemCommandLinePackageVersion) + $(SystemComponentModelCompositionPackageVersion) + $(SystemCompositionAttributedModelPackageVersion) + $(SystemCompositionConventionPackageVersion) + $(SystemCompositionHostingPackageVersion) + $(SystemCompositionRuntimePackageVersion) + $(SystemCompositionTypedPartsPackageVersion) + $(SystemConfigurationConfigurationManagerPackageVersion) + $(SystemDiagnosticsDiagnosticSourcePackageVersion) + $(SystemFormatsAsn1PackageVersion) + $(SystemIOHashingPackageVersion) + $(SystemReflectionMetadataLoadContextPackageVersion) + $(SystemResourcesExtensionsPackageVersion) + $(SystemSecurityCryptographyPkcsPackageVersion) + $(SystemSecurityCryptographyProtectedDataPackageVersion) + $(SystemSecurityCryptographyXmlPackageVersion) + $(SystemSecurityPermissionsPackageVersion) + $(SystemServiceProcessServiceControllerPackageVersion) + $(SystemTextEncodingCodePagesPackageVersion) + $(SystemTextJsonPackageVersion) + $(SystemWindowsExtensionsPackageVersion) + + $(MicrosoftTestingPlatformPackageVersion) + $(MSTestPackageVersion) + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 62fe950cdf54..3a7cdb3a56c8 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,634 +1,577 @@ + - - https://github.com/dotnet/templating - 34a5893f3ec336db55d3da5621a96106b418db5b - - - https://github.com/dotnet/templating - 34a5893f3ec336db55d3da5621a96106b418db5b - - - - https://github.com/dotnet/templating - b73682307aa0128c5edbec94c2e6a070d13ae6bb - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - - https://github.com/dotnet/emsdk - fb1326b0f4622f04f21584dc133f1c71f7554509 - - - - https://github.com/dotnet/emsdk - fb1326b0f4622f04f21584dc133f1c71f7554509 - - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - - https://github.com/dotnet/fsharp - 14987c804f33917bf15f4c25e0cd16ecd01807f4 - - - - https://github.com/dotnet/fsharp - 14987c804f33917bf15f4c25e0cd16ecd01807f4 - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 - - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6a953e76162f3f079405f80e28664fa51b136740 + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 - - - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 - + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 72d4e0415ec4ae0771a5df3e05260691a5d6775b - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-winforms - 9399df09f8f8a187dcf1941b1d07a538ca197171 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 72d4e0415ec4ae0771a5df3e05260691a5d6775b - - - https://github.com/dotnet/xdt - 63ae81154c50a1cf9287cc47d8351d55b4289e6d - - - - https://github.com/dotnet/xdt - 63ae81154c50a1cf9287cc47d8351d55b4289e6d - - - - https://github.com/dotnet/roslyn-analyzers - 742cc53ecfc7e7245f950e5ba58268ed2829913c - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn-analyzers - 742cc53ecfc7e7245f950e5ba58268ed2829913c - - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - - https://github.com/dotnet/symreader - 0710a7892d89999956e8808c28e9dd0512bd53f3 - - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db - - - - - https://github.com/dotnet/source-build-externals - 71dbdccd13f28cfd1a35649263b55ebbeab26ee7 - - - - - https://github.com/dotnet/source-build-reference-packages - 6092b62b7f35fddbd6bf31e19b2ab64bbe2443ae - - - - https://github.com/dotnet/deployment-tools - b2d5c0c5841de4bc036ef4c84b5db3532504e5f3 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - - - https://github.com/dotnet/deployment-tools - b2d5c0c5841de4bc036ef4c84b5db3532504e5f3 - - - - - https://github.com/dotnet/symreader - 0710a7892d89999956e8808c28e9dd0512bd53f3 - + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://github.com/dotnet/arcade-services - e156e649f28395d9d0ee1e848225a689b59e0fd3 - - - https://github.com/dotnet/arcade-services - e156e649f28395d9d0ee1e848225a689b59e0fd3 - - - https://github.com/dotnet/scenario-tests - acd9dc7ae0717d7f4fb6ac2b76ea364e94b4ceb3 - - - - https://github.com/dotnet/scenario-tests - acd9dc7ae0717d7f4fb6ac2b76ea364e94b4ceb3 - - - - - https://github.com/dotnet/aspire - 5fa9337a84a52e9bd185d04d156eccbdcf592f74 - - - - https://github.com/dotnet/aspire - 5fa9337a84a52e9bd185d04d156eccbdcf592f74 - - - - https://github.com/dotnet/runtime - e77011b31a3e5c47d931248a64b47f9b2d47853d + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/microsoft/testfx + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + + + https://github.com/microsoft/testfx + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a diff --git a/eng/common/CIBuild.cmd b/eng/common/CIBuild.cmd index 56c2f25ac22f..ac1f72bf94e0 100644 --- a/eng/common/CIBuild.cmd +++ b/eng/common/CIBuild.cmd @@ -1,2 +1,2 @@ @echo off -powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" \ No newline at end of file +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 792b60b49d42..65ed3a8adef0 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -1,13 +1,14 @@ # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # # See example call for this script below. # # - task: PowerShell@2 -# displayName: Setup Private Feeds Credentials +# displayName: Setup internal Feeds Credentials # condition: eq(variables['Agent.OS'], 'Windows_NT') # inputs: # filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 @@ -34,19 +35,28 @@ Set-StrictMode -Version 2.0 . $PSScriptRoot\tools.ps1 +# Adds or enables the package source with the given name +function AddOrEnablePackageSource($sources, $disabledPackageSources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { + if ($disabledPackageSources -eq $null -or -not (EnableInternalPackageSource -DisabledPackageSources $disabledPackageSources -Creds $creds -PackageSourceName $SourceName)) { + AddPackageSource -Sources $sources -SourceName $SourceName -SourceEndPoint $SourceEndPoint -Creds $creds -Username $userName -pwd $Password + } +} + # Add source entry to PackageSources function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']") if ($packageSource -eq $null) { + Write-Host "Adding package source $SourceName" + $packageSource = $doc.CreateElement("add") $packageSource.SetAttribute("key", $SourceName) $packageSource.SetAttribute("value", $SourceEndPoint) $sources.AppendChild($packageSource) | Out-Null } else { - Write-Host "Package source $SourceName already present." + Write-Host "Package source $SourceName already present and enabled." } AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd @@ -59,6 +69,8 @@ function AddCredential($creds, $source, $username, $pwd) { return; } + Write-Host "Inserting credential for feed: " $source + # Looks for credential configuration for the given SourceName. Create it if none is found. $sourceElement = $creds.SelectSingleNode($Source) if ($sourceElement -eq $null) @@ -91,24 +103,27 @@ function AddCredential($creds, $source, $username, $pwd) { $passwordElement.SetAttribute("value", $pwd) } -function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) { - $maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]") - - Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds." - - ForEach ($PackageSource in $maestroPrivateSources) { - Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key - AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd +# Enable all darc-int package sources. +function EnableMaestroInternalPackageSources($DisabledPackageSources, $Creds) { + $maestroInternalSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") + ForEach ($DisabledPackageSource in $maestroInternalSources) { + EnableInternalPackageSource -DisabledPackageSources $DisabledPackageSources -Creds $Creds -PackageSourceName $DisabledPackageSource.key } } -function EnablePrivatePackageSources($DisabledPackageSources) { - $maestroPrivateSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") - ForEach ($DisabledPackageSource in $maestroPrivateSources) { - Write-Host "`tEnsuring private source '$($DisabledPackageSource.key)' is enabled by deleting it from disabledPackageSource" +# Enables an internal package source by name, if found. Returns true if the package source was found and enabled, false otherwise. +function EnableInternalPackageSource($DisabledPackageSources, $Creds, $PackageSourceName) { + $DisabledPackageSource = $DisabledPackageSources.SelectSingleNode("add[@key='$PackageSourceName']") + if ($DisabledPackageSource) { + Write-Host "Enabling internal source '$($DisabledPackageSource.key)'." + # Due to https://github.com/NuGet/Home/issues/10291, we must actually remove the disabled entries $DisabledPackageSources.RemoveChild($DisabledPackageSource) + + AddCredential -Creds $creds -Source $DisabledPackageSource.Key -Username $userName -pwd $Password + return $true } + return $false } if (!(Test-Path $ConfigFile -PathType Leaf)) { @@ -121,15 +136,17 @@ $doc = New-Object System.Xml.XmlDocument $filename = (Get-Item $ConfigFile).FullName $doc.Load($filename) -# Get reference to or create one if none exist already +# Get reference to - fail if none exist $sources = $doc.DocumentElement.SelectSingleNode("packageSources") if ($sources -eq $null) { - $sources = $doc.CreateElement("packageSources") - $doc.DocumentElement.AppendChild($sources) | Out-Null + Write-PipelineTelemetryError -Category 'Build' -Message "Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 } $creds = $null +$feedSuffix = "v3/index.json" if ($Password) { + $feedSuffix = "v2" # Looks for a node. Create it if none is found. $creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials") if ($creds -eq $null) { @@ -138,34 +155,35 @@ if ($Password) { } } +$userName = "dn-bot" + # Check for disabledPackageSources; we'll enable any darc-int ones we find there $disabledSources = $doc.DocumentElement.SelectSingleNode("disabledPackageSources") if ($disabledSources -ne $null) { Write-Host "Checking for any darc-int disabled package sources in the disabledPackageSources node" - EnablePrivatePackageSources -DisabledPackageSources $disabledSources + EnableMaestroInternalPackageSources -DisabledPackageSources $disabledSources -Creds $creds } - -$userName = "dn-bot" - -# Insert credential nodes for Maestro's private feeds -InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password - -# 3.1 uses a different feed url format so it's handled differently here -$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") -if ($dotnet31Source -ne $null) { - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password -} - -$dotnetVersions = @('5','6','7','8','9') +$dotnetVersions = @('5','6','7','8','9','10') foreach ($dotnetVersion in $dotnetVersions) { $feedPrefix = "dotnet" + $dotnetVersion; $dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']") if ($dotnetSource -ne $null) { - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password } } +# Check for dotnet-eng and add dotnet-eng-internal if present +$dotnetEngSource = $sources.SelectSingleNode("add[@key='dotnet-eng']") +if ($dotnetEngSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-eng-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + +# Check for dotnet-tools and add dotnet-tools-internal if present +$dotnetToolsSource = $sources.SelectSingleNode("add[@key='dotnet-tools']") +if ($dotnetToolsSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-tools-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + $doc.Save($filename) diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh old mode 100644 new mode 100755 index facb415ca6ff..b2163abbe71b --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # @@ -52,81 +53,139 @@ if [[ `uname -s` == "Darwin" ]]; then TB='' fi -# Ensure there is a ... section. -grep -i "" $ConfigFile -if [ "$?" != "0" ]; then - echo "Adding ... section." - ConfigNodeHeader="" - PackageSourcesTemplate="${TB}${NL}${TB}" +# Enables an internal package source by name, if found. Returns 0 if found and enabled, 1 if not found. +EnableInternalPackageSource() { + local PackageSourceName="$1" + + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return 1 # No disabled sources section + fi + + # Check if this source name is disabled + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Enabling internal source '$PackageSourceName'." + # Remove the disabled entry (including any surrounding comments or whitespace on the same line) + sed -i.bak "//d" "$ConfigFile" + + # Add the source name to PackageSources for credential handling + PackageSources+=("$PackageSourceName") + return 0 # Found and enabled + fi + + return 1 # Not found in disabled sources +} + +# Add source entry to PackageSources +AddPackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Check if source already exists + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Package source $SourceName already present and enabled." + PackageSources+=("$SourceName") + return + fi + + echo "Adding package source $SourceName" + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" "$ConfigFile" + PackageSources+=("$SourceName") +} + +# Adds or enables the package source with the given name +AddOrEnablePackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Try to enable if disabled, if not found then add new source + EnableInternalPackageSource "$SourceName" + if [ "$?" != "0" ]; then + AddPackageSource "$SourceName" "$SourceEndPoint" + fi +} - sed -i.bak "s|$ConfigNodeHeader|$ConfigNodeHeader${NL}$PackageSourcesTemplate|" $ConfigFile -fi +# Enable all darc-int package sources +EnableMaestroInternalPackageSources() { + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return # No disabled sources section + fi + + # Find all darc-int disabled sources + local DisabledDarcIntSources=() + DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' "$ConfigFile" | tr -d '"') + + for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do + if [[ $DisabledSourceName == darc-int* ]]; then + EnableInternalPackageSource "$DisabledSourceName" + fi + done +} -# Ensure there is a ... section. -grep -i "" $ConfigFile +# Ensure there is a ... section. +grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding ... section." - - PackageSourcesNodeFooter="" - PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile + Write-PipelineTelemetryError -Category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 fi PackageSources=() -# Ensure dotnet3.1-internal and dotnet3.1-internal-transport are in the packageSources if the public dotnet3.1 feeds are present -grep -i "... section. + grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + echo "Adding ... section." - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=('dotnet3.1-internal') - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal-transport to the packageSources." PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile fi - PackageSources+=('dotnet3.1-internal-transport') fi -DotNetVersions=('5' '6' '7' '8' '9') +# Check for disabledPackageSources; we'll enable any darc-int ones we find there +grep -i "" $ConfigFile > /dev/null +if [ "$?" == "0" ]; then + echo "Checking for any darc-int disabled package sources in the disabledPackageSources node" + EnableMaestroInternalPackageSources +fi + +DotNetVersions=('5' '6' '7' '8' '9' '10') for DotNetVersion in ${DotNetVersions[@]} ; do FeedPrefix="dotnet${DotNetVersion}"; - grep -i " /dev/null if [ "$?" == "0" ]; then - grep -i "" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal") - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding $FeedPrefix-internal-transport to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal-transport") + AddOrEnablePackageSource "$FeedPrefix-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal/nuget/$FeedSuffix" + AddOrEnablePackageSource "$FeedPrefix-internal-transport" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal-transport/nuget/$FeedSuffix" fi done +# Check for dotnet-eng and add dotnet-eng-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-eng-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$FeedSuffix" +fi + +# Check for dotnet-tools and add dotnet-tools-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-tools-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$FeedSuffix" +fi + # I want things split line by line PrevIFS=$IFS IFS=$'\n' @@ -139,29 +198,12 @@ if [ "$CredToken" ]; then # Check if there is no existing credential for this FeedName grep -i "<$FeedName>" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding credentials for $FeedName." + echo " Inserting credential for feed: $FeedName" PackageSourceCredentialsNodeFooter="" - NewCredential="${TB}${TB}<$FeedName>${NL}${NL}${NL}" + NewCredential="${TB}${TB}<$FeedName>${NL}${TB}${NL}${TB}${TB}${NL}${TB}${TB}" sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" $ConfigFile fi done fi - -# Re-enable any entries in disabledPackageSources where the feed name contains darc-int -grep -i "" $ConfigFile -if [ "$?" == "0" ]; then - DisabledDarcIntSources=() - echo "Re-enabling any disabled \"darc-int\" package sources in $ConfigFile" - DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' $ConfigFile | tr -d '"') - for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do - if [[ $DisabledSourceName == darc-int* ]] - then - OldDisableValue="" - NewDisableValue="" - sed -i.bak "s|$OldDisableValue|$NewDisableValue|" $ConfigFile - echo "Neutralized disablePackageSources entry for '$DisabledSourceName'" - fi - done -fi diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 438f9920c43e..8cfee107e7a3 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -7,6 +7,7 @@ Param( [string] $msbuildEngine = $null, [bool] $warnAsError = $true, [bool] $nodeReuse = $true, + [switch] $buildCheck = $false, [switch][Alias('r')]$restore, [switch] $deployDeps, [switch][Alias('b')]$build, @@ -20,6 +21,7 @@ Param( [switch] $publish, [switch] $clean, [switch][Alias('pb')]$productBuild, + [switch]$fromVMR, [switch][Alias('bl')]$binaryLog, [switch][Alias('nobl')]$excludeCIBinarylog, [switch] $ci, @@ -71,6 +73,9 @@ function Print-Usage() { Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio" Write-Host " -nativeToolsOnMachine Sets the native tools on machine environment variable (indicating that the script should use native tools on machine)" + Write-Host " -nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" + Write-Host " -buildCheck Sets /check msbuild parameter" + Write-Host " -fromVMR Set when building from within the VMR" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." @@ -97,6 +102,7 @@ function Build { $bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'Build.binlog') } else { '' } $platformArg = if ($platform) { "/p:Platform=$platform" } else { '' } + $check = if ($buildCheck) { '/check' } else { '' } if ($projects) { # Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons. @@ -113,6 +119,7 @@ function Build { MSBuild $toolsetBuildProj ` $bl ` $platformArg ` + $check ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` /p:Restore=$restore ` @@ -122,11 +129,13 @@ function Build { /p:Deploy=$deploy ` /p:Test=$test ` /p:Pack=$pack ` - /p:DotNetBuildRepo=$productBuild ` + /p:DotNetBuild=$productBuild ` + /p:DotNetBuildFromVMR=$fromVMR ` /p:IntegrationTest=$integrationTest ` /p:PerformanceTest=$performanceTest ` /p:Sign=$sign ` /p:Publish=$publish ` + /p:RestoreStaticGraphEnableBinaryLogger=$binaryLog ` @properties } diff --git a/eng/common/build.sh b/eng/common/build.sh index ac1ee8620cd2..9767bb411a4f 100755 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -42,6 +42,8 @@ usage() echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" + echo " --buildCheck Sets /check msbuild parameter" + echo " --fromVMR Set when building from within the VMR" echo "" echo "Command line arguments not listed above are passed thru to msbuild." echo "Arguments can also be passed in with a single hyphen." @@ -63,6 +65,7 @@ restore=false build=false source_build=false product_build=false +from_vmr=false rebuild=false test=false integration_test=false @@ -76,6 +79,7 @@ clean=false warn_as_error=true node_reuse=true +build_check=false binary_log=false exclude_ci_binary_log=false pipelines_log=false @@ -87,7 +91,7 @@ verbosity='minimal' runtime_source_feed='' runtime_source_feed_key='' -properties='' +properties=() while [[ $# > 0 ]]; do opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in @@ -127,19 +131,22 @@ while [[ $# > 0 ]]; do -pack) pack=true ;; - -sourcebuild|-sb) + -sourcebuild|-source-build|-sb) build=true source_build=true product_build=true restore=true pack=true ;; - -productBuild|-pb) + -productbuild|-product-build|-pb) build=true product_build=true restore=true pack=true ;; + -fromvmr|-from-vmr) + from_vmr=true + ;; -test|-t) test=true ;; @@ -173,6 +180,9 @@ while [[ $# > 0 ]]; do node_reuse=$2 shift ;; + -buildcheck) + build_check=true + ;; -runtimesourcefeed) runtime_source_feed=$2 shift @@ -182,7 +192,7 @@ while [[ $# > 0 ]]; do shift ;; *) - properties="$properties $1" + properties+=("$1") ;; esac @@ -216,7 +226,7 @@ function Build { InitializeCustomToolset if [[ ! -z "$projects" ]]; then - properties="$properties /p:Projects=$projects" + properties+=("/p:Projects=$projects") fi local bl="" @@ -224,15 +234,21 @@ function Build { bl="/bl:\"$log_dir/Build.binlog\"" fi + local check="" + if [[ "$build_check" == true ]]; then + check="/check" + fi + MSBuild $_InitializeToolset \ $bl \ + $check \ /p:Configuration=$configuration \ /p:RepoRoot="$repo_root" \ /p:Restore=$restore \ /p:Build=$build \ - /p:DotNetBuildRepo=$product_build \ - /p:ArcadeBuildFromSource=$source_build \ + /p:DotNetBuild=$product_build \ /p:DotNetBuildSourceOnly=$source_build \ + /p:DotNetBuildFromVMR=$from_vmr \ /p:Rebuild=$rebuild \ /p:Test=$test \ /p:Pack=$pack \ @@ -240,7 +256,8 @@ function Build { /p:PerformanceTest=$performance_test \ /p:Sign=$sign \ /p:Publish=$publish \ - $properties + /p:RestoreStaticGraphEnableBinaryLogger=$binary_log \ + ${properties[@]+"${properties[@]}"} ExitWithExitCode 0 } diff --git a/eng/common/cibuild.sh b/eng/common/cibuild.sh index 1a02c0dec8fd..66e3b0ac61c3 100755 --- a/eng/common/cibuild.sh +++ b/eng/common/cibuild.sh @@ -13,4 +13,4 @@ while [[ -h $source ]]; do done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ \ No newline at end of file +. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index 8da43d3b5837..5ce518406198 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -19,11 +19,11 @@ parameters: # publishing defaults artifacts: '' enableMicrobuild: false + enableMicrobuildForMacAndLinux: false microbuildUseESRP: true enablePublishBuildArtifacts: false enablePublishBuildAssets: false enablePublishTestResults: false - enablePublishUsingPipelines: false enableBuildRetry: false mergeTestResults: false testRunTitle: '' @@ -74,9 +74,6 @@ jobs: - ${{ if ne(parameters.enableTelemetry, 'false') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE value: '$(Build.Repository.Uri)' - - ${{ if eq(parameters.enableRichCodeNavigation, 'true') }}: - - name: EnableRichCodeNavigation - value: 'true' # Retry signature validation up to three times, waiting 2 seconds between attempts. # See https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028#retry-untrusted-root-failures - name: NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY @@ -128,23 +125,12 @@ jobs: - ${{ preStep }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin - inputs: - signType: $(_SignType) - zipSources: false - feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json - ${{ if eq(parameters.microbuildUseESRP, true) }}: - ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: - ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea - ${{ else }}: - ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca - env: - TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: '$(Agent.TempDirectory)' + - template: /eng/common/core-templates/steps/install-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} + microbuildUseESRP: ${{ parameters.microbuildUseESRP }} continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) - ${{ if and(eq(parameters.runAsPublic, 'false'), eq(variables['System.TeamProject'], 'internal')) }}: - task: NuGetAuthenticate@1 @@ -160,27 +146,15 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} - - ${{ if eq(parameters.enableRichCodeNavigation, true) }}: - - task: RichCodeNavIndexer@0 - displayName: RichCodeNav Upload - inputs: - languages: ${{ coalesce(parameters.richCodeNavigationLanguage, 'csharp') }} - environment: ${{ coalesce(parameters.richCodeNavigationEnvironment, 'internal') }} - richNavLogOutputDirectory: $(System.DefaultWorkingDirectory)/artifacts/bin - uploadRichNavArtifacts: ${{ coalesce(parameters.richCodeNavigationUploadArtifacts, false) }} - continueOnError: true - - ${{ each step in parameters.componentGovernanceSteps }}: - ${{ step }} - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: MicroBuildCleanup@1 - displayName: Execute Microbuild cleanup tasks - condition: and(always(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: /eng/common/core-templates/steps/cleanup-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} continueOnError: ${{ parameters.continueOnError }} - env: - TeamName: $(_TeamName) # Publish test results - ${{ if or(and(eq(parameters.enablePublishTestResults, 'true'), eq(parameters.testResultsFormat, '')), eq(parameters.testResultsFormat, 'xunit')) }}: diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index edefa789d360..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -4,7 +4,7 @@ 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) @@ -27,7 +27,7 @@ parameters: is1ESPipeline: '' jobs: - job: OneLocBuild${{ parameters.JobNameSuffix }} - + dependsOn: ${{ parameters.dependsOn }} displayName: OneLocBuild${{ parameters.JobNameSuffix }} @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: @@ -86,8 +86,7 @@ jobs: isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }} ${{ if eq(parameters.CreatePr, true) }}: isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} - ${{ if eq(parameters.RepoType, 'gitHub') }}: - isShouldReusePrSelected: ${{ parameters.ReusePr }} + isShouldReusePrSelected: ${{ parameters.ReusePr }} packageSourceAuth: patAuth patVariable: ${{ parameters.CeapexPat }} ${{ if eq(parameters.RepoType, 'gitHub') }}: @@ -100,22 +99,20 @@ jobs: mirrorBranch: ${{ parameters.MirrorBranch }} condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} - args: - displayName: Publish Localization Files - pathToPublish: '$(Build.ArtifactStagingDirectory)/loc' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} + # Copy the locProject.json to the root of the Loc directory, then publish a pipeline artifact + - task: CopyFiles@2 + displayName: Copy LocProject.json + inputs: + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/Localize/' + Contents: 'LocProject.json' + TargetFolder: '$(Build.ArtifactStagingDirectory)/loc' + condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: - displayName: Publish LocProject.json - pathToPublish: '$(System.DefaultWorkingDirectory)/eng/Localize/' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} \ No newline at end of file + targetPath: '$(Build.ArtifactStagingDirectory)/loc' + artifactName: 'Loc' + displayName: 'Publish Localization Files' + condition: ${{ parameters.condition }} diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index 3cb20fb5041f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -20,9 +20,6 @@ parameters: # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing - publishUsingPipelines: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing publishAssetsImmediately: false @@ -32,6 +29,15 @@ parameters: is1ESPipeline: '' + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + + # Optional, publishing version + publishingVersion: 3 + + # Optional: A minimatch pattern for the asset manifests to publish to BAR + assetManifestsPattern: '*/manifests/**/*.xml' + repositoryAlias: self officialBuildId: '' @@ -68,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -84,18 +90,44 @@ jobs: - checkout: ${{ parameters.repositoryAlias }} fetchDepth: 3 clean: true - - - task: DownloadBuildArtifacts@0 - displayName: Download artifact - inputs: - artifactName: AssetManifests - downloadPath: '$(Build.StagingDirectory)/Download' - checkDownloadedFiles: true - condition: ${{ parameters.condition }} - continueOnError: ${{ parameters.continueOnError }} + + - ${{ if eq(parameters.isAssetlessBuild, 'false') }}: + - ${{ if eq(parameters.publishingVersion, 3) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Asset Manifests + inputs: + artifactName: AssetManifests + targetPath: '$(Build.StagingDirectory)/AssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - ${{ if eq(parameters.publishingVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download V4 asset manifests + inputs: + itemPattern: '*/manifests/**/*.xml' + targetPath: '$(Build.StagingDirectory)/AllAssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - task: CopyFiles@2 + displayName: Copy V4 asset manifests to AssetManifests + inputs: + SourceFolder: '$(Build.StagingDirectory)/AllAssetManifests' + Contents: ${{ parameters.assetManifestsPattern }} + TargetFolder: '$(Build.StagingDirectory)/AssetManifests' + flattenFolders: true + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} - task: NuGetAuthenticate@1 + # Populate internal runtime variables. + - template: /eng/common/templates/steps/enable-internal-sources.yml + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + + - template: /eng/common/templates/steps/enable-internal-runtimes.yml + - task: AzureCLI@2 displayName: Publish Build Assets inputs: @@ -104,10 +136,13 @@ jobs: scriptLocation: scriptPath scriptPath: $(System.DefaultWorkingDirectory)/eng/common/sdk-task.ps1 arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet - /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' + /p:ManifestsPath='$(Build.StagingDirectory)/AssetManifests' + /p:IsAssetlessBuild=${{ parameters.isAssetlessBuild }} /p:MaestroApiEndpoint=https://maestro.dot.net - /p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }} /p:OfficialBuildId=$(OfficialBuildId) + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' + condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} @@ -129,6 +164,17 @@ jobs: Copy-Item -Path $symbolExclusionfile -Destination "$(Build.StagingDirectory)/ReleaseConfigs" } + - ${{ if eq(parameters.publishingVersion, 4) }}: + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + parameters: + is1ESPipeline: ${{ parameters.is1ESPipeline }} + args: + targetPath: '$(Build.ArtifactStagingDirectory)/MergedManifest.xml' + artifactName: AssetManifests + displayName: 'Publish Merged Manifest' + retryCountOnTaskFailure: 10 # for any logs being locked + sbomEnabled: false # we don't need SBOM for logs + - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -138,7 +184,7 @@ jobs: publishLocation: Container artifactName: ReleaseConfigs - - ${{ if eq(parameters.publishAssetsImmediately, 'true') }}: + - ${{ if or(eq(parameters.publishAssetsImmediately, 'true'), eq(parameters.isAssetlessBuild, 'true')) }}: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: BARBuildId: ${{ parameters.BARBuildId }} @@ -164,6 +210,9 @@ jobs: -WaitPublishingFinish true -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - template: /eng/common/core-templates/steps/publish-logs.yml diff --git a/eng/common/core-templates/job/source-build.yml b/eng/common/core-templates/job/source-build.yml index d943748ac10e..1997c2ae00d7 100644 --- a/eng/common/core-templates/job/source-build.yml +++ b/eng/common/core-templates/job/source-build.yml @@ -12,9 +12,10 @@ parameters: # The name of the job. This is included in the job ID. # targetRID: '' # The name of the target RID to use, instead of the one auto-detected by Arcade. - # nonPortable: false + # portableBuild: false # Enables non-portable mode. This means a more specific RID (e.g. fedora.32-x64 rather than - # linux-x64), and compiling against distro-provided packages rather than portable ones. + # linux-x64), and compiling against distro-provided packages rather than portable ones. The + # default is portable mode. # skipPublishValidation: false # Disables publishing validation. By default, a check is performed to ensure no packages are # published by source-build. @@ -33,9 +34,6 @@ parameters: # container and pool. platform: {} - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: '' # If set to true and running on a non-public project, @@ -62,7 +60,7 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] - demands: ImageOverride -equals build.ubuntu.2004.amd64 + demands: ImageOverride -equals build.azurelinux.3.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] image: build.azurelinux.3.amd64 @@ -71,10 +69,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] - demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open + demands: ImageOverride -equals build.azurelinux.3.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] - demands: ImageOverride -equals Build.Ubuntu.2204.Amd64 + demands: ImageOverride -equals build.azurelinux.3.amd64 ${{ if ne(parameters.platform.pool, '') }}: pool: ${{ parameters.platform.pool }} @@ -96,4 +94,3 @@ jobs: parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} platform: ${{ parameters.platform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} diff --git a/eng/common/core-templates/job/source-index-stage1.yml b/eng/common/core-templates/job/source-index-stage1.yml index ddf8c2e00d80..76baf5c27258 100644 --- a/eng/common/core-templates/job/source-index-stage1.yml +++ b/eng/common/core-templates/job/source-index-stage1.yml @@ -1,8 +1,5 @@ parameters: runAsPublic: false - sourceIndexUploadPackageVersion: 2.0.0-20250425.2 - sourceIndexProcessBinlogPackageVersion: 1.0.1-20250425.2 - sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" preSteps: [] binlogPath: artifacts/log/Debug/Build.binlog @@ -16,12 +13,6 @@ jobs: dependsOn: ${{ parameters.dependsOn }} condition: ${{ parameters.condition }} variables: - - name: SourceIndexUploadPackageVersion - value: ${{ parameters.sourceIndexUploadPackageVersion }} - - name: SourceIndexProcessBinlogPackageVersion - value: ${{ parameters.sourceIndexProcessBinlogPackageVersion }} - - name: SourceIndexPackageSource - value: ${{ parameters.sourceIndexPackageSource }} - name: BinlogPath value: ${{ parameters.binlogPath }} - template: /eng/common/core-templates/variables/pool-providers.yml @@ -34,12 +25,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - image: 1es-windows-2022-open - os: windows + image: windows.vs2026preview.scout.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 - os: windows + image: windows.vs2026preview.scout.amd64 steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -47,35 +36,9 @@ jobs: - ${{ each preStep in parameters.preSteps }}: - ${{ preStep }} - - - task: UseDotNet@2 - displayName: Use .NET 8 SDK - inputs: - packageType: sdk - version: 8.0.x - installationPath: $(Agent.TempDirectory)/dotnet - workingDirectory: $(Agent.TempDirectory) - - - script: | - $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(sourceIndexProcessBinlogPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(sourceIndexUploadPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - displayName: Download Tools - # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. - workingDirectory: $(Agent.TempDirectory) - - script: ${{ parameters.sourceIndexBuildCommand }} displayName: Build Repository - - script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i $(BinlogPath) -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output - displayName: Process Binlog into indexable sln - - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: AzureCLI@2 - displayName: Log in to Azure and upload stage1 artifacts to source index - inputs: - azureSubscription: 'SourceDotNet Stage1 Publish' - addSpnToEnvironment: true - scriptType: 'ps' - scriptLocation: 'inlineScript' - inlineScript: | - $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 + - template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + binLogPath: ${{ parameters.binLogPath }} diff --git a/eng/common/core-templates/jobs/codeql-build.yml b/eng/common/core-templates/jobs/codeql-build.yml index 4571a7864df6..dbc14ac580a2 100644 --- a/eng/common/core-templates/jobs/codeql-build.yml +++ b/eng/common/core-templates/jobs/codeql-build.yml @@ -15,7 +15,6 @@ jobs: enablePublishBuildArtifacts: false enablePublishTestResults: false enablePublishBuildAssets: false - enablePublishUsingPipelines: false enableTelemetry: true variables: diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index bf33cdc2cc77..01ada7476651 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -5,9 +5,6 @@ parameters: # Optional: Include PublishBuildArtifacts task enablePublishBuildArtifacts: false - # Optional: Enable publishing using release pipelines - enablePublishUsingPipelines: false - # Optional: Enable running the source-build jobs to build repo from source enableSourceBuild: false @@ -30,6 +27,9 @@ parameters: # Optional: Publish the assets as soon as the publish to BAR stage is complete, rather doing so in a separate stage. publishAssetsImmediately: false + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + # Optional: If using publishAssetsImmediately and additional parameters are needed, can be used to send along additional parameters (normally sent to post-build.yml) artifactsPublishingAdditionalParameters: '' signingValidationAdditionalParameters: '' @@ -85,7 +85,6 @@ jobs: - template: /eng/common/core-templates/jobs/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - allCompletedJobId: Source_Build_Complete ${{ each parameter in parameters.sourceBuildParameters }}: ${{ parameter.key }}: ${{ parameter.value }} @@ -98,7 +97,7 @@ jobs: ${{ parameter.key }}: ${{ parameter.value }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: + - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, ''), eq(parameters.isAssetlessBuild, true)) }}: - template: ../job/publish-build-assets.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -110,12 +109,10 @@ jobs: - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.jobs }}: - ${{ job.job }} - - ${{ if eq(parameters.enableSourceBuild, true) }}: - - Source_Build_Complete runAsPublic: ${{ parameters.runAsPublic }} - publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} - publishAssetsImmediately: ${{ parameters.publishAssetsImmediately }} + publishAssetsImmediately: ${{ or(parameters.publishAssetsImmediately, parameters.isAssetlessBuild) }} + isAssetlessBuild: ${{ parameters.isAssetlessBuild }} enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }} diff --git a/eng/common/core-templates/jobs/source-build.yml b/eng/common/core-templates/jobs/source-build.yml index 0b408a67bd51..d92860cba208 100644 --- a/eng/common/core-templates/jobs/source-build.yml +++ b/eng/common/core-templates/jobs/source-build.yml @@ -2,28 +2,19 @@ parameters: # This template adds arcade-powered source-build to CI. A job is created for each platform, as # well as an optional server job that completes when all platform jobs complete. - # The name of the "join" job for all source-build platforms. If set to empty string, the job is - # not included. Existing repo pipelines can use this job depend on all source-build jobs - # completing without maintaining a separate list of every single job ID: just depend on this one - # server job. By default, not included. Recommended name if used: 'Source_Build_Complete'. - allCompletedJobId: '' - # See /eng/common/core-templates/job/source-build.yml jobNamePrefix: 'Source_Build' # This is the default platform provided by Arcade, intended for use by a managed-only repo. defaultManagedPlatform: name: 'Managed' - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9' + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-10-amd64' # Defines the platforms on which to run build jobs. One job is created for each platform, and the # object in this array is sent to the job template as 'platform'. If no platforms are specified, # one job runs on 'defaultManagedPlatform'. platforms: [] - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: '' # If set to true and running on a non-public project, @@ -34,23 +25,12 @@ parameters: jobs: -- ${{ if ne(parameters.allCompletedJobId, '') }}: - - job: ${{ parameters.allCompletedJobId }} - displayName: Source-Build Complete - pool: server - dependsOn: - - ${{ each platform in parameters.platforms }}: - - ${{ parameters.jobNamePrefix }}_${{ platform.name }} - - ${{ if eq(length(parameters.platforms), 0) }}: - - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }} - - ${{ each platform in parameters.platforms }}: - template: /eng/common/core-templates/job/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ platform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} enableInternalSources: ${{ parameters.enableInternalSources }} - ${{ if eq(length(parameters.platforms), 0) }}: @@ -59,5 +39,4 @@ jobs: is1ESPipeline: ${{ parameters.is1ESPipeline }} jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ parameters.defaultManagedPlatform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} enableInternalSources: ${{ parameters.enableInternalSources }} diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index 864427d9694a..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -60,6 +60,11 @@ parameters: artifactNames: '' downloadArtifacts: true + - name: isAssetlessBuild + type: boolean + displayName: Is Assetless Build + default: false + # These parameters let the user customize the call to sdk-task.ps1 for publishing # symbols & general artifacts as well as for signing validation - name: symbolPublishingAdditionalParameters @@ -115,18 +120,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: windows.vs2022.amd64 + image: windows.vs2026preview.scout.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -159,18 +164,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -188,9 +193,6 @@ stages: buildId: $(AzDOBuildId) artifactName: PackageArtifacts checkDownloadedFiles: true - itemPattern: | - ** - !**/Microsoft.SourceBuild.Intermediate.*.nupkg # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -223,18 +225,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -284,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -305,6 +307,13 @@ stages: - task: NuGetAuthenticate@1 + # Populate internal runtime variables. + - template: /eng/common/templates/steps/enable-internal-sources.yml + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + + - template: /eng/common/templates/steps/enable-internal-runtimes.yml + # Darc is targeting 8.0, so make sure it's installed - task: UseDotNet@2 inputs: @@ -325,3 +334,6 @@ stages: -RequireDefaultChannels ${{ parameters.requireDefaultChannels }} -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' diff --git a/eng/common/core-templates/steps/cleanup-microbuild.yml b/eng/common/core-templates/steps/cleanup-microbuild.yml new file mode 100644 index 000000000000..c0fdcd3379d7 --- /dev/null +++ b/eng/common/core-templates/steps/cleanup-microbuild.yml @@ -0,0 +1,28 @@ +parameters: + # Enable cleanup tasks for MicroBuild + enableMicrobuild: false + # Enable cleanup tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - task: MicroBuildCleanup@1 + displayName: Execute Microbuild cleanup tasks + condition: and( + always(), + or( + and( + eq(variables['Agent.Os'], 'Windows_NT'), + in(variables['_SignType'], 'real', 'test') + ), + and( + ${{ eq(parameters.enableMicrobuildForMacAndLinux, true) }}, + ne(variables['Agent.Os'], 'Windows_NT'), + eq(variables['_SignType'], 'real') + ) + )) + continueOnError: ${{ parameters.continueOnError }} + env: + TeamName: $(_TeamName) diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml index 7f5b84c4cb82..c05f65027979 100644 --- a/eng/common/core-templates/steps/generate-sbom.yml +++ b/eng/common/core-templates/steps/generate-sbom.yml @@ -5,7 +5,7 @@ # IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. parameters: - PackageVersion: 9.0.0 + PackageVersion: 10.0.0 BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' PackageName: '.NET' ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom diff --git a/eng/common/core-templates/steps/get-delegation-sas.yml b/eng/common/core-templates/steps/get-delegation-sas.yml index 9db5617ea7de..d2901470a7f0 100644 --- a/eng/common/core-templates/steps/get-delegation-sas.yml +++ b/eng/common/core-templates/steps/get-delegation-sas.yml @@ -31,16 +31,7 @@ steps: # Calculate the expiration of the SAS token and convert to UTC $expiry = (Get-Date).AddHours(${{ parameters.expiryInHours }}).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") - # Temporarily work around a helix issue where SAS tokens with / in them will cause incorrect downloads - # of correlation payloads. https://github.com/dotnet/dnceng/issues/3484 - $sas = "" - do { - $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv - if ($LASTEXITCODE -ne 0) { - Write-Error "Failed to generate SAS token." - exit 1 - } - } while($sas.IndexOf('/') -ne -1) + $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv if ($LASTEXITCODE -ne 0) { Write-Error "Failed to generate SAS token." diff --git a/eng/common/core-templates/steps/install-microbuild.yml b/eng/common/core-templates/steps/install-microbuild.yml new file mode 100644 index 000000000000..553fce66b940 --- /dev/null +++ b/eng/common/core-templates/steps/install-microbuild.yml @@ -0,0 +1,110 @@ +parameters: + # Enable install tasks for MicroBuild + enableMicrobuild: false + # Enable install tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + # Determines whether the ESRP service connection information should be passed to the signing plugin. + # This overlaps with _SignType to some degree. We only need the service connection for real signing. + # It's important that the service connection not be passed to the MicroBuildSigningPlugin task in this place. + # Doing so will cause the service connection to be authorized for the pipeline, which isn't allowed and won't work for non-prod. + # Unfortunately, _SignType can't be used to exclude the use of the service connection in non-real sign scenarios. The + # variable is not available in template expression. _SignType has a very large proliferation across .NET, so replacing it is tough. + microbuildUseESRP: true + # Microbuild installation directory + microBuildOutputFolder: $(Agent.TempDirectory)/MicroBuild + + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, 'true') }}: + # Needed to download the MicroBuild plugin nupkgs on Mac and Linux when nuget.exe is unavailable + - task: UseDotNet@2 + displayName: Install .NET 8.0 SDK for MicroBuild Plugin + inputs: + packageType: sdk + version: 8.0.x + installationPath: ${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + set -euo pipefail + + # UseDotNet@2 prepends the dotnet executable path to the PATH variable, so we can call dotnet directly + version=$(dotnet --version) + cat << 'EOF' > ${{ parameters.microBuildOutputFolder }}/global.json + { + "sdk": { + "version": "$version", + "paths": [ + "${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild" + ], + "errorMessage": "The .NET SDK version $version is required to install the MicroBuild signing plugin." + } + } + EOF + displayName: 'Add global.json to MicroBuild Installation path' + workingDirectory: ${{ parameters.microBuildOutputFolder }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + REM Check if ESRP is disabled while SignType is real + if /I "${{ parameters.microbuildUseESRP }}"=="false" if /I "$(_SignType)"=="real" ( + echo Error: ESRP must be enabled when SignType is real. + exit /b 1 + ) + displayName: 'Validate ESRP usage (Windows)' + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT')) + - script: | + # Check if ESRP is disabled while SignType is real + if [ "${{ parameters.microbuildUseESRP }}" = "false" ] && [ "$(_SignType)" = "real" ]; then + echo "Error: ESRP must be enabled when SignType is real." + exit 1 + fi + displayName: 'Validate ESRP usage (Non-Windows)' + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + # Two different MB install steps. This is due to not being able to use the agent OS during + # YAML expansion, and Windows vs. Linux/Mac uses different service connections. However, + # we can avoid including the MB install step if not enabled at all. This avoids a bunch of + # extra pipeline authorizations, since most pipelines do not sign on non-Windows. + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea + ${{ else }}: + ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) + + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, true) }}: + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (non-Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + workingDirectory: ${{ parameters.microBuildOutputFolder }} + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: beb8cb23-b303-4c95-ab26-9e44bc958d39 + ${{ else }}: + ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index 0623ac6e1123..a9ea99ba6aaa 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -26,15 +26,18 @@ steps: # If the file exists - sensitive data for redaction will be sourced from it # (single entry per line, lines starting with '# ' are considered comments and skipped) arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs' - -BinlogToolVersion ${{parameters.BinlogToolVersion}} + -BinlogToolVersion '${{parameters.BinlogToolVersion}}' -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' '$(publishing-dnceng-devdiv-code-r-build-re)' - '$(MaestroAccessToken)' '$(dn-bot-all-orgs-artifact-feeds-rw)' '$(akams-client-id)' '$(microsoft-symbol-server-pat)' '$(symweb-symbol-server-pat)' + '$(dnceng-symbol-server-pat)' '$(dn-bot-all-orgs-build-rw-code-rw)' + '$(System.AccessToken)' ${{parameters.CustomSensitiveDataList}} continueOnError: true condition: always() @@ -45,6 +48,7 @@ steps: SourceFolder: '$(System.DefaultWorkingDirectory)/PostBuildLogs' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' + condition: always() - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml index 7846584d2a77..b9c86c18ae42 100644 --- a/eng/common/core-templates/steps/source-build.yml +++ b/eng/common/core-templates/steps/source-build.yml @@ -11,10 +11,6 @@ parameters: # for details. The entire object is described in the 'job' template for simplicity, even though # the usage of the properties on this object is split between the 'job' and 'steps' templates. platform: {} - - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: false steps: @@ -23,25 +19,12 @@ steps: set -x df -h - # If file changes are detected, set CopyWipIntoInnerSourceBuildRepo to copy the WIP changes into the inner source build repo. - internalRestoreArgs= - if ! git diff --quiet; then - internalRestoreArgs='/p:CopyWipIntoInnerSourceBuildRepo=true' - # The 'Copy WIP' feature of source build uses git stash to apply changes from the original repo. - # This only works if there is a username/email configured, which won't be the case in most CI runs. - git config --get user.email - if [ $? -ne 0 ]; then - git config user.email dn-bot@microsoft.com - git config user.name dn-bot - fi - fi - # If building on the internal project, the internal storage variable may be available (usually only if needed) # In that case, add variables to allow the download of internal runtimes if the specified versions are not found # in the default public locations. internalRuntimeDownloadArgs= if [ '$(dotnetbuilds-internal-container-read-token-base64)' != '$''(dotnetbuilds-internal-container-read-token-base64)' ]; then - internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey $(dotnetbuilds-internal-container-read-token-base64)' + internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey '$(dotnetbuilds-internal-container-read-token-base64)'' fi buildConfig=Release @@ -50,88 +33,33 @@ steps: buildConfig='$(_BuildConfig)' fi - officialBuildArgs= - if [ '${{ and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}' = 'True' ]; then - officialBuildArgs='/p:DotNetPublishUsingPipelines=true /p:OfficialBuildId=$(BUILD.BUILDNUMBER)' - fi - targetRidArgs= if [ '${{ parameters.platform.targetRID }}' != '' ]; then targetRidArgs='/p:TargetRid=${{ parameters.platform.targetRID }}' fi - runtimeOsArgs= - if [ '${{ parameters.platform.runtimeOS }}' != '' ]; then - runtimeOsArgs='/p:RuntimeOS=${{ parameters.platform.runtimeOS }}' - fi - - baseOsArgs= - if [ '${{ parameters.platform.baseOS }}' != '' ]; then - baseOsArgs='/p:BaseOS=${{ parameters.platform.baseOS }}' - fi - - publishArgs= - if [ '${{ parameters.platform.skipPublishValidation }}' != 'true' ]; then - publishArgs='--publish' - fi - - assetManifestFileName=SourceBuild_RidSpecific.xml - if [ '${{ parameters.platform.name }}' != '' ]; then - assetManifestFileName=SourceBuild_${{ parameters.platform.name }}.xml + portableBuildArgs= + if [ '${{ parameters.platform.portableBuild }}' != '' ]; then + portableBuildArgs='/p:PortableBuild=${{ parameters.platform.portableBuild }}' fi ${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \ --configuration $buildConfig \ - --restore --build --pack $publishArgs -bl \ + --restore --build --pack -bl \ + --source-build \ ${{ parameters.platform.buildArguments }} \ - $officialBuildArgs \ $internalRuntimeDownloadArgs \ - $internalRestoreArgs \ $targetRidArgs \ - $runtimeOsArgs \ - $baseOsArgs \ - /p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \ - /p:ArcadeBuildFromSource=true \ - /p:DotNetBuildSourceOnly=true \ - /p:DotNetBuildRepo=true \ - /p:AssetManifestFileName=$assetManifestFileName + $portableBuildArgs \ displayName: Build -# Upload build logs for diagnosis. -- task: CopyFiles@2 - displayName: Prepare BuildLogs staging directory - inputs: - SourceFolder: '$(System.DefaultWorkingDirectory)' - Contents: | - **/*.log - **/*.binlog - artifacts/sb/prebuilt-report/** - TargetFolder: '$(Build.StagingDirectory)/BuildLogs' - CleanTargetFolder: true - continueOnError: true - condition: succeededOrFailed() - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish BuildLogs - targetPath: '$(Build.StagingDirectory)/BuildLogs' + targetPath: artifacts/log/${{ coalesce(variables._BuildConfig, 'Release') }} artifactName: BuildLogs_SourceBuild_${{ parameters.platform.name }}_Attempt$(System.JobAttempt) continueOnError: true condition: succeededOrFailed() sbomEnabled: false # we don't need SBOM for logs - -# Manually inject component detection so that we can ignore the source build upstream cache, which contains -# a nupkg cache of input packages (a local feed). -# This path must match the upstream cache path in property 'CurrentRepoSourceBuiltNupkgCacheDir' -# in src\Microsoft.DotNet.Arcade.Sdk\tools\SourceBuild\SourceBuildArcade.targets -- template: /eng/common/core-templates/steps/component-governance.yml - parameters: - displayName: Component Detection (Exclude upstream cache) - is1ESPipeline: ${{ parameters.is1ESPipeline }} - ${{ if eq(length(parameters.componentGovernanceIgnoreDirectories), 0) }}: - componentGovernanceIgnoreDirectories: '$(System.DefaultWorkingDirectory)/artifacts/sb/src/artifacts/obj/source-built-upstream-cache' - ${{ else }}: - componentGovernanceIgnoreDirectories: ${{ join(',', parameters.componentGovernanceIgnoreDirectories) }} - disableComponentGovernance: ${{ eq(variables['System.TeamProject'], 'public') }} diff --git a/eng/common/core-templates/steps/source-index-stage1-publish.yml b/eng/common/core-templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..e9a694afa58e --- /dev/null +++ b/eng/common/core-templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,35 @@ +parameters: + sourceIndexUploadPackageVersion: 2.0.0-20250818.1 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20250818.1 + sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json + binlogPath: artifacts/log/Debug/Build.binlog + +steps: +- task: UseDotNet@2 + displayName: "Source Index: Use .NET 9 SDK" + inputs: + packageType: sdk + version: 9.0.x + installationPath: $(Agent.TempDirectory)/dotnet + workingDirectory: $(Agent.TempDirectory) + +- script: | + $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version ${{parameters.sourceIndexProcessBinlogPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version ${{parameters.sourceIndexUploadPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + displayName: "Source Index: Download netsourceindex Tools" + # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. + workingDirectory: $(Agent.TempDirectory) + +- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i ${{parameters.BinlogPath}} -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output + displayName: "Source Index: Process Binlog into indexable sln" + +- ${{ if and(ne(parameters.runAsPublic, 'true'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: AzureCLI@2 + displayName: "Source Index: Upload Source Index stage1 artifacts to Azure" + inputs: + azureSubscription: 'SourceDotNet Stage1 Publish' + addSpnToEnvironment: true + scriptType: 'ps' + scriptLocation: 'inlineScript' + inlineScript: | + $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 diff --git a/eng/common/cross/arm64/tizen/tizen.patch b/eng/common/cross/arm64/tizen/tizen.patch index af7c8be05906..2cebc547382e 100644 --- a/eng/common/cross/arm64/tizen/tizen.patch +++ b/eng/common/cross/arm64/tizen/tizen.patch @@ -5,5 +5,5 @@ diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-littleaarch64) --GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib/ld-linux-aarch64.so.1 ) ) +-GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-aarch64.so.1 ) ) +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-aarch64.so.1 ) ) diff --git a/eng/common/cross/build-android-rootfs.sh b/eng/common/cross/build-android-rootfs.sh index 7e9ba2b75ed3..fbd8d80848a6 100755 --- a/eng/common/cross/build-android-rootfs.sh +++ b/eng/common/cross/build-android-rootfs.sh @@ -6,10 +6,11 @@ usage() { echo "Creates a toolchain and sysroot used for cross-compiling for Android." echo - echo "Usage: $0 [BuildArch] [ApiLevel]" + echo "Usage: $0 [BuildArch] [ApiLevel] [--ndk NDKVersion]" echo echo "BuildArch is the target architecture of Android. Currently only arm64 is supported." echo "ApiLevel is the target Android API level. API levels usually match to Android releases. See https://source.android.com/source/build-numbers.html" + echo "NDKVersion is the version of Android NDK. The default is r21. See https://developer.android.com/ndk/downloads/revision_history" echo echo "By default, the toolchain and sysroot will be generated in cross/android-rootfs/toolchain/[BuildArch]. You can change this behavior" echo "by setting the TOOLCHAIN_DIR environment variable" @@ -25,10 +26,15 @@ __BuildArch=arm64 __AndroidArch=aarch64 __AndroidToolchain=aarch64-linux-android -for i in "$@" - do - lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" - case $lowerI in +while :; do + if [[ "$#" -le 0 ]]; then + break + fi + + i=$1 + + lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" + case $lowerI in -?|-h|--help) usage exit 1 @@ -43,6 +49,10 @@ for i in "$@" __AndroidArch=arm __AndroidToolchain=arm-linux-androideabi ;; + --ndk) + shift + __NDK_Version=$1 + ;; *[0-9]) __ApiLevel=$i ;; @@ -50,8 +60,17 @@ for i in "$@" __UnprocessedBuildArgs="$__UnprocessedBuildArgs $i" ;; esac + shift done +if [[ "$__NDK_Version" == "r21" ]] || [[ "$__NDK_Version" == "r22" ]]; then + __NDK_File_Arch_Spec=-x86_64 + __SysRoot=sysroot +else + __NDK_File_Arch_Spec= + __SysRoot=toolchains/llvm/prebuilt/linux-x86_64/sysroot +fi + # Obtain the location of the bash script to figure out where the root of the repo is. __ScriptBaseDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" @@ -78,6 +97,7 @@ fi echo "Target API level: $__ApiLevel" echo "Target architecture: $__BuildArch" +echo "NDK version: $__NDK_Version" echo "NDK location: $__NDK_Dir" echo "Target Toolchain location: $__ToolchainDir" @@ -85,8 +105,8 @@ echo "Target Toolchain location: $__ToolchainDir" if [ ! -d $__NDK_Dir ]; then echo Downloading the NDK into $__NDK_Dir mkdir -p $__NDK_Dir - wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux-x86_64.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip - unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip -d $__CrossDir + wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux$__NDK_File_Arch_Spec.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux.zip + unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux.zip -d $__CrossDir fi if [ ! -d $__lldb_Dir ]; then @@ -116,16 +136,11 @@ for path in $(wget -qO- https://packages.termux.dev/termux-main-21/dists/stable/ fi done -cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/sysroot/usr/" +cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/$__SysRoot/usr/" # Generate platform file for build.sh script to assign to __DistroRid echo "Generating platform file..." -echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/sysroot/android_platform - -echo "Now to build coreclr, libraries and installers; run:" -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory coreclr -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory libraries -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory installer +echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/$__SysRoot/android_platform + +echo "Now to build coreclr, libraries and host; run:" +echo ROOTFS_DIR=$(realpath $__ToolchainDir/$__SysRoot) ./build.sh clr+libs+host --cross --arch $__BuildArch diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 4b5e8d7166bd..8abfb71f7275 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -5,7 +5,7 @@ set -e usage() { echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir ]" - echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86" + echo "BuildArch can be: arm(default), arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64, x86" echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine" echo " for alpine can be specified with version: alpineX.YY or alpineedge" echo " for FreeBSD can be: freebsd13, freebsd14" @@ -15,6 +15,7 @@ usage() echo "llvmx[.y] - optional, LLVM version for LLVM related packages." echo "--skipunmount - optional, will skip the unmount of rootfs folder." echo "--skipsigcheck - optional, will skip package signature checks (allowing untrusted packages)." + echo "--skipemulation - optional, will skip qemu and debootstrap requirement when building environment for debian based systems." echo "--use-mirror - optional, use mirror URL to fetch resources, when available." echo "--jobs N - optional, restrict to N jobs." exit 1 @@ -52,28 +53,27 @@ __UbuntuPackages+=" symlinks" __UbuntuPackages+=" libicu-dev" __UbuntuPackages+=" liblttng-ust-dev" __UbuntuPackages+=" libunwind8-dev" -__UbuntuPackages+=" libnuma-dev" __AlpinePackages+=" gettext-dev" __AlpinePackages+=" icu-dev" __AlpinePackages+=" libunwind-dev" __AlpinePackages+=" lttng-ust-dev" __AlpinePackages+=" compiler-rt" -__AlpinePackages+=" numactl-dev" # runtime libraries' dependencies __UbuntuPackages+=" libcurl4-openssl-dev" __UbuntuPackages+=" libkrb5-dev" __UbuntuPackages+=" libssl-dev" __UbuntuPackages+=" zlib1g-dev" +__UbuntuPackages+=" libbrotli-dev" __AlpinePackages+=" curl-dev" __AlpinePackages+=" krb5-dev" __AlpinePackages+=" openssl-dev" __AlpinePackages+=" zlib-dev" -__FreeBSDBase="13.3-RELEASE" -__FreeBSDPkg="1.17.0" +__FreeBSDBase="13.4-RELEASE" +__FreeBSDPkg="1.21.3" __FreeBSDABI="13" __FreeBSDPackages="libunwind" __FreeBSDPackages+=" icu" @@ -91,18 +91,18 @@ __HaikuPackages="gcc_syslibs" __HaikuPackages+=" gcc_syslibs_devel" __HaikuPackages+=" gmp" __HaikuPackages+=" gmp_devel" -__HaikuPackages+=" icu66" -__HaikuPackages+=" icu66_devel" +__HaikuPackages+=" icu[0-9]+" +__HaikuPackages+=" icu[0-9]*_devel" __HaikuPackages+=" krb5" __HaikuPackages+=" krb5_devel" __HaikuPackages+=" libiconv" __HaikuPackages+=" libiconv_devel" -__HaikuPackages+=" llvm12_libunwind" -__HaikuPackages+=" llvm12_libunwind_devel" +__HaikuPackages+=" llvm[0-9]*_libunwind" +__HaikuPackages+=" llvm[0-9]*_libunwind_devel" __HaikuPackages+=" mpfr" __HaikuPackages+=" mpfr_devel" -__HaikuPackages+=" openssl" -__HaikuPackages+=" openssl_devel" +__HaikuPackages+=" openssl3" +__HaikuPackages+=" openssl3_devel" __HaikuPackages+=" zlib" __HaikuPackages+=" zlib_devel" @@ -128,10 +128,12 @@ __AlpineKeys=' 616adfeb:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0BFD1D4lIxQcsqEpQzU\npNCYM3aP1V/fxxVdT4DWvSI53JHTwHQamKdMWtEXetWVbP5zSROniYKFXd/xrD9X\n0jiGHey3lEtylXRIPxe5s+wXoCmNLcJVnvTcDtwx/ne2NLHxp76lyc25At+6RgE6\nADjLVuoD7M4IFDkAsd8UQ8zM0Dww9SylIk/wgV3ZkifecvgUQRagrNUdUjR56EBZ\nraQrev4hhzOgwelT0kXCu3snbUuNY/lU53CoTzfBJ5UfEJ5pMw1ij6X0r5S9IVsy\nKLWH1hiO0NzU2c8ViUYCly4Fe9xMTFc6u2dy/dxf6FwERfGzETQxqZvSfrRX+GLj\n/QZAXiPg5178hT/m0Y3z5IGenIC/80Z9NCi+byF1WuJlzKjDcF/TU72zk0+PNM/H\nKuppf3JT4DyjiVzNC5YoWJT2QRMS9KLP5iKCSThwVceEEg5HfhQBRT9M6KIcFLSs\nmFjx9kNEEmc1E8hl5IR3+3Ry8G5/bTIIruz14jgeY9u5jhL8Vyyvo41jgt9sLHR1\n/J1TxKfkgksYev7PoX6/ZzJ1ksWKZY5NFoDXTNYUgzFUTOoEaOg3BAQKadb3Qbbq\nXIrxmPBdgrn9QI7NCgfnAY3Tb4EEjs3ON/BNyEhUENcXOH6I1NbcuBQ7g9P73kE4\nVORdoc8MdJ5eoKBpO8Ww8HECAwEAAQ== 616ae350:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyduVzi1mWm+lYo2Tqt/0\nXkCIWrDNP1QBMVPrE0/ZlU2bCGSoo2Z9FHQKz/mTyMRlhNqTfhJ5qU3U9XlyGOPJ\npiM+b91g26pnpXJ2Q2kOypSgOMOPA4cQ42PkHBEqhuzssfj9t7x47ppS94bboh46\nxLSDRff/NAbtwTpvhStV3URYkxFG++cKGGa5MPXBrxIp+iZf9GnuxVdST5PGiVGP\nODL/b69sPJQNbJHVquqUTOh5Ry8uuD2WZuXfKf7/C0jC/ie9m2+0CttNu9tMciGM\nEyKG1/Xhk5iIWO43m4SrrT2WkFlcZ1z2JSf9Pjm4C2+HovYpihwwdM/OdP8Xmsnr\nDzVB4YvQiW+IHBjStHVuyiZWc+JsgEPJzisNY0Wyc/kNyNtqVKpX6dRhMLanLmy+\nf53cCSI05KPQAcGj6tdL+D60uKDkt+FsDa0BTAobZ31OsFVid0vCXtsbplNhW1IF\nHwsGXBTVcfXg44RLyL8Lk/2dQxDHNHzAUslJXzPxaHBLmt++2COa2EI1iWlvtznk\nOk9WP8SOAIj+xdqoiHcC4j72BOVVgiITIJNHrbppZCq6qPR+fgXmXa+sDcGh30m6\n9Wpbr28kLMSHiENCWTdsFij+NQTd5S47H7XTROHnalYDuF1RpS+DpQidT5tUimaT\nJZDr++FjKrnnijbyNF8b98UCAwEAAQ== 616db30d:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnpUpyWDWjlUk3smlWeA0\nlIMW+oJ38t92CRLHH3IqRhyECBRW0d0aRGtq7TY8PmxjjvBZrxTNDpJT6KUk4LRm\na6A6IuAI7QnNK8SJqM0DLzlpygd7GJf8ZL9SoHSH+gFsYF67Cpooz/YDqWrlN7Vw\ntO00s0B+eXy+PCXYU7VSfuWFGK8TGEv6HfGMALLjhqMManyvfp8hz3ubN1rK3c8C\nUS/ilRh1qckdbtPvoDPhSbTDmfU1g/EfRSIEXBrIMLg9ka/XB9PvWRrekrppnQzP\nhP9YE3x/wbFc5QqQWiRCYyQl/rgIMOXvIxhkfe8H5n1Et4VAorkpEAXdsfN8KSVv\nLSMazVlLp9GYq5SUpqYX3KnxdWBgN7BJoZ4sltsTpHQ/34SXWfu3UmyUveWj7wp0\nx9hwsPirVI00EEea9AbP7NM2rAyu6ukcm4m6ATd2DZJIViq2es6m60AE6SMCmrQF\nwmk4H/kdQgeAELVfGOm2VyJ3z69fQuywz7xu27S6zTKi05Qlnohxol4wVb6OB7qG\nLPRtK9ObgzRo/OPumyXqlzAi/Yvyd1ZQk8labZps3e16bQp8+pVPiumWioMFJDWV\nGZjCmyMSU8V6MB6njbgLHoyg2LCukCAeSjbPGGGYhnKLm1AKSoJh3IpZuqcKCk5C\n8CM1S15HxV78s9dFntEqIokCAwEAAQ== +66ba20fe:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtfB12w4ZgqsXWZDfUAV/\n6Y4aHUKIu3q4SXrNZ7CXF9nXoAVYrS7NAxJdAodsY3vPCN0g5O8DFXR+390LdOuQ\n+HsGKCc1k5tX5ZXld37EZNTNSbR0k+NKhd9h6X3u6wqPOx7SIKxwAQR8qeeFq4pP\nrt9GAGlxtuYgzIIcKJPwE0dZlcBCg+GnptCUZXp/38BP1eYC+xTXSL6Muq1etYfg\nodXdb7Yl+2h1IHuOwo5rjgY5kpY7GcAs8AjGk3lDD/av60OTYccknH0NCVSmPoXK\nvrxDBOn0LQRNBLcAfnTKgHrzy0Q5h4TNkkyTgxkoQw5ObDk9nnabTxql732yy9BY\ns+hM9+dSFO1HKeVXreYSA2n1ndF18YAvAumzgyqzB7I4pMHXq1kC/8bONMJxwSkS\nYm6CoXKyavp7RqGMyeVpRC7tV+blkrrUml0BwNkxE+XnwDRB3xDV6hqgWe0XrifD\nYTfvd9ScZQP83ip0r4IKlq4GMv/R5shcCRJSkSZ6QSGshH40JYSoiwJf5FHbj9ND\n7do0UAqebWo4yNx63j/wb2ULorW3AClv0BCFSdPsIrCStiGdpgJDBR2P2NZOCob3\nG9uMj+wJD6JJg2nWqNJxkANXX37Qf8plgzssrhrgOvB0fjjS7GYhfkfmZTJ0wPOw\nA8+KzFseBh4UFGgue78KwgkCAwEAAQ== ' __Keyring= __KeyringFile="/usr/share/keyrings/ubuntu-archive-keyring.gpg" __SkipSigCheck=0 +__SkipEmulation=0 __UseMirror=0 __UnprocessedBuildArgs= @@ -162,9 +164,13 @@ while :; do armel) __BuildArch=armel __UbuntuArch=armel - __UbuntuRepo="http://ftp.debian.org/debian/" - __CodeName=jessie + __UbuntuRepo="http://archive.debian.org/debian/" + __CodeName=buster __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __LLDB_Package="liblldb-6.0-dev" + __UbuntuPackages="${__UbuntuPackages// libomp-dev/}" + __UbuntuPackages="${__UbuntuPackages// libomp5/}" + __UbuntuSuites= ;; armv6) __BuildArch=armv6 @@ -180,6 +186,18 @@ while :; do __Keyring="--keyring $__KeyringFile" fi ;; + loongarch64) + __BuildArch=loongarch64 + __AlpineArch=loongarch64 + __QEMUArch=loongarch64 + __UbuntuArch=loong64 + __UbuntuSuites=unreleased + __LLDB_Package="liblldb-19-dev" + + if [[ "$__CodeName" == "sid" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; riscv64) __BuildArch=riscv64 __AlpineArch=riscv64 @@ -264,44 +282,21 @@ while :; do ;; xenial) # Ubuntu 16.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=xenial - fi - ;; - zesty) # Ubuntu 17.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=zesty - fi + __CodeName=xenial ;; bionic) # Ubuntu 18.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=bionic - fi + __CodeName=bionic ;; focal) # Ubuntu 20.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=focal - fi + __CodeName=focal ;; jammy) # Ubuntu 22.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=jammy - fi + __CodeName=jammy ;; noble) # Ubuntu 24.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=noble - fi - if [[ -n "$__LLDB_Package" ]]; then - __LLDB_Package="liblldb-18-dev" - fi - ;; - jessie) # Debian 8 - __CodeName=jessie - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __CodeName=noble + if [[ -z "$__LLDB_Package" ]]; then + __LLDB_Package="liblldb-19-dev" fi ;; stretch) # Debian 9 @@ -319,7 +314,7 @@ while :; do __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __UbuntuRepo="http://archive.debian.org/debian/" fi ;; bullseye) # Debian 11 @@ -340,10 +335,28 @@ while :; do ;; sid) # Debian sid __CodeName=sid - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __UbuntuSuites= - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + # Debian-Ports architectures need different values + case "$__UbuntuArch" in + amd64|arm64|armel|armhf|i386|mips64el|ppc64el|riscv64|s390x) + __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.debian.org/debian/" + fi + ;; + *) + __KeyringFile="/usr/share/keyrings/debian-ports-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; + esac + + if [[ -e "$__KeyringFile" ]]; then + __Keyring="--keyring $__KeyringFile" fi ;; tizen) @@ -370,7 +383,7 @@ while :; do ;; freebsd14) __CodeName=freebsd - __FreeBSDBase="14.0-RELEASE" + __FreeBSDBase="14.2-RELEASE" __FreeBSDABI="14" __SkipUnmount=1 ;; @@ -388,6 +401,9 @@ while :; do --skipsigcheck) __SkipSigCheck=1 ;; + --skipemulation) + __SkipEmulation=1 + ;; --rootfsdir|-rootfsdir) shift __RootfsDir="$1" @@ -420,16 +436,15 @@ case "$__AlpineVersion" in elif [[ "$__AlpineArch" == "x86" ]]; then __AlpineVersion=3.17 # minimum version that supports lldb-dev __AlpinePackages+=" llvm15-libs" - elif [[ "$__AlpineArch" == "riscv64" ]]; then + elif [[ "$__AlpineArch" == "riscv64" || "$__AlpineArch" == "loongarch64" ]]; then + __AlpineVersion=3.21 # minimum version that supports lldb-dev + __AlpinePackages+=" llvm19-libs" + elif [[ -n "$__AlpineMajorVersion" ]]; then + # use whichever alpine version is provided and select the latest toolchain libs __AlpineLlvmLibsLookup=1 - __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive) else __AlpineVersion=3.13 # 3.13 to maximize compatibility __AlpinePackages+=" llvm10-libs" - - if [[ "$__AlpineArch" == "armv7" ]]; then - __AlpinePackages="${__AlpinePackages//numactl-dev/}" - fi fi esac @@ -439,15 +454,6 @@ if [[ "$__AlpineVersion" =~ 3\.1[345] ]]; then __AlpinePackages="${__AlpinePackages/compiler-rt/compiler-rt-static}" fi -if [[ "$__BuildArch" == "armel" ]]; then - __LLDB_Package="lldb-3.5-dev" -fi - -if [[ "$__CodeName" == "xenial" && "$__UbuntuArch" == "armhf" ]]; then - # libnuma-dev is not available on armhf for xenial - __UbuntuPackages="${__UbuntuPackages//libnuma-dev/}" -fi - __UbuntuPackages+=" ${__LLDB_Package:-}" if [[ -z "$__UbuntuRepo" ]]; then @@ -496,7 +502,7 @@ if [[ "$__CodeName" == "alpine" ]]; then arch="$(uname -m)" ensureDownloadTool - + if [[ "$__hasWget" == 1 ]]; then wget -P "$__ApkToolsDir" "https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v$__ApkToolsVersion/$arch/apk.static" else @@ -512,11 +518,6 @@ if [[ "$__CodeName" == "alpine" ]]; then echo "$__ApkToolsSHA512SUM $__ApkToolsDir/apk.static" | sha512sum -c chmod +x "$__ApkToolsDir/apk.static" - if [[ -f "/usr/bin/qemu-$__QEMUArch-static" ]]; then - mkdir -p "$__RootfsDir"/usr/bin - cp -v "/usr/bin/qemu-$__QEMUArch-static" "$__RootfsDir/usr/bin" - fi - if [[ "$__AlpineVersion" == "edge" ]]; then version=edge else @@ -536,6 +537,10 @@ if [[ "$__CodeName" == "alpine" ]]; then __ApkSignatureArg="--keys-dir $__ApkKeysDir" fi + if [[ "$__SkipEmulation" == "1" ]]; then + __NoEmulationArg="--no-scripts" + fi + # initialize DB # shellcheck disable=SC2086 "$__ApkToolsDir/apk.static" \ @@ -557,7 +562,7 @@ if [[ "$__CodeName" == "alpine" ]]; then "$__ApkToolsDir/apk.static" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \ - -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" \ + -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" $__NoEmulationArg \ add $__AlpinePackages rm -r "$__ApkToolsDir" @@ -573,7 +578,7 @@ elif [[ "$__CodeName" == "freebsd" ]]; then curl -SL "https://download.freebsd.org/ftp/releases/${__FreeBSDArch}/${__FreeBSDMachineArch}/${__FreeBSDBase}/base.txz" | tar -C "$__RootfsDir" -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version fi echo "ABI = \"FreeBSD:${__FreeBSDABI}:${__FreeBSDMachineArch}\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > "${__RootfsDir}"/usr/local/etc/pkg.conf - echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf + echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf mkdir -p "$__RootfsDir"/tmp # get and build package manager if [[ "$__hasWget" == 1 ]]; then @@ -681,7 +686,7 @@ elif [[ "$__CodeName" == "haiku" ]]; then ensureDownloadTool - echo "Downloading Haiku package tool" + echo "Downloading Haiku package tools" git clone https://github.com/haiku/haiku-toolchains-ubuntu --depth 1 "$__RootfsDir/tmp/script" if [[ "$__hasWget" == 1 ]]; then wget -O "$__RootfsDir/tmp/download/hosttools.zip" "$("$__RootfsDir/tmp/script/fetch.sh" --hosttools)" @@ -691,34 +696,42 @@ elif [[ "$__CodeName" == "haiku" ]]; then unzip -o "$__RootfsDir/tmp/download/hosttools.zip" -d "$__RootfsDir/tmp/bin" - DepotBaseUrl="https://depot.haiku-os.org/__api/v2/pkg/get-pkg" - HpkgBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuPortsBaseUrl="https://eu.hpkg.haiku-os.org/haikuports/master/$__HaikuArch/current" + + echo "Downloading HaikuPorts package repository index..." + if [[ "$__hasWget" == 1 ]]; then + wget -P "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + else + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + fi - # Download Haiku packages echo "Downloading Haiku packages" read -ra array <<<"$__HaikuPackages" for package in "${array[@]}"; do echo "Downloading $package..." - # API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60 - # The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598 + hpkgFilename="$(LD_LIBRARY_PATH="$__RootfsDir/tmp/bin" "$__RootfsDir/tmp/bin/package_repo" list -f "$__RootfsDir/tmp/download/repo" | + grep -E "${package}-" | sort -V | tail -n 1 | xargs)" + if [ -z "$hpkgFilename" ]; then + >&2 echo "ERROR: package $package missing." + exit 1 + fi + echo "Resolved filename: $hpkgFilename..." + hpkgDownloadUrl="$HaikuPortsBaseUrl/packages/$hpkgFilename" if [[ "$__hasWget" == 1 ]]; then - hpkgDownloadUrl="$(wget -qO- --post-data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" wget -P "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" else - hpkgDownloadUrl="$(curl -sSL -XPOST --data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" fi done for package in haiku haiku_devel; do echo "Downloading $package..." if [[ "$__hasWget" == 1 ]]; then - hpkgVersion="$(wget -qO- "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - wget -P "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(wget -qO- "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + wget -P "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" else - hpkgVersion="$(curl -sSL "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(curl -sSL "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" fi done @@ -744,25 +757,67 @@ elif [[ "$__CodeName" == "haiku" ]]; then popd rm -rf "$__RootfsDir/tmp" elif [[ -n "$__CodeName" ]]; then + __Suites="$__CodeName $(for suite in $__UbuntuSuites; do echo -n "$__CodeName-$suite "; done)" + + if [[ "$__SkipEmulation" == "1" ]]; then + if [[ -z "$AR" ]]; then + if command -v ar &>/dev/null; then + AR="$(command -v ar)" + elif command -v llvm-ar &>/dev/null; then + AR="$(command -v llvm-ar)" + else + echo "Unable to find ar or llvm-ar on PATH, add them to PATH or set AR environment variable pointing to the available AR tool" + exit 1 + fi + fi + + PYTHON=${PYTHON_EXECUTABLE:-python3} + + # shellcheck disable=SC2086,SC2046 + echo running "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + + # shellcheck disable=SC2086,SC2046 + "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + exit 0 + fi + + __UpdateOptions= if [[ "$__SkipSigCheck" == "0" ]]; then __Keyring="$__Keyring --force-check-gpg" + else + __Keyring= + __UpdateOptions="--allow-unauthenticated --allow-insecure-repositories" fi # shellcheck disable=SC2086 echo running debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" - debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" + # shellcheck disable=SC2086 + if ! debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo"; then + echo "debootstrap failed! dumping debootstrap.log" + cat "$__RootfsDir/debootstrap/debootstrap.log" + exit 1 + fi + + rm -rf "$__RootfsDir"/etc/apt/*.{sources,list} "$__RootfsDir"/etc/apt/sources.list.d mkdir -p "$__RootfsDir/etc/apt/sources.list.d/" + + # shellcheck disable=SC2086 cat > "$__RootfsDir/etc/apt/sources.list.d/$__CodeName.sources" < token2) - (token1 < token2) + else: + return -1 if isinstance(token1, str) else 1 + + return len(tokens1) - len(tokens2) + +def compare_debian_versions(version1, version2): + """Compare two Debian package versions.""" + epoch1, upstream1, revision1 = parse_debian_version(version1) + epoch2, upstream2, revision2 = parse_debian_version(version2) + + if epoch1 != epoch2: + return epoch1 - epoch2 + + result = compare_upstream_version(upstream1, upstream2) + if result != 0: + return result + + return compare_upstream_version(revision1, revision2) + +def resolve_dependencies(packages, aliases, desired_packages): + """Recursively resolves dependencies for the desired packages.""" + resolved = [] + to_process = deque(desired_packages) + + while to_process: + current = to_process.popleft() + resolved_package = current if current in packages else aliases.get(current, [None])[0] + + if not resolved_package: + print(f"Error: Package '{current}' was not found in the available packages.") + sys.exit(1) + + if resolved_package not in resolved: + resolved.append(resolved_package) + + deps = packages.get(resolved_package, {}).get("Depends", "") + if deps: + deps = [dep.split(' ')[0] for dep in deps.split(', ') if dep] + for dep in deps: + if dep not in resolved and dep not in to_process and dep in packages: + to_process.append(dep) + + return resolved + +def parse_package_index(content): + """Parses the Packages.gz file and returns package information.""" + packages = {} + aliases = {} + entries = re.split(r'\n\n+', content) + + for entry in entries: + fields = dict(re.findall(r'^(\S+): (.+)$', entry, re.MULTILINE)) + if "Package" in fields: + package_name = fields["Package"] + version = fields.get("Version") + filename = fields.get("Filename") + depends = fields.get("Depends") + provides = fields.get("Provides", None) + + # Only update if package_name is not in packages or if the new version is higher + if package_name not in packages or compare_debian_versions(version, packages[package_name]["Version"]) > 0: + packages[package_name] = { + "Version": version, + "Filename": filename, + "Depends": depends + } + + # Update aliases if package provides any alternatives + if provides: + provides_list = [x.strip() for x in provides.split(",")] + for alias in provides_list: + # Strip version specifiers + alias_name = re.sub(r'\s*\(=.*\)', '', alias) + if alias_name not in aliases: + aliases[alias_name] = [] + if package_name not in aliases[alias_name]: + aliases[alias_name].append(package_name) + + return packages, aliases + +def install_packages(mirror, packages_info, aliases, tmp_dir, extract_dir, ar_tool, desired_packages): + """Downloads .deb files and extracts them.""" + resolved_packages = resolve_dependencies(packages_info, aliases, desired_packages) + print(f"Resolved packages (including dependencies): {resolved_packages}") + + packages_to_download = {} + + for pkg in resolved_packages: + if pkg in packages_info: + packages_to_download[pkg] = packages_info[pkg] + + if pkg in aliases: + for alias in aliases[pkg]: + if alias in packages_info: + packages_to_download[alias] = packages_info[alias] + + asyncio.run(download_deb_files_parallel(mirror, packages_to_download, tmp_dir)) + + package_to_deb_file_map = {} + for pkg in resolved_packages: + pkg_info = packages_info.get(pkg) + if pkg_info: + deb_filename = pkg_info.get("Filename") + if deb_filename: + deb_file_path = os.path.join(tmp_dir, os.path.basename(deb_filename)) + package_to_deb_file_map[pkg] = deb_file_path + + for pkg in reversed(resolved_packages): + deb_file = package_to_deb_file_map.get(pkg) + if deb_file and os.path.exists(deb_file): + extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool) + + print("All done!") + +def extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool): + """Extract .deb file contents""" + + os.makedirs(extract_dir, exist_ok=True) + + with tempfile.TemporaryDirectory(dir=tmp_dir) as tmp_subdir: + result = subprocess.run(f"{ar_tool} t {os.path.abspath(deb_file)}", cwd=tmp_subdir, check=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + tar_filename = None + for line in result.stdout.decode().splitlines(): + if line.startswith("data.tar"): + tar_filename = line.strip() + break + + if not tar_filename: + raise FileNotFoundError(f"Could not find 'data.tar.*' in {deb_file}.") + + tar_file_path = os.path.join(tmp_subdir, tar_filename) + print(f"Extracting {tar_filename} from {deb_file}..") + + subprocess.run(f"{ar_tool} p {os.path.abspath(deb_file)} {tar_filename} > {tar_file_path}", check=True, shell=True) + + file_extension = os.path.splitext(tar_file_path)[1].lower() + + if file_extension == ".xz": + mode = "r:xz" + elif file_extension == ".gz": + mode = "r:gz" + elif file_extension == ".zst": + # zstd is not supported by standard library yet + decompressed_tar_path = tar_file_path.replace(".zst", "") + with open(tar_file_path, "rb") as zst_file, open(decompressed_tar_path, "wb") as decompressed_file: + dctx = zstandard.ZstdDecompressor() + dctx.copy_stream(zst_file, decompressed_file) + + tar_file_path = decompressed_tar_path + mode = "r" + else: + raise ValueError(f"Unsupported compression format: {file_extension}") + + with tarfile.open(tar_file_path, mode) as tar: + tar.extractall(path=extract_dir, filter='fully_trusted') + +def finalize_setup(rootfsdir): + lib_dir = os.path.join(rootfsdir, 'lib') + usr_lib_dir = os.path.join(rootfsdir, 'usr', 'lib') + + if os.path.exists(lib_dir): + if os.path.islink(lib_dir): + os.remove(lib_dir) + else: + os.makedirs(usr_lib_dir, exist_ok=True) + + for item in os.listdir(lib_dir): + src = os.path.join(lib_dir, item) + dest = os.path.join(usr_lib_dir, item) + + if os.path.isdir(src): + shutil.copytree(src, dest, dirs_exist_ok=True) + else: + shutil.copy2(src, dest) + + shutil.rmtree(lib_dir) + + os.symlink(usr_lib_dir, lib_dir) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Generate rootfs for .NET runtime on Debian-like OS") + parser.add_argument("--distro", required=False, help="Distro name (e.g., debian, ubuntu, etc.)") + parser.add_argument("--arch", required=True, help="Architecture (e.g., amd64, loong64, etc.)") + parser.add_argument("--rootfsdir", required=True, help="Destination directory.") + parser.add_argument('--suite', required=True, action='append', help='Specify one or more repository suites to collect index data.') + parser.add_argument("--mirror", required=False, help="Mirror (e.g., http://ftp.debian.org/debian-ports etc.)") + parser.add_argument("--artool", required=False, default="ar", help="ar tool to extract debs (e.g., ar, llvm-ar etc.)") + parser.add_argument("packages", nargs="+", help="List of package names to be installed.") + + args = parser.parse_args() + + if args.mirror is None: + if args.distro == "ubuntu": + args.mirror = "http://archive.ubuntu.com/ubuntu" if args.arch in ["amd64", "i386"] else "http://ports.ubuntu.com/ubuntu-ports" + elif args.distro == "debian": + args.mirror = "http://ftp.debian.org/debian-ports" + else: + raise Exception("Unsupported distro") + + DESIRED_PACKAGES = args.packages + [ # base packages + "dpkg", + "busybox", + "libc-bin", + "base-files", + "base-passwd", + "debianutils" + ] + + print(f"Creating rootfs. rootfsdir: {args.rootfsdir}, distro: {args.distro}, arch: {args.arch}, suites: {args.suite}, mirror: {args.mirror}") + + package_index_content = asyncio.run(download_package_index_parallel(args.mirror, args.arch, args.suite)) + + packages_info, aliases = parse_package_index(package_index_content) + + with tempfile.TemporaryDirectory() as tmp_dir: + install_packages(args.mirror, packages_info, aliases, tmp_dir, args.rootfsdir, args.artool, DESIRED_PACKAGES) + + finalize_setup(args.rootfsdir) diff --git a/eng/common/cross/tizen-build-rootfs.sh b/eng/common/cross/tizen-build-rootfs.sh old mode 100644 new mode 100755 diff --git a/eng/common/cross/tizen-fetch.sh b/eng/common/cross/tizen-fetch.sh old mode 100644 new mode 100755 index 28936ceef3a7..37c3a61f1de8 --- a/eng/common/cross/tizen-fetch.sh +++ b/eng/common/cross/tizen-fetch.sh @@ -156,13 +156,8 @@ fetch_tizen_pkgs() done } -if [ "$TIZEN_ARCH" == "riscv64" ]; then - BASE="Tizen-Base-RISCV" - UNIFIED="Tizen-Unified-RISCV" -else - BASE="Tizen-Base" - UNIFIED="Tizen-Unified" -fi +BASE="Tizen-Base" +UNIFIED="Tizen-Unified" Inform "Initialize ${TIZEN_ARCH} base" fetch_tizen_pkgs_init standard $BASE diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake index 9a7ecfbd42c5..0ff85cf0367e 100644 --- a/eng/common/cross/toolchain.cmake +++ b/eng/common/cross/toolchain.cmake @@ -67,6 +67,13 @@ elseif(TARGET_ARCH_NAME STREQUAL "armv6") else() set(TOOLCHAIN "arm-linux-gnueabihf") endif() +elseif(TARGET_ARCH_NAME STREQUAL "loongarch64") + set(CMAKE_SYSTEM_PROCESSOR "loongarch64") + if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/loongarch64-alpine-linux-musl) + set(TOOLCHAIN "loongarch64-alpine-linux-musl") + else() + set(TOOLCHAIN "loongarch64-linux-gnu") + endif() elseif(TARGET_ARCH_NAME STREQUAL "ppc64le") set(CMAKE_SYSTEM_PROCESSOR ppc64le) if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/powerpc64le-alpine-linux-musl) @@ -118,7 +125,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86") set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu") endif() else() - message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, ppc64le, riscv64, s390x, x64 and x86 are supported!") + message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64 and x86 are supported!") endif() if(DEFINED ENV{TOOLCHAIN}) @@ -148,6 +155,25 @@ if(TIZEN) include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++/${TIZEN_TOOLCHAIN}) endif() +function(locate_toolchain_exec exec var) + set(TOOLSET_PREFIX ${TOOLCHAIN}-) + string(TOUPPER ${exec} EXEC_UPPERCASE) + if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") + set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) + return() + endif() + + find_program(EXEC_LOCATION_${exec} + NAMES + "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" + "${TOOLSET_PREFIX}${exec}") + + if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") + message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") + endif() + set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) +endfunction() + if(ANDROID) if(TARGET_ARCH_NAME STREQUAL "arm") set(ANDROID_ABI armeabi-v7a) @@ -178,66 +204,24 @@ elseif(FREEBSD) set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=lld") elseif(ILLUMOS) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") + set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") include_directories(SYSTEM ${CROSS_ROOTFS}/include) - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") - locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") elseif(HAIKU) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") set(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};${CROSS_ROOTFS}/cross-tools-x86_64/bin") - - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") - # let CMake set up the correct search paths include(Platform/Haiku) else() @@ -307,7 +291,7 @@ endif() # Specify compile options -if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) +if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|loongarch64|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN}) diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index 36dbd45e1ce8..e889f439b8dc 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -68,7 +68,7 @@ function InstallDarcCli { fi fi - local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" + local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" echo "Installing Darc CLI version $darcVersion..." echo "You may need to restart your command shell if this is the first dotnet tool you have installed." diff --git a/eng/common/dotnet.cmd b/eng/common/dotnet.cmd new file mode 100644 index 000000000000..527fa4bb38fb --- /dev/null +++ b/eng/common/dotnet.cmd @@ -0,0 +1,7 @@ +@echo off + +:: This script is used to install the .NET SDK. +:: It will also invoke the SDK with any provided arguments. + +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0dotnet.ps1""" %*" +exit /b %ErrorLevel% diff --git a/eng/common/dotnet.ps1 b/eng/common/dotnet.ps1 new file mode 100644 index 000000000000..45e5676c9ebd --- /dev/null +++ b/eng/common/dotnet.ps1 @@ -0,0 +1,11 @@ +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +. $PSScriptRoot\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true + +# Invoke acquired SDK with args if they are provided +if ($args.count -gt 0) { + $env:DOTNET_NOLOGO=1 + & "$dotnetRoot\dotnet.exe" $args +} diff --git a/eng/common/dotnet.sh b/eng/common/dotnet.sh new file mode 100755 index 000000000000..2ef68235675f --- /dev/null +++ b/eng/common/dotnet.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +source="${BASH_SOURCE[0]}" +# resolve $SOURCE until the file is no longer a symlink +while [[ -h $source ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +source $scriptroot/tools.sh +InitializeDotNetCli true # install + +# Invoke acquired SDK with args if they are provided +if [[ $# > 0 ]]; then + __dotnetDir=${_InitializeDotNetCli} + dotnetPath=${__dotnetDir}/dotnet + ${dotnetPath} "$@" +fi diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1 index 524aaa57f2b7..fa1cdc2b3007 100644 --- a/eng/common/generate-locproject.ps1 +++ b/eng/common/generate-locproject.ps1 @@ -33,15 +33,27 @@ $jsonTemplateFiles | ForEach-Object { $jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern +$wxlFilesV3 = @() +$wxlFilesV5 = @() $wxlFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\.+\.wxl" -And -Not( $_.Directory.Name -Match "\d{4}" ) } # localized files live in four digit lang ID directories; this excludes them if (-not $wxlFiles) { $wxlEnFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\1033\\.+\.wxl" } # pick up en files (1033 = en) specifically so we can copy them to use as the neutral xlf files if ($wxlEnFiles) { - $wxlFiles = @() - $wxlEnFiles | ForEach-Object { - $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" - $wxlFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru - } + $wxlFiles = @() + $wxlEnFiles | ForEach-Object { + $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" + $content = Get-Content $_.FullName -Raw + + # Split files on schema to select different parser settings in the generated project. + if ($content -like "*http://wixtoolset.org/schemas/v4/wxl*") + { + $wxlFilesV5 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + elseif ($content -like "*http://schemas.microsoft.com/wix/2006/localization*") + { + $wxlFilesV3 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + } } } @@ -114,7 +126,32 @@ $locJson = @{ CloneLanguageSet = "WiX_CloneLanguages" LssFiles = @( "wxl_loc.lss" ) LocItems = @( - $wxlFiles | ForEach-Object { + $wxlFilesV3 | ForEach-Object { + $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" + $continue = $true + foreach ($exclusion in $exclusions.Exclusions) { + if ($_.FullName.Contains($exclusion)) { + $continue = $false + } + } + $sourceFile = ($_.FullName | Resolve-Path -Relative) + if ($continue) + { + return @{ + SourceFile = $sourceFile + CopyOption = "LangIDOnPath" + OutputPath = $outputPath + } + } + } + ) + }, + @{ + LanguageSet = $LanguageSet + CloneLanguageSet = "WiX_CloneLanguages" + LssFiles = @( "P210WxlSchemaV4.lss" ) + LocItems = @( + $wxlFilesV5 | ForEach-Object { $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" $continue = $true foreach ($exclusion in $exclusions.Exclusions) { diff --git a/eng/common/generate-sbom-prep.sh b/eng/common/generate-sbom-prep.sh old mode 100644 new mode 100755 diff --git a/eng/common/native/install-dependencies.sh b/eng/common/native/install-dependencies.sh new file mode 100755 index 000000000000..477a44f335be --- /dev/null +++ b/eng/common/native/install-dependencies.sh @@ -0,0 +1,62 @@ +#!/bin/sh + +set -e + +# This is a simple script primarily used for CI to install necessary dependencies +# +# Usage: +# +# ./install-dependencies.sh + +os="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + +if [ -z "$os" ]; then + . "$(dirname "$0")"/init-os-and-arch.sh +fi + +case "$os" in + linux) + if [ -e /etc/os-release ]; then + . /etc/os-release + fi + + if [ "$ID" = "debian" ] || [ "$ID_LIKE" = "debian" ]; then + apt update + + apt install -y build-essential gettext locales cmake llvm clang lld lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev \ + libssl-dev libkrb5-dev pigz cpio + + localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 + elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ] || [ "$ID" = "azurelinux" ]; then + pkg_mgr="$(command -v tdnf 2>/dev/null || command -v dnf)" + $pkg_mgr install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio + elif [ "$ID" = "alpine" ]; then + apk add build-base cmake bash curl clang llvm-dev lld lldb krb5-dev lttng-ust-dev icu-dev openssl-dev pigz cpio + else + echo "Unsupported distro. distro: $ID" + exit 1 + fi + ;; + + osx|maccatalyst|ios|iossimulator|tvos|tvossimulator) + echo "Installed xcode version: $(xcode-select -p)" + + export HOMEBREW_NO_INSTALL_CLEANUP=1 + export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 + # Skip brew update for now, see https://github.com/actions/setup-python/issues/577 + # brew update --preinstall + brew bundle --no-upgrade --file=- < Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." + Write-Host " -excludeCIBinaryLog When running on CI, allow no binary log (short: -nobl)" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." } @@ -34,10 +39,11 @@ function Print-Usage() { function Build([string]$target) { $logSuffix = if ($target -eq 'Execute') { '' } else { ".$target" } $log = Join-Path $LogDir "$task$logSuffix.binlog" + $binaryLogArg = if ($binaryLog) { "/bl:$log" } else { "" } $outputPath = Join-Path $ToolsetDir "$task\" MSBuild $taskProject ` - /bl:$log ` + $binaryLogArg ` /t:$target ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` @@ -64,7 +70,7 @@ try { $GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty } if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) { - $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.12.0" -MemberType NoteProperty + $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "18.0.0" -MemberType NoteProperty } if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") { $xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true diff --git a/eng/common/sdk-task.sh b/eng/common/sdk-task.sh new file mode 100755 index 000000000000..3270f83fa9a7 --- /dev/null +++ b/eng/common/sdk-task.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash + +show_usage() { + echo "Common settings:" + echo " --task Name of Arcade task (name of a project in SdkTasks directory of the Arcade SDK package)" + echo " --restore Restore dependencies" + echo " --verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]" + echo " --help Print help and exit" + echo "" + + echo "Advanced settings:" + echo " --excludeCIBinarylog Don't output binary log (short: -nobl)" + echo " --noWarnAsError Do not warn as error" + echo "" + echo "Command line arguments not listed above are passed thru to msbuild." +} + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +Build() { + local target=$1 + local log_suffix="" + [[ "$target" != "Execute" ]] && log_suffix=".$target" + local log="$log_dir/$task$log_suffix.binlog" + local binaryLogArg="" + [[ $binary_log == true ]] && binaryLogArg="/bl:$log" + local output_path="$toolset_dir/$task/" + + MSBuild "$taskProject" \ + $binaryLogArg \ + /t:"$target" \ + /p:Configuration="$configuration" \ + /p:RepoRoot="$repo_root" \ + /p:BaseIntermediateOutputPath="$output_path" \ + /v:"$verbosity" \ + $properties +} + +binary_log=true +configuration="Debug" +verbosity="minimal" +exclude_ci_binary_log=false +restore=false +help=false +properties='' +warnAsError=true + +while (($# > 0)); do + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + case $lowerI in + --task) + task=$2 + shift 2 + ;; + --restore) + restore=true + shift 1 + ;; + --verbosity) + verbosity=$2 + shift 2 + ;; + --excludecibinarylog|--nobl) + binary_log=false + exclude_ci_binary_log=true + shift 1 + ;; + --noWarnAsError) + warnAsError=false + shift 1 + ;; + --help) + help=true + shift 1 + ;; + *) + properties="$properties $1" + shift 1 + ;; + esac +done + +ci=true + +if $help; then + show_usage + exit 0 +fi + +. "$scriptroot/tools.sh" +InitializeToolset + +if [[ -z "$task" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'MissingTask' -Message "Missing required parameter '-task '" + ExitWithExitCode 1 +fi + +taskProject=$(GetSdkTaskProject "$task") +if [[ ! -e "$taskProject" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'UnknownTask' -Message "Unknown task: $task" + ExitWithExitCode 1 +fi + +if $restore; then + Build "Restore" +fi + +Build "Execute" + + +ExitWithExitCode 0 diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config index 4585cfd6bba1..e5f543ea68c2 100644 --- a/eng/common/sdl/packages.config +++ b/eng/common/sdl/packages.config @@ -1,4 +1,4 @@ - + diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml index 81ea7a261f2d..92a0664f5647 100644 --- a/eng/common/templates-official/job/job.yml +++ b/eng/common/templates-official/job/job.yml @@ -31,6 +31,7 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked continueOnError: true - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - output: pipelineArtifact @@ -39,6 +40,7 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked sbomEnabled: false # we don't need SBOM for logs - ${{ if eq(parameters.enablePublishBuildArtifacts, true) }}: @@ -46,7 +48,7 @@ jobs: displayName: Publish Logs PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' publishLocation: Container - ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() sbomEnabled: false # we don't need SBOM for logs diff --git a/eng/common/templates-official/steps/publish-build-artifacts.yml b/eng/common/templates-official/steps/publish-build-artifacts.yml index 100a3fc98493..fcf6637b2ebc 100644 --- a/eng/common/templates-official/steps/publish-build-artifacts.yml +++ b/eng/common/templates-official/steps/publish-build-artifacts.yml @@ -24,6 +24,10 @@ parameters: - name: is1ESPipeline type: boolean default: true + +- name: retryCountOnTaskFailure + type: string + default: 10 steps: - ${{ if ne(parameters.is1ESPipeline, true) }}: @@ -38,4 +42,5 @@ steps: PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: ArtifactName: ${{ parameters.artifactName }} - + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates-official/steps/source-index-stage1-publish.yml b/eng/common/templates-official/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..9b8b80942b5c --- /dev/null +++ b/eng/common/templates-official/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: true + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 5bdd3dd85fd2..238fa0818f7b 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -46,6 +46,7 @@ jobs: artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: @@ -56,6 +57,7 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked sbomEnabled: false # we don't need SBOM for logs - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: @@ -66,7 +68,7 @@ jobs: displayName: Publish Logs pathToPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' publishLocation: Container - artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() diff --git a/eng/common/templates/steps/publish-build-artifacts.yml b/eng/common/templates/steps/publish-build-artifacts.yml index 6428a98dfef6..605e602e94d1 100644 --- a/eng/common/templates/steps/publish-build-artifacts.yml +++ b/eng/common/templates/steps/publish-build-artifacts.yml @@ -25,6 +25,10 @@ parameters: type: string default: 'Container' +- name: retryCountOnTaskFailure + type: string + default: 10 + steps: - ${{ if eq(parameters.is1ESPipeline, true) }}: - 'eng/common/templates cannot be referenced from a 1ES managed template': error @@ -37,4 +41,6 @@ steps: PublishLocation: ${{ parameters.publishLocation }} PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: - ArtifactName: ${{ parameters.artifactName }} \ No newline at end of file + ArtifactName: ${{ parameters.artifactName }} + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates/steps/source-index-stage1-publish.yml b/eng/common/templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..182cec33a7bb --- /dev/null +++ b/eng/common/templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: false + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates/steps/vmr-sync.yml b/eng/common/templates/steps/vmr-sync.yml new file mode 100644 index 000000000000..eb619c502683 --- /dev/null +++ b/eng/common/templates/steps/vmr-sync.yml @@ -0,0 +1,186 @@ +### These steps synchronize new code from product repositories into the VMR (https://github.com/dotnet/dotnet). +### They initialize the darc CLI and pull the new updates. +### Changes are applied locally onto the already cloned VMR (located in $vmrPath). + +parameters: +- name: targetRef + displayName: Target revision in dotnet/ to synchronize + type: string + default: $(Build.SourceVersion) + +- name: vmrPath + displayName: Path where the dotnet/dotnet is checked out to + type: string + default: $(Agent.BuildDirectory)/vmr + +- name: additionalSyncs + displayName: Optional list of package names whose repo's source will also be synchronized in the local VMR, e.g. NuGet.Protocol + type: object + default: [] + +steps: +- checkout: vmr + displayName: Clone dotnet/dotnet + path: vmr + clean: true + +- checkout: self + displayName: Clone $(Build.Repository.Name) + path: repo + fetchDepth: 0 + +# This step is needed so that when we get a detached HEAD / shallow clone, +# we still pull the commit into the temporary repo clone to use it during the sync. +# Also unshallow the clone so that forwardflow command would work. +- script: | + git branch repo-head + git rev-parse HEAD + displayName: Label PR commit + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global user.name "dotnet-maestro[bot]" + git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com" + displayName: Set git author to dotnet-maestro[bot] + workingDirectory: ${{ parameters.vmrPath }} + +- script: | + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync repo into VMR (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global diff.astextplain.textconv echo + git config --system core.longpaths true + displayName: Configure Windows git (longpaths, astextplain) + condition: eq(variables['Agent.OS'], 'Windows_NT') + +- powershell: | + ./eng/common/vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync repo into VMR (Windows) + condition: eq(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - task: CopyFiles@2 + displayName: Collect failed patches + condition: failed() + inputs: + SourceFolder: '$(Agent.TempDirectory)' + Contents: '*.patch' + TargetFolder: '$(Build.ArtifactStagingDirectory)/FailedPatches' + + - publish: '$(Build.ArtifactStagingDirectory)/FailedPatches' + artifact: $(System.JobDisplayName)_FailedPatches + displayName: Upload failed patches + condition: failed() + +- ${{ each assetName in parameters.additionalSyncs }}: + # The vmr-sync script ends up staging files in the local VMR so we have to commit those + - script: + git commit --allow-empty -am "Forward-flow $(Build.Repository.Name)" + displayName: Commit local VMR changes + workingDirectory: ${{ parameters.vmrPath }} + + - script: | + set -ex + + echo "Searching for details of asset ${{ assetName }}..." + + # Use darc to get dependencies information + dependencies=$(./.dotnet/dotnet darc get-dependencies --name '${{ assetName }}' --ci) + + # Extract repository URL and commit hash + repository=$(echo "$dependencies" | grep 'Repo:' | sed 's/Repo:[[:space:]]*//' | head -1) + + if [ -z "$repository" ]; then + echo "##vso[task.logissue type=error]Asset ${{ assetName }} not found in the dependency list" + exit 1 + fi + + commit=$(echo "$dependencies" | grep 'Commit:' | sed 's/Commit:[[:space:]]*//' | head -1) + + echo "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync ${{ assetName }} into (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + + - powershell: | + $ErrorActionPreference = 'Stop' + + Write-Host "Searching for details of asset ${{ assetName }}..." + + $dependencies = .\.dotnet\dotnet darc get-dependencies --name '${{ assetName }}' --ci + + $repository = $dependencies | Select-String -Pattern 'Repo:\s+([^\s]+)' | Select-Object -First 1 + $repository -match 'Repo:\s+([^\s]+)' | Out-Null + $repository = $matches[1] + + if ($repository -eq $null) { + Write-Error "Asset ${{ assetName }} not found in the dependency list" + exit 1 + } + + $commit = $dependencies | Select-String -Pattern 'Commit:\s+([^\s]+)' | Select-Object -First 1 + $commit -match 'Commit:\s+([^\s]+)' | Out-Null + $commit = $matches[1] + + Write-Host "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + .\eng\common\vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync ${{ assetName }} into (Windows) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/eng/common/templates/vmr-build-pr.yml b/eng/common/templates/vmr-build-pr.yml new file mode 100644 index 000000000000..2f3694fa1323 --- /dev/null +++ b/eng/common/templates/vmr-build-pr.yml @@ -0,0 +1,43 @@ +# This pipeline is used for running the VMR verification of the PR changes in repo-level PRs. +# +# It will run a full set of verification jobs defined in: +# https://github.com/dotnet/dotnet/blob/10060d128e3f470e77265f8490f5e4f72dae738e/eng/pipelines/templates/stages/vmr-build.yml#L27-L38 +# +# For repos that do not need to run the full set, you would do the following: +# +# 1. Copy this YML file to a repo-specific location, i.e. outside of eng/common. +# +# 2. Add `verifications` parameter to VMR template reference +# +# Examples: +# - For source-build stage 1 verification, add the following: +# verifications: [ "source-build-stage1" ] +# +# - For Windows only verifications, add the following: +# verifications: [ "unified-build-windows-x64", "unified-build-windows-x86" ] + +trigger: none +pr: none + +variables: +- template: /eng/common/templates/variables/pool-providers.yml@self + +- name: skipComponentGovernanceDetection # we run CG on internal builds only + value: true + +- name: Codeql.Enabled # we run CodeQL on internal builds only + value: false + +resources: + repositories: + - repository: vmr + type: github + name: dotnet/dotnet + endpoint: dotnet + ref: refs/heads/main # Set to whatever VMR branch the PR build should insert into + +stages: +- template: /eng/pipelines/templates/stages/vmr-build.yml@vmr + parameters: + isBuiltFromVmr: false + scope: lite diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index a06513a59407..977a2d4b1039 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -65,10 +65,8 @@ $ErrorActionPreference = 'Stop' # Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed [string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null } -# True if the build is a product build -[bool]$productBuild = if (Test-Path variable:productBuild) { $productBuild } else { $false } - -[String[]]$properties = if (Test-Path variable:properties) { $properties } else { @() } +# True when the build is running within the VMR. +[bool]$fromVMR = if (Test-Path variable:fromVMR) { $fromVMR } else { $false } function Create-Directory ([string[]] $path) { New-Item -Path $path -Force -ItemType 'Directory' | Out-Null @@ -259,7 +257,20 @@ function Retry($downloadBlock, $maxRetries = 5) { function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' + $shouldDownload = $false + if (!(Test-Path $installScript)) { + $shouldDownload = $true + } else { + # Check if the script is older than 30 days + $fileAge = (Get-Date) - (Get-Item $installScript).LastWriteTime + if ($fileAge.Days -gt 30) { + Write-Host "Existing install script is too old, re-downloading..." + $shouldDownload = $true + } + } + + if ($shouldDownload) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit $uri = "https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1" @@ -383,8 +394,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # If the version of msbuild is going to be xcopied, # use this version. Version matches a package here: - # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/17.12.0 - $defaultXCopyMSBuildVersion = '17.12.0' + # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/18.0.0 + $defaultXCopyMSBuildVersion = '18.0.0' if (!$vsRequirements) { if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') { @@ -533,7 +544,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') { $vswhereVersion = $GlobalJson.tools.vswhere } else { - $vswhereVersion = '2.5.2' + # keep this in sync with the VSWhereVersion in DefaultVersions.props + $vswhereVersion = '3.1.7' } $vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion" @@ -541,7 +553,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir - Write-Host 'Downloading vswhere' + Write-Host "Downloading vswhere $vswhereVersion" + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Retry({ Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -UseBasicParsing -OutFile $vswhereExe }) @@ -611,14 +624,7 @@ function InitializeBuildTool() { } $dotnetPath = Join-Path $dotnetRoot (GetExecutableFileName 'dotnet') - # Use override if it exists - commonly set by source-build - if ($null -eq $env:_OverrideArcadeInitializeBuildToolFramework) { - $initializeBuildToolFramework="net9.0" - } else { - $initializeBuildToolFramework=$env:_OverrideArcadeInitializeBuildToolFramework - } - - $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = $initializeBuildToolFramework } + $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'net' } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore @@ -627,7 +633,7 @@ function InitializeBuildTool() { ExitWithExitCode 1 } - $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472"; ExcludePrereleaseVS = $excludePrereleaseVS } + $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "netframework"; ExcludePrereleaseVS = $excludePrereleaseVS } } else { Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 @@ -660,7 +666,6 @@ function GetNuGetPackageCachePath() { $env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages\' } else { $env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages\' - $env:RESTORENOHTTPCACHE = $true } } @@ -782,26 +787,13 @@ function MSBuild() { $toolsetBuildProject = InitializeToolset $basePath = Split-Path -parent $toolsetBuildProject - $possiblePaths = @( - # new scripts need to work with old packages, so we need to look for the old names/versions - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.Arcade.Sdk.dll')) - ) - $selectedPath = $null - foreach ($path in $possiblePaths) { - if (Test-Path $path -PathType Leaf) { - $selectedPath = $path - break - } - } + $selectedPath = Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll') + if (-not $selectedPath) { - Write-PipelineTelemetryError -Category 'Build' -Message 'Unable to find arcade sdk logger assembly.' + Write-PipelineTelemetryError -Category 'Build' -Message "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 } + $args += "/logger:$selectedPath" } @@ -832,6 +824,11 @@ function MSBuild-Core() { $cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse /p:ContinuousIntegrationBuild=$ci" + # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable + if ($env:MSBUILD_MT_ENABLED -eq "1") { + $cmdArgs += ' -mt' + } + if ($warnAsError) { $cmdArgs += ' /warnaserror /p:TreatWarningsAsErrors=true' } @@ -864,8 +861,8 @@ function MSBuild-Core() { } # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$productBuild -and -not($properties -like "*DotNetBuildRepo=true*")) { + # Skip this when the build is a child of the VMR build. + if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$fromVMR) { Write-PipelineSetResult -Result "Failed" -Message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 01b09b65796c..1b296f646c23 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -5,6 +5,9 @@ # CI mode - set to true on CI server for PR validation build or official build. ci=${ci:-false} +# Build mode +source_build=${source_build:-false} + # Set to true to use the pipelines logger which will enable Azure logging output. # https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md # This flag is meant as a temporary opt-opt for the feature while validate it across @@ -58,7 +61,8 @@ use_installed_dotnet_cli=${use_installed_dotnet_cli:-true} dotnetInstallScriptVersion=${dotnetInstallScriptVersion:-'v1'} # True to use global NuGet cache instead of restoring packages to repository-local directory. -if [[ "$ci" == true ]]; then +# Keep in sync with NuGetPackageroot in Arcade SDK's RepositoryLayout.props. +if [[ "$ci" == true || "$source_build" == true ]]; then use_global_nuget_cache=${use_global_nuget_cache:-false} else use_global_nuget_cache=${use_global_nuget_cache:-true} @@ -68,8 +72,8 @@ fi runtime_source_feed=${runtime_source_feed:-''} runtime_source_feed_key=${runtime_source_feed_key:-''} -# True if the build is a product build -product_build=${product_build:-false} +# True when the build is running within the VMR. +from_vmr=${from_vmr:-false} # Resolve any symlinks in the given path. function ResolvePath { @@ -296,8 +300,29 @@ function GetDotNetInstallScript { local root=$1 local install_script="$root/dotnet-install.sh" local install_script_url="https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh" + local timestamp_file="$root/.dotnet-install.timestamp" + local should_download=false if [[ ! -a "$install_script" ]]; then + should_download=true + elif [[ -f "$timestamp_file" ]]; then + # Check if the script is older than 30 days using timestamp file + local download_time=$(cat "$timestamp_file" 2>/dev/null || echo "0") + local current_time=$(date +%s) + local age_seconds=$((current_time - download_time)) + + # 30 days = 30 * 24 * 60 * 60 = 2592000 seconds + if [[ $age_seconds -gt 2592000 ]]; then + echo "Existing install script is too old, re-downloading..." + should_download=true + fi + else + # No timestamp file exists, assume script is old and re-download + echo "No timestamp found for existing install script, re-downloading..." + should_download=true + fi + + if [[ "$should_download" == true ]]; then mkdir -p "$root" echo "Downloading '$install_script_url'" @@ -324,6 +349,9 @@ function GetDotNetInstallScript { ExitWithExitCode $exit_code } fi + + # Create timestamp file to track download time in seconds from epoch + date +%s > "$timestamp_file" fi # return value _GetDotNetInstallScript="$install_script" @@ -339,22 +367,14 @@ function InitializeBuildTool { # return values _InitializeBuildTool="$_InitializeDotNetCli/dotnet" _InitializeBuildToolCommand="msbuild" - # use override if it exists - commonly set by source-build - if [[ "${_OverrideArcadeInitializeBuildToolFramework:-x}" == "x" ]]; then - _InitializeBuildToolFramework="net9.0" - else - _InitializeBuildToolFramework="${_OverrideArcadeInitializeBuildToolFramework}" - fi } -# Set RestoreNoHttpCache as a workaround for https://github.com/NuGet/Home/issues/3116 function GetNuGetPackageCachePath { if [[ -z ${NUGET_PACKAGES:-} ]]; then if [[ "$use_global_nuget_cache" == true ]]; then export NUGET_PACKAGES="$HOME/.nuget/packages/" else export NUGET_PACKAGES="$repo_root/.packages/" - export RESTORENOHTTPCACHE=true fi fi @@ -451,25 +471,13 @@ function MSBuild { fi local toolset_dir="${_InitializeToolset%/*}" - # new scripts need to work with old packages, so we need to look for the old names/versions - local selectedPath= - local possiblePaths=() - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - for path in "${possiblePaths[@]}"; do - if [[ -f $path ]]; then - selectedPath=$path - break - fi - done + local selectedPath="$toolset_dir/net/Microsoft.DotNet.ArcadeLogging.dll" + if [[ -z "$selectedPath" ]]; then - Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly." + Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 fi + args+=( "-logger:$selectedPath" ) fi @@ -506,8 +514,8 @@ function MSBuild-Core { echo "Build failed with exit code $exit_code. Check errors above." # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$product_build" != true && "$properties" != *"DotNetBuildRepo=true"* ]]; then + # Skip this when the build is a child of the VMR build. + if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$from_vmr" != true ]]; then Write-PipelineSetResult -result "Failed" -message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error @@ -518,7 +526,13 @@ function MSBuild-Core { } } - RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" + # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable + local mt_switch="" + if [[ "${MSBUILD_MT_ENABLED:-}" == "1" ]]; then + mt_switch="-mt" + fi + + RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch $mt_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" } function GetDarc { @@ -530,6 +544,13 @@ function GetDarc { fi "$eng_root/common/darc-init.sh" --toolpath "$darc_path" $version + darc_tool="$darc_path/darc" +} + +# Returns a full path to an Arcade SDK task project file. +function GetSdkTaskProject { + taskName=$1 + echo "$(dirname $_InitializeToolset)/SdkTasks/$taskName.proj" } ResolvePath "${BASH_SOURCE[0]}" diff --git a/eng/common/vmr-sync.ps1 b/eng/common/vmr-sync.ps1 new file mode 100755 index 000000000000..b37992d91cf0 --- /dev/null +++ b/eng/common/vmr-sync.ps1 @@ -0,0 +1,164 @@ +<# +.SYNOPSIS + +This script is used for synchronizing the current repository into a local VMR. +It pulls the current repository's code into the specified VMR directory for local testing or +Source-Build validation. + +.DESCRIPTION + +The tooling used for synchronization will clone the VMR repository into a temporary folder if +it does not already exist. These clones can be reused in future synchronizations, so it is +recommended to dedicate a folder for this to speed up re-runs. + +.EXAMPLE + Synchronize current repository into a local VMR: + ./vmr-sync.ps1 -vmrDir "$HOME/repos/dotnet" -tmpDir "$HOME/repos/tmp" + +.PARAMETER tmpDir +Required. Path to the temporary folder where repositories will be cloned + +.PARAMETER vmrBranch +Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch + +.PARAMETER azdevPat +Optional. Azure DevOps PAT to use for cloning private repositories. + +.PARAMETER vmrDir +Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +.PARAMETER debugOutput +Optional. Enables debug logging in the darc vmr command. + +.PARAMETER ci +Optional. Denotes that the script is running in a CI environment. +#> +param ( + [Parameter(Mandatory=$true, HelpMessage="Path to the temporary folder where repositories will be cloned")] + [string][Alias('t', 'tmp')]$tmpDir, + [string][Alias('b', 'branch')]$vmrBranch, + [string]$remote, + [string]$azdevPat, + [string][Alias('v', 'vmr')]$vmrDir, + [switch]$ci, + [switch]$debugOutput +) + +function Fail { + Write-Host "> $($args[0])" -ForegroundColor 'Red' +} + +function Highlight { + Write-Host "> $($args[0])" -ForegroundColor 'Cyan' +} + +$verbosity = 'verbose' +if ($debugOutput) { + $verbosity = 'debug' +} +# Validation + +if (-not $tmpDir) { + Fail "Missing -tmpDir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +} + +# Sanitize the input + +if (-not $vmrDir) { + $vmrDir = Join-Path $tmpDir 'dotnet' +} + +if (-not (Test-Path -Path $tmpDir -PathType Container)) { + New-Item -ItemType Directory -Path $tmpDir | Out-Null +} + +# Prepare the VMR + +if (-not (Test-Path -Path $vmrDir -PathType Container)) { + Highlight "Cloning 'dotnet/dotnet' into $vmrDir.." + git clone https://github.com/dotnet/dotnet $vmrDir + + if ($vmrBranch) { + git -C $vmrDir switch -c $vmrBranch + } +} +else { + if ((git -C $vmrDir diff --quiet) -eq $false) { + Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes" + exit 1 + } + + if ($vmrBranch) { + Highlight "Preparing $vmrDir" + git -C $vmrDir checkout $vmrBranch + git -C $vmrDir pull + } +} + +Set-StrictMode -Version Latest + +# Prepare darc + +Highlight 'Installing .NET, preparing the tooling..' +. .\eng\common\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true +$env:DOTNET_ROOT = $dotnetRoot +$darc = Get-Darc + +Highlight "Starting the synchronization of VMR.." + +# Synchronize the VMR +$versionDetailsPath = Resolve-Path (Join-Path $PSScriptRoot '..\Version.Details.xml') | Select-Object -ExpandProperty Path +[xml]$versionDetails = Get-Content -Path $versionDetailsPath +$repoName = $versionDetails.SelectSingleNode('//Source').Mapping +if (-not $repoName) { + Fail "Failed to resolve repo mapping from $versionDetailsPath" + exit 1 +} + +$darcArgs = ( + "vmr", "forwardflow", + "--tmp", $tmpDir, + "--$verbosity", + $vmrDir +) + +if ($ci) { + $darcArgs += ("--ci") +} + +if ($azdevPat) { + $darcArgs += ("--azdev-pat", $azdevPat) +} + +& "$darc" $darcArgs + +if ($LASTEXITCODE -eq 0) { + Highlight "Synchronization succeeded" +} +else { + Highlight "Failed to flow code into the local VMR. Falling back to resetting the VMR to match repo contents..." + git -C $vmrDir reset --hard + + $resetArgs = ( + "vmr", "reset", + "${repoName}:HEAD", + "--vmr", $vmrDir, + "--tmp", $tmpDir, + "--additional-remotes", "${repoName}:${repoRoot}" + ) + + & "$darc" $resetArgs + + if ($LASTEXITCODE -eq 0) { + Highlight "Successfully reset the VMR using 'darc vmr reset'" + } + else { + Fail "Synchronization of repo to VMR failed!" + Fail "'$vmrDir' is left in its last state (re-run of this script will reset it)." + Fail "Please inspect the logs which contain path to the failing patch file (use -debugOutput to get all the details)." + Fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script." + exit 1 + } +} diff --git a/eng/common/vmr-sync.sh b/eng/common/vmr-sync.sh new file mode 100755 index 000000000000..198caec59bd4 --- /dev/null +++ b/eng/common/vmr-sync.sh @@ -0,0 +1,227 @@ +#!/bin/bash + +### This script is used for synchronizing the current repository into a local VMR. +### It pulls the current repository's code into the specified VMR directory for local testing or +### Source-Build validation. +### +### The tooling used for synchronization will clone the VMR repository into a temporary folder if +### it does not already exist. These clones can be reused in future synchronizations, so it is +### recommended to dedicate a folder for this to speed up re-runs. +### +### USAGE: +### Synchronize current repository into a local VMR: +### ./vmr-sync.sh --tmp "$HOME/repos/tmp" "$HOME/repos/dotnet" +### +### Options: +### -t, --tmp, --tmp-dir PATH +### Required. Path to the temporary folder where repositories will be cloned +### +### -b, --branch, --vmr-branch BRANCH_NAME +### Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch +### +### --debug +### Optional. Turns on the most verbose logging for the VMR tooling +### +### --remote name:URI +### Optional. Additional remote to use during the synchronization +### This can be used to synchronize to a commit from a fork of the repository +### Example: 'runtime:https://github.com/yourfork/runtime' +### +### --azdev-pat +### Optional. Azure DevOps PAT to use for cloning private repositories. +### +### -v, --vmr, --vmr-dir PATH +### Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +function print_help () { + sed -n '/^### /,/^$/p' "$source" | cut -b 5- +} + +COLOR_RED=$(tput setaf 1 2>/dev/null || true) +COLOR_CYAN=$(tput setaf 6 2>/dev/null || true) +COLOR_CLEAR=$(tput sgr0 2>/dev/null || true) +COLOR_RESET=uniquesearchablestring +FAILURE_PREFIX='> ' + +function fail () { + echo "${COLOR_RED}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_RED}}${COLOR_CLEAR}" >&2 +} + +function highlight () { + echo "${COLOR_CYAN}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_CYAN}}${COLOR_CLEAR}" +} + +tmp_dir='' +vmr_dir='' +vmr_branch='' +additional_remotes='' +verbosity=verbose +azdev_pat='' +ci=false + +while [[ $# -gt 0 ]]; do + opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + case "$opt" in + -t|--tmp|--tmp-dir) + tmp_dir=$2 + shift + ;; + -v|--vmr|--vmr-dir) + vmr_dir=$2 + shift + ;; + -b|--branch|--vmr-branch) + vmr_branch=$2 + shift + ;; + --remote) + additional_remotes="$additional_remotes $2" + shift + ;; + --azdev-pat) + azdev_pat=$2 + shift + ;; + --ci) + ci=true + ;; + -d|--debug) + verbosity=debug + ;; + -h|--help) + print_help + exit 0 + ;; + *) + fail "Invalid argument: $1" + print_help + exit 1 + ;; + esac + + shift +done + +# Validation + +if [[ -z "$tmp_dir" ]]; then + fail "Missing --tmp-dir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +fi + +# Sanitize the input + +if [[ -z "$vmr_dir" ]]; then + vmr_dir="$tmp_dir/dotnet" +fi + +if [[ ! -d "$tmp_dir" ]]; then + mkdir -p "$tmp_dir" +fi + +if [[ "$verbosity" == "debug" ]]; then + set -x +fi + +# Prepare the VMR + +if [[ ! -d "$vmr_dir" ]]; then + highlight "Cloning 'dotnet/dotnet' into $vmr_dir.." + git clone https://github.com/dotnet/dotnet "$vmr_dir" + + if [[ -n "$vmr_branch" ]]; then + git -C "$vmr_dir" switch -c "$vmr_branch" + fi +else + if ! git -C "$vmr_dir" diff --quiet; then + fail "There are changes in the working tree of $vmr_dir. Please commit or stash your changes" + exit 1 + fi + + if [[ -n "$vmr_branch" ]]; then + highlight "Preparing $vmr_dir" + git -C "$vmr_dir" checkout "$vmr_branch" + git -C "$vmr_dir" pull + fi +fi + +set -e + +# Prepare darc + +highlight 'Installing .NET, preparing the tooling..' +source "./eng/common/tools.sh" +InitializeDotNetCli true +GetDarc +dotnetDir=$( cd ./.dotnet/; pwd -P ) +dotnet=$dotnetDir/dotnet + +highlight "Starting the synchronization of VMR.." +set +e + +if [[ -n "$additional_remotes" ]]; then + additional_remotes="--additional-remotes $additional_remotes" +fi + +if [[ -n "$azdev_pat" ]]; then + azdev_pat="--azdev-pat $azdev_pat" +fi + +ci_arg='' +if [[ "$ci" == "true" ]]; then + ci_arg="--ci" +fi + +# Synchronize the VMR + +version_details_path=$(cd "$scriptroot/.."; pwd -P)/Version.Details.xml +repo_name=$(grep -m 1 ' Date: Thu, 19 Mar 2026 02:03:48 +0000 Subject: [PATCH 112/230] Update dependencies from https://github.com/dotnet/arcade build 20260318.2 On relative base path root Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk , Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Helix.Sdk , Microsoft.DotNet.SignTool , Microsoft.DotNet.XliffTasks , Microsoft.DotNet.XUnitExtensions From Version 9.0.0-beta.26152.3 -> To Version 9.0.0-beta.26168.2 --- NuGet.config | 7 ------- eng/Version.Details.xml | 28 ++++++++++++++-------------- eng/Versions.props | 8 ++++---- global.json | 6 +++--- 4 files changed, 21 insertions(+), 28 deletions(-) diff --git a/NuGet.config b/NuGet.config index e4b7dcd1b1e0..4460caf81a88 100644 --- a/NuGet.config +++ b/NuGet.config @@ -24,10 +24,8 @@ - - @@ -37,13 +35,11 @@ - - @@ -72,13 +68,10 @@ - - - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 62fe950cdf54..d8b6f871f120 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -555,34 +555,34 @@ - + https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e + 91828e6fea5ea06bea2d06532af9b974a8742ef4 - + https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e + 91828e6fea5ea06bea2d06532af9b974a8742ef4 - + https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e + 91828e6fea5ea06bea2d06532af9b974a8742ef4 - + https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e + 91828e6fea5ea06bea2d06532af9b974a8742ef4 - + https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e + 91828e6fea5ea06bea2d06532af9b974a8742ef4 - + https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e + 91828e6fea5ea06bea2d06532af9b974a8742ef4 - + https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e + 91828e6fea5ea06bea2d06532af9b974a8742ef4 diff --git a/eng/Versions.props b/eng/Versions.props index 01368d5dccdf..4df969f7bf58 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -272,10 +272,10 @@ - 9.0.0-beta.26152.3 - 9.0.0-beta.26152.3 - 9.0.0-beta.26152.3 - 9.0.0-beta.26152.3 + 9.0.0-beta.26168.2 + 9.0.0-beta.26168.2 + 9.0.0-beta.26168.2 + 9.0.0-beta.26168.2 diff --git a/global.json b/global.json index 09f04ad17781..5433d17e4b16 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "tools": { - "dotnet": "9.0.113", + "dotnet": "9.0.115", "runtimes": { "dotnet": [ "$(VSRedistCommonNetCoreSharedFrameworkx6490PackageVersion)" @@ -17,8 +17,8 @@ "cmake": "latest" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26152.3", - "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26152.3", + "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26168.2", + "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26168.2", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.DotNet.CMake.Sdk": "9.0.0-beta.24217.1" } From f13f23333edf1a6e31a25bd94099addfacb3b792 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 31 Mar 2026 02:02:58 +0000 Subject: [PATCH 113/230] Update dependencies from https://github.com/dotnet/arcade build 20260330.1 On relative base path root Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk , Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Helix.Sdk , Microsoft.DotNet.SignTool , Microsoft.DotNet.XliffTasks , Microsoft.DotNet.XUnitExtensions From Version 9.0.0-beta.26152.3 -> To Version 9.0.0-beta.26180.1 --- eng/Version.Details.xml | 28 ++++++++++++++-------------- eng/Versions.props | 8 ++++---- global.json | 4 ++-- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index d8b6f871f120..974731008cb6 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -555,34 +555,34 @@ - + https://github.com/dotnet/arcade - 91828e6fea5ea06bea2d06532af9b974a8742ef4 + 57da0818c9c45c5b637d8534c4227eaae45dd6c0 - + https://github.com/dotnet/arcade - 91828e6fea5ea06bea2d06532af9b974a8742ef4 + 57da0818c9c45c5b637d8534c4227eaae45dd6c0 - + https://github.com/dotnet/arcade - 91828e6fea5ea06bea2d06532af9b974a8742ef4 + 57da0818c9c45c5b637d8534c4227eaae45dd6c0 - + https://github.com/dotnet/arcade - 91828e6fea5ea06bea2d06532af9b974a8742ef4 + 57da0818c9c45c5b637d8534c4227eaae45dd6c0 - + https://github.com/dotnet/arcade - 91828e6fea5ea06bea2d06532af9b974a8742ef4 + 57da0818c9c45c5b637d8534c4227eaae45dd6c0 - + https://github.com/dotnet/arcade - 91828e6fea5ea06bea2d06532af9b974a8742ef4 + 57da0818c9c45c5b637d8534c4227eaae45dd6c0 - + https://github.com/dotnet/arcade - 91828e6fea5ea06bea2d06532af9b974a8742ef4 + 57da0818c9c45c5b637d8534c4227eaae45dd6c0 diff --git a/eng/Versions.props b/eng/Versions.props index 4df969f7bf58..f204dd77f546 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -272,10 +272,10 @@ - 9.0.0-beta.26168.2 - 9.0.0-beta.26168.2 - 9.0.0-beta.26168.2 - 9.0.0-beta.26168.2 + 9.0.0-beta.26180.1 + 9.0.0-beta.26180.1 + 9.0.0-beta.26180.1 + 9.0.0-beta.26180.1 diff --git a/global.json b/global.json index 5433d17e4b16..5187808091ac 100644 --- a/global.json +++ b/global.json @@ -17,8 +17,8 @@ "cmake": "latest" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26168.2", - "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26168.2", + "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26180.1", + "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26180.1", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.DotNet.CMake.Sdk": "9.0.0-beta.24217.1" } From 3c74f76c123de3946731dfd0feadb7ca30b6b5a9 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 2 Apr 2026 02:03:26 +0000 Subject: [PATCH 114/230] Update dependencies from https://github.com/dotnet/arcade build 20260401.6 On relative base path root Microsoft.SourceBuild.Intermediate.arcade , Microsoft.DotNet.Arcade.Sdk , Microsoft.DotNet.Build.Tasks.Installers , Microsoft.DotNet.Helix.Sdk , Microsoft.DotNet.SignTool , Microsoft.DotNet.XliffTasks , Microsoft.DotNet.XUnitExtensions From Version 9.0.0-beta.26152.3 -> To Version 9.0.0-beta.26201.6 --- eng/Version.Details.xml | 28 ++++++++++++++-------------- eng/Versions.props | 8 ++++---- global.json | 4 ++-- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 974731008cb6..2a6992a536f2 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -555,34 +555,34 @@ - + https://github.com/dotnet/arcade - 57da0818c9c45c5b637d8534c4227eaae45dd6c0 + e1240639569fad610705b52713d6d6b19f8fe433 - + https://github.com/dotnet/arcade - 57da0818c9c45c5b637d8534c4227eaae45dd6c0 + e1240639569fad610705b52713d6d6b19f8fe433 - + https://github.com/dotnet/arcade - 57da0818c9c45c5b637d8534c4227eaae45dd6c0 + e1240639569fad610705b52713d6d6b19f8fe433 - + https://github.com/dotnet/arcade - 57da0818c9c45c5b637d8534c4227eaae45dd6c0 + e1240639569fad610705b52713d6d6b19f8fe433 - + https://github.com/dotnet/arcade - 57da0818c9c45c5b637d8534c4227eaae45dd6c0 + e1240639569fad610705b52713d6d6b19f8fe433 - + https://github.com/dotnet/arcade - 57da0818c9c45c5b637d8534c4227eaae45dd6c0 + e1240639569fad610705b52713d6d6b19f8fe433 - + https://github.com/dotnet/arcade - 57da0818c9c45c5b637d8534c4227eaae45dd6c0 + e1240639569fad610705b52713d6d6b19f8fe433 diff --git a/eng/Versions.props b/eng/Versions.props index f204dd77f546..ccb149e2c68e 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -272,10 +272,10 @@ - 9.0.0-beta.26180.1 - 9.0.0-beta.26180.1 - 9.0.0-beta.26180.1 - 9.0.0-beta.26180.1 + 9.0.0-beta.26201.6 + 9.0.0-beta.26201.6 + 9.0.0-beta.26201.6 + 9.0.0-beta.26201.6 diff --git a/global.json b/global.json index 5187808091ac..123282392b3a 100644 --- a/global.json +++ b/global.json @@ -17,8 +17,8 @@ "cmake": "latest" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26180.1", - "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26180.1", + "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26201.6", + "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.26201.6", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.DotNet.CMake.Sdk": "9.0.0-beta.24217.1" } From 5264ad66c61bfd30a5b81490337830049b35d0b6 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 20 Mar 2026 02:02:06 +0000 Subject: [PATCH 115/230] Update dependencies from https://github.com/dotnet/scenario-tests build 20260319.2 On relative base path root Microsoft.SourceBuild.Intermediate.scenario-tests , Microsoft.DotNet.ScenarioTests.SdkTemplateTests From Version 9.0.0-preview.26153.1 -> To Version 9.0.0-preview.26169.2 --- NuGet.config | 7 ------- eng/Version.Details.xml | 8 ++++---- eng/Versions.props | 2 +- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/NuGet.config b/NuGet.config index e4b7dcd1b1e0..4460caf81a88 100644 --- a/NuGet.config +++ b/NuGet.config @@ -24,10 +24,8 @@ - - @@ -37,13 +35,11 @@ - - @@ -72,13 +68,10 @@ - - - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 62fe950cdf54..8a30d0a18f19 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -597,14 +597,14 @@ https://github.com/dotnet/arcade-services e156e649f28395d9d0ee1e848225a689b59e0fd3 - + https://github.com/dotnet/scenario-tests - acd9dc7ae0717d7f4fb6ac2b76ea364e94b4ceb3 + 19f7ab33960c27d4baa37b06d8cb26d007f49334 - + https://github.com/dotnet/scenario-tests - acd9dc7ae0717d7f4fb6ac2b76ea364e94b4ceb3 + 19f7ab33960c27d4baa37b06d8cb26d007f49334 From a80be0bc3b5a336959bfaf88e676c2305be3e091 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 3 Apr 2026 02:02:35 +0000 Subject: [PATCH 116/230] Update dependencies from https://github.com/dotnet/scenario-tests build 20260402.3 On relative base path root Microsoft.SourceBuild.Intermediate.scenario-tests , Microsoft.DotNet.ScenarioTests.SdkTemplateTests From Version 9.0.0-preview.26153.1 -> To Version 9.0.0-preview.26202.3 --- eng/Version.Details.xml | 8 ++++---- eng/Versions.props | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 8a30d0a18f19..dc9737221d88 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -597,14 +597,14 @@ https://github.com/dotnet/arcade-services e156e649f28395d9d0ee1e848225a689b59e0fd3 - + https://github.com/dotnet/scenario-tests - 19f7ab33960c27d4baa37b06d8cb26d007f49334 + 0f750c53b3052a593c6daacc0d60eb8c0d2d9cf1 - + https://github.com/dotnet/scenario-tests - 19f7ab33960c27d4baa37b06d8cb26d007f49334 + 0f750c53b3052a593c6daacc0d60eb8c0d2d9cf1 From e305b353121bf942eeb275d8f4881922d51fe4c2 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 8 Apr 2026 02:39:57 +0000 Subject: [PATCH 117/230] Update dependencies from https://github.com/dotnet/templating build 20260407.6 On relative base path root Microsoft.TemplateEngine.Abstractions From Version 9.0.313 -> To Version 9.0.314 Microsoft.TemplateEngine.Mocks From Version 9.0.313-servicing.26154.2 -> To Version 9.0.314-servicing.26207.6 --- NuGet.config | 9 +-------- eng/Version.Details.xml | 8 ++++---- eng/Versions.props | 4 ++-- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/NuGet.config b/NuGet.config index e4b7dcd1b1e0..601160ada549 100644 --- a/NuGet.config +++ b/NuGet.config @@ -24,10 +24,8 @@ - - @@ -37,13 +35,11 @@ - - + - @@ -72,13 +68,10 @@ - - - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 62fe950cdf54..eccbd8b914d4 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,13 +1,13 @@ - + https://github.com/dotnet/templating - 34a5893f3ec336db55d3da5621a96106b418db5b + bfaf060312e3becbe0df8d0662df72ae36b2ec01 - + https://github.com/dotnet/templating - 34a5893f3ec336db55d3da5621a96106b418db5b + bfaf060312e3becbe0df8d0662df72ae36b2ec01 diff --git a/eng/Versions.props b/eng/Versions.props index 01368d5dccdf..4327953e8280 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -189,13 +189,13 @@ - 9.0.313 + 9.0.314 $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) - 9.0.313-servicing.26154.2 + 9.0.314-servicing.26207.6 $(MicrosoftTemplateEngineMocksPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineMocksPackageVersion) From 451bad6b3ffed36bfd050fd51090dc31e9cbb7ce Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 8 Apr 2026 08:31:30 +0000 Subject: [PATCH 118/230] Update dependencies from https://github.com/dotnet/templating build 20260408.2 On relative base path root Microsoft.TemplateEngine.Abstractions From Version 9.0.313 -> To Version 9.0.314 Microsoft.TemplateEngine.Mocks From Version 9.0.313-servicing.26154.2 -> To Version 9.0.314-servicing.26208.2 --- NuGet.config | 2 +- eng/Version.Details.xml | 6 +++--- eng/Versions.props | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/NuGet.config b/NuGet.config index 601160ada549..d06003ec7564 100644 --- a/NuGet.config +++ b/NuGet.config @@ -37,7 +37,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index eccbd8b914d4..12d24a20cbed 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,11 +3,11 @@ https://github.com/dotnet/templating - bfaf060312e3becbe0df8d0662df72ae36b2ec01 + 174f0d1d6bdfe237af221f2e2cb4ba4f47f1dccc - + https://github.com/dotnet/templating - bfaf060312e3becbe0df8d0662df72ae36b2ec01 + 174f0d1d6bdfe237af221f2e2cb4ba4f47f1dccc diff --git a/eng/Versions.props b/eng/Versions.props index 4327953e8280..917c6c999f69 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -195,7 +195,7 @@ $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) - 9.0.314-servicing.26207.6 + 9.0.314-servicing.26208.2 $(MicrosoftTemplateEngineMocksPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineMocksPackageVersion) From 138a74bbe3f0e2e45744334bafc15f6848d2e2c7 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 9 Apr 2026 01:57:44 +0000 Subject: [PATCH 119/230] Update dependencies from https://github.com/dotnet/templating build 20260408.8 On relative base path root Microsoft.TemplateEngine.Abstractions From Version 9.0.313 -> To Version 9.0.314 Microsoft.TemplateEngine.Mocks From Version 9.0.313-servicing.26154.2 -> To Version 9.0.314-servicing.26208.8 --- NuGet.config | 2 +- eng/Version.Details.xml | 6 +++--- eng/Versions.props | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/NuGet.config b/NuGet.config index d06003ec7564..4b8d3de223e7 100644 --- a/NuGet.config +++ b/NuGet.config @@ -37,7 +37,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 12d24a20cbed..2b2f46ad2312 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,11 +3,11 @@ https://github.com/dotnet/templating - 174f0d1d6bdfe237af221f2e2cb4ba4f47f1dccc + 5958234001856b3bf275d0846c3cbcbadccf6645 - + https://github.com/dotnet/templating - 174f0d1d6bdfe237af221f2e2cb4ba4f47f1dccc + 5958234001856b3bf275d0846c3cbcbadccf6645 diff --git a/eng/Versions.props b/eng/Versions.props index 917c6c999f69..7a50fa35c0a3 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -195,7 +195,7 @@ $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) - 9.0.314-servicing.26208.2 + 9.0.314-servicing.26208.8 $(MicrosoftTemplateEngineMocksPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineMocksPackageVersion) From 6c2901820f27765022b483ce6d5cc4e3eb1240b0 Mon Sep 17 00:00:00 2001 From: ".NET Source-Build Bot" <102560831+dotnet-sb-bot@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:54:05 -0500 Subject: [PATCH 120/230] .NET Source-Build 9.0.115 March 2026 Updates (#53358) Co-authored-by: Matt Thalman --- src/SourceBuild/content/eng/Version.Details.xml | 4 ++-- src/SourceBuild/content/eng/Versions.props | 4 ++-- src/SourceBuild/content/global.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/SourceBuild/content/eng/Version.Details.xml b/src/SourceBuild/content/eng/Version.Details.xml index 0be4c8d30ca6..74c1fbfb03c0 100644 --- a/src/SourceBuild/content/eng/Version.Details.xml +++ b/src/SourceBuild/content/eng/Version.Details.xml @@ -2,9 +2,9 @@ - + https://github.com/dotnet/arcade - c85f9aceddaf85296e3efbc463daaa34fef5a375 + 0279dbd04bd1537e13ae3c1f003edf56acfaf123 diff --git a/src/SourceBuild/content/eng/Versions.props b/src/SourceBuild/content/eng/Versions.props index 1117282a292f..8b8b02a28b60 100644 --- a/src/SourceBuild/content/eng/Versions.props +++ b/src/SourceBuild/content/eng/Versions.props @@ -23,8 +23,8 @@ of a .NET major or minor release, prebuilts may be needed. When the release is mature, prebuilts are not necessary, and this property is removed from the file. --> - 9.0.114 - 9.0.114-servicing.26068.1 + 9.0.115 + 9.0.115-servicing.26120.1 2.0.0-beta4.24126.1 diff --git a/src/SourceBuild/content/global.json b/src/SourceBuild/content/global.json index 526eb6b3b14a..347d0dba75e1 100644 --- a/src/SourceBuild/content/global.json +++ b/src/SourceBuild/content/global.json @@ -1,10 +1,10 @@ { "tools": { - "dotnet": "9.0.114" + "dotnet": "9.0.115" }, "msbuild-sdks": { "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", - "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26063.2" + "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.26110.2" } } From f25b82751225770c5eb9811678cc94a36bc36327 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Tue, 7 Apr 2026 07:39:23 -0500 Subject: [PATCH 121/230] Increase memory for license scanning (#53720) --- src/SourceBuild/content/eng/pipelines/vmr-license-scan.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SourceBuild/content/eng/pipelines/vmr-license-scan.yml b/src/SourceBuild/content/eng/pipelines/vmr-license-scan.yml index 4ce3850fd029..17fdfdc11b40 100644 --- a/src/SourceBuild/content/eng/pipelines/vmr-license-scan.yml +++ b/src/SourceBuild/content/eng/pipelines/vmr-license-scan.yml @@ -51,7 +51,7 @@ extends: containers: licenseScanContainer: image: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net9.0-source-build-test-amd64 - options: '--memory=12g' + options: '--memory=20g' pool: name: NetCore1ESPool-Svc-Internal image: 1es-ubuntu-2204 From 815727a07dae22980d44a1d451c5334137e83ea3 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Thu, 9 Apr 2026 11:11:36 +0200 Subject: [PATCH 122/230] Warn for missing shebang (#53614) --- documentation/general/dotnet-run-file.md | 7 + .../Run/CSharpCompilerCommand.Generated.cs | 1 + ...pMissingShebangInFileBasedProgram.Fixer.cs | 42 +++ .../CSharpMissingShebangInFileBasedProgram.cs | 131 +++++++++ .../Microsoft.CodeAnalysis.NetAnalyzers.md | 12 + .../Microsoft.CodeAnalysis.NetAnalyzers.sarif | 19 ++ .../AnalyzerReleases.Shipped.md | 1 + .../MicrosoftNetCoreAnalyzersResources.resx | 12 + .../MissingShebangInFileBasedProgram.Fixer.cs | 14 + .../Usage/MissingShebangInFileBasedProgram.cs | 29 ++ .../MicrosoftNetCoreAnalyzersResources.cs.xlf | 20 ++ .../MicrosoftNetCoreAnalyzersResources.de.xlf | 20 ++ .../MicrosoftNetCoreAnalyzersResources.es.xlf | 20 ++ .../MicrosoftNetCoreAnalyzersResources.fr.xlf | 20 ++ .../MicrosoftNetCoreAnalyzersResources.it.xlf | 20 ++ .../MicrosoftNetCoreAnalyzersResources.ja.xlf | 20 ++ .../MicrosoftNetCoreAnalyzersResources.ko.xlf | 20 ++ .../MicrosoftNetCoreAnalyzersResources.pl.xlf | 20 ++ ...crosoftNetCoreAnalyzersResources.pt-BR.xlf | 20 ++ .../MicrosoftNetCoreAnalyzersResources.ru.xlf | 20 ++ .../MicrosoftNetCoreAnalyzersResources.tr.xlf | 20 ++ ...osoftNetCoreAnalyzersResources.zh-Hans.xlf | 20 ++ ...osoftNetCoreAnalyzersResources.zh-Hant.xlf | 20 ++ .../DiagnosticCategoryAndIdRanges.txt | 2 +- .../Options/MSBuildPropertyOptionNames.cs | 1 + .../MissingShebangInFileBasedProgramTests.cs | 265 ++++++++++++++++++ .../VirtualProjectBuilder.cs | 1 + .../Convert/DotnetProjectConvertTests.cs | 3 + .../Run/GivenDotnetRunThrowsAParseError.cs | 2 +- .../CommandTests/Run/RunFileTests.cs | 147 +++++++++- 30 files changed, 943 insertions(+), 6 deletions(-) create mode 100644 src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.CSharp.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/CSharpMissingShebangInFileBasedProgram.Fixer.cs create mode 100644 src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.CSharp.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/CSharpMissingShebangInFileBasedProgram.cs create mode 100644 src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgram.Fixer.cs create mode 100644 src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgram.cs create mode 100644 src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgramTests.cs diff --git a/documentation/general/dotnet-run-file.md b/documentation/general/dotnet-run-file.md index bdaf0176fdaa..9636bc0ff88b 100644 --- a/documentation/general/dotnet-run-file.md +++ b/documentation/general/dotnet-run-file.md @@ -52,6 +52,8 @@ Additionally, the implicit project file has the following customizations: string? directoryPath = AppContext.GetData("EntryPointFileDirectoryPath") as string; ``` + - `EntryPointFilePath` property is set to the entry-point file path and is made visible to analyzers via `CompilerVisibleProperty`. + - `FileBasedProgram` property is set to `true` and can be used by SDK targets to detect file-based apps. - `DisableDefaultItemsInProjectFolder` property is set to `true` which results in `EnableDefaultItems=false` by default @@ -270,6 +272,11 @@ Along with `#:`, the language also ignores `#!` which could be then used for [sh Console.WriteLine("Hello"); ``` +When a file-based program uses [`#:include`](#multiple-files) directives to include additional files, +the entry point file should start with `#!` to clearly distinguish it from included files. +This helps IDEs to properly handle multi-file scenarios and discover entry points. +The analyzer **CA2266** reports a warning if the entry point file is missing the shebang line in this scenario. + ## Implementation The build is performed using MSBuild APIs on in-memory project files. diff --git a/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.Generated.cs b/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.Generated.cs index 147f81e8bfee..235b8ce8501b 100644 --- a/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.Generated.cs +++ b/src/Cli/dotnet/Commands/Run/CSharpCompilerCommand.Generated.cs @@ -165,6 +165,7 @@ private string GetGeneratedMSBuildEditorConfigContent() build_property.InvariantGlobalization = build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = +build_property.EntryPointFilePath = {EntryPointFileFullPath} build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = {FileNameWithoutExtension} build_property.ProjectDir = {BaseDirectoryWithTrailingSeparator} diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.CSharp.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/CSharpMissingShebangInFileBasedProgram.Fixer.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.CSharp.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/CSharpMissingShebangInFileBasedProgram.Fixer.cs new file mode 100644 index 000000000000..7894c0ab6c33 --- /dev/null +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.CSharp.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/CSharpMissingShebangInFileBasedProgram.Fixer.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information. + +using System.Composition; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CodeActions; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.Formatting; +using Microsoft.NetCore.Analyzers; +using Microsoft.NetCore.Analyzers.Usage; + +namespace Microsoft.NetCore.CSharp.Analyzers.Usage +{ + [ExportCodeFixProvider(LanguageNames.CSharp), Shared] + public sealed class CSharpMissingShebangInFileBasedProgramFixer : MissingShebangInFileBasedProgramFixer + { + public override async Task RegisterCodeFixesAsync(CodeFixContext context) + { + var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false); + if (root is null) + { + return; + } + + var codeAction = CodeAction.Create( + MicrosoftNetCoreAnalyzersResources.MissingShebangInFileBasedProgramCodeFixTitle, + async ct => + { + var options = await context.Document.GetOptionsAsync(ct).ConfigureAwait(false); + var eol = options.GetOption(FormattingOptions.NewLine, LanguageNames.CSharp); + var shebangTrivia = SyntaxFactory.ParseLeadingTrivia("#!/usr/bin/env dotnet" + eol); + var firstToken = root.GetFirstToken(includeZeroWidth: true); + var newFirstToken = firstToken.WithLeadingTrivia(shebangTrivia.AddRange(firstToken.LeadingTrivia)); + var newRoot = root.ReplaceToken(firstToken, newFirstToken) + .WithAdditionalAnnotations(Formatter.Annotation); + return context.Document.WithSyntaxRoot(newRoot); + }, + MicrosoftNetCoreAnalyzersResources.MissingShebangInFileBasedProgramCodeFixTitle); + context.RegisterCodeFix(codeAction, context.Diagnostics); + } + } +} diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.CSharp.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/CSharpMissingShebangInFileBasedProgram.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.CSharp.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/CSharpMissingShebangInFileBasedProgram.cs new file mode 100644 index 000000000000..375a3e567cf1 --- /dev/null +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.CSharp.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/CSharpMissingShebangInFileBasedProgram.cs @@ -0,0 +1,131 @@ +// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information. + +using Analyzer.Utilities; +using Analyzer.Utilities.Extensions; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.Diagnostics; +using Microsoft.NetCore.Analyzers.Usage; + +namespace Microsoft.NetCore.CSharp.Analyzers.Usage +{ + [DiagnosticAnalyzer(LanguageNames.CSharp)] + public sealed class CSharpMissingShebangInFileBasedProgram : MissingShebangInFileBasedProgram + { + public override void Initialize(AnalysisContext context) + { + context.EnableConcurrentExecution(); + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); + + context.RegisterCompilationStartAction(context => + { + var entryPointFilePath = context.Options.GetMSBuildPropertyValue( + MSBuildPropertyOptionNames.EntryPointFilePath, context.Compilation); + if (string.IsNullOrEmpty(entryPointFilePath)) + { + return; + } + + // Count non-generated trees upfront so we can report directly + // from a SyntaxTreeAction without needing CompilationEnd. + // We avoid CompilationEnd so diagnostics appear as live IDE diagnostics. + // We replicate Roslyn's generated code detection here because + // Compilation.SyntaxTrees is the raw set (unlike RegisterSyntaxTreeAction + // which gets automatic filtering via ConfigureGeneratedCodeAnalysis). + int nonGeneratedTreeCount = 0; + foreach (var tree in context.Compilation.SyntaxTrees) + { + if (IsGeneratedCode(tree, context.Options.AnalyzerConfigOptionsProvider)) + { + continue; + } + + nonGeneratedTreeCount++; + } + + // Only report when there are multiple non-generated files + // (i.e., #:include directives are used). + // Single-file programs don't need a shebang to distinguish the entry point. + if (nonGeneratedTreeCount <= 1) + { + return; + } + + context.RegisterSyntaxTreeAction(context => + { + if (!context.Tree.FilePath.Equals(entryPointFilePath, StringComparison.Ordinal)) + { + return; + } + + var root = context.Tree.GetRoot(context.CancellationToken); + if (root.GetLeadingTrivia().Any(SyntaxKind.ShebangDirectiveTrivia)) + { + return; + } + + var location = root.GetFirstToken(includeZeroWidth: true).GetLocation(); + context.ReportDiagnostic(location.CreateDiagnostic(Rule)); + }); + }); + } + + /// + /// Replicates Roslyn's generated code detection which checks: + /// the generated_code analyzer config option, + /// common file name patterns, and <auto-generated> comment headers. + /// Based on GeneratedCodeUtilities. + /// + private static bool IsGeneratedCode(SyntaxTree tree, AnalyzerConfigOptionsProvider optionsProvider) + { + if (optionsProvider.GetOptions(tree) + .TryGetValue("generated_code", out var generatedValue) && + generatedValue.Equals("true", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + var filePath = tree.FilePath; + if (!string.IsNullOrEmpty(filePath)) + { + var fileName = Path.GetFileName(filePath); + if (fileName.StartsWith("TemporaryGeneratedFile_", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + var nameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); + if (nameWithoutExtension.EndsWith(".designer", StringComparison.OrdinalIgnoreCase) || + nameWithoutExtension.EndsWith(".generated", StringComparison.OrdinalIgnoreCase) || + nameWithoutExtension.EndsWith(".g", StringComparison.OrdinalIgnoreCase) || + nameWithoutExtension.EndsWith(".g.i", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + // Check for or comment at the top of the file. + foreach (var trivia in tree.GetRoot().GetLeadingTrivia()) + { + switch (trivia.Kind()) + { + case SyntaxKind.SingleLineCommentTrivia: + case SyntaxKind.MultiLineCommentTrivia: + var text = trivia.ToString(); + if (text.Contains(" Replace obsolete call + + File-based program entry point should start with '#!' + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + File-based program entry point should start with '#!' + + + Add '#!' (shebang) + diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgram.Fixer.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgram.Fixer.cs new file mode 100644 index 000000000000..0e2284174d9c --- /dev/null +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgram.Fixer.cs @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information. + +using System.Collections.Immutable; +using Microsoft.CodeAnalysis.CodeFixes; + +namespace Microsoft.NetCore.Analyzers.Usage +{ + public abstract class MissingShebangInFileBasedProgramFixer : CodeFixProvider + { + public override ImmutableArray FixableDiagnosticIds { get; } = ImmutableArray.Create(MissingShebangInFileBasedProgram.RuleId); + + public override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer; + } +} diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgram.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgram.cs new file mode 100644 index 000000000000..938e7ce7c00f --- /dev/null +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgram.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information. + +using System.Collections.Immutable; +using Analyzer.Utilities; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.Diagnostics; + +namespace Microsoft.NetCore.Analyzers.Usage +{ + using static MicrosoftNetCoreAnalyzersResources; + + public abstract class MissingShebangInFileBasedProgram : DiagnosticAnalyzer + { + internal const string RuleId = "CA2266"; + + internal static readonly DiagnosticDescriptor Rule = DiagnosticDescriptorHelper.Create( + RuleId, + CreateLocalizableResourceString(nameof(MissingShebangInFileBasedProgramTitle)), + CreateLocalizableResourceString(nameof(MissingShebangInFileBasedProgramMessage)), + DiagnosticCategory.Usage, + RuleLevel.BuildWarning, + CreateLocalizableResourceString(nameof(MissingShebangInFileBasedProgramDescription)), + isPortedFxCopRule: false, + isDataflowRule: false, + isReportedAtCompilationEnd: false); + + public sealed override ImmutableArray SupportedDiagnostics { get; } = ImmutableArray.Create(Rule); + } +} diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf index d5f92baf02e5..03f1e965d7b2 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf @@ -1833,6 +1833,26 @@ Rozšíření a uživatelem definované převody se u obecných typů nepodporuj Metoda akce {0} musí explicitně určit druh požadavku HTTP. + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. Inicializátory modulů jsou určeny pro použití kódem aplikace k zajištění, aby byly komponenty aplikace inicializovány před tím, než se začne kód aplikace spouštět. Pokud kód knihovny deklaruje metodu s ModuleInitializerAttribute, může narušovat inicializaci aplikace a také vést k omezením schopností oříznutí dané aplikace. Knihovna by proto neměla používat metody s označením ModuleInitializerAttribute, ale namísto toho by měla zpřístupnit metody, které lze použít k inicializaci všech komponent v rámci knihovny a umožnit aplikaci vyvolat metodu během inicializace aplikace. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf index f63f006d064d..cbc4ff561ee1 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf @@ -1833,6 +1833,26 @@ Erweiterungen und benutzerdefinierte Konvertierungen werden bei generischen Type Die Aktionsmethode "{0}" muss die Art der HTTP-Anforderung explizit angeben. + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. Modulinitialisierer sollen vom Anwendungscode verwendet werden, um sicherzustellen, dass die Komponenten einer Anwendung initialisiert werden, bevor der Anwendungscode ausgeführt wird. Wenn Bibliothekscode eine Methode mit \"ModuleInitializerAttribute\" deklariert, kann dies die Anwendungsinitialisierung beeinträchtigen und auch zu Einschränkungen in den Kürzungsfähigkeiten dieser Anwendung führen. Anstatt Methoden zu verwenden, die mit \"ModuleInitializerAttribute\" gekennzeichnet sind, sollte die Bibliothek Methoden verfügbar machen, mit denen alle Komponenten innerhalb der Bibliothek initialisiert werden können, und der Anwendung das Aufrufen der Methode während der Anwendungsinitialisierung ermöglichen. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf index a03a7a0fa4d0..5896354af2af 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf @@ -1833,6 +1833,26 @@ La ampliación y las conversiones definidas por el usuario no se admiten con tip El método de acción {0} debe especificar la variante de solicitud HTTP de forma explícita. + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. Los inicializadores de módulo están diseñados para que los use el código de aplicación para asegurarse de que los componentes de una aplicación se inicializan antes de que el código de la aplicación comience a ejecutarse. Si el código de biblioteca declara un método con \"ModuleInitializerAttribute\", puede interferir con la inicialización de la aplicación y también provocar limitaciones en las capacidades de recorte de esa aplicación. En lugar de usar métodos marcados con \"ModuleInitializerAttribute\", la biblioteca debe exponer métodos que se pueden usar para inicializar cualquier componente dentro de la biblioteca y permitir que la aplicación invoque el método durante la inicialización de la aplicación. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf index 40c160bb5b5f..bed19cb8e096 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf @@ -1833,6 +1833,26 @@ Les conversions étendues et définies par l’utilisateur ne sont pas prises en La méthode d'action {0} doit spécifier explicitement le genre de requête HTTP + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. Les initialiseurs de module sont destinés à être utilisés par le code d’application pour s’assurer que les composants d’une application sont initialisés avant le début de l’exécution du code d’application. Si le code de bibliothèque déclare une méthode avec « ModuleInitializerAttribute », il peut interférer avec l’initialisation de l’application et également entraîner des limitations dans les capacités de découpage de cette application. Au lieu d’utiliser des méthodes marquées avec « ModuleInitializerAttribute », la bibliothèque doit exposer des méthodes qui peuvent être utilisées pour initialiser tous les composants de la bibliothèque et permettre à l’application d’appeler la méthode pendant l’initialisation de l’application. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf index 924a482d9f5d..ea2f9539b9a1 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf @@ -1833,6 +1833,26 @@ L'ampliamento e le conversioni definite dall'utente non sono supportate con tipi Il metodo di azione {0} deve specificare in modo esplicito il tipo della richiesta HTTP + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. La presenza di inizializzatori di modulo nel codice dell'applicazione assicura che i componenti di un'applicazione vengano inizializzati prima dell'inizio dell'esecuzione del codice dell'applicazione. La dichiarazione di un modulo 'ModuleInitializerAttribute' nel codice della libreria può interferire con l'inizializzazione dell'applicazione e causare limitazioni alle funzionalità di trimming di tale applicazione. Il codice della libreria non deve quindi utilizzare l'attributo 'ModuleInitializerAttribute', ma esporre metodi utilizzabili per inizializzare tutti i componenti nella libreria e consentire all'applicazione di richiamare il metodo durante l'inizializzazione dell'applicazione. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf index 6c3fbfeccd9a..f37c847af7f9 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf @@ -1833,6 +1833,26 @@ Enumerable.OfType<T> で使用されるジェネリック型チェック ( アクション メソッド {0} では、HTTP 要求の種類を明示的に指定する必要があります + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. モジュール初期化子は、アプリケーション コードの実行を開始する前にアプリケーションのコンポーネントが初期化されるように、アプリケーション コードによって使用されることを目的としています。ライブラリ コードで 'ModuleInitializerAttribute' を使用してメソッドを宣言する場合、アプリケーションの初期化を妨げる可能性があり、そのアプリケーションのトリミング機能の制限にもつながります。'ModuleInitializerAttribute' でマークされたメソッドを使用する代わりに、ライブラリ内のコンポーネントを初期化し、アプリケーションの初期化中にアプリケーションがメソッドを呼び出せるようにするために使用できるメソッドを公開する必要があります。 diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf index f0706403c0d4..8575638e2767 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf @@ -1833,6 +1833,26 @@ Enumerable.OfType<T>에서 사용하는 제네릭 형식 검사(C# 'is' 작업 메서드 {0}은(는) HTTP 요청 종류를 명시적으로 지정해야 합니다. + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. 모듈 이니셜라이저는 응용 프로그램 코드가 실행을 시작하기 전에 응용 프로그램의 구성 요소가 초기화되도록 응용 프로그램 코드에서 사용하기 위한 것입니다. 라이브러리 코드가 'ModuleInitializerAttribute'를 사용하여 메서드를 선언하면 응용 프로그램 초기화를 방해할 수 있으며 해당 응용 프로그램의 트리밍 기능에 제한이 생길 수도 있습니다. 'ModuleInitializerAttribute'로 표시된 메서드를 사용하는 대신 라이브러리는 라이브러리 내의 구성 요소를 초기화하는 데 사용할 수 있는 메서드를 노출하고 응용 프로그램 초기화 중에 응용 프로그램이 메서드를 호출할 수 있도록 해야 합니다. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf index 51f4dee3e919..0e7b13760bac 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf @@ -1833,6 +1833,26 @@ Konwersje poszerzane i zdefiniowane przez użytkownika nie są obsługiwane w pr Metoda akcji {0} musi jawnie określać rodzaj żądania HTTP + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. Inicjatory modułów są przeznaczone do użycia przez kod aplikacji w celu zapewnienia, że składniki aplikacji zostaną zainicjowane przed rozpoczęciem wykonywania kodu aplikacji. Jeśli kod biblioteki deklaruje metodę za pomocą atrybutu „ModuleInitializer”, może zakłócać inicjowanie aplikacji, a także prowadzić do ograniczeń w możliwościach przycinania tej aplikacji. Zamiast używać metod oznaczonych atrybutem „ModuleInitializer”, biblioteka powinna uwidaczniać metody, których można użyć do zainicjowania składników w bibliotece i umożliwienia aplikacji wywołania metody podczas inicjowania aplikacji. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf index cb9dea8edaf1..a3fc46da599c 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf @@ -1833,6 +1833,26 @@ As ampliação e conversões definidas pelo usuário não são compatíveis com O método de ação {0} precisa especificar explicitamente o tipo de solicitação HTTP + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. Os inicializadores de módulo devem ser usados pelo código do aplicativo para garantir que os componentes de um aplicativo sejam inicializados antes que o código do aplicativo comece a ser executado. Se o código da biblioteca declara um método com o 'ModuleInitializerAttribute', ele pode interferir na inicialização do aplicativo e também levar a limitações nas habilidades de corte do aplicativo. Ao invés de usar métodos marcados com 'ModuleInitializerAttribute', a biblioteca deve expor os métodos que podem ser usados para inicializar quaisquer componentes dentro da biblioteca e permitir que o aplicativo invoque o método durante a inicialização do aplicativo. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf index 57538a5cb231..e97cb8f514af 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf @@ -1833,6 +1833,26 @@ Widening and user defined conversions are not supported with generic types.В методе действия {0} необходимо явным образом указать тип HTTP-запроса/ + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. Инициализаторы модулей предназначены для использования кодом приложения, чтобы обеспечить инициализацию компонентов приложения до того, как код приложения начнет выполняться. Если код библиотеки объявляет метод с ''ModuleInitializerAttribute'', это может помешать инициализации приложения, а также привести к ограничениям возможностей обрезки этого приложения. Вместо использования методов, помеченных ''ModuleInitializerAttribute'', библиотека должна предоставлять методы, которые можно использовать для инициализации любых компонентов в библиотеке, и позволять приложению вызывать метод во время инициализации приложения. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf index de2ea9f502e1..095fec929995 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf @@ -1833,6 +1833,26 @@ Genel türlerde genişletme ve kullanıcı tanımlı dönüştürmeler desteklen {0} eylem metodunun HTTP istek tipini açık olarak belirtmesi gerekir + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. Modül başlatıcılar, uygulama kodu yürütülmeye başlamadan önce uygulamanın bileşenlerinin başlatılmasını sağlamak için uygulama kodu tarafından kullanılmak içindir. Kitaplık kodu 'ModuleInitializerAttribute' öznitelikli bir yöntem bildirirse, uygulamanın başlatılmasına engel olabilir ve ayrıca bu uygulamanın kırpma becerileriyle ilgili sınırlamalara neden olabilir. Kitaplık, 'ModuleInitializerAttribute' özniteliği ile işaretli yöntemleri kullanmak yerine, içindeki bileşenlerin başlatılması için kullanılabilecek ve başlatılırken uygulamanın çağırabileceği yöntemleri kullanıma sunmalıdır. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf index 68f722d64e4f..40cccfbb4381 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf @@ -1833,6 +1833,26 @@ Enumerable.OfType<T> 使用的泛型类型检查(C# 'is' operator/IL 'isin 操作方法 {0} 需要显式指定 HTTP 请求类型 + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. 模块初始化表达式旨在由应用程序代码用于确保在应用程序代码开始执行之前初始化应用程序的组件。如果库代码使用 “ModuleInitializer” 声明方法,则可能干扰应用程序初始化,并且还会导致限制该应用程序的剪裁功能。因此库不应使用标记为 “ModuleInitializerAttribute” 的方法,而应公开可用于初始化库中任何组件的方法,并允许应用程序在应用程序初始化期间调用该方法。 diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf index 43db515c0d4b..0e95e70cea6b 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf @@ -1833,6 +1833,26 @@ Enumerable.OfType<T> 使用的一般型別檢查 (C# 'is' operator/IL 'isi Action 方法 {0} 必須明確地指定 HTTP 要求種類 + + Add '#!' (shebang) + Add '#!' (shebang) + + + + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + + + File-based program entry point should start with '#!' + File-based program entry point should start with '#!' + + Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the 'ModuleInitializerAttribute', it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Instead of using methods marked with 'ModuleInitializerAttribute', the library should expose methods that can be used to initialize any components within the library and allow the application to invoke the method during application initialization. 模組初始設定式供應用程式程式碼使用,以確保應用程式程式碼開始執行前先初始化應用程式的元件。如果程式庫程式碼宣告擁有 'ModuleInitializerAttribute' 的方法,它可能會干擾應用程式初始化,而且也會導致該應用程式的截斷功能遭到限制。不使用標示為 'ModuleInitializerAttribute' 的方法,程式庫應該公開可用於初始化程式庫內任何元件的方法,並允許應用程式在應用程式初始化期間叫用方法。 diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Utilities/Compiler/DiagnosticCategoryAndIdRanges.txt b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Utilities/Compiler/DiagnosticCategoryAndIdRanges.txt index 84d171e834bd..c22f1703c19a 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Utilities/Compiler/DiagnosticCategoryAndIdRanges.txt +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Utilities/Compiler/DiagnosticCategoryAndIdRanges.txt @@ -14,7 +14,7 @@ Globalization: CA2101, CA1300-CA1311 Mobility: CA1600-CA1601 Performance: HA, CA1800-CA1875 Security: CA2100-CA2153, CA2300-CA2330, CA3000-CA3147, CA5300-CA5405 -Usage: CA1801, CA1806, CA1816, CA2200-CA2209, CA2211-CA2265 +Usage: CA1801, CA1806, CA1816, CA2200-CA2209, CA2211-CA2266 Naming: CA1700-CA1727 Interoperability: CA1400-CA1422 Maintainability: CA1500-CA1515 diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Utilities/Compiler/Options/MSBuildPropertyOptionNames.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Utilities/Compiler/Options/MSBuildPropertyOptionNames.cs index 314f1ec6d51b..0d7db6ee7732 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Utilities/Compiler/Options/MSBuildPropertyOptionNames.cs +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Utilities/Compiler/Options/MSBuildPropertyOptionNames.cs @@ -23,6 +23,7 @@ internal static class MSBuildPropertyOptionNames public const string InvariantGlobalization = nameof(InvariantGlobalization); public const string PlatformNeutralAssembly = nameof(PlatformNeutralAssembly); public const string EnforceExtendedAnalyzerRules = nameof(EnforceExtendedAnalyzerRules); + public const string EntryPointFilePath = nameof(EntryPointFilePath); } internal static class MSBuildPropertyOptionNamesHelpers diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgramTests.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgramTests.cs new file mode 100644 index 000000000000..3ec4c4759d05 --- /dev/null +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgramTests.cs @@ -0,0 +1,265 @@ +// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information. + +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.Testing; +using VerifyCS = Test.Utilities.CSharpSecurityCodeFixVerifier< + Microsoft.NetCore.CSharp.Analyzers.Usage.CSharpMissingShebangInFileBasedProgram, + Microsoft.NetCore.CSharp.Analyzers.Usage.CSharpMissingShebangInFileBasedProgramFixer>; + +namespace Microsoft.NetCore.Analyzers.Usage.UnitTests +{ + public class MissingShebangInFileBasedProgramTests + { + private const string GlobalConfig = "is_global = true\r\nbuild_property.EntryPointFilePath = Test0.cs"; + + [Fact] + public async Task EntryPointWithoutShebang_MultipleFiles_WarningAsync() + { + // Entry point file without shebang, multiple files - warning expected. + await new VerifyCS.Test + { + TestState = + { + Sources = + { + ("Test0.cs", """class Program { static void Main() { } }"""), + ("Util.cs", """class Util { public static string Greet() => "hello"; }"""), + }, + AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, + ExpectedDiagnostics = + { + new DiagnosticResult(MissingShebangInFileBasedProgram.Rule).WithLocation("Test0.cs", 1, 1), + }, + }, + }.RunAsync(); + } + + [Fact] + public async Task NoEntryPointFilePath_NoDiagnosticAsync() + { + // No EntryPointFilePath - not a file-based program, no diagnostic. + await VerifyCS.VerifyAnalyzerAsync(""" + class Program + { + static void Main() + { + System.Console.WriteLine("hello"); + } + } + """); + } + + [Fact] + public async Task SingleFile_NoDiagnosticAsync() + { + // Single file - no need to distinguish entry point, no diagnostic. + await new VerifyCS.Test + { + TestState = + { + Sources = { ("Test0.cs", """class Program { static void Main() { } }""") }, + AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, + }, + }.RunAsync(); + } + + [Fact] + public async Task EntryPointWithoutShebang_CodeFixAddsShebangAsync() + { + // Verify that the code fix prepends a shebang line. + await new VerifyCS.Test + { + TestState = + { + Sources = + { + ("Test0.cs", """class Program { static void Main() { } }"""), + ("Util.cs", """class Util { public static string Greet() => "hello"; }"""), + }, + AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, + ExpectedDiagnostics = + { + new DiagnosticResult(MissingShebangInFileBasedProgram.Rule).WithLocation("Test0.cs", 1, 1), + }, + }, + FixedState = + { + Sources = + { + ("Test0.cs", """ + #!/usr/bin/env dotnet + class Program { static void Main() { } } + """), + ("Util.cs", """class Util { public static string Greet() => "hello"; }"""), + }, + }, + CodeFixTestBehaviors = CodeFixTestBehaviors.SkipLocalDiagnosticCheck, + SolutionTransforms = + { + (solution, projectId) => + { + // Enable #! shebang support in the parser. + var parseOptions = (CSharpParseOptions)solution.GetProject(projectId)!.ParseOptions!; + return solution.WithProjectParseOptions(projectId, + parseOptions.WithFeatures(parseOptions.Features.Concat( + [new KeyValuePair("FileBasedProgram", "true")]))); + }, + }, + }.RunAsync(); + } + + [Fact] + public async Task EntryPointWithShebang_MultipleFiles_NoDiagnosticAsync() + { + // Entry point already has shebang, multiple files - no diagnostic. + await new VerifyCS.Test + { + TestState = + { + Sources = + { + ("Test0.cs", """ + #!/usr/bin/env dotnet + class Program { static void Main() { } } + """), + ("Util.cs", """class Util { public static string Greet() => "hello"; }"""), + }, + AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, + }, + SolutionTransforms = + { + (solution, projectId) => + { + var parseOptions = (CSharpParseOptions)solution.GetProject(projectId)!.ParseOptions!; + return solution.WithProjectParseOptions(projectId, + parseOptions.WithFeatures(parseOptions.Features.Concat( + [new KeyValuePair("FileBasedProgram", "true")]))); + }, + }, + }.RunAsync(); + } + + [Fact] + public async Task EmptyEntryPointFilePath_NoDiagnosticAsync() + { + // Empty EntryPointFilePath - not a file-based program, no diagnostic. + await new VerifyCS.Test + { + TestState = + { + Sources = + { + ("Test0.cs", """class Program { static void Main() { } }"""), + ("Util.cs", """class Util { }"""), + }, + AnalyzerConfigFiles = { ("/.globalconfig", "is_global = true\r\nbuild_property.EntryPointFilePath = ") }, + }, + }.RunAsync(); + } + + [Fact] + public async Task GeneratedCodeFile_NoDiagnosticAsync() + { + // Entry point file without shebang, but the second file is generated code (.g.cs), + // so there is effectively only one non-generated file - no diagnostic. + await new VerifyCS.Test + { + TestState = + { + Sources = + { + ("Test0.cs", """class Program { static void Main() { } }"""), + ("Test1.g.cs", """class Generated { }"""), + }, + AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, + }, + }.RunAsync(); + } + + [Fact] + public async Task AutoGeneratedComment_NoDiagnosticAsync() + { + // Entry point file without shebang, but the second file has an comment, + // so there is effectively only one non-generated file - no diagnostic. + await new VerifyCS.Test + { + TestState = + { + Sources = + { + ("Test0.cs", """class Program { static void Main() { } }"""), + ("AssemblyInfo.cs", """ + // + using System; + [assembly: System.Reflection.AssemblyVersion("1.0.0.0")] + """), + }, + AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, + }, + }.RunAsync(); + } + + [Fact] + public async Task GeneratedCodePlusRealFile_WarningAsync() + { + // Entry point file without shebang, a real second file, and a generated file. + // Two non-generated files exist, so a warning is expected. + await new VerifyCS.Test + { + TestState = + { + Sources = + { + ("Test0.cs", """class Program { static void Main() { } }"""), + ("Util.cs", """class Util { }"""), + ("Test1.g.cs", """class Generated { }"""), + }, + AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, + ExpectedDiagnostics = + { + new DiagnosticResult(MissingShebangInFileBasedProgram.Rule).WithLocation("Test0.cs", 1, 1), + }, + }, + }.RunAsync(); + } + + [Fact] + public async Task ShebangNotAtPositionZero_WarningAsync() + { + // A class declaration before #! prevents the parser from treating it as ShebangDirectiveTrivia, + // so the analyzer warns about the missing shebang. + await new VerifyCS.Test + { + TestState = + { + Sources = + { + ("Test0.cs", """ + class Foo { } + #!/usr/bin/env dotnet + class Program { static void Main() { } } + """), + ("Util.cs", """class Util { }"""), + }, + AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, + ExpectedDiagnostics = + { + new DiagnosticResult(MissingShebangInFileBasedProgram.Rule).WithLocation("Test0.cs", 1, 1), + // Preprocessor directives must appear as the first non-whitespace character on a line + DiagnosticResult.CompilerError("CS1040").WithSpan("Test0.cs", 2, 1, 2, 2), + }, + }, + SolutionTransforms = + { + (solution, projectId) => + { + var parseOptions = (CSharpParseOptions)solution.GetProject(projectId)!.ParseOptions!; + return solution.WithProjectParseOptions(projectId, + parseOptions.WithFeatures(parseOptions.Features.Concat( + [new KeyValuePair("FileBasedProgram", "true")]))); + }, + }, + }.RunAsync(); + } + } +} \ No newline at end of file diff --git a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs index 0c2950fa03df..b4adf03ea70c 100644 --- a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs +++ b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs @@ -499,6 +499,7 @@ internal static void WriteProjectFile( artifacts/$(AssemblyName) artifacts/$(AssemblyName) true + {EscapeValue(entryPointFilePath)} {CSharpDirective.IncludeOrExclude.DefaultMappingString} false true diff --git a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs index 333d62f6ec73..26b00a68e870 100644 --- a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs +++ b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs @@ -600,6 +600,7 @@ public void DefaultItems_ImplicitBuildFileInDirectory() Directory.CreateDirectory(srcDir); File.WriteAllText(Path.Join(srcDir, "Program.cs"), """ + #!/usr/bin/env dotnet #:sdk Microsoft.NET.Sdk.Web Console.WriteLine(Util.GetText()); """); @@ -664,6 +665,7 @@ public void DefaultItems_ImplicitBuildFileOutsideDirectory() var subdir = Path.Join(srcDir, "subdir"); Directory.CreateDirectory(subdir); File.WriteAllText(Path.Join(subdir, "Program.cs"), """ + #!/usr/bin/env dotnet Console.WriteLine(Util.GetText()); """); File.WriteAllText(Path.Join(subdir, "Util.cs"), """ @@ -717,6 +719,7 @@ public void DefaultItems_ImplicitBuildFileAndUtilOutsideDirectory() var subdir = Path.Join(srcDir, "subdir"); Directory.CreateDirectory(subdir); File.WriteAllText(Path.Join(subdir, "Program.cs"), """ + #!/usr/bin/env dotnet Console.WriteLine(Util.GetText()); """); File.WriteAllText(Path.Join(srcDir, "Util.cs"), """ diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunThrowsAParseError.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunThrowsAParseError.cs index 035c7e7b1444..a3a59836a148 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunThrowsAParseError.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunThrowsAParseError.cs @@ -14,7 +14,7 @@ public void ItFailsWithAnAppropriateErrorMessage() { new DotnetCommand(Log, "run") // executing in a known path, with no project, is a sure way to get run to throw a parse error - .WithWorkingDirectory(Path.GetTempPath()) + .WithWorkingDirectory(Directory.CreateTempSubdirectory().FullName) .Execute("--", "1") .Should().Fail() .And.HaveStdErrContainingOnce("Couldn't find a project to run."); diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index 585e5ab925bc..cab95ebf77b3 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Immutable; @@ -860,6 +860,7 @@ public void MultipleFiles_RunEntryPoint() // This can be overridden. File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet #:property EnableDefaultCompileItems=true {s_programDependingOnUtil} """); @@ -879,7 +880,10 @@ public void MultipleFiles_RunEntryPoint() public void MultipleFiles_EnableDefaultCompileItemsViaDirectoryBuildProps() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_programDependingOnUtil); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet + {s_programDependingOnUtil} + """); File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ @@ -904,6 +908,7 @@ public void MultipleFiles_DirectivesInOtherFiles() { var testInstance = _testAssetsManager.CreateTestDirectory(); File.WriteAllText(Path.Join(testInstance.Path, "A.cs"), """ + #!/usr/bin/env dotnet Console.WriteLine(B.M()); #if !DEBUG Console.WriteLine("Release config"); @@ -1658,6 +1663,7 @@ public void BinaryLog_EvaluationData_MultiFile() File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet #:include *.cs {s_programDependingOnUtil} """); @@ -1815,6 +1821,125 @@ public void Verbosity_CompilationDiagnostics() .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); } + [Fact] + public void MissingShebangWarning() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + true + true + + + """); + + // Single-file program without shebang should NOT produce CA2266 + // (the warning only fires when there are multiple files via #:include). + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine("hello"); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdOutContaining("CA2266") + .And.HaveStdOutContaining("hello"); + + // Included file without shebang should not produce CA2266. + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), """ + class Util { public static string Greet() => "hello"; } + """); + + // Entry point with shebang and #:include — no warning. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #!/usr/bin/env dotnet + #:include Util.cs + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdOutContaining("CA2266") + .And.HaveStdOutContaining("hello"); + + // Entry point without shebang and #:include — CA2266 warning expected. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:include Util.cs + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining("warning CA2266") + .And.HaveStdOutContaining("hello"); + + // CA2266 can be suppressed via NoWarn. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:property NoWarn=CA2266 + #:include Util.cs + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdOutContaining("CA2266") + .And.HaveStdOutContaining("hello"); + } + + [Fact] + public void MissingShebangWarning_CompileItemFromDirectoryBuildProps() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + // Directory.Build.props adds a Compile item, effectively making + // the compilation multi-file (same as #:include). + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), """ + class Util { public static string Greet() => "hello"; } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + + + + """); + + // Entry point without shebang — CA2266 warning expected + // because Directory.Build.props added another Compile item. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining("warning CA2266") + .And.HaveStdOutContaining("hello"); + + // Adding shebang resolves the warning. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #!/usr/bin/env dotnet + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("hello"); + } + /// /// File-based projects using the default SDK do not include embedded resources by default. /// @@ -3132,6 +3257,7 @@ public void IncludeDirective( """); File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet #:include {includePattern} {additionalDirectives} #:property MyProp1=cs @@ -3168,6 +3294,7 @@ public void IncludeDirective_WorkingDirectory() """; File.WriteAllText(Path.Join(srcDir, "A.cs"), $""" + #!/usr/bin/env dotnet #:include B.cs {a} """); @@ -3252,6 +3379,7 @@ public void IncludeDirective_Transitive() """; File.WriteAllText(Path.Join(testInstance.Path, "dir1/A.cs"), $""" + #!/usr/bin/env dotnet #:include dir2/B.cs {a} """); @@ -3398,6 +3526,7 @@ public void IncludeDirective_UpToDate_Glob(string glob) var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:include {glob}.cs #:property _Star=* {s_programDependingOnUtil} @@ -3464,6 +3593,7 @@ public void IncludeDirective_UpToDate_NoGlob() var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:include Util.cs {s_programDependingOnUtil} """); @@ -3563,6 +3693,7 @@ class UtilClass var programPath = Path.Join(appDir, "Program.cs"); var programCode = """ + #!/usr/bin/env dotnet #:include Util.cs Console.WriteLine("Program(v1) " + UtilClass.GetMessage()); """; @@ -3592,6 +3723,7 @@ public void IncludeDirective_FeatureFlags() var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:include *.cs {s_programDependingOnUtil} """); @@ -3607,7 +3739,7 @@ public void IncludeDirective_FeatureFlags() .Execute() .Should().Fail() .And.HaveStdErr($""" - {DirectiveError(programPath, 1, Resources.ExperimentalFeatureDisabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective)} + {DirectiveError(programPath, 2, Resources.ExperimentalFeatureDisabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective)} {CliCommandStrings.RunCommandException} """); @@ -3661,6 +3793,7 @@ public void IncludeDirective_CustomMapping() var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:property FileBasedProgramsItemMapping=.json=Content #:include *.cs {s_programDependingOnUtil} @@ -3674,12 +3807,13 @@ public void IncludeDirective_CustomMapping() .Execute() .Should().Fail() .And.HaveStdErr($""" - {DirectiveError(programPath, 2, FileBasedProgramsResources.IncludeOrExcludeDirectiveUnknownFileType, "#:include", ".json")} + {DirectiveError(programPath, 3, FileBasedProgramsResources.IncludeOrExcludeDirectiveUnknownFileType, "#:include", ".json")} {CliCommandStrings.RunCommandException} """); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:property FileBasedProgramsItemMapping=.cs=Content #:include *.cs {s_programDependingOnUtil} @@ -3693,6 +3827,7 @@ public void IncludeDirective_CustomMapping() .And.HaveStdOutContaining("error CS0103"); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:property FileBasedProgramsItemMapping=.cs=Compile #:include *.cs {s_programDependingOnUtil} @@ -5734,6 +5869,7 @@ public void Api() artifacts/$(AssemblyName) artifacts/$(AssemblyName) true + {programPath} .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content false true @@ -5826,6 +5962,7 @@ public void Api_Evaluation() artifacts/$(AssemblyName) artifacts/$(AssemblyName) true + {programPath} .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content false true @@ -5901,6 +6038,7 @@ public void Api_Diagnostic_01() artifacts/$(AssemblyName) artifacts/$(AssemblyName) true + {programPath} .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content false true @@ -5975,6 +6113,7 @@ public void Api_Diagnostic_02() artifacts/$(AssemblyName) artifacts/$(AssemblyName) true + {programPath} .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content false true From 26dff7610ca8e3e5823a2f85b3a14bc9dc2f31cf Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 9 Apr 2026 10:54:30 +0000 Subject: [PATCH 123/230] Update dependencies from https://github.com/dotnet/templating build 20260409.3 On relative base path root Microsoft.TemplateEngine.Abstractions From Version 9.0.313 -> To Version 9.0.314 Microsoft.TemplateEngine.Mocks From Version 9.0.313-servicing.26154.2 -> To Version 9.0.314-servicing.26209.3 --- NuGet.config | 2 +- eng/Version.Details.xml | 6 +++--- eng/Versions.props | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/NuGet.config b/NuGet.config index 4b8d3de223e7..2d9363d77a23 100644 --- a/NuGet.config +++ b/NuGet.config @@ -37,7 +37,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 2b2f46ad2312..50ec8d1906fa 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,11 +3,11 @@ https://github.com/dotnet/templating - 5958234001856b3bf275d0846c3cbcbadccf6645 + 4d37977dc94f810e840dd0333fa786123189f995 - + https://github.com/dotnet/templating - 5958234001856b3bf275d0846c3cbcbadccf6645 + 4d37977dc94f810e840dd0333fa786123189f995 diff --git a/eng/Versions.props b/eng/Versions.props index 7a50fa35c0a3..c314cf0c8e86 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -195,7 +195,7 @@ $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) - 9.0.314-servicing.26208.8 + 9.0.314-servicing.26209.3 $(MicrosoftTemplateEngineMocksPackageVersion) $(MicrosoftTemplateEngineAbstractionsPackageVersion) $(MicrosoftTemplateEngineMocksPackageVersion) From 27547d7c9d5adcfc49963ffacc0a5e83ac057ea9 Mon Sep 17 00:00:00 2001 From: Robert Coltheart <13191652+robertcoltheart@users.noreply.github.com> Date: Fri, 10 Apr 2026 00:15:53 +1000 Subject: [PATCH 124/230] Fix dnx not authenticating for private feeds (#53322) --- .../Commands/Tool/Execute/ToolExecuteCommand.cs | 5 +++-- .../NuGetPackageDownloader.cs | 5 +++++ .../PackageSourceLocation.cs | 7 ++++++- src/Cli/dotnet/ToolPackage/PackageLocation.cs | 5 ++++- .../ToolPackage/ToolPackageDownloaderBase.cs | 2 +- .../NuGetPackageInstallerTests.cs | 15 +++++++++++++++ 6 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommand.cs b/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommand.cs index d5f2a2ce7781..5a3b00907319 100644 --- a/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommand.cs +++ b/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommand.cs @@ -114,8 +114,9 @@ public override int Execute() // other feeds, but this is probably OK. var downloadPackageLocation = new PackageLocation( nugetConfig: _configFile != null ? new(_configFile) : null, - sourceFeedOverrides: [packageSource.Source], - additionalFeeds: _addSource); + sourceFeedOverrides: _sources, + additionalFeeds: _addSource, + packageSourceOverrides: [packageSource]); toolPackage = _toolPackageDownloader.InstallPackage( downloadPackageLocation, diff --git a/src/Cli/dotnet/NugetPackageDownloader/NuGetPackageDownloader.cs b/src/Cli/dotnet/NugetPackageDownloader/NuGetPackageDownloader.cs index 7768f6f5d68b..8f19a15380c3 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/NuGetPackageDownloader.cs +++ b/src/Cli/dotnet/NugetPackageDownloader/NuGetPackageDownloader.cs @@ -468,6 +468,11 @@ private List LoadDefaultSources(PackageId packageId, PackageSourc public IEnumerable LoadNuGetSources(PackageId packageId, PackageSourceLocation packageSourceLocation = null, PackageSourceMapping packageSourceMapping = null) { + if (packageSourceLocation?.PackageSourceOverrides?.Any() ?? false) + { + return packageSourceLocation.PackageSourceOverrides; + } + var sources = (packageSourceLocation?.SourceFeedOverrides.Any() ?? false) ? LoadOverrideSources(packageSourceLocation) : LoadDefaultSources(packageId, packageSourceLocation, packageSourceMapping); diff --git a/src/Cli/dotnet/NugetPackageDownloader/PackageSourceLocation.cs b/src/Cli/dotnet/NugetPackageDownloader/PackageSourceLocation.cs index ed70adeaf924..883965ca1539 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/PackageSourceLocation.cs +++ b/src/Cli/dotnet/NugetPackageDownloader/PackageSourceLocation.cs @@ -4,6 +4,7 @@ #nullable disable using Microsoft.Extensions.EnvironmentAbstractions; +using NuGet.Configuration; namespace Microsoft.DotNet.Cli.NuGetPackageDownloader; @@ -14,7 +15,8 @@ public PackageSourceLocation( DirectoryPath? rootConfigDirectory = null, string[] sourceFeedOverrides = null, string[] additionalSourceFeeds = null, - string basePath = null) + string basePath = null, + PackageSource[] packageSourceOverrides = null) { basePath = basePath ?? Directory.GetCurrentDirectory(); @@ -24,12 +26,15 @@ public PackageSourceLocation( SourceFeedOverrides = ExpandLocalFeed(sourceFeedOverrides, basePath); // Feeds to be using in addition to config AdditionalSourceFeed = ExpandLocalFeed(additionalSourceFeeds, basePath); + // Feeds that have already been evaluated and selected to be used + PackageSourceOverrides = packageSourceOverrides; } public FilePath? NugetConfig { get; } public DirectoryPath? RootConfigDirectory { get; } public string[] SourceFeedOverrides { get; private set; } public string[] AdditionalSourceFeed { get; private set; } + public PackageSource[] PackageSourceOverrides { get; private set; } private static string[] ExpandLocalFeed(string[] sourceFeedOverrides, string basePath) { diff --git a/src/Cli/dotnet/ToolPackage/PackageLocation.cs b/src/Cli/dotnet/ToolPackage/PackageLocation.cs index b102097a1c2d..c33daeca15e3 100644 --- a/src/Cli/dotnet/ToolPackage/PackageLocation.cs +++ b/src/Cli/dotnet/ToolPackage/PackageLocation.cs @@ -4,6 +4,7 @@ #nullable disable using Microsoft.Extensions.EnvironmentAbstractions; +using NuGet.Configuration; namespace Microsoft.DotNet.Cli.ToolPackage; @@ -11,10 +12,12 @@ internal class PackageLocation( FilePath? nugetConfig = null, DirectoryPath? rootConfigDirectory = null, string[] additionalFeeds = null, - string[] sourceFeedOverrides = null) + string[] sourceFeedOverrides = null, + PackageSource[] packageSourceOverrides = null) { public FilePath? NugetConfig { get; } = nugetConfig; public DirectoryPath? RootConfigDirectory { get; } = rootConfigDirectory; public string[] AdditionalFeeds { get; } = additionalFeeds ?? []; public string[] SourceFeedOverrides { get; } = sourceFeedOverrides ?? []; + public PackageSource[] PackageSourceOverrides { get; } = packageSourceOverrides ?? []; } diff --git a/src/Cli/dotnet/ToolPackage/ToolPackageDownloaderBase.cs b/src/Cli/dotnet/ToolPackage/ToolPackageDownloaderBase.cs index 28a8e7973846..20cc2c93a1ef 100644 --- a/src/Cli/dotnet/ToolPackage/ToolPackageDownloaderBase.cs +++ b/src/Cli/dotnet/ToolPackage/ToolPackageDownloaderBase.cs @@ -110,7 +110,7 @@ public IToolPackage InstallPackage(PackageLocation packageLocation, PackageId pa verbosity, restoreActionConfig); - var packageSourceLocation = new PackageSourceLocation(packageLocation.NugetConfig, packageLocation.RootConfigDirectory, packageLocation.SourceFeedOverrides, packageLocation.AdditionalFeeds, _currentWorkingDirectory); + var packageSourceLocation = new PackageSourceLocation(packageLocation.NugetConfig, packageLocation.RootConfigDirectory, packageLocation.SourceFeedOverrides, packageLocation.AdditionalFeeds, _currentWorkingDirectory, packageLocation.PackageSourceOverrides); NuGetVersion packageVersion = nugetPackageDownloader.GetBestPackageVersionAsync(packageId, versionRange, packageSourceLocation).GetAwaiter().GetResult(); diff --git a/test/Microsoft.DotNet.PackageInstall.Tests/NuGetPackageInstallerTests.cs b/test/Microsoft.DotNet.PackageInstall.Tests/NuGetPackageInstallerTests.cs index a23dac5004c2..ea904dfde085 100644 --- a/test/Microsoft.DotNet.PackageInstall.Tests/NuGetPackageInstallerTests.cs +++ b/test/Microsoft.DotNet.PackageInstall.Tests/NuGetPackageInstallerTests.cs @@ -244,6 +244,21 @@ public async Task WhenPassedIncludePreviewItInstallSucceeds() "Package should download higher package version"); } + [Fact] + public void GivenPackageOverrideSourceWithCredentialsNugetFeedReturnsSelectedSource() + { + PackageSource source = new PackageSource("NuGet") + { + Credentials = new PackageSourceCredential("NuGet", "user", "pass", true, "basic") + }; + + IEnumerable selectedSources = _toolInstaller.LoadNuGetSources( + TestPackageId, + packageSourceLocation: new PackageSourceLocation(packageSourceOverrides: new[] { source })); + + selectedSources.Should().HaveCount(1).And.Contain(x => x.Credentials != null); + } + [WindowsOnlyFact] public async Task GivenANonSignedSdkItShouldPrintMessageOnce() { From 68096ab79391d84df81a75a73ab5d360eeedbd0c Mon Sep 17 00:00:00 2001 From: Daniel Plaisted Date: Thu, 9 Apr 2026 12:08:28 -0400 Subject: [PATCH 125/230] Fix merge of MTP help snapshot file The automated merge from release/10.0.2xx overwrote the 10.0.3xx version of the snapshot file. The two branches have legitimately different help output (10.0.2xx has --show-stderr/--show-stdout, 10.0.3xx has --artifacts-path instead). Restore the 10.0.3xx version. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/test/dotnet.Tests/CommandTests/Test/snapshots/MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt b/test/dotnet.Tests/CommandTests/Test/snapshots/MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt index d9c18b332ea8..9d648d9613c1 100644 --- a/test/dotnet.Tests/CommandTests/Test/snapshots/MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt +++ b/test/dotnet.Tests/CommandTests/Test/snapshots/MTPHelpSnapshotTests.VerifyMTPHelpOutput.verified.txt @@ -64,8 +64,4 @@ Platform Options: Extension Options: --report-trx Enable generating TRX report - --report-trx-filename The name of the generated TRX report - --show-stderr Determines when to show captured error output of a test. - Valid values are 'All', 'Failed', 'None'. Default is 'All'. - --show-stdout Determines when to show captured standard output of a test. - Valid values are 'All', 'Failed', 'None'. Default is 'All'. \ No newline at end of file + --report-trx-filename The name of the generated TRX report \ No newline at end of file From 6d0eb1c36db37bb6133f12a6cc84f3f7878b2aae Mon Sep 17 00:00:00 2001 From: Daniel Plaisted Date: Thu, 9 Apr 2026 12:17:03 -0400 Subject: [PATCH 126/230] Fix merge: restore Version.Details.props/.xml from release/10.0.3xx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The automated merge from release/10.0.2xx incorrectly overwrote dependency versions in Version.Details.props and Version.Details.xml. These files contain dependency versions managed by Maestro/darc and should not be updated by inter-branch merges — each branch has its own dependency flow. The merge downgraded ~60 package versions from 26203 builds to older 26201 builds and changed NuGet, Roslyn, and testing platform versions to incompatible values. Restore both files to match release/10.0.3xx. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/Version.Details.props | 128 +++++++++---------- eng/Version.Details.xml | 258 +++++++++++++++++++------------------- 2 files changed, 193 insertions(+), 193 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 0e586b495ffc..40b8f31a30ed 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26201.115 + 10.0.0-preview.26203.106 10.0.5 10.0.5 - 18.6.0-preview-26201-115 - 18.6.0-preview-26201-115 - 7.6.0-rc.20215 - 10.0.300-alpha.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 10.0.0-preview.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 + 18.6.0-preview-26203-106 + 18.6.0-preview-26203-106 + 7.6.0-rc.20406 + 10.0.300-alpha.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 10.0.0-preview.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26201.115 - 10.0.0-beta.26201.115 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26201.115 + 15.2.300-servicing.26203.106 10.0.5 - 5.7.0-1.26201.115 - 5.7.0-1.26201.115 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26201.115 + 10.0.0-preview.26203.106 10.0.5-servicing.26153.111 - 18.3.0-release-26201-115 + 18.3.0-release-26203-106 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26201.115 - 10.0.300-alpha.26201.115 - 10.0.300-alpha.26201.115 - 10.0.300-alpha.26201.115 - 10.0.300-alpha.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 10.0.300-preview.26201.115 - 18.3.0-release-26201-115 - 18.3.0-release-26201-115 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 18.3.0-release-26203-106 + 18.3.0-release-26203-106 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 - 7.6.0-rc.20215 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 10.0.5 2.0.5 10.0.5 @@ -145,8 +145,8 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 - 2.1.0-preview.26201.3 - 4.1.0-preview.26201.3 + 2.1.0-preview.25571.1 + 4.1.0-preview.25571.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 84930a45e4cf..d144b971620b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,49 +537,49 @@ - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - 008a44e70ea6aac33d4bcbfcf6f6764f7c9bc203 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://github.com/microsoft/testfx - 4b12ce96553c32c1038bf81176b98a79994d6967 + 43e592148ac1c7916908477bdffcf2a345affa6d https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet From 8e5eedf313d78924f6d2abead7da56abde20694f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 18:27:48 +0000 Subject: [PATCH 127/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 266 +++++++-------- eng/Version.Details.xml | 673 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 475 insertions(+), 474 deletions(-) diff --git a/NuGet.config b/NuGet.config index e226baf9b0b6..903609549285 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 94492476bae6..1a73d58a3c79 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,139 +8,139 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-preview.26203.109 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26203-109 - 7.0.2-rc.20409 - 10.0.106 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.0-preview.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 2.0.0-preview.1.26203.109 - 2.2.6 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26203.109 - 10.0.6 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26202.103 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26202-103 + 7.3.0-rc.20303 + 10.0.202 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.0-preview.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26202.103 + 10.0.4 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26203.109 - 10.0.6-servicing.26203.109 - 18.0.2-release-26203-109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 18.0.2-release-26203-109 - 18.0.2-release-26203-109 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26202.103 + 10.0.4-servicing.26119.110 + 18.3.0-release-26202-103 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 18.3.0-release-26202-103 + 18.3.0-release-26202-103 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 2.3.0-preview.26202.5 4.3.0-preview.26202.5 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 3a7cdb3a56c8..a1ff22313714 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 https://github.com/microsoft/testfx @@ -569,9 +568,9 @@ https://github.com/microsoft/testfx cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 6f9207378ac4..0552121a41ea 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.109", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.109", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26202.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26202.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 29ebb0eeb66045897ec0e8825cfc4da0e9599d61 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 08:41:56 +0000 Subject: [PATCH 128/230] Reset files to release/10.0.1xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 52 +- eng/Version.Details.props | 290 +++++ eng/Version.Details.xml | 1081 ++++++++--------- eng/common/CIBuild.cmd | 2 +- eng/common/SetupNugetSources.ps1 | 90 +- eng/common/SetupNugetSources.sh | 192 +-- eng/common/build.ps1 | 11 +- eng/common/build.sh | 33 +- eng/common/cibuild.sh | 2 +- eng/common/core-templates/job/job.yml | 48 +- eng/common/core-templates/job/onelocbuild.yml | 39 +- .../job/publish-build-assets.yml | 83 +- .../core-templates/job/source-build.yml | 15 +- .../job/source-index-stage1.yml | 47 +- .../core-templates/jobs/codeql-build.yml | 1 - eng/common/core-templates/jobs/jobs.yml | 15 +- .../core-templates/jobs/source-build.yml | 23 +- .../core-templates/post-build/post-build.yml | 42 +- .../steps/cleanup-microbuild.yml | 28 + .../core-templates/steps/generate-sbom.yml | 2 +- .../steps/get-delegation-sas.yml | 11 +- .../steps/install-microbuild.yml | 110 ++ .../core-templates/steps/publish-logs.yml | 8 +- .../core-templates/steps/source-build.yml | 88 +- .../steps/source-index-stage1-publish.yml | 35 + eng/common/cross/arm64/tizen/tizen.patch | 2 +- eng/common/cross/build-android-rootfs.sh | 49 +- eng/common/cross/build-rootfs.sh | 237 ++-- eng/common/cross/install-debs.py | 334 +++++ eng/common/cross/tizen-build-rootfs.sh | 0 eng/common/cross/tizen-fetch.sh | 9 +- eng/common/cross/toolchain.cmake | 82 +- eng/common/darc-init.sh | 2 +- eng/common/dotnet.cmd | 7 + eng/common/dotnet.ps1 | 11 + eng/common/dotnet.sh | 26 + eng/common/generate-locproject.ps1 | 49 +- eng/common/generate-sbom-prep.sh | 0 eng/common/native/install-dependencies.sh | 62 + eng/common/post-build/publish-using-darc.ps1 | 9 +- eng/common/post-build/redact-logs.ps1 | 5 +- eng/common/sdk-task.ps1 | 14 +- eng/common/sdk-task.sh | 121 ++ eng/common/sdl/packages.config | 2 +- eng/common/templates-official/job/job.yml | 4 +- .../steps/publish-build-artifacts.yml | 7 +- .../steps/source-index-stage1-publish.yml | 7 + .../variables/pool-providers.yml | 2 +- eng/common/templates/job/job.yml | 4 +- .../steps/publish-build-artifacts.yml | 8 +- .../steps/source-index-stage1-publish.yml | 7 + eng/common/templates/steps/vmr-sync.yml | 186 +++ .../templates/variables/pool-providers.yml | 2 +- eng/common/templates/vmr-build-pr.yml | 43 + eng/common/tools.ps1 | 71 +- eng/common/tools.sh | 81 +- eng/common/vmr-sync.ps1 | 164 +++ eng/common/vmr-sync.sh | 227 ++++ global.json | 21 +- 59 files changed, 2940 insertions(+), 1263 deletions(-) create mode 100644 eng/Version.Details.props mode change 100644 => 100755 eng/common/SetupNugetSources.sh create mode 100644 eng/common/core-templates/steps/cleanup-microbuild.yml create mode 100644 eng/common/core-templates/steps/install-microbuild.yml create mode 100644 eng/common/core-templates/steps/source-index-stage1-publish.yml create mode 100755 eng/common/cross/install-debs.py mode change 100644 => 100755 eng/common/cross/tizen-build-rootfs.sh mode change 100644 => 100755 eng/common/cross/tizen-fetch.sh create mode 100644 eng/common/dotnet.cmd create mode 100644 eng/common/dotnet.ps1 create mode 100755 eng/common/dotnet.sh mode change 100644 => 100755 eng/common/generate-sbom-prep.sh create mode 100755 eng/common/native/install-dependencies.sh create mode 100755 eng/common/sdk-task.sh create mode 100644 eng/common/templates-official/steps/source-index-stage1-publish.yml create mode 100644 eng/common/templates/steps/source-index-stage1-publish.yml create mode 100644 eng/common/templates/steps/vmr-sync.yml create mode 100644 eng/common/templates/vmr-build-pr.yml create mode 100755 eng/common/vmr-sync.ps1 create mode 100755 eng/common/vmr-sync.sh diff --git a/NuGet.config b/NuGet.config index 4460caf81a88..e226baf9b0b6 100644 --- a/NuGet.config +++ b/NuGet.config @@ -3,44 +3,15 @@ - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - @@ -51,6 +22,8 @@ + + @@ -60,19 +33,14 @@ + + + - - - - - - - - diff --git a/eng/Version.Details.props b/eng/Version.Details.props new file mode 100644 index 000000000000..94492476bae6 --- /dev/null +++ b/eng/Version.Details.props @@ -0,0 +1,290 @@ + + + + + 2.1.0 + + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.0-preview.26203.109 + 10.0.6 + 10.0.6 + 18.0.11 + 18.0.11-servicing-26203-109 + 7.0.2-rc.20409 + 10.0.106 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 10.0.0-preview.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 2.0.0-preview.1.26203.109 + 2.2.6 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 14.0.106-servicing.26203.109 + 10.0.6 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6 + 10.0.0-preview.7.25377.103 + 10.0.0-preview.26203.109 + 10.0.6-servicing.26203.109 + 18.0.2-release-26203-109 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106-servicing.26203.109 + 10.0.106 + 10.0.106-servicing.26203.109 + 10.0.106 + 10.0.106 + 10.0.106-servicing.26203.109 + 18.0.2-release-26203-109 + 18.0.2-release-26203-109 + 3.2.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 10.0.6 + 2.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + + 2.3.0-preview.26202.5 + 4.3.0-preview.26202.5 + + + + + $(NETStandardLibraryRefPackageVersion) + + $(dotnetdevcertsPackageVersion) + $(dotnetuserjwtsPackageVersion) + $(dotnetusersecretsPackageVersion) + $(MicrosoftAspNetCoreAnalyzersPackageVersion) + $(MicrosoftAspNetCoreAppRefPackageVersion) + $(MicrosoftAspNetCoreAppRefInternalPackageVersion) + $(MicrosoftAspNetCoreAuthenticationFacebookPackageVersion) + $(MicrosoftAspNetCoreAuthenticationGooglePackageVersion) + $(MicrosoftAspNetCoreAuthenticationMicrosoftAccountPackageVersion) + $(MicrosoftAspNetCoreAuthorizationPackageVersion) + $(MicrosoftAspNetCoreComponentsPackageVersion) + $(MicrosoftAspNetCoreComponentsAnalyzersPackageVersion) + $(MicrosoftAspNetCoreComponentsFormsPackageVersion) + $(MicrosoftAspNetCoreComponentsSdkAnalyzersPackageVersion) + $(MicrosoftAspNetCoreComponentsWebPackageVersion) + $(MicrosoftAspNetCoreComponentsWebAssemblyPackageVersion) + $(MicrosoftAspNetCoreComponentsWebAssemblyServerPackageVersion) + $(MicrosoftAspNetCoreComponentsWebViewPackageVersion) + $(MicrosoftAspNetCoreDeveloperCertificatesXPlatPackageVersion) + $(MicrosoftAspNetCoreMetadataPackageVersion) + $(MicrosoftAspNetCoreMvcAnalyzersPackageVersion) + $(MicrosoftAspNetCoreMvcApiAnalyzersPackageVersion) + $(MicrosoftAspNetCoreMvcRazorExtensionsToolingInternalPackageVersion) + $(MicrosoftAspNetCoreTestHostPackageVersion) + $(MicrosoftBclAsyncInterfacesPackageVersion) + $(MicrosoftBuildPackageVersion) + $(MicrosoftBuildLocalizationPackageVersion) + $(MicrosoftBuildNuGetSdkResolverPackageVersion) + $(MicrosoftBuildTasksGitPackageVersion) + $(MicrosoftCodeAnalysisPackageVersion) + $(MicrosoftCodeAnalysisBuildClientPackageVersion) + $(MicrosoftCodeAnalysisCSharpPackageVersion) + $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) + $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) + $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) + $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftDeploymentDotNetReleasesPackageVersion) + $(MicrosoftDiaSymReaderPackageVersion) + $(MicrosoftDotNetArcadeSdkPackageVersion) + $(MicrosoftDotNetBuildTasksInstallersPackageVersion) + $(MicrosoftDotNetBuildTasksTemplatingPackageVersion) + $(MicrosoftDotNetBuildTasksWorkloadsPackageVersion) + $(MicrosoftDotNetHelixSdkPackageVersion) + $(MicrosoftDotNetSignToolPackageVersion) + $(MicrosoftDotNetWebItemTemplates100PackageVersion) + $(MicrosoftDotNetWebProjectTemplates100PackageVersion) + $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) + $(MicrosoftDotNetXliffTasksPackageVersion) + $(MicrosoftDotNetXUnitExtensionsPackageVersion) + $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyModelPackageVersion) + $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) + $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) + $(MicrosoftExtensionsFileSystemGlobbingPackageVersion) + $(MicrosoftExtensionsLoggingPackageVersion) + $(MicrosoftExtensionsLoggingAbstractionsPackageVersion) + $(MicrosoftExtensionsLoggingConsolePackageVersion) + $(MicrosoftExtensionsObjectPoolPackageVersion) + $(MicrosoftFSharpCompilerPackageVersion) + $(MicrosoftJSInteropPackageVersion) + $(MicrosoftNetCompilersToolsetPackageVersion) + $(MicrosoftNetCompilersToolsetFrameworkPackageVersion) + $(MicrosoftNETHostModelPackageVersion) + $(MicrosoftNETILLinkTasksPackageVersion) + $(MicrosoftNETRuntimeEmscripten3156Cachewinx64PackageVersion) + $(MicrosoftNETRuntimeEmscriptenSdkInternalPackageVersion) + $(MicrosoftNETSdkRazorSourceGeneratorsTransportPackageVersion) + $(MicrosoftNETSdkWindowsDesktopPackageVersion) + $(MicrosoftNETTestSdkPackageVersion) + $(MicrosoftNETCoreAppRefPackageVersion) + $(MicrosoftNETCorePlatformsPackageVersion) + $(MicrosoftSourceLinkAzureReposGitPackageVersion) + $(MicrosoftSourceLinkBitbucketGitPackageVersion) + $(MicrosoftSourceLinkCommonPackageVersion) + $(MicrosoftSourceLinkGitHubPackageVersion) + $(MicrosoftSourceLinkGitLabPackageVersion) + $(MicrosoftTemplateEngineAbstractionsPackageVersion) + $(MicrosoftTemplateEngineAuthoringTemplateVerifierPackageVersion) + $(MicrosoftTemplateEngineEdgePackageVersion) + $(MicrosoftTemplateEngineMocksPackageVersion) + $(MicrosoftTemplateEngineOrchestratorRunnableProjectsPackageVersion) + $(MicrosoftTemplateEngineTestHelperPackageVersion) + $(MicrosoftTemplateEngineUtilsPackageVersion) + $(MicrosoftTemplateSearchCommonPackageVersion) + $(MicrosoftTemplateSearchTemplateDiscoveryPackageVersion) + $(MicrosoftTestPlatformBuildPackageVersion) + $(MicrosoftTestPlatformCLIPackageVersion) + $(MicrosoftWebXdtPackageVersion) + $(MicrosoftWin32SystemEventsPackageVersion) + $(MicrosoftWindowsDesktopAppInternalPackageVersion) + $(MicrosoftWindowsDesktopAppRefPackageVersion) + $(NuGetBuildTasksPackageVersion) + $(NuGetBuildTasksConsolePackageVersion) + $(NuGetBuildTasksPackPackageVersion) + $(NuGetCommandLineXPlatPackageVersion) + $(NuGetCommandsPackageVersion) + $(NuGetCommonPackageVersion) + $(NuGetConfigurationPackageVersion) + $(NuGetCredentialsPackageVersion) + $(NuGetDependencyResolverCorePackageVersion) + $(NuGetFrameworksPackageVersion) + $(NuGetLibraryModelPackageVersion) + $(NuGetLocalizationPackageVersion) + $(NuGetPackagingPackageVersion) + $(NuGetProjectModelPackageVersion) + $(NuGetProtocolPackageVersion) + $(NuGetVersioningPackageVersion) + $(SystemCodeDomPackageVersion) + $(SystemCommandLinePackageVersion) + $(SystemComponentModelCompositionPackageVersion) + $(SystemCompositionAttributedModelPackageVersion) + $(SystemCompositionConventionPackageVersion) + $(SystemCompositionHostingPackageVersion) + $(SystemCompositionRuntimePackageVersion) + $(SystemCompositionTypedPartsPackageVersion) + $(SystemConfigurationConfigurationManagerPackageVersion) + $(SystemDiagnosticsDiagnosticSourcePackageVersion) + $(SystemFormatsAsn1PackageVersion) + $(SystemIOHashingPackageVersion) + $(SystemReflectionMetadataLoadContextPackageVersion) + $(SystemResourcesExtensionsPackageVersion) + $(SystemSecurityCryptographyPkcsPackageVersion) + $(SystemSecurityCryptographyProtectedDataPackageVersion) + $(SystemSecurityCryptographyXmlPackageVersion) + $(SystemSecurityPermissionsPackageVersion) + $(SystemServiceProcessServiceControllerPackageVersion) + $(SystemTextEncodingCodePagesPackageVersion) + $(SystemTextJsonPackageVersion) + $(SystemWindowsExtensionsPackageVersion) + + $(MicrosoftTestingPlatformPackageVersion) + $(MSTestPackageVersion) + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 25d8b3f5e48f..3a7cdb3a56c8 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,634 +1,577 @@ + - - https://github.com/dotnet/templating - 34a5893f3ec336db55d3da5621a96106b418db5b - - - https://github.com/dotnet/templating - 34a5893f3ec336db55d3da5621a96106b418db5b - - - - https://github.com/dotnet/templating - b73682307aa0128c5edbec94c2e6a070d13ae6bb - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - - https://github.com/dotnet/emsdk - fb1326b0f4622f04f21584dc133f1c71f7554509 - - - - https://github.com/dotnet/emsdk - fb1326b0f4622f04f21584dc133f1c71f7554509 - - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - - https://github.com/dotnet/fsharp - 14987c804f33917bf15f4c25e0cd16ecd01807f4 - - - - https://github.com/dotnet/fsharp - 14987c804f33917bf15f4c25e0cd16ecd01807f4 - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 - - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6a953e76162f3f079405f80e28664fa51b136740 + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 - - - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 - + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 72d4e0415ec4ae0771a5df3e05260691a5d6775b - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-winforms - 9399df09f8f8a187dcf1941b1d07a538ca197171 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 72d4e0415ec4ae0771a5df3e05260691a5d6775b - - - https://github.com/dotnet/xdt - 63ae81154c50a1cf9287cc47d8351d55b4289e6d - - - - https://github.com/dotnet/xdt - 63ae81154c50a1cf9287cc47d8351d55b4289e6d - - - - https://github.com/dotnet/roslyn-analyzers - 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn-analyzers - 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 - - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - - https://github.com/dotnet/symreader - 0710a7892d89999956e8808c28e9dd0512bd53f3 - - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db - - - - - https://github.com/dotnet/source-build-externals - 71dbdccd13f28cfd1a35649263b55ebbeab26ee7 - - - - - https://github.com/dotnet/source-build-reference-packages - 6092b62b7f35fddbd6bf31e19b2ab64bbe2443ae - - - - https://github.com/dotnet/deployment-tools - b2d5c0c5841de4bc036ef4c84b5db3532504e5f3 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - - - https://github.com/dotnet/deployment-tools - b2d5c0c5841de4bc036ef4c84b5db3532504e5f3 - - - - - https://github.com/dotnet/symreader - 0710a7892d89999956e8808c28e9dd0512bd53f3 - + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://github.com/dotnet/arcade-services - e156e649f28395d9d0ee1e848225a689b59e0fd3 - - - https://github.com/dotnet/arcade-services - e156e649f28395d9d0ee1e848225a689b59e0fd3 - - - https://github.com/dotnet/scenario-tests - 0f750c53b3052a593c6daacc0d60eb8c0d2d9cf1 - - - - https://github.com/dotnet/scenario-tests - 0f750c53b3052a593c6daacc0d60eb8c0d2d9cf1 - - - - - https://github.com/dotnet/aspire - 5fa9337a84a52e9bd185d04d156eccbdcf592f74 - - - - https://github.com/dotnet/aspire - 5fa9337a84a52e9bd185d04d156eccbdcf592f74 - - - - https://github.com/dotnet/runtime - e77011b31a3e5c47d931248a64b47f9b2d47853d + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/microsoft/testfx + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + + + https://github.com/microsoft/testfx + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a diff --git a/eng/common/CIBuild.cmd b/eng/common/CIBuild.cmd index 56c2f25ac22f..ac1f72bf94e0 100644 --- a/eng/common/CIBuild.cmd +++ b/eng/common/CIBuild.cmd @@ -1,2 +1,2 @@ @echo off -powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" \ No newline at end of file +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 792b60b49d42..65ed3a8adef0 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -1,13 +1,14 @@ # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # # See example call for this script below. # # - task: PowerShell@2 -# displayName: Setup Private Feeds Credentials +# displayName: Setup internal Feeds Credentials # condition: eq(variables['Agent.OS'], 'Windows_NT') # inputs: # filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 @@ -34,19 +35,28 @@ Set-StrictMode -Version 2.0 . $PSScriptRoot\tools.ps1 +# Adds or enables the package source with the given name +function AddOrEnablePackageSource($sources, $disabledPackageSources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { + if ($disabledPackageSources -eq $null -or -not (EnableInternalPackageSource -DisabledPackageSources $disabledPackageSources -Creds $creds -PackageSourceName $SourceName)) { + AddPackageSource -Sources $sources -SourceName $SourceName -SourceEndPoint $SourceEndPoint -Creds $creds -Username $userName -pwd $Password + } +} + # Add source entry to PackageSources function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']") if ($packageSource -eq $null) { + Write-Host "Adding package source $SourceName" + $packageSource = $doc.CreateElement("add") $packageSource.SetAttribute("key", $SourceName) $packageSource.SetAttribute("value", $SourceEndPoint) $sources.AppendChild($packageSource) | Out-Null } else { - Write-Host "Package source $SourceName already present." + Write-Host "Package source $SourceName already present and enabled." } AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd @@ -59,6 +69,8 @@ function AddCredential($creds, $source, $username, $pwd) { return; } + Write-Host "Inserting credential for feed: " $source + # Looks for credential configuration for the given SourceName. Create it if none is found. $sourceElement = $creds.SelectSingleNode($Source) if ($sourceElement -eq $null) @@ -91,24 +103,27 @@ function AddCredential($creds, $source, $username, $pwd) { $passwordElement.SetAttribute("value", $pwd) } -function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) { - $maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]") - - Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds." - - ForEach ($PackageSource in $maestroPrivateSources) { - Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key - AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd +# Enable all darc-int package sources. +function EnableMaestroInternalPackageSources($DisabledPackageSources, $Creds) { + $maestroInternalSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") + ForEach ($DisabledPackageSource in $maestroInternalSources) { + EnableInternalPackageSource -DisabledPackageSources $DisabledPackageSources -Creds $Creds -PackageSourceName $DisabledPackageSource.key } } -function EnablePrivatePackageSources($DisabledPackageSources) { - $maestroPrivateSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") - ForEach ($DisabledPackageSource in $maestroPrivateSources) { - Write-Host "`tEnsuring private source '$($DisabledPackageSource.key)' is enabled by deleting it from disabledPackageSource" +# Enables an internal package source by name, if found. Returns true if the package source was found and enabled, false otherwise. +function EnableInternalPackageSource($DisabledPackageSources, $Creds, $PackageSourceName) { + $DisabledPackageSource = $DisabledPackageSources.SelectSingleNode("add[@key='$PackageSourceName']") + if ($DisabledPackageSource) { + Write-Host "Enabling internal source '$($DisabledPackageSource.key)'." + # Due to https://github.com/NuGet/Home/issues/10291, we must actually remove the disabled entries $DisabledPackageSources.RemoveChild($DisabledPackageSource) + + AddCredential -Creds $creds -Source $DisabledPackageSource.Key -Username $userName -pwd $Password + return $true } + return $false } if (!(Test-Path $ConfigFile -PathType Leaf)) { @@ -121,15 +136,17 @@ $doc = New-Object System.Xml.XmlDocument $filename = (Get-Item $ConfigFile).FullName $doc.Load($filename) -# Get reference to or create one if none exist already +# Get reference to - fail if none exist $sources = $doc.DocumentElement.SelectSingleNode("packageSources") if ($sources -eq $null) { - $sources = $doc.CreateElement("packageSources") - $doc.DocumentElement.AppendChild($sources) | Out-Null + Write-PipelineTelemetryError -Category 'Build' -Message "Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 } $creds = $null +$feedSuffix = "v3/index.json" if ($Password) { + $feedSuffix = "v2" # Looks for a node. Create it if none is found. $creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials") if ($creds -eq $null) { @@ -138,34 +155,35 @@ if ($Password) { } } +$userName = "dn-bot" + # Check for disabledPackageSources; we'll enable any darc-int ones we find there $disabledSources = $doc.DocumentElement.SelectSingleNode("disabledPackageSources") if ($disabledSources -ne $null) { Write-Host "Checking for any darc-int disabled package sources in the disabledPackageSources node" - EnablePrivatePackageSources -DisabledPackageSources $disabledSources + EnableMaestroInternalPackageSources -DisabledPackageSources $disabledSources -Creds $creds } - -$userName = "dn-bot" - -# Insert credential nodes for Maestro's private feeds -InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password - -# 3.1 uses a different feed url format so it's handled differently here -$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") -if ($dotnet31Source -ne $null) { - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password -} - -$dotnetVersions = @('5','6','7','8','9') +$dotnetVersions = @('5','6','7','8','9','10') foreach ($dotnetVersion in $dotnetVersions) { $feedPrefix = "dotnet" + $dotnetVersion; $dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']") if ($dotnetSource -ne $null) { - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password } } +# Check for dotnet-eng and add dotnet-eng-internal if present +$dotnetEngSource = $sources.SelectSingleNode("add[@key='dotnet-eng']") +if ($dotnetEngSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-eng-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + +# Check for dotnet-tools and add dotnet-tools-internal if present +$dotnetToolsSource = $sources.SelectSingleNode("add[@key='dotnet-tools']") +if ($dotnetToolsSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-tools-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + $doc.Save($filename) diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh old mode 100644 new mode 100755 index facb415ca6ff..b2163abbe71b --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # @@ -52,81 +53,139 @@ if [[ `uname -s` == "Darwin" ]]; then TB='' fi -# Ensure there is a ... section. -grep -i "" $ConfigFile -if [ "$?" != "0" ]; then - echo "Adding ... section." - ConfigNodeHeader="" - PackageSourcesTemplate="${TB}${NL}${TB}" +# Enables an internal package source by name, if found. Returns 0 if found and enabled, 1 if not found. +EnableInternalPackageSource() { + local PackageSourceName="$1" + + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return 1 # No disabled sources section + fi + + # Check if this source name is disabled + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Enabling internal source '$PackageSourceName'." + # Remove the disabled entry (including any surrounding comments or whitespace on the same line) + sed -i.bak "//d" "$ConfigFile" + + # Add the source name to PackageSources for credential handling + PackageSources+=("$PackageSourceName") + return 0 # Found and enabled + fi + + return 1 # Not found in disabled sources +} + +# Add source entry to PackageSources +AddPackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Check if source already exists + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Package source $SourceName already present and enabled." + PackageSources+=("$SourceName") + return + fi + + echo "Adding package source $SourceName" + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" "$ConfigFile" + PackageSources+=("$SourceName") +} + +# Adds or enables the package source with the given name +AddOrEnablePackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Try to enable if disabled, if not found then add new source + EnableInternalPackageSource "$SourceName" + if [ "$?" != "0" ]; then + AddPackageSource "$SourceName" "$SourceEndPoint" + fi +} - sed -i.bak "s|$ConfigNodeHeader|$ConfigNodeHeader${NL}$PackageSourcesTemplate|" $ConfigFile -fi +# Enable all darc-int package sources +EnableMaestroInternalPackageSources() { + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return # No disabled sources section + fi + + # Find all darc-int disabled sources + local DisabledDarcIntSources=() + DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' "$ConfigFile" | tr -d '"') + + for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do + if [[ $DisabledSourceName == darc-int* ]]; then + EnableInternalPackageSource "$DisabledSourceName" + fi + done +} -# Ensure there is a ... section. -grep -i "" $ConfigFile +# Ensure there is a ... section. +grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding ... section." - - PackageSourcesNodeFooter="" - PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile + Write-PipelineTelemetryError -Category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 fi PackageSources=() -# Ensure dotnet3.1-internal and dotnet3.1-internal-transport are in the packageSources if the public dotnet3.1 feeds are present -grep -i "... section. + grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + echo "Adding ... section." - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=('dotnet3.1-internal') - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal-transport to the packageSources." PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile fi - PackageSources+=('dotnet3.1-internal-transport') fi -DotNetVersions=('5' '6' '7' '8' '9') +# Check for disabledPackageSources; we'll enable any darc-int ones we find there +grep -i "" $ConfigFile > /dev/null +if [ "$?" == "0" ]; then + echo "Checking for any darc-int disabled package sources in the disabledPackageSources node" + EnableMaestroInternalPackageSources +fi + +DotNetVersions=('5' '6' '7' '8' '9' '10') for DotNetVersion in ${DotNetVersions[@]} ; do FeedPrefix="dotnet${DotNetVersion}"; - grep -i " /dev/null if [ "$?" == "0" ]; then - grep -i "" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal") - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding $FeedPrefix-internal-transport to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal-transport") + AddOrEnablePackageSource "$FeedPrefix-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal/nuget/$FeedSuffix" + AddOrEnablePackageSource "$FeedPrefix-internal-transport" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal-transport/nuget/$FeedSuffix" fi done +# Check for dotnet-eng and add dotnet-eng-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-eng-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$FeedSuffix" +fi + +# Check for dotnet-tools and add dotnet-tools-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-tools-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$FeedSuffix" +fi + # I want things split line by line PrevIFS=$IFS IFS=$'\n' @@ -139,29 +198,12 @@ if [ "$CredToken" ]; then # Check if there is no existing credential for this FeedName grep -i "<$FeedName>" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding credentials for $FeedName." + echo " Inserting credential for feed: $FeedName" PackageSourceCredentialsNodeFooter="" - NewCredential="${TB}${TB}<$FeedName>${NL}${NL}${NL}" + NewCredential="${TB}${TB}<$FeedName>${NL}${TB}${NL}${TB}${TB}${NL}${TB}${TB}" sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" $ConfigFile fi done fi - -# Re-enable any entries in disabledPackageSources where the feed name contains darc-int -grep -i "" $ConfigFile -if [ "$?" == "0" ]; then - DisabledDarcIntSources=() - echo "Re-enabling any disabled \"darc-int\" package sources in $ConfigFile" - DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' $ConfigFile | tr -d '"') - for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do - if [[ $DisabledSourceName == darc-int* ]] - then - OldDisableValue="" - NewDisableValue="" - sed -i.bak "s|$OldDisableValue|$NewDisableValue|" $ConfigFile - echo "Neutralized disablePackageSources entry for '$DisabledSourceName'" - fi - done -fi diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 438f9920c43e..8cfee107e7a3 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -7,6 +7,7 @@ Param( [string] $msbuildEngine = $null, [bool] $warnAsError = $true, [bool] $nodeReuse = $true, + [switch] $buildCheck = $false, [switch][Alias('r')]$restore, [switch] $deployDeps, [switch][Alias('b')]$build, @@ -20,6 +21,7 @@ Param( [switch] $publish, [switch] $clean, [switch][Alias('pb')]$productBuild, + [switch]$fromVMR, [switch][Alias('bl')]$binaryLog, [switch][Alias('nobl')]$excludeCIBinarylog, [switch] $ci, @@ -71,6 +73,9 @@ function Print-Usage() { Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio" Write-Host " -nativeToolsOnMachine Sets the native tools on machine environment variable (indicating that the script should use native tools on machine)" + Write-Host " -nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" + Write-Host " -buildCheck Sets /check msbuild parameter" + Write-Host " -fromVMR Set when building from within the VMR" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." @@ -97,6 +102,7 @@ function Build { $bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'Build.binlog') } else { '' } $platformArg = if ($platform) { "/p:Platform=$platform" } else { '' } + $check = if ($buildCheck) { '/check' } else { '' } if ($projects) { # Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons. @@ -113,6 +119,7 @@ function Build { MSBuild $toolsetBuildProj ` $bl ` $platformArg ` + $check ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` /p:Restore=$restore ` @@ -122,11 +129,13 @@ function Build { /p:Deploy=$deploy ` /p:Test=$test ` /p:Pack=$pack ` - /p:DotNetBuildRepo=$productBuild ` + /p:DotNetBuild=$productBuild ` + /p:DotNetBuildFromVMR=$fromVMR ` /p:IntegrationTest=$integrationTest ` /p:PerformanceTest=$performanceTest ` /p:Sign=$sign ` /p:Publish=$publish ` + /p:RestoreStaticGraphEnableBinaryLogger=$binaryLog ` @properties } diff --git a/eng/common/build.sh b/eng/common/build.sh index ac1ee8620cd2..9767bb411a4f 100755 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -42,6 +42,8 @@ usage() echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" + echo " --buildCheck Sets /check msbuild parameter" + echo " --fromVMR Set when building from within the VMR" echo "" echo "Command line arguments not listed above are passed thru to msbuild." echo "Arguments can also be passed in with a single hyphen." @@ -63,6 +65,7 @@ restore=false build=false source_build=false product_build=false +from_vmr=false rebuild=false test=false integration_test=false @@ -76,6 +79,7 @@ clean=false warn_as_error=true node_reuse=true +build_check=false binary_log=false exclude_ci_binary_log=false pipelines_log=false @@ -87,7 +91,7 @@ verbosity='minimal' runtime_source_feed='' runtime_source_feed_key='' -properties='' +properties=() while [[ $# > 0 ]]; do opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in @@ -127,19 +131,22 @@ while [[ $# > 0 ]]; do -pack) pack=true ;; - -sourcebuild|-sb) + -sourcebuild|-source-build|-sb) build=true source_build=true product_build=true restore=true pack=true ;; - -productBuild|-pb) + -productbuild|-product-build|-pb) build=true product_build=true restore=true pack=true ;; + -fromvmr|-from-vmr) + from_vmr=true + ;; -test|-t) test=true ;; @@ -173,6 +180,9 @@ while [[ $# > 0 ]]; do node_reuse=$2 shift ;; + -buildcheck) + build_check=true + ;; -runtimesourcefeed) runtime_source_feed=$2 shift @@ -182,7 +192,7 @@ while [[ $# > 0 ]]; do shift ;; *) - properties="$properties $1" + properties+=("$1") ;; esac @@ -216,7 +226,7 @@ function Build { InitializeCustomToolset if [[ ! -z "$projects" ]]; then - properties="$properties /p:Projects=$projects" + properties+=("/p:Projects=$projects") fi local bl="" @@ -224,15 +234,21 @@ function Build { bl="/bl:\"$log_dir/Build.binlog\"" fi + local check="" + if [[ "$build_check" == true ]]; then + check="/check" + fi + MSBuild $_InitializeToolset \ $bl \ + $check \ /p:Configuration=$configuration \ /p:RepoRoot="$repo_root" \ /p:Restore=$restore \ /p:Build=$build \ - /p:DotNetBuildRepo=$product_build \ - /p:ArcadeBuildFromSource=$source_build \ + /p:DotNetBuild=$product_build \ /p:DotNetBuildSourceOnly=$source_build \ + /p:DotNetBuildFromVMR=$from_vmr \ /p:Rebuild=$rebuild \ /p:Test=$test \ /p:Pack=$pack \ @@ -240,7 +256,8 @@ function Build { /p:PerformanceTest=$performance_test \ /p:Sign=$sign \ /p:Publish=$publish \ - $properties + /p:RestoreStaticGraphEnableBinaryLogger=$binary_log \ + ${properties[@]+"${properties[@]}"} ExitWithExitCode 0 } diff --git a/eng/common/cibuild.sh b/eng/common/cibuild.sh index 1a02c0dec8fd..66e3b0ac61c3 100755 --- a/eng/common/cibuild.sh +++ b/eng/common/cibuild.sh @@ -13,4 +13,4 @@ while [[ -h $source ]]; do done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ \ No newline at end of file +. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index 8da43d3b5837..5ce518406198 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -19,11 +19,11 @@ parameters: # publishing defaults artifacts: '' enableMicrobuild: false + enableMicrobuildForMacAndLinux: false microbuildUseESRP: true enablePublishBuildArtifacts: false enablePublishBuildAssets: false enablePublishTestResults: false - enablePublishUsingPipelines: false enableBuildRetry: false mergeTestResults: false testRunTitle: '' @@ -74,9 +74,6 @@ jobs: - ${{ if ne(parameters.enableTelemetry, 'false') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE value: '$(Build.Repository.Uri)' - - ${{ if eq(parameters.enableRichCodeNavigation, 'true') }}: - - name: EnableRichCodeNavigation - value: 'true' # Retry signature validation up to three times, waiting 2 seconds between attempts. # See https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028#retry-untrusted-root-failures - name: NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY @@ -128,23 +125,12 @@ jobs: - ${{ preStep }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin - inputs: - signType: $(_SignType) - zipSources: false - feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json - ${{ if eq(parameters.microbuildUseESRP, true) }}: - ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: - ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea - ${{ else }}: - ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca - env: - TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: '$(Agent.TempDirectory)' + - template: /eng/common/core-templates/steps/install-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} + microbuildUseESRP: ${{ parameters.microbuildUseESRP }} continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) - ${{ if and(eq(parameters.runAsPublic, 'false'), eq(variables['System.TeamProject'], 'internal')) }}: - task: NuGetAuthenticate@1 @@ -160,27 +146,15 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} - - ${{ if eq(parameters.enableRichCodeNavigation, true) }}: - - task: RichCodeNavIndexer@0 - displayName: RichCodeNav Upload - inputs: - languages: ${{ coalesce(parameters.richCodeNavigationLanguage, 'csharp') }} - environment: ${{ coalesce(parameters.richCodeNavigationEnvironment, 'internal') }} - richNavLogOutputDirectory: $(System.DefaultWorkingDirectory)/artifacts/bin - uploadRichNavArtifacts: ${{ coalesce(parameters.richCodeNavigationUploadArtifacts, false) }} - continueOnError: true - - ${{ each step in parameters.componentGovernanceSteps }}: - ${{ step }} - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: MicroBuildCleanup@1 - displayName: Execute Microbuild cleanup tasks - condition: and(always(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: /eng/common/core-templates/steps/cleanup-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} continueOnError: ${{ parameters.continueOnError }} - env: - TeamName: $(_TeamName) # Publish test results - ${{ if or(and(eq(parameters.enablePublishTestResults, 'true'), eq(parameters.testResultsFormat, '')), eq(parameters.testResultsFormat, 'xunit')) }}: diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index edefa789d360..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -4,7 +4,7 @@ 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) @@ -27,7 +27,7 @@ parameters: is1ESPipeline: '' jobs: - job: OneLocBuild${{ parameters.JobNameSuffix }} - + dependsOn: ${{ parameters.dependsOn }} displayName: OneLocBuild${{ parameters.JobNameSuffix }} @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: @@ -86,8 +86,7 @@ jobs: isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }} ${{ if eq(parameters.CreatePr, true) }}: isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} - ${{ if eq(parameters.RepoType, 'gitHub') }}: - isShouldReusePrSelected: ${{ parameters.ReusePr }} + isShouldReusePrSelected: ${{ parameters.ReusePr }} packageSourceAuth: patAuth patVariable: ${{ parameters.CeapexPat }} ${{ if eq(parameters.RepoType, 'gitHub') }}: @@ -100,22 +99,20 @@ jobs: mirrorBranch: ${{ parameters.MirrorBranch }} condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} - args: - displayName: Publish Localization Files - pathToPublish: '$(Build.ArtifactStagingDirectory)/loc' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} + # Copy the locProject.json to the root of the Loc directory, then publish a pipeline artifact + - task: CopyFiles@2 + displayName: Copy LocProject.json + inputs: + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/Localize/' + Contents: 'LocProject.json' + TargetFolder: '$(Build.ArtifactStagingDirectory)/loc' + condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: - displayName: Publish LocProject.json - pathToPublish: '$(System.DefaultWorkingDirectory)/eng/Localize/' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} \ No newline at end of file + targetPath: '$(Build.ArtifactStagingDirectory)/loc' + artifactName: 'Loc' + displayName: 'Publish Localization Files' + condition: ${{ parameters.condition }} diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index 3cb20fb5041f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -20,9 +20,6 @@ parameters: # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing - publishUsingPipelines: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing publishAssetsImmediately: false @@ -32,6 +29,15 @@ parameters: is1ESPipeline: '' + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + + # Optional, publishing version + publishingVersion: 3 + + # Optional: A minimatch pattern for the asset manifests to publish to BAR + assetManifestsPattern: '*/manifests/**/*.xml' + repositoryAlias: self officialBuildId: '' @@ -68,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -84,18 +90,44 @@ jobs: - checkout: ${{ parameters.repositoryAlias }} fetchDepth: 3 clean: true - - - task: DownloadBuildArtifacts@0 - displayName: Download artifact - inputs: - artifactName: AssetManifests - downloadPath: '$(Build.StagingDirectory)/Download' - checkDownloadedFiles: true - condition: ${{ parameters.condition }} - continueOnError: ${{ parameters.continueOnError }} + + - ${{ if eq(parameters.isAssetlessBuild, 'false') }}: + - ${{ if eq(parameters.publishingVersion, 3) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Asset Manifests + inputs: + artifactName: AssetManifests + targetPath: '$(Build.StagingDirectory)/AssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - ${{ if eq(parameters.publishingVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download V4 asset manifests + inputs: + itemPattern: '*/manifests/**/*.xml' + targetPath: '$(Build.StagingDirectory)/AllAssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - task: CopyFiles@2 + displayName: Copy V4 asset manifests to AssetManifests + inputs: + SourceFolder: '$(Build.StagingDirectory)/AllAssetManifests' + Contents: ${{ parameters.assetManifestsPattern }} + TargetFolder: '$(Build.StagingDirectory)/AssetManifests' + flattenFolders: true + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} - task: NuGetAuthenticate@1 + # Populate internal runtime variables. + - template: /eng/common/templates/steps/enable-internal-sources.yml + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + + - template: /eng/common/templates/steps/enable-internal-runtimes.yml + - task: AzureCLI@2 displayName: Publish Build Assets inputs: @@ -104,10 +136,13 @@ jobs: scriptLocation: scriptPath scriptPath: $(System.DefaultWorkingDirectory)/eng/common/sdk-task.ps1 arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet - /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' + /p:ManifestsPath='$(Build.StagingDirectory)/AssetManifests' + /p:IsAssetlessBuild=${{ parameters.isAssetlessBuild }} /p:MaestroApiEndpoint=https://maestro.dot.net - /p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }} /p:OfficialBuildId=$(OfficialBuildId) + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' + condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} @@ -129,6 +164,17 @@ jobs: Copy-Item -Path $symbolExclusionfile -Destination "$(Build.StagingDirectory)/ReleaseConfigs" } + - ${{ if eq(parameters.publishingVersion, 4) }}: + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + parameters: + is1ESPipeline: ${{ parameters.is1ESPipeline }} + args: + targetPath: '$(Build.ArtifactStagingDirectory)/MergedManifest.xml' + artifactName: AssetManifests + displayName: 'Publish Merged Manifest' + retryCountOnTaskFailure: 10 # for any logs being locked + sbomEnabled: false # we don't need SBOM for logs + - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -138,7 +184,7 @@ jobs: publishLocation: Container artifactName: ReleaseConfigs - - ${{ if eq(parameters.publishAssetsImmediately, 'true') }}: + - ${{ if or(eq(parameters.publishAssetsImmediately, 'true'), eq(parameters.isAssetlessBuild, 'true')) }}: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: BARBuildId: ${{ parameters.BARBuildId }} @@ -164,6 +210,9 @@ jobs: -WaitPublishingFinish true -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - template: /eng/common/core-templates/steps/publish-logs.yml diff --git a/eng/common/core-templates/job/source-build.yml b/eng/common/core-templates/job/source-build.yml index d943748ac10e..1997c2ae00d7 100644 --- a/eng/common/core-templates/job/source-build.yml +++ b/eng/common/core-templates/job/source-build.yml @@ -12,9 +12,10 @@ parameters: # The name of the job. This is included in the job ID. # targetRID: '' # The name of the target RID to use, instead of the one auto-detected by Arcade. - # nonPortable: false + # portableBuild: false # Enables non-portable mode. This means a more specific RID (e.g. fedora.32-x64 rather than - # linux-x64), and compiling against distro-provided packages rather than portable ones. + # linux-x64), and compiling against distro-provided packages rather than portable ones. The + # default is portable mode. # skipPublishValidation: false # Disables publishing validation. By default, a check is performed to ensure no packages are # published by source-build. @@ -33,9 +34,6 @@ parameters: # container and pool. platform: {} - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: '' # If set to true and running on a non-public project, @@ -62,7 +60,7 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] - demands: ImageOverride -equals build.ubuntu.2004.amd64 + demands: ImageOverride -equals build.azurelinux.3.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] image: build.azurelinux.3.amd64 @@ -71,10 +69,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] - demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open + demands: ImageOverride -equals build.azurelinux.3.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] - demands: ImageOverride -equals Build.Ubuntu.2204.Amd64 + demands: ImageOverride -equals build.azurelinux.3.amd64 ${{ if ne(parameters.platform.pool, '') }}: pool: ${{ parameters.platform.pool }} @@ -96,4 +94,3 @@ jobs: parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} platform: ${{ parameters.platform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} diff --git a/eng/common/core-templates/job/source-index-stage1.yml b/eng/common/core-templates/job/source-index-stage1.yml index ddf8c2e00d80..76baf5c27258 100644 --- a/eng/common/core-templates/job/source-index-stage1.yml +++ b/eng/common/core-templates/job/source-index-stage1.yml @@ -1,8 +1,5 @@ parameters: runAsPublic: false - sourceIndexUploadPackageVersion: 2.0.0-20250425.2 - sourceIndexProcessBinlogPackageVersion: 1.0.1-20250425.2 - sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" preSteps: [] binlogPath: artifacts/log/Debug/Build.binlog @@ -16,12 +13,6 @@ jobs: dependsOn: ${{ parameters.dependsOn }} condition: ${{ parameters.condition }} variables: - - name: SourceIndexUploadPackageVersion - value: ${{ parameters.sourceIndexUploadPackageVersion }} - - name: SourceIndexProcessBinlogPackageVersion - value: ${{ parameters.sourceIndexProcessBinlogPackageVersion }} - - name: SourceIndexPackageSource - value: ${{ parameters.sourceIndexPackageSource }} - name: BinlogPath value: ${{ parameters.binlogPath }} - template: /eng/common/core-templates/variables/pool-providers.yml @@ -34,12 +25,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - image: 1es-windows-2022-open - os: windows + image: windows.vs2026preview.scout.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 - os: windows + image: windows.vs2026preview.scout.amd64 steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -47,35 +36,9 @@ jobs: - ${{ each preStep in parameters.preSteps }}: - ${{ preStep }} - - - task: UseDotNet@2 - displayName: Use .NET 8 SDK - inputs: - packageType: sdk - version: 8.0.x - installationPath: $(Agent.TempDirectory)/dotnet - workingDirectory: $(Agent.TempDirectory) - - - script: | - $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(sourceIndexProcessBinlogPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(sourceIndexUploadPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - displayName: Download Tools - # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. - workingDirectory: $(Agent.TempDirectory) - - script: ${{ parameters.sourceIndexBuildCommand }} displayName: Build Repository - - script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i $(BinlogPath) -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output - displayName: Process Binlog into indexable sln - - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: AzureCLI@2 - displayName: Log in to Azure and upload stage1 artifacts to source index - inputs: - azureSubscription: 'SourceDotNet Stage1 Publish' - addSpnToEnvironment: true - scriptType: 'ps' - scriptLocation: 'inlineScript' - inlineScript: | - $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 + - template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + binLogPath: ${{ parameters.binLogPath }} diff --git a/eng/common/core-templates/jobs/codeql-build.yml b/eng/common/core-templates/jobs/codeql-build.yml index 4571a7864df6..dbc14ac580a2 100644 --- a/eng/common/core-templates/jobs/codeql-build.yml +++ b/eng/common/core-templates/jobs/codeql-build.yml @@ -15,7 +15,6 @@ jobs: enablePublishBuildArtifacts: false enablePublishTestResults: false enablePublishBuildAssets: false - enablePublishUsingPipelines: false enableTelemetry: true variables: diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index bf33cdc2cc77..01ada7476651 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -5,9 +5,6 @@ parameters: # Optional: Include PublishBuildArtifacts task enablePublishBuildArtifacts: false - # Optional: Enable publishing using release pipelines - enablePublishUsingPipelines: false - # Optional: Enable running the source-build jobs to build repo from source enableSourceBuild: false @@ -30,6 +27,9 @@ parameters: # Optional: Publish the assets as soon as the publish to BAR stage is complete, rather doing so in a separate stage. publishAssetsImmediately: false + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + # Optional: If using publishAssetsImmediately and additional parameters are needed, can be used to send along additional parameters (normally sent to post-build.yml) artifactsPublishingAdditionalParameters: '' signingValidationAdditionalParameters: '' @@ -85,7 +85,6 @@ jobs: - template: /eng/common/core-templates/jobs/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - allCompletedJobId: Source_Build_Complete ${{ each parameter in parameters.sourceBuildParameters }}: ${{ parameter.key }}: ${{ parameter.value }} @@ -98,7 +97,7 @@ jobs: ${{ parameter.key }}: ${{ parameter.value }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: + - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, ''), eq(parameters.isAssetlessBuild, true)) }}: - template: ../job/publish-build-assets.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -110,12 +109,10 @@ jobs: - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.jobs }}: - ${{ job.job }} - - ${{ if eq(parameters.enableSourceBuild, true) }}: - - Source_Build_Complete runAsPublic: ${{ parameters.runAsPublic }} - publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} - publishAssetsImmediately: ${{ parameters.publishAssetsImmediately }} + publishAssetsImmediately: ${{ or(parameters.publishAssetsImmediately, parameters.isAssetlessBuild) }} + isAssetlessBuild: ${{ parameters.isAssetlessBuild }} enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }} diff --git a/eng/common/core-templates/jobs/source-build.yml b/eng/common/core-templates/jobs/source-build.yml index 0b408a67bd51..d92860cba208 100644 --- a/eng/common/core-templates/jobs/source-build.yml +++ b/eng/common/core-templates/jobs/source-build.yml @@ -2,28 +2,19 @@ parameters: # This template adds arcade-powered source-build to CI. A job is created for each platform, as # well as an optional server job that completes when all platform jobs complete. - # The name of the "join" job for all source-build platforms. If set to empty string, the job is - # not included. Existing repo pipelines can use this job depend on all source-build jobs - # completing without maintaining a separate list of every single job ID: just depend on this one - # server job. By default, not included. Recommended name if used: 'Source_Build_Complete'. - allCompletedJobId: '' - # See /eng/common/core-templates/job/source-build.yml jobNamePrefix: 'Source_Build' # This is the default platform provided by Arcade, intended for use by a managed-only repo. defaultManagedPlatform: name: 'Managed' - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9' + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-10-amd64' # Defines the platforms on which to run build jobs. One job is created for each platform, and the # object in this array is sent to the job template as 'platform'. If no platforms are specified, # one job runs on 'defaultManagedPlatform'. platforms: [] - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: '' # If set to true and running on a non-public project, @@ -34,23 +25,12 @@ parameters: jobs: -- ${{ if ne(parameters.allCompletedJobId, '') }}: - - job: ${{ parameters.allCompletedJobId }} - displayName: Source-Build Complete - pool: server - dependsOn: - - ${{ each platform in parameters.platforms }}: - - ${{ parameters.jobNamePrefix }}_${{ platform.name }} - - ${{ if eq(length(parameters.platforms), 0) }}: - - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }} - - ${{ each platform in parameters.platforms }}: - template: /eng/common/core-templates/job/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ platform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} enableInternalSources: ${{ parameters.enableInternalSources }} - ${{ if eq(length(parameters.platforms), 0) }}: @@ -59,5 +39,4 @@ jobs: is1ESPipeline: ${{ parameters.is1ESPipeline }} jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ parameters.defaultManagedPlatform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} enableInternalSources: ${{ parameters.enableInternalSources }} diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index 864427d9694a..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -60,6 +60,11 @@ parameters: artifactNames: '' downloadArtifacts: true + - name: isAssetlessBuild + type: boolean + displayName: Is Assetless Build + default: false + # These parameters let the user customize the call to sdk-task.ps1 for publishing # symbols & general artifacts as well as for signing validation - name: symbolPublishingAdditionalParameters @@ -115,18 +120,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: windows.vs2022.amd64 + image: windows.vs2026preview.scout.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -159,18 +164,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -188,9 +193,6 @@ stages: buildId: $(AzDOBuildId) artifactName: PackageArtifacts checkDownloadedFiles: true - itemPattern: | - ** - !**/Microsoft.SourceBuild.Intermediate.*.nupkg # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -223,18 +225,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -284,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -305,6 +307,13 @@ stages: - task: NuGetAuthenticate@1 + # Populate internal runtime variables. + - template: /eng/common/templates/steps/enable-internal-sources.yml + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + + - template: /eng/common/templates/steps/enable-internal-runtimes.yml + # Darc is targeting 8.0, so make sure it's installed - task: UseDotNet@2 inputs: @@ -325,3 +334,6 @@ stages: -RequireDefaultChannels ${{ parameters.requireDefaultChannels }} -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' diff --git a/eng/common/core-templates/steps/cleanup-microbuild.yml b/eng/common/core-templates/steps/cleanup-microbuild.yml new file mode 100644 index 000000000000..c0fdcd3379d7 --- /dev/null +++ b/eng/common/core-templates/steps/cleanup-microbuild.yml @@ -0,0 +1,28 @@ +parameters: + # Enable cleanup tasks for MicroBuild + enableMicrobuild: false + # Enable cleanup tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - task: MicroBuildCleanup@1 + displayName: Execute Microbuild cleanup tasks + condition: and( + always(), + or( + and( + eq(variables['Agent.Os'], 'Windows_NT'), + in(variables['_SignType'], 'real', 'test') + ), + and( + ${{ eq(parameters.enableMicrobuildForMacAndLinux, true) }}, + ne(variables['Agent.Os'], 'Windows_NT'), + eq(variables['_SignType'], 'real') + ) + )) + continueOnError: ${{ parameters.continueOnError }} + env: + TeamName: $(_TeamName) diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml index 7f5b84c4cb82..c05f65027979 100644 --- a/eng/common/core-templates/steps/generate-sbom.yml +++ b/eng/common/core-templates/steps/generate-sbom.yml @@ -5,7 +5,7 @@ # IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. parameters: - PackageVersion: 9.0.0 + PackageVersion: 10.0.0 BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' PackageName: '.NET' ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom diff --git a/eng/common/core-templates/steps/get-delegation-sas.yml b/eng/common/core-templates/steps/get-delegation-sas.yml index 9db5617ea7de..d2901470a7f0 100644 --- a/eng/common/core-templates/steps/get-delegation-sas.yml +++ b/eng/common/core-templates/steps/get-delegation-sas.yml @@ -31,16 +31,7 @@ steps: # Calculate the expiration of the SAS token and convert to UTC $expiry = (Get-Date).AddHours(${{ parameters.expiryInHours }}).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") - # Temporarily work around a helix issue where SAS tokens with / in them will cause incorrect downloads - # of correlation payloads. https://github.com/dotnet/dnceng/issues/3484 - $sas = "" - do { - $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv - if ($LASTEXITCODE -ne 0) { - Write-Error "Failed to generate SAS token." - exit 1 - } - } while($sas.IndexOf('/') -ne -1) + $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv if ($LASTEXITCODE -ne 0) { Write-Error "Failed to generate SAS token." diff --git a/eng/common/core-templates/steps/install-microbuild.yml b/eng/common/core-templates/steps/install-microbuild.yml new file mode 100644 index 000000000000..553fce66b940 --- /dev/null +++ b/eng/common/core-templates/steps/install-microbuild.yml @@ -0,0 +1,110 @@ +parameters: + # Enable install tasks for MicroBuild + enableMicrobuild: false + # Enable install tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + # Determines whether the ESRP service connection information should be passed to the signing plugin. + # This overlaps with _SignType to some degree. We only need the service connection for real signing. + # It's important that the service connection not be passed to the MicroBuildSigningPlugin task in this place. + # Doing so will cause the service connection to be authorized for the pipeline, which isn't allowed and won't work for non-prod. + # Unfortunately, _SignType can't be used to exclude the use of the service connection in non-real sign scenarios. The + # variable is not available in template expression. _SignType has a very large proliferation across .NET, so replacing it is tough. + microbuildUseESRP: true + # Microbuild installation directory + microBuildOutputFolder: $(Agent.TempDirectory)/MicroBuild + + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, 'true') }}: + # Needed to download the MicroBuild plugin nupkgs on Mac and Linux when nuget.exe is unavailable + - task: UseDotNet@2 + displayName: Install .NET 8.0 SDK for MicroBuild Plugin + inputs: + packageType: sdk + version: 8.0.x + installationPath: ${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + set -euo pipefail + + # UseDotNet@2 prepends the dotnet executable path to the PATH variable, so we can call dotnet directly + version=$(dotnet --version) + cat << 'EOF' > ${{ parameters.microBuildOutputFolder }}/global.json + { + "sdk": { + "version": "$version", + "paths": [ + "${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild" + ], + "errorMessage": "The .NET SDK version $version is required to install the MicroBuild signing plugin." + } + } + EOF + displayName: 'Add global.json to MicroBuild Installation path' + workingDirectory: ${{ parameters.microBuildOutputFolder }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + REM Check if ESRP is disabled while SignType is real + if /I "${{ parameters.microbuildUseESRP }}"=="false" if /I "$(_SignType)"=="real" ( + echo Error: ESRP must be enabled when SignType is real. + exit /b 1 + ) + displayName: 'Validate ESRP usage (Windows)' + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT')) + - script: | + # Check if ESRP is disabled while SignType is real + if [ "${{ parameters.microbuildUseESRP }}" = "false" ] && [ "$(_SignType)" = "real" ]; then + echo "Error: ESRP must be enabled when SignType is real." + exit 1 + fi + displayName: 'Validate ESRP usage (Non-Windows)' + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + # Two different MB install steps. This is due to not being able to use the agent OS during + # YAML expansion, and Windows vs. Linux/Mac uses different service connections. However, + # we can avoid including the MB install step if not enabled at all. This avoids a bunch of + # extra pipeline authorizations, since most pipelines do not sign on non-Windows. + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea + ${{ else }}: + ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) + + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, true) }}: + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (non-Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + workingDirectory: ${{ parameters.microBuildOutputFolder }} + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: beb8cb23-b303-4c95-ab26-9e44bc958d39 + ${{ else }}: + ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index 0623ac6e1123..a9ea99ba6aaa 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -26,15 +26,18 @@ steps: # If the file exists - sensitive data for redaction will be sourced from it # (single entry per line, lines starting with '# ' are considered comments and skipped) arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs' - -BinlogToolVersion ${{parameters.BinlogToolVersion}} + -BinlogToolVersion '${{parameters.BinlogToolVersion}}' -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' '$(publishing-dnceng-devdiv-code-r-build-re)' - '$(MaestroAccessToken)' '$(dn-bot-all-orgs-artifact-feeds-rw)' '$(akams-client-id)' '$(microsoft-symbol-server-pat)' '$(symweb-symbol-server-pat)' + '$(dnceng-symbol-server-pat)' '$(dn-bot-all-orgs-build-rw-code-rw)' + '$(System.AccessToken)' ${{parameters.CustomSensitiveDataList}} continueOnError: true condition: always() @@ -45,6 +48,7 @@ steps: SourceFolder: '$(System.DefaultWorkingDirectory)/PostBuildLogs' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' + condition: always() - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml index 7846584d2a77..b9c86c18ae42 100644 --- a/eng/common/core-templates/steps/source-build.yml +++ b/eng/common/core-templates/steps/source-build.yml @@ -11,10 +11,6 @@ parameters: # for details. The entire object is described in the 'job' template for simplicity, even though # the usage of the properties on this object is split between the 'job' and 'steps' templates. platform: {} - - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: false steps: @@ -23,25 +19,12 @@ steps: set -x df -h - # If file changes are detected, set CopyWipIntoInnerSourceBuildRepo to copy the WIP changes into the inner source build repo. - internalRestoreArgs= - if ! git diff --quiet; then - internalRestoreArgs='/p:CopyWipIntoInnerSourceBuildRepo=true' - # The 'Copy WIP' feature of source build uses git stash to apply changes from the original repo. - # This only works if there is a username/email configured, which won't be the case in most CI runs. - git config --get user.email - if [ $? -ne 0 ]; then - git config user.email dn-bot@microsoft.com - git config user.name dn-bot - fi - fi - # If building on the internal project, the internal storage variable may be available (usually only if needed) # In that case, add variables to allow the download of internal runtimes if the specified versions are not found # in the default public locations. internalRuntimeDownloadArgs= if [ '$(dotnetbuilds-internal-container-read-token-base64)' != '$''(dotnetbuilds-internal-container-read-token-base64)' ]; then - internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey $(dotnetbuilds-internal-container-read-token-base64)' + internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey '$(dotnetbuilds-internal-container-read-token-base64)'' fi buildConfig=Release @@ -50,88 +33,33 @@ steps: buildConfig='$(_BuildConfig)' fi - officialBuildArgs= - if [ '${{ and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}' = 'True' ]; then - officialBuildArgs='/p:DotNetPublishUsingPipelines=true /p:OfficialBuildId=$(BUILD.BUILDNUMBER)' - fi - targetRidArgs= if [ '${{ parameters.platform.targetRID }}' != '' ]; then targetRidArgs='/p:TargetRid=${{ parameters.platform.targetRID }}' fi - runtimeOsArgs= - if [ '${{ parameters.platform.runtimeOS }}' != '' ]; then - runtimeOsArgs='/p:RuntimeOS=${{ parameters.platform.runtimeOS }}' - fi - - baseOsArgs= - if [ '${{ parameters.platform.baseOS }}' != '' ]; then - baseOsArgs='/p:BaseOS=${{ parameters.platform.baseOS }}' - fi - - publishArgs= - if [ '${{ parameters.platform.skipPublishValidation }}' != 'true' ]; then - publishArgs='--publish' - fi - - assetManifestFileName=SourceBuild_RidSpecific.xml - if [ '${{ parameters.platform.name }}' != '' ]; then - assetManifestFileName=SourceBuild_${{ parameters.platform.name }}.xml + portableBuildArgs= + if [ '${{ parameters.platform.portableBuild }}' != '' ]; then + portableBuildArgs='/p:PortableBuild=${{ parameters.platform.portableBuild }}' fi ${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \ --configuration $buildConfig \ - --restore --build --pack $publishArgs -bl \ + --restore --build --pack -bl \ + --source-build \ ${{ parameters.platform.buildArguments }} \ - $officialBuildArgs \ $internalRuntimeDownloadArgs \ - $internalRestoreArgs \ $targetRidArgs \ - $runtimeOsArgs \ - $baseOsArgs \ - /p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \ - /p:ArcadeBuildFromSource=true \ - /p:DotNetBuildSourceOnly=true \ - /p:DotNetBuildRepo=true \ - /p:AssetManifestFileName=$assetManifestFileName + $portableBuildArgs \ displayName: Build -# Upload build logs for diagnosis. -- task: CopyFiles@2 - displayName: Prepare BuildLogs staging directory - inputs: - SourceFolder: '$(System.DefaultWorkingDirectory)' - Contents: | - **/*.log - **/*.binlog - artifacts/sb/prebuilt-report/** - TargetFolder: '$(Build.StagingDirectory)/BuildLogs' - CleanTargetFolder: true - continueOnError: true - condition: succeededOrFailed() - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish BuildLogs - targetPath: '$(Build.StagingDirectory)/BuildLogs' + targetPath: artifacts/log/${{ coalesce(variables._BuildConfig, 'Release') }} artifactName: BuildLogs_SourceBuild_${{ parameters.platform.name }}_Attempt$(System.JobAttempt) continueOnError: true condition: succeededOrFailed() sbomEnabled: false # we don't need SBOM for logs - -# Manually inject component detection so that we can ignore the source build upstream cache, which contains -# a nupkg cache of input packages (a local feed). -# This path must match the upstream cache path in property 'CurrentRepoSourceBuiltNupkgCacheDir' -# in src\Microsoft.DotNet.Arcade.Sdk\tools\SourceBuild\SourceBuildArcade.targets -- template: /eng/common/core-templates/steps/component-governance.yml - parameters: - displayName: Component Detection (Exclude upstream cache) - is1ESPipeline: ${{ parameters.is1ESPipeline }} - ${{ if eq(length(parameters.componentGovernanceIgnoreDirectories), 0) }}: - componentGovernanceIgnoreDirectories: '$(System.DefaultWorkingDirectory)/artifacts/sb/src/artifacts/obj/source-built-upstream-cache' - ${{ else }}: - componentGovernanceIgnoreDirectories: ${{ join(',', parameters.componentGovernanceIgnoreDirectories) }} - disableComponentGovernance: ${{ eq(variables['System.TeamProject'], 'public') }} diff --git a/eng/common/core-templates/steps/source-index-stage1-publish.yml b/eng/common/core-templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..e9a694afa58e --- /dev/null +++ b/eng/common/core-templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,35 @@ +parameters: + sourceIndexUploadPackageVersion: 2.0.0-20250818.1 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20250818.1 + sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json + binlogPath: artifacts/log/Debug/Build.binlog + +steps: +- task: UseDotNet@2 + displayName: "Source Index: Use .NET 9 SDK" + inputs: + packageType: sdk + version: 9.0.x + installationPath: $(Agent.TempDirectory)/dotnet + workingDirectory: $(Agent.TempDirectory) + +- script: | + $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version ${{parameters.sourceIndexProcessBinlogPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version ${{parameters.sourceIndexUploadPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + displayName: "Source Index: Download netsourceindex Tools" + # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. + workingDirectory: $(Agent.TempDirectory) + +- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i ${{parameters.BinlogPath}} -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output + displayName: "Source Index: Process Binlog into indexable sln" + +- ${{ if and(ne(parameters.runAsPublic, 'true'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: AzureCLI@2 + displayName: "Source Index: Upload Source Index stage1 artifacts to Azure" + inputs: + azureSubscription: 'SourceDotNet Stage1 Publish' + addSpnToEnvironment: true + scriptType: 'ps' + scriptLocation: 'inlineScript' + inlineScript: | + $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 diff --git a/eng/common/cross/arm64/tizen/tizen.patch b/eng/common/cross/arm64/tizen/tizen.patch index af7c8be05906..2cebc547382e 100644 --- a/eng/common/cross/arm64/tizen/tizen.patch +++ b/eng/common/cross/arm64/tizen/tizen.patch @@ -5,5 +5,5 @@ diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-littleaarch64) --GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib/ld-linux-aarch64.so.1 ) ) +-GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-aarch64.so.1 ) ) +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-aarch64.so.1 ) ) diff --git a/eng/common/cross/build-android-rootfs.sh b/eng/common/cross/build-android-rootfs.sh index 7e9ba2b75ed3..fbd8d80848a6 100755 --- a/eng/common/cross/build-android-rootfs.sh +++ b/eng/common/cross/build-android-rootfs.sh @@ -6,10 +6,11 @@ usage() { echo "Creates a toolchain and sysroot used for cross-compiling for Android." echo - echo "Usage: $0 [BuildArch] [ApiLevel]" + echo "Usage: $0 [BuildArch] [ApiLevel] [--ndk NDKVersion]" echo echo "BuildArch is the target architecture of Android. Currently only arm64 is supported." echo "ApiLevel is the target Android API level. API levels usually match to Android releases. See https://source.android.com/source/build-numbers.html" + echo "NDKVersion is the version of Android NDK. The default is r21. See https://developer.android.com/ndk/downloads/revision_history" echo echo "By default, the toolchain and sysroot will be generated in cross/android-rootfs/toolchain/[BuildArch]. You can change this behavior" echo "by setting the TOOLCHAIN_DIR environment variable" @@ -25,10 +26,15 @@ __BuildArch=arm64 __AndroidArch=aarch64 __AndroidToolchain=aarch64-linux-android -for i in "$@" - do - lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" - case $lowerI in +while :; do + if [[ "$#" -le 0 ]]; then + break + fi + + i=$1 + + lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" + case $lowerI in -?|-h|--help) usage exit 1 @@ -43,6 +49,10 @@ for i in "$@" __AndroidArch=arm __AndroidToolchain=arm-linux-androideabi ;; + --ndk) + shift + __NDK_Version=$1 + ;; *[0-9]) __ApiLevel=$i ;; @@ -50,8 +60,17 @@ for i in "$@" __UnprocessedBuildArgs="$__UnprocessedBuildArgs $i" ;; esac + shift done +if [[ "$__NDK_Version" == "r21" ]] || [[ "$__NDK_Version" == "r22" ]]; then + __NDK_File_Arch_Spec=-x86_64 + __SysRoot=sysroot +else + __NDK_File_Arch_Spec= + __SysRoot=toolchains/llvm/prebuilt/linux-x86_64/sysroot +fi + # Obtain the location of the bash script to figure out where the root of the repo is. __ScriptBaseDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" @@ -78,6 +97,7 @@ fi echo "Target API level: $__ApiLevel" echo "Target architecture: $__BuildArch" +echo "NDK version: $__NDK_Version" echo "NDK location: $__NDK_Dir" echo "Target Toolchain location: $__ToolchainDir" @@ -85,8 +105,8 @@ echo "Target Toolchain location: $__ToolchainDir" if [ ! -d $__NDK_Dir ]; then echo Downloading the NDK into $__NDK_Dir mkdir -p $__NDK_Dir - wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux-x86_64.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip - unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip -d $__CrossDir + wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux$__NDK_File_Arch_Spec.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux.zip + unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux.zip -d $__CrossDir fi if [ ! -d $__lldb_Dir ]; then @@ -116,16 +136,11 @@ for path in $(wget -qO- https://packages.termux.dev/termux-main-21/dists/stable/ fi done -cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/sysroot/usr/" +cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/$__SysRoot/usr/" # Generate platform file for build.sh script to assign to __DistroRid echo "Generating platform file..." -echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/sysroot/android_platform - -echo "Now to build coreclr, libraries and installers; run:" -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory coreclr -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory libraries -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory installer +echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/$__SysRoot/android_platform + +echo "Now to build coreclr, libraries and host; run:" +echo ROOTFS_DIR=$(realpath $__ToolchainDir/$__SysRoot) ./build.sh clr+libs+host --cross --arch $__BuildArch diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 4b5e8d7166bd..8abfb71f7275 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -5,7 +5,7 @@ set -e usage() { echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir ]" - echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86" + echo "BuildArch can be: arm(default), arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64, x86" echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine" echo " for alpine can be specified with version: alpineX.YY or alpineedge" echo " for FreeBSD can be: freebsd13, freebsd14" @@ -15,6 +15,7 @@ usage() echo "llvmx[.y] - optional, LLVM version for LLVM related packages." echo "--skipunmount - optional, will skip the unmount of rootfs folder." echo "--skipsigcheck - optional, will skip package signature checks (allowing untrusted packages)." + echo "--skipemulation - optional, will skip qemu and debootstrap requirement when building environment for debian based systems." echo "--use-mirror - optional, use mirror URL to fetch resources, when available." echo "--jobs N - optional, restrict to N jobs." exit 1 @@ -52,28 +53,27 @@ __UbuntuPackages+=" symlinks" __UbuntuPackages+=" libicu-dev" __UbuntuPackages+=" liblttng-ust-dev" __UbuntuPackages+=" libunwind8-dev" -__UbuntuPackages+=" libnuma-dev" __AlpinePackages+=" gettext-dev" __AlpinePackages+=" icu-dev" __AlpinePackages+=" libunwind-dev" __AlpinePackages+=" lttng-ust-dev" __AlpinePackages+=" compiler-rt" -__AlpinePackages+=" numactl-dev" # runtime libraries' dependencies __UbuntuPackages+=" libcurl4-openssl-dev" __UbuntuPackages+=" libkrb5-dev" __UbuntuPackages+=" libssl-dev" __UbuntuPackages+=" zlib1g-dev" +__UbuntuPackages+=" libbrotli-dev" __AlpinePackages+=" curl-dev" __AlpinePackages+=" krb5-dev" __AlpinePackages+=" openssl-dev" __AlpinePackages+=" zlib-dev" -__FreeBSDBase="13.3-RELEASE" -__FreeBSDPkg="1.17.0" +__FreeBSDBase="13.4-RELEASE" +__FreeBSDPkg="1.21.3" __FreeBSDABI="13" __FreeBSDPackages="libunwind" __FreeBSDPackages+=" icu" @@ -91,18 +91,18 @@ __HaikuPackages="gcc_syslibs" __HaikuPackages+=" gcc_syslibs_devel" __HaikuPackages+=" gmp" __HaikuPackages+=" gmp_devel" -__HaikuPackages+=" icu66" -__HaikuPackages+=" icu66_devel" +__HaikuPackages+=" icu[0-9]+" +__HaikuPackages+=" icu[0-9]*_devel" __HaikuPackages+=" krb5" __HaikuPackages+=" krb5_devel" __HaikuPackages+=" libiconv" __HaikuPackages+=" libiconv_devel" -__HaikuPackages+=" llvm12_libunwind" -__HaikuPackages+=" llvm12_libunwind_devel" +__HaikuPackages+=" llvm[0-9]*_libunwind" +__HaikuPackages+=" llvm[0-9]*_libunwind_devel" __HaikuPackages+=" mpfr" __HaikuPackages+=" mpfr_devel" -__HaikuPackages+=" openssl" -__HaikuPackages+=" openssl_devel" +__HaikuPackages+=" openssl3" +__HaikuPackages+=" openssl3_devel" __HaikuPackages+=" zlib" __HaikuPackages+=" zlib_devel" @@ -128,10 +128,12 @@ __AlpineKeys=' 616adfeb:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0BFD1D4lIxQcsqEpQzU\npNCYM3aP1V/fxxVdT4DWvSI53JHTwHQamKdMWtEXetWVbP5zSROniYKFXd/xrD9X\n0jiGHey3lEtylXRIPxe5s+wXoCmNLcJVnvTcDtwx/ne2NLHxp76lyc25At+6RgE6\nADjLVuoD7M4IFDkAsd8UQ8zM0Dww9SylIk/wgV3ZkifecvgUQRagrNUdUjR56EBZ\nraQrev4hhzOgwelT0kXCu3snbUuNY/lU53CoTzfBJ5UfEJ5pMw1ij6X0r5S9IVsy\nKLWH1hiO0NzU2c8ViUYCly4Fe9xMTFc6u2dy/dxf6FwERfGzETQxqZvSfrRX+GLj\n/QZAXiPg5178hT/m0Y3z5IGenIC/80Z9NCi+byF1WuJlzKjDcF/TU72zk0+PNM/H\nKuppf3JT4DyjiVzNC5YoWJT2QRMS9KLP5iKCSThwVceEEg5HfhQBRT9M6KIcFLSs\nmFjx9kNEEmc1E8hl5IR3+3Ry8G5/bTIIruz14jgeY9u5jhL8Vyyvo41jgt9sLHR1\n/J1TxKfkgksYev7PoX6/ZzJ1ksWKZY5NFoDXTNYUgzFUTOoEaOg3BAQKadb3Qbbq\nXIrxmPBdgrn9QI7NCgfnAY3Tb4EEjs3ON/BNyEhUENcXOH6I1NbcuBQ7g9P73kE4\nVORdoc8MdJ5eoKBpO8Ww8HECAwEAAQ== 616ae350:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyduVzi1mWm+lYo2Tqt/0\nXkCIWrDNP1QBMVPrE0/ZlU2bCGSoo2Z9FHQKz/mTyMRlhNqTfhJ5qU3U9XlyGOPJ\npiM+b91g26pnpXJ2Q2kOypSgOMOPA4cQ42PkHBEqhuzssfj9t7x47ppS94bboh46\nxLSDRff/NAbtwTpvhStV3URYkxFG++cKGGa5MPXBrxIp+iZf9GnuxVdST5PGiVGP\nODL/b69sPJQNbJHVquqUTOh5Ry8uuD2WZuXfKf7/C0jC/ie9m2+0CttNu9tMciGM\nEyKG1/Xhk5iIWO43m4SrrT2WkFlcZ1z2JSf9Pjm4C2+HovYpihwwdM/OdP8Xmsnr\nDzVB4YvQiW+IHBjStHVuyiZWc+JsgEPJzisNY0Wyc/kNyNtqVKpX6dRhMLanLmy+\nf53cCSI05KPQAcGj6tdL+D60uKDkt+FsDa0BTAobZ31OsFVid0vCXtsbplNhW1IF\nHwsGXBTVcfXg44RLyL8Lk/2dQxDHNHzAUslJXzPxaHBLmt++2COa2EI1iWlvtznk\nOk9WP8SOAIj+xdqoiHcC4j72BOVVgiITIJNHrbppZCq6qPR+fgXmXa+sDcGh30m6\n9Wpbr28kLMSHiENCWTdsFij+NQTd5S47H7XTROHnalYDuF1RpS+DpQidT5tUimaT\nJZDr++FjKrnnijbyNF8b98UCAwEAAQ== 616db30d:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnpUpyWDWjlUk3smlWeA0\nlIMW+oJ38t92CRLHH3IqRhyECBRW0d0aRGtq7TY8PmxjjvBZrxTNDpJT6KUk4LRm\na6A6IuAI7QnNK8SJqM0DLzlpygd7GJf8ZL9SoHSH+gFsYF67Cpooz/YDqWrlN7Vw\ntO00s0B+eXy+PCXYU7VSfuWFGK8TGEv6HfGMALLjhqMManyvfp8hz3ubN1rK3c8C\nUS/ilRh1qckdbtPvoDPhSbTDmfU1g/EfRSIEXBrIMLg9ka/XB9PvWRrekrppnQzP\nhP9YE3x/wbFc5QqQWiRCYyQl/rgIMOXvIxhkfe8H5n1Et4VAorkpEAXdsfN8KSVv\nLSMazVlLp9GYq5SUpqYX3KnxdWBgN7BJoZ4sltsTpHQ/34SXWfu3UmyUveWj7wp0\nx9hwsPirVI00EEea9AbP7NM2rAyu6ukcm4m6ATd2DZJIViq2es6m60AE6SMCmrQF\nwmk4H/kdQgeAELVfGOm2VyJ3z69fQuywz7xu27S6zTKi05Qlnohxol4wVb6OB7qG\nLPRtK9ObgzRo/OPumyXqlzAi/Yvyd1ZQk8labZps3e16bQp8+pVPiumWioMFJDWV\nGZjCmyMSU8V6MB6njbgLHoyg2LCukCAeSjbPGGGYhnKLm1AKSoJh3IpZuqcKCk5C\n8CM1S15HxV78s9dFntEqIokCAwEAAQ== +66ba20fe:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtfB12w4ZgqsXWZDfUAV/\n6Y4aHUKIu3q4SXrNZ7CXF9nXoAVYrS7NAxJdAodsY3vPCN0g5O8DFXR+390LdOuQ\n+HsGKCc1k5tX5ZXld37EZNTNSbR0k+NKhd9h6X3u6wqPOx7SIKxwAQR8qeeFq4pP\nrt9GAGlxtuYgzIIcKJPwE0dZlcBCg+GnptCUZXp/38BP1eYC+xTXSL6Muq1etYfg\nodXdb7Yl+2h1IHuOwo5rjgY5kpY7GcAs8AjGk3lDD/av60OTYccknH0NCVSmPoXK\nvrxDBOn0LQRNBLcAfnTKgHrzy0Q5h4TNkkyTgxkoQw5ObDk9nnabTxql732yy9BY\ns+hM9+dSFO1HKeVXreYSA2n1ndF18YAvAumzgyqzB7I4pMHXq1kC/8bONMJxwSkS\nYm6CoXKyavp7RqGMyeVpRC7tV+blkrrUml0BwNkxE+XnwDRB3xDV6hqgWe0XrifD\nYTfvd9ScZQP83ip0r4IKlq4GMv/R5shcCRJSkSZ6QSGshH40JYSoiwJf5FHbj9ND\n7do0UAqebWo4yNx63j/wb2ULorW3AClv0BCFSdPsIrCStiGdpgJDBR2P2NZOCob3\nG9uMj+wJD6JJg2nWqNJxkANXX37Qf8plgzssrhrgOvB0fjjS7GYhfkfmZTJ0wPOw\nA8+KzFseBh4UFGgue78KwgkCAwEAAQ== ' __Keyring= __KeyringFile="/usr/share/keyrings/ubuntu-archive-keyring.gpg" __SkipSigCheck=0 +__SkipEmulation=0 __UseMirror=0 __UnprocessedBuildArgs= @@ -162,9 +164,13 @@ while :; do armel) __BuildArch=armel __UbuntuArch=armel - __UbuntuRepo="http://ftp.debian.org/debian/" - __CodeName=jessie + __UbuntuRepo="http://archive.debian.org/debian/" + __CodeName=buster __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __LLDB_Package="liblldb-6.0-dev" + __UbuntuPackages="${__UbuntuPackages// libomp-dev/}" + __UbuntuPackages="${__UbuntuPackages// libomp5/}" + __UbuntuSuites= ;; armv6) __BuildArch=armv6 @@ -180,6 +186,18 @@ while :; do __Keyring="--keyring $__KeyringFile" fi ;; + loongarch64) + __BuildArch=loongarch64 + __AlpineArch=loongarch64 + __QEMUArch=loongarch64 + __UbuntuArch=loong64 + __UbuntuSuites=unreleased + __LLDB_Package="liblldb-19-dev" + + if [[ "$__CodeName" == "sid" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; riscv64) __BuildArch=riscv64 __AlpineArch=riscv64 @@ -264,44 +282,21 @@ while :; do ;; xenial) # Ubuntu 16.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=xenial - fi - ;; - zesty) # Ubuntu 17.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=zesty - fi + __CodeName=xenial ;; bionic) # Ubuntu 18.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=bionic - fi + __CodeName=bionic ;; focal) # Ubuntu 20.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=focal - fi + __CodeName=focal ;; jammy) # Ubuntu 22.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=jammy - fi + __CodeName=jammy ;; noble) # Ubuntu 24.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=noble - fi - if [[ -n "$__LLDB_Package" ]]; then - __LLDB_Package="liblldb-18-dev" - fi - ;; - jessie) # Debian 8 - __CodeName=jessie - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __CodeName=noble + if [[ -z "$__LLDB_Package" ]]; then + __LLDB_Package="liblldb-19-dev" fi ;; stretch) # Debian 9 @@ -319,7 +314,7 @@ while :; do __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __UbuntuRepo="http://archive.debian.org/debian/" fi ;; bullseye) # Debian 11 @@ -340,10 +335,28 @@ while :; do ;; sid) # Debian sid __CodeName=sid - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __UbuntuSuites= - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + # Debian-Ports architectures need different values + case "$__UbuntuArch" in + amd64|arm64|armel|armhf|i386|mips64el|ppc64el|riscv64|s390x) + __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.debian.org/debian/" + fi + ;; + *) + __KeyringFile="/usr/share/keyrings/debian-ports-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; + esac + + if [[ -e "$__KeyringFile" ]]; then + __Keyring="--keyring $__KeyringFile" fi ;; tizen) @@ -370,7 +383,7 @@ while :; do ;; freebsd14) __CodeName=freebsd - __FreeBSDBase="14.0-RELEASE" + __FreeBSDBase="14.2-RELEASE" __FreeBSDABI="14" __SkipUnmount=1 ;; @@ -388,6 +401,9 @@ while :; do --skipsigcheck) __SkipSigCheck=1 ;; + --skipemulation) + __SkipEmulation=1 + ;; --rootfsdir|-rootfsdir) shift __RootfsDir="$1" @@ -420,16 +436,15 @@ case "$__AlpineVersion" in elif [[ "$__AlpineArch" == "x86" ]]; then __AlpineVersion=3.17 # minimum version that supports lldb-dev __AlpinePackages+=" llvm15-libs" - elif [[ "$__AlpineArch" == "riscv64" ]]; then + elif [[ "$__AlpineArch" == "riscv64" || "$__AlpineArch" == "loongarch64" ]]; then + __AlpineVersion=3.21 # minimum version that supports lldb-dev + __AlpinePackages+=" llvm19-libs" + elif [[ -n "$__AlpineMajorVersion" ]]; then + # use whichever alpine version is provided and select the latest toolchain libs __AlpineLlvmLibsLookup=1 - __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive) else __AlpineVersion=3.13 # 3.13 to maximize compatibility __AlpinePackages+=" llvm10-libs" - - if [[ "$__AlpineArch" == "armv7" ]]; then - __AlpinePackages="${__AlpinePackages//numactl-dev/}" - fi fi esac @@ -439,15 +454,6 @@ if [[ "$__AlpineVersion" =~ 3\.1[345] ]]; then __AlpinePackages="${__AlpinePackages/compiler-rt/compiler-rt-static}" fi -if [[ "$__BuildArch" == "armel" ]]; then - __LLDB_Package="lldb-3.5-dev" -fi - -if [[ "$__CodeName" == "xenial" && "$__UbuntuArch" == "armhf" ]]; then - # libnuma-dev is not available on armhf for xenial - __UbuntuPackages="${__UbuntuPackages//libnuma-dev/}" -fi - __UbuntuPackages+=" ${__LLDB_Package:-}" if [[ -z "$__UbuntuRepo" ]]; then @@ -496,7 +502,7 @@ if [[ "$__CodeName" == "alpine" ]]; then arch="$(uname -m)" ensureDownloadTool - + if [[ "$__hasWget" == 1 ]]; then wget -P "$__ApkToolsDir" "https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v$__ApkToolsVersion/$arch/apk.static" else @@ -512,11 +518,6 @@ if [[ "$__CodeName" == "alpine" ]]; then echo "$__ApkToolsSHA512SUM $__ApkToolsDir/apk.static" | sha512sum -c chmod +x "$__ApkToolsDir/apk.static" - if [[ -f "/usr/bin/qemu-$__QEMUArch-static" ]]; then - mkdir -p "$__RootfsDir"/usr/bin - cp -v "/usr/bin/qemu-$__QEMUArch-static" "$__RootfsDir/usr/bin" - fi - if [[ "$__AlpineVersion" == "edge" ]]; then version=edge else @@ -536,6 +537,10 @@ if [[ "$__CodeName" == "alpine" ]]; then __ApkSignatureArg="--keys-dir $__ApkKeysDir" fi + if [[ "$__SkipEmulation" == "1" ]]; then + __NoEmulationArg="--no-scripts" + fi + # initialize DB # shellcheck disable=SC2086 "$__ApkToolsDir/apk.static" \ @@ -557,7 +562,7 @@ if [[ "$__CodeName" == "alpine" ]]; then "$__ApkToolsDir/apk.static" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \ - -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" \ + -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" $__NoEmulationArg \ add $__AlpinePackages rm -r "$__ApkToolsDir" @@ -573,7 +578,7 @@ elif [[ "$__CodeName" == "freebsd" ]]; then curl -SL "https://download.freebsd.org/ftp/releases/${__FreeBSDArch}/${__FreeBSDMachineArch}/${__FreeBSDBase}/base.txz" | tar -C "$__RootfsDir" -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version fi echo "ABI = \"FreeBSD:${__FreeBSDABI}:${__FreeBSDMachineArch}\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > "${__RootfsDir}"/usr/local/etc/pkg.conf - echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf + echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf mkdir -p "$__RootfsDir"/tmp # get and build package manager if [[ "$__hasWget" == 1 ]]; then @@ -681,7 +686,7 @@ elif [[ "$__CodeName" == "haiku" ]]; then ensureDownloadTool - echo "Downloading Haiku package tool" + echo "Downloading Haiku package tools" git clone https://github.com/haiku/haiku-toolchains-ubuntu --depth 1 "$__RootfsDir/tmp/script" if [[ "$__hasWget" == 1 ]]; then wget -O "$__RootfsDir/tmp/download/hosttools.zip" "$("$__RootfsDir/tmp/script/fetch.sh" --hosttools)" @@ -691,34 +696,42 @@ elif [[ "$__CodeName" == "haiku" ]]; then unzip -o "$__RootfsDir/tmp/download/hosttools.zip" -d "$__RootfsDir/tmp/bin" - DepotBaseUrl="https://depot.haiku-os.org/__api/v2/pkg/get-pkg" - HpkgBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuPortsBaseUrl="https://eu.hpkg.haiku-os.org/haikuports/master/$__HaikuArch/current" + + echo "Downloading HaikuPorts package repository index..." + if [[ "$__hasWget" == 1 ]]; then + wget -P "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + else + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + fi - # Download Haiku packages echo "Downloading Haiku packages" read -ra array <<<"$__HaikuPackages" for package in "${array[@]}"; do echo "Downloading $package..." - # API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60 - # The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598 + hpkgFilename="$(LD_LIBRARY_PATH="$__RootfsDir/tmp/bin" "$__RootfsDir/tmp/bin/package_repo" list -f "$__RootfsDir/tmp/download/repo" | + grep -E "${package}-" | sort -V | tail -n 1 | xargs)" + if [ -z "$hpkgFilename" ]; then + >&2 echo "ERROR: package $package missing." + exit 1 + fi + echo "Resolved filename: $hpkgFilename..." + hpkgDownloadUrl="$HaikuPortsBaseUrl/packages/$hpkgFilename" if [[ "$__hasWget" == 1 ]]; then - hpkgDownloadUrl="$(wget -qO- --post-data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" wget -P "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" else - hpkgDownloadUrl="$(curl -sSL -XPOST --data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" fi done for package in haiku haiku_devel; do echo "Downloading $package..." if [[ "$__hasWget" == 1 ]]; then - hpkgVersion="$(wget -qO- "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - wget -P "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(wget -qO- "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + wget -P "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" else - hpkgVersion="$(curl -sSL "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(curl -sSL "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" fi done @@ -744,25 +757,67 @@ elif [[ "$__CodeName" == "haiku" ]]; then popd rm -rf "$__RootfsDir/tmp" elif [[ -n "$__CodeName" ]]; then + __Suites="$__CodeName $(for suite in $__UbuntuSuites; do echo -n "$__CodeName-$suite "; done)" + + if [[ "$__SkipEmulation" == "1" ]]; then + if [[ -z "$AR" ]]; then + if command -v ar &>/dev/null; then + AR="$(command -v ar)" + elif command -v llvm-ar &>/dev/null; then + AR="$(command -v llvm-ar)" + else + echo "Unable to find ar or llvm-ar on PATH, add them to PATH or set AR environment variable pointing to the available AR tool" + exit 1 + fi + fi + + PYTHON=${PYTHON_EXECUTABLE:-python3} + + # shellcheck disable=SC2086,SC2046 + echo running "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + + # shellcheck disable=SC2086,SC2046 + "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + exit 0 + fi + + __UpdateOptions= if [[ "$__SkipSigCheck" == "0" ]]; then __Keyring="$__Keyring --force-check-gpg" + else + __Keyring= + __UpdateOptions="--allow-unauthenticated --allow-insecure-repositories" fi # shellcheck disable=SC2086 echo running debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" - debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" + # shellcheck disable=SC2086 + if ! debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo"; then + echo "debootstrap failed! dumping debootstrap.log" + cat "$__RootfsDir/debootstrap/debootstrap.log" + exit 1 + fi + + rm -rf "$__RootfsDir"/etc/apt/*.{sources,list} "$__RootfsDir"/etc/apt/sources.list.d mkdir -p "$__RootfsDir/etc/apt/sources.list.d/" + + # shellcheck disable=SC2086 cat > "$__RootfsDir/etc/apt/sources.list.d/$__CodeName.sources" < token2) - (token1 < token2) + else: + return -1 if isinstance(token1, str) else 1 + + return len(tokens1) - len(tokens2) + +def compare_debian_versions(version1, version2): + """Compare two Debian package versions.""" + epoch1, upstream1, revision1 = parse_debian_version(version1) + epoch2, upstream2, revision2 = parse_debian_version(version2) + + if epoch1 != epoch2: + return epoch1 - epoch2 + + result = compare_upstream_version(upstream1, upstream2) + if result != 0: + return result + + return compare_upstream_version(revision1, revision2) + +def resolve_dependencies(packages, aliases, desired_packages): + """Recursively resolves dependencies for the desired packages.""" + resolved = [] + to_process = deque(desired_packages) + + while to_process: + current = to_process.popleft() + resolved_package = current if current in packages else aliases.get(current, [None])[0] + + if not resolved_package: + print(f"Error: Package '{current}' was not found in the available packages.") + sys.exit(1) + + if resolved_package not in resolved: + resolved.append(resolved_package) + + deps = packages.get(resolved_package, {}).get("Depends", "") + if deps: + deps = [dep.split(' ')[0] for dep in deps.split(', ') if dep] + for dep in deps: + if dep not in resolved and dep not in to_process and dep in packages: + to_process.append(dep) + + return resolved + +def parse_package_index(content): + """Parses the Packages.gz file and returns package information.""" + packages = {} + aliases = {} + entries = re.split(r'\n\n+', content) + + for entry in entries: + fields = dict(re.findall(r'^(\S+): (.+)$', entry, re.MULTILINE)) + if "Package" in fields: + package_name = fields["Package"] + version = fields.get("Version") + filename = fields.get("Filename") + depends = fields.get("Depends") + provides = fields.get("Provides", None) + + # Only update if package_name is not in packages or if the new version is higher + if package_name not in packages or compare_debian_versions(version, packages[package_name]["Version"]) > 0: + packages[package_name] = { + "Version": version, + "Filename": filename, + "Depends": depends + } + + # Update aliases if package provides any alternatives + if provides: + provides_list = [x.strip() for x in provides.split(",")] + for alias in provides_list: + # Strip version specifiers + alias_name = re.sub(r'\s*\(=.*\)', '', alias) + if alias_name not in aliases: + aliases[alias_name] = [] + if package_name not in aliases[alias_name]: + aliases[alias_name].append(package_name) + + return packages, aliases + +def install_packages(mirror, packages_info, aliases, tmp_dir, extract_dir, ar_tool, desired_packages): + """Downloads .deb files and extracts them.""" + resolved_packages = resolve_dependencies(packages_info, aliases, desired_packages) + print(f"Resolved packages (including dependencies): {resolved_packages}") + + packages_to_download = {} + + for pkg in resolved_packages: + if pkg in packages_info: + packages_to_download[pkg] = packages_info[pkg] + + if pkg in aliases: + for alias in aliases[pkg]: + if alias in packages_info: + packages_to_download[alias] = packages_info[alias] + + asyncio.run(download_deb_files_parallel(mirror, packages_to_download, tmp_dir)) + + package_to_deb_file_map = {} + for pkg in resolved_packages: + pkg_info = packages_info.get(pkg) + if pkg_info: + deb_filename = pkg_info.get("Filename") + if deb_filename: + deb_file_path = os.path.join(tmp_dir, os.path.basename(deb_filename)) + package_to_deb_file_map[pkg] = deb_file_path + + for pkg in reversed(resolved_packages): + deb_file = package_to_deb_file_map.get(pkg) + if deb_file and os.path.exists(deb_file): + extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool) + + print("All done!") + +def extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool): + """Extract .deb file contents""" + + os.makedirs(extract_dir, exist_ok=True) + + with tempfile.TemporaryDirectory(dir=tmp_dir) as tmp_subdir: + result = subprocess.run(f"{ar_tool} t {os.path.abspath(deb_file)}", cwd=tmp_subdir, check=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + tar_filename = None + for line in result.stdout.decode().splitlines(): + if line.startswith("data.tar"): + tar_filename = line.strip() + break + + if not tar_filename: + raise FileNotFoundError(f"Could not find 'data.tar.*' in {deb_file}.") + + tar_file_path = os.path.join(tmp_subdir, tar_filename) + print(f"Extracting {tar_filename} from {deb_file}..") + + subprocess.run(f"{ar_tool} p {os.path.abspath(deb_file)} {tar_filename} > {tar_file_path}", check=True, shell=True) + + file_extension = os.path.splitext(tar_file_path)[1].lower() + + if file_extension == ".xz": + mode = "r:xz" + elif file_extension == ".gz": + mode = "r:gz" + elif file_extension == ".zst": + # zstd is not supported by standard library yet + decompressed_tar_path = tar_file_path.replace(".zst", "") + with open(tar_file_path, "rb") as zst_file, open(decompressed_tar_path, "wb") as decompressed_file: + dctx = zstandard.ZstdDecompressor() + dctx.copy_stream(zst_file, decompressed_file) + + tar_file_path = decompressed_tar_path + mode = "r" + else: + raise ValueError(f"Unsupported compression format: {file_extension}") + + with tarfile.open(tar_file_path, mode) as tar: + tar.extractall(path=extract_dir, filter='fully_trusted') + +def finalize_setup(rootfsdir): + lib_dir = os.path.join(rootfsdir, 'lib') + usr_lib_dir = os.path.join(rootfsdir, 'usr', 'lib') + + if os.path.exists(lib_dir): + if os.path.islink(lib_dir): + os.remove(lib_dir) + else: + os.makedirs(usr_lib_dir, exist_ok=True) + + for item in os.listdir(lib_dir): + src = os.path.join(lib_dir, item) + dest = os.path.join(usr_lib_dir, item) + + if os.path.isdir(src): + shutil.copytree(src, dest, dirs_exist_ok=True) + else: + shutil.copy2(src, dest) + + shutil.rmtree(lib_dir) + + os.symlink(usr_lib_dir, lib_dir) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Generate rootfs for .NET runtime on Debian-like OS") + parser.add_argument("--distro", required=False, help="Distro name (e.g., debian, ubuntu, etc.)") + parser.add_argument("--arch", required=True, help="Architecture (e.g., amd64, loong64, etc.)") + parser.add_argument("--rootfsdir", required=True, help="Destination directory.") + parser.add_argument('--suite', required=True, action='append', help='Specify one or more repository suites to collect index data.') + parser.add_argument("--mirror", required=False, help="Mirror (e.g., http://ftp.debian.org/debian-ports etc.)") + parser.add_argument("--artool", required=False, default="ar", help="ar tool to extract debs (e.g., ar, llvm-ar etc.)") + parser.add_argument("packages", nargs="+", help="List of package names to be installed.") + + args = parser.parse_args() + + if args.mirror is None: + if args.distro == "ubuntu": + args.mirror = "http://archive.ubuntu.com/ubuntu" if args.arch in ["amd64", "i386"] else "http://ports.ubuntu.com/ubuntu-ports" + elif args.distro == "debian": + args.mirror = "http://ftp.debian.org/debian-ports" + else: + raise Exception("Unsupported distro") + + DESIRED_PACKAGES = args.packages + [ # base packages + "dpkg", + "busybox", + "libc-bin", + "base-files", + "base-passwd", + "debianutils" + ] + + print(f"Creating rootfs. rootfsdir: {args.rootfsdir}, distro: {args.distro}, arch: {args.arch}, suites: {args.suite}, mirror: {args.mirror}") + + package_index_content = asyncio.run(download_package_index_parallel(args.mirror, args.arch, args.suite)) + + packages_info, aliases = parse_package_index(package_index_content) + + with tempfile.TemporaryDirectory() as tmp_dir: + install_packages(args.mirror, packages_info, aliases, tmp_dir, args.rootfsdir, args.artool, DESIRED_PACKAGES) + + finalize_setup(args.rootfsdir) diff --git a/eng/common/cross/tizen-build-rootfs.sh b/eng/common/cross/tizen-build-rootfs.sh old mode 100644 new mode 100755 diff --git a/eng/common/cross/tizen-fetch.sh b/eng/common/cross/tizen-fetch.sh old mode 100644 new mode 100755 index 28936ceef3a7..37c3a61f1de8 --- a/eng/common/cross/tizen-fetch.sh +++ b/eng/common/cross/tizen-fetch.sh @@ -156,13 +156,8 @@ fetch_tizen_pkgs() done } -if [ "$TIZEN_ARCH" == "riscv64" ]; then - BASE="Tizen-Base-RISCV" - UNIFIED="Tizen-Unified-RISCV" -else - BASE="Tizen-Base" - UNIFIED="Tizen-Unified" -fi +BASE="Tizen-Base" +UNIFIED="Tizen-Unified" Inform "Initialize ${TIZEN_ARCH} base" fetch_tizen_pkgs_init standard $BASE diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake index 9a7ecfbd42c5..0ff85cf0367e 100644 --- a/eng/common/cross/toolchain.cmake +++ b/eng/common/cross/toolchain.cmake @@ -67,6 +67,13 @@ elseif(TARGET_ARCH_NAME STREQUAL "armv6") else() set(TOOLCHAIN "arm-linux-gnueabihf") endif() +elseif(TARGET_ARCH_NAME STREQUAL "loongarch64") + set(CMAKE_SYSTEM_PROCESSOR "loongarch64") + if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/loongarch64-alpine-linux-musl) + set(TOOLCHAIN "loongarch64-alpine-linux-musl") + else() + set(TOOLCHAIN "loongarch64-linux-gnu") + endif() elseif(TARGET_ARCH_NAME STREQUAL "ppc64le") set(CMAKE_SYSTEM_PROCESSOR ppc64le) if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/powerpc64le-alpine-linux-musl) @@ -118,7 +125,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86") set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu") endif() else() - message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, ppc64le, riscv64, s390x, x64 and x86 are supported!") + message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64 and x86 are supported!") endif() if(DEFINED ENV{TOOLCHAIN}) @@ -148,6 +155,25 @@ if(TIZEN) include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++/${TIZEN_TOOLCHAIN}) endif() +function(locate_toolchain_exec exec var) + set(TOOLSET_PREFIX ${TOOLCHAIN}-) + string(TOUPPER ${exec} EXEC_UPPERCASE) + if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") + set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) + return() + endif() + + find_program(EXEC_LOCATION_${exec} + NAMES + "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" + "${TOOLSET_PREFIX}${exec}") + + if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") + message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") + endif() + set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) +endfunction() + if(ANDROID) if(TARGET_ARCH_NAME STREQUAL "arm") set(ANDROID_ABI armeabi-v7a) @@ -178,66 +204,24 @@ elseif(FREEBSD) set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=lld") elseif(ILLUMOS) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") + set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") include_directories(SYSTEM ${CROSS_ROOTFS}/include) - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") - locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") elseif(HAIKU) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") set(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};${CROSS_ROOTFS}/cross-tools-x86_64/bin") - - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") - # let CMake set up the correct search paths include(Platform/Haiku) else() @@ -307,7 +291,7 @@ endif() # Specify compile options -if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) +if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|loongarch64|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN}) diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index 36dbd45e1ce8..e889f439b8dc 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -68,7 +68,7 @@ function InstallDarcCli { fi fi - local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" + local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" echo "Installing Darc CLI version $darcVersion..." echo "You may need to restart your command shell if this is the first dotnet tool you have installed." diff --git a/eng/common/dotnet.cmd b/eng/common/dotnet.cmd new file mode 100644 index 000000000000..527fa4bb38fb --- /dev/null +++ b/eng/common/dotnet.cmd @@ -0,0 +1,7 @@ +@echo off + +:: This script is used to install the .NET SDK. +:: It will also invoke the SDK with any provided arguments. + +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0dotnet.ps1""" %*" +exit /b %ErrorLevel% diff --git a/eng/common/dotnet.ps1 b/eng/common/dotnet.ps1 new file mode 100644 index 000000000000..45e5676c9ebd --- /dev/null +++ b/eng/common/dotnet.ps1 @@ -0,0 +1,11 @@ +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +. $PSScriptRoot\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true + +# Invoke acquired SDK with args if they are provided +if ($args.count -gt 0) { + $env:DOTNET_NOLOGO=1 + & "$dotnetRoot\dotnet.exe" $args +} diff --git a/eng/common/dotnet.sh b/eng/common/dotnet.sh new file mode 100755 index 000000000000..2ef68235675f --- /dev/null +++ b/eng/common/dotnet.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +source="${BASH_SOURCE[0]}" +# resolve $SOURCE until the file is no longer a symlink +while [[ -h $source ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +source $scriptroot/tools.sh +InitializeDotNetCli true # install + +# Invoke acquired SDK with args if they are provided +if [[ $# > 0 ]]; then + __dotnetDir=${_InitializeDotNetCli} + dotnetPath=${__dotnetDir}/dotnet + ${dotnetPath} "$@" +fi diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1 index 524aaa57f2b7..fa1cdc2b3007 100644 --- a/eng/common/generate-locproject.ps1 +++ b/eng/common/generate-locproject.ps1 @@ -33,15 +33,27 @@ $jsonTemplateFiles | ForEach-Object { $jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern +$wxlFilesV3 = @() +$wxlFilesV5 = @() $wxlFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\.+\.wxl" -And -Not( $_.Directory.Name -Match "\d{4}" ) } # localized files live in four digit lang ID directories; this excludes them if (-not $wxlFiles) { $wxlEnFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\1033\\.+\.wxl" } # pick up en files (1033 = en) specifically so we can copy them to use as the neutral xlf files if ($wxlEnFiles) { - $wxlFiles = @() - $wxlEnFiles | ForEach-Object { - $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" - $wxlFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru - } + $wxlFiles = @() + $wxlEnFiles | ForEach-Object { + $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" + $content = Get-Content $_.FullName -Raw + + # Split files on schema to select different parser settings in the generated project. + if ($content -like "*http://wixtoolset.org/schemas/v4/wxl*") + { + $wxlFilesV5 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + elseif ($content -like "*http://schemas.microsoft.com/wix/2006/localization*") + { + $wxlFilesV3 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + } } } @@ -114,7 +126,32 @@ $locJson = @{ CloneLanguageSet = "WiX_CloneLanguages" LssFiles = @( "wxl_loc.lss" ) LocItems = @( - $wxlFiles | ForEach-Object { + $wxlFilesV3 | ForEach-Object { + $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" + $continue = $true + foreach ($exclusion in $exclusions.Exclusions) { + if ($_.FullName.Contains($exclusion)) { + $continue = $false + } + } + $sourceFile = ($_.FullName | Resolve-Path -Relative) + if ($continue) + { + return @{ + SourceFile = $sourceFile + CopyOption = "LangIDOnPath" + OutputPath = $outputPath + } + } + } + ) + }, + @{ + LanguageSet = $LanguageSet + CloneLanguageSet = "WiX_CloneLanguages" + LssFiles = @( "P210WxlSchemaV4.lss" ) + LocItems = @( + $wxlFilesV5 | ForEach-Object { $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" $continue = $true foreach ($exclusion in $exclusions.Exclusions) { diff --git a/eng/common/generate-sbom-prep.sh b/eng/common/generate-sbom-prep.sh old mode 100644 new mode 100755 diff --git a/eng/common/native/install-dependencies.sh b/eng/common/native/install-dependencies.sh new file mode 100755 index 000000000000..477a44f335be --- /dev/null +++ b/eng/common/native/install-dependencies.sh @@ -0,0 +1,62 @@ +#!/bin/sh + +set -e + +# This is a simple script primarily used for CI to install necessary dependencies +# +# Usage: +# +# ./install-dependencies.sh + +os="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + +if [ -z "$os" ]; then + . "$(dirname "$0")"/init-os-and-arch.sh +fi + +case "$os" in + linux) + if [ -e /etc/os-release ]; then + . /etc/os-release + fi + + if [ "$ID" = "debian" ] || [ "$ID_LIKE" = "debian" ]; then + apt update + + apt install -y build-essential gettext locales cmake llvm clang lld lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev \ + libssl-dev libkrb5-dev pigz cpio + + localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 + elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ] || [ "$ID" = "azurelinux" ]; then + pkg_mgr="$(command -v tdnf 2>/dev/null || command -v dnf)" + $pkg_mgr install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio + elif [ "$ID" = "alpine" ]; then + apk add build-base cmake bash curl clang llvm-dev lld lldb krb5-dev lttng-ust-dev icu-dev openssl-dev pigz cpio + else + echo "Unsupported distro. distro: $ID" + exit 1 + fi + ;; + + osx|maccatalyst|ios|iossimulator|tvos|tvossimulator) + echo "Installed xcode version: $(xcode-select -p)" + + export HOMEBREW_NO_INSTALL_CLEANUP=1 + export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 + # Skip brew update for now, see https://github.com/actions/setup-python/issues/577 + # brew update --preinstall + brew bundle --no-upgrade --file=- < Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." + Write-Host " -excludeCIBinaryLog When running on CI, allow no binary log (short: -nobl)" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." } @@ -34,10 +39,11 @@ function Print-Usage() { function Build([string]$target) { $logSuffix = if ($target -eq 'Execute') { '' } else { ".$target" } $log = Join-Path $LogDir "$task$logSuffix.binlog" + $binaryLogArg = if ($binaryLog) { "/bl:$log" } else { "" } $outputPath = Join-Path $ToolsetDir "$task\" MSBuild $taskProject ` - /bl:$log ` + $binaryLogArg ` /t:$target ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` @@ -64,7 +70,7 @@ try { $GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty } if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) { - $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.12.0" -MemberType NoteProperty + $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "18.0.0" -MemberType NoteProperty } if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") { $xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true diff --git a/eng/common/sdk-task.sh b/eng/common/sdk-task.sh new file mode 100755 index 000000000000..3270f83fa9a7 --- /dev/null +++ b/eng/common/sdk-task.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash + +show_usage() { + echo "Common settings:" + echo " --task Name of Arcade task (name of a project in SdkTasks directory of the Arcade SDK package)" + echo " --restore Restore dependencies" + echo " --verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]" + echo " --help Print help and exit" + echo "" + + echo "Advanced settings:" + echo " --excludeCIBinarylog Don't output binary log (short: -nobl)" + echo " --noWarnAsError Do not warn as error" + echo "" + echo "Command line arguments not listed above are passed thru to msbuild." +} + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +Build() { + local target=$1 + local log_suffix="" + [[ "$target" != "Execute" ]] && log_suffix=".$target" + local log="$log_dir/$task$log_suffix.binlog" + local binaryLogArg="" + [[ $binary_log == true ]] && binaryLogArg="/bl:$log" + local output_path="$toolset_dir/$task/" + + MSBuild "$taskProject" \ + $binaryLogArg \ + /t:"$target" \ + /p:Configuration="$configuration" \ + /p:RepoRoot="$repo_root" \ + /p:BaseIntermediateOutputPath="$output_path" \ + /v:"$verbosity" \ + $properties +} + +binary_log=true +configuration="Debug" +verbosity="minimal" +exclude_ci_binary_log=false +restore=false +help=false +properties='' +warnAsError=true + +while (($# > 0)); do + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + case $lowerI in + --task) + task=$2 + shift 2 + ;; + --restore) + restore=true + shift 1 + ;; + --verbosity) + verbosity=$2 + shift 2 + ;; + --excludecibinarylog|--nobl) + binary_log=false + exclude_ci_binary_log=true + shift 1 + ;; + --noWarnAsError) + warnAsError=false + shift 1 + ;; + --help) + help=true + shift 1 + ;; + *) + properties="$properties $1" + shift 1 + ;; + esac +done + +ci=true + +if $help; then + show_usage + exit 0 +fi + +. "$scriptroot/tools.sh" +InitializeToolset + +if [[ -z "$task" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'MissingTask' -Message "Missing required parameter '-task '" + ExitWithExitCode 1 +fi + +taskProject=$(GetSdkTaskProject "$task") +if [[ ! -e "$taskProject" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'UnknownTask' -Message "Unknown task: $task" + ExitWithExitCode 1 +fi + +if $restore; then + Build "Restore" +fi + +Build "Execute" + + +ExitWithExitCode 0 diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config index 4585cfd6bba1..e5f543ea68c2 100644 --- a/eng/common/sdl/packages.config +++ b/eng/common/sdl/packages.config @@ -1,4 +1,4 @@ - + diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml index 81ea7a261f2d..92a0664f5647 100644 --- a/eng/common/templates-official/job/job.yml +++ b/eng/common/templates-official/job/job.yml @@ -31,6 +31,7 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked continueOnError: true - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - output: pipelineArtifact @@ -39,6 +40,7 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked sbomEnabled: false # we don't need SBOM for logs - ${{ if eq(parameters.enablePublishBuildArtifacts, true) }}: @@ -46,7 +48,7 @@ jobs: displayName: Publish Logs PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' publishLocation: Container - ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() sbomEnabled: false # we don't need SBOM for logs diff --git a/eng/common/templates-official/steps/publish-build-artifacts.yml b/eng/common/templates-official/steps/publish-build-artifacts.yml index 100a3fc98493..fcf6637b2ebc 100644 --- a/eng/common/templates-official/steps/publish-build-artifacts.yml +++ b/eng/common/templates-official/steps/publish-build-artifacts.yml @@ -24,6 +24,10 @@ parameters: - name: is1ESPipeline type: boolean default: true + +- name: retryCountOnTaskFailure + type: string + default: 10 steps: - ${{ if ne(parameters.is1ESPipeline, true) }}: @@ -38,4 +42,5 @@ steps: PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: ArtifactName: ${{ parameters.artifactName }} - + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates-official/steps/source-index-stage1-publish.yml b/eng/common/templates-official/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..9b8b80942b5c --- /dev/null +++ b/eng/common/templates-official/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: true + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 5bdd3dd85fd2..238fa0818f7b 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -46,6 +46,7 @@ jobs: artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: @@ -56,6 +57,7 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked sbomEnabled: false # we don't need SBOM for logs - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: @@ -66,7 +68,7 @@ jobs: displayName: Publish Logs pathToPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' publishLocation: Container - artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() diff --git a/eng/common/templates/steps/publish-build-artifacts.yml b/eng/common/templates/steps/publish-build-artifacts.yml index 6428a98dfef6..605e602e94d1 100644 --- a/eng/common/templates/steps/publish-build-artifacts.yml +++ b/eng/common/templates/steps/publish-build-artifacts.yml @@ -25,6 +25,10 @@ parameters: type: string default: 'Container' +- name: retryCountOnTaskFailure + type: string + default: 10 + steps: - ${{ if eq(parameters.is1ESPipeline, true) }}: - 'eng/common/templates cannot be referenced from a 1ES managed template': error @@ -37,4 +41,6 @@ steps: PublishLocation: ${{ parameters.publishLocation }} PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: - ArtifactName: ${{ parameters.artifactName }} \ No newline at end of file + ArtifactName: ${{ parameters.artifactName }} + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates/steps/source-index-stage1-publish.yml b/eng/common/templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..182cec33a7bb --- /dev/null +++ b/eng/common/templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: false + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates/steps/vmr-sync.yml b/eng/common/templates/steps/vmr-sync.yml new file mode 100644 index 000000000000..eb619c502683 --- /dev/null +++ b/eng/common/templates/steps/vmr-sync.yml @@ -0,0 +1,186 @@ +### These steps synchronize new code from product repositories into the VMR (https://github.com/dotnet/dotnet). +### They initialize the darc CLI and pull the new updates. +### Changes are applied locally onto the already cloned VMR (located in $vmrPath). + +parameters: +- name: targetRef + displayName: Target revision in dotnet/ to synchronize + type: string + default: $(Build.SourceVersion) + +- name: vmrPath + displayName: Path where the dotnet/dotnet is checked out to + type: string + default: $(Agent.BuildDirectory)/vmr + +- name: additionalSyncs + displayName: Optional list of package names whose repo's source will also be synchronized in the local VMR, e.g. NuGet.Protocol + type: object + default: [] + +steps: +- checkout: vmr + displayName: Clone dotnet/dotnet + path: vmr + clean: true + +- checkout: self + displayName: Clone $(Build.Repository.Name) + path: repo + fetchDepth: 0 + +# This step is needed so that when we get a detached HEAD / shallow clone, +# we still pull the commit into the temporary repo clone to use it during the sync. +# Also unshallow the clone so that forwardflow command would work. +- script: | + git branch repo-head + git rev-parse HEAD + displayName: Label PR commit + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global user.name "dotnet-maestro[bot]" + git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com" + displayName: Set git author to dotnet-maestro[bot] + workingDirectory: ${{ parameters.vmrPath }} + +- script: | + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync repo into VMR (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global diff.astextplain.textconv echo + git config --system core.longpaths true + displayName: Configure Windows git (longpaths, astextplain) + condition: eq(variables['Agent.OS'], 'Windows_NT') + +- powershell: | + ./eng/common/vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync repo into VMR (Windows) + condition: eq(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - task: CopyFiles@2 + displayName: Collect failed patches + condition: failed() + inputs: + SourceFolder: '$(Agent.TempDirectory)' + Contents: '*.patch' + TargetFolder: '$(Build.ArtifactStagingDirectory)/FailedPatches' + + - publish: '$(Build.ArtifactStagingDirectory)/FailedPatches' + artifact: $(System.JobDisplayName)_FailedPatches + displayName: Upload failed patches + condition: failed() + +- ${{ each assetName in parameters.additionalSyncs }}: + # The vmr-sync script ends up staging files in the local VMR so we have to commit those + - script: + git commit --allow-empty -am "Forward-flow $(Build.Repository.Name)" + displayName: Commit local VMR changes + workingDirectory: ${{ parameters.vmrPath }} + + - script: | + set -ex + + echo "Searching for details of asset ${{ assetName }}..." + + # Use darc to get dependencies information + dependencies=$(./.dotnet/dotnet darc get-dependencies --name '${{ assetName }}' --ci) + + # Extract repository URL and commit hash + repository=$(echo "$dependencies" | grep 'Repo:' | sed 's/Repo:[[:space:]]*//' | head -1) + + if [ -z "$repository" ]; then + echo "##vso[task.logissue type=error]Asset ${{ assetName }} not found in the dependency list" + exit 1 + fi + + commit=$(echo "$dependencies" | grep 'Commit:' | sed 's/Commit:[[:space:]]*//' | head -1) + + echo "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync ${{ assetName }} into (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + + - powershell: | + $ErrorActionPreference = 'Stop' + + Write-Host "Searching for details of asset ${{ assetName }}..." + + $dependencies = .\.dotnet\dotnet darc get-dependencies --name '${{ assetName }}' --ci + + $repository = $dependencies | Select-String -Pattern 'Repo:\s+([^\s]+)' | Select-Object -First 1 + $repository -match 'Repo:\s+([^\s]+)' | Out-Null + $repository = $matches[1] + + if ($repository -eq $null) { + Write-Error "Asset ${{ assetName }} not found in the dependency list" + exit 1 + } + + $commit = $dependencies | Select-String -Pattern 'Commit:\s+([^\s]+)' | Select-Object -First 1 + $commit -match 'Commit:\s+([^\s]+)' | Out-Null + $commit = $matches[1] + + Write-Host "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + .\eng\common\vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync ${{ assetName }} into (Windows) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/eng/common/templates/vmr-build-pr.yml b/eng/common/templates/vmr-build-pr.yml new file mode 100644 index 000000000000..2f3694fa1323 --- /dev/null +++ b/eng/common/templates/vmr-build-pr.yml @@ -0,0 +1,43 @@ +# This pipeline is used for running the VMR verification of the PR changes in repo-level PRs. +# +# It will run a full set of verification jobs defined in: +# https://github.com/dotnet/dotnet/blob/10060d128e3f470e77265f8490f5e4f72dae738e/eng/pipelines/templates/stages/vmr-build.yml#L27-L38 +# +# For repos that do not need to run the full set, you would do the following: +# +# 1. Copy this YML file to a repo-specific location, i.e. outside of eng/common. +# +# 2. Add `verifications` parameter to VMR template reference +# +# Examples: +# - For source-build stage 1 verification, add the following: +# verifications: [ "source-build-stage1" ] +# +# - For Windows only verifications, add the following: +# verifications: [ "unified-build-windows-x64", "unified-build-windows-x86" ] + +trigger: none +pr: none + +variables: +- template: /eng/common/templates/variables/pool-providers.yml@self + +- name: skipComponentGovernanceDetection # we run CG on internal builds only + value: true + +- name: Codeql.Enabled # we run CodeQL on internal builds only + value: false + +resources: + repositories: + - repository: vmr + type: github + name: dotnet/dotnet + endpoint: dotnet + ref: refs/heads/main # Set to whatever VMR branch the PR build should insert into + +stages: +- template: /eng/pipelines/templates/stages/vmr-build.yml@vmr + parameters: + isBuiltFromVmr: false + scope: lite diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index a06513a59407..977a2d4b1039 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -65,10 +65,8 @@ $ErrorActionPreference = 'Stop' # Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed [string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null } -# True if the build is a product build -[bool]$productBuild = if (Test-Path variable:productBuild) { $productBuild } else { $false } - -[String[]]$properties = if (Test-Path variable:properties) { $properties } else { @() } +# True when the build is running within the VMR. +[bool]$fromVMR = if (Test-Path variable:fromVMR) { $fromVMR } else { $false } function Create-Directory ([string[]] $path) { New-Item -Path $path -Force -ItemType 'Directory' | Out-Null @@ -259,7 +257,20 @@ function Retry($downloadBlock, $maxRetries = 5) { function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' + $shouldDownload = $false + if (!(Test-Path $installScript)) { + $shouldDownload = $true + } else { + # Check if the script is older than 30 days + $fileAge = (Get-Date) - (Get-Item $installScript).LastWriteTime + if ($fileAge.Days -gt 30) { + Write-Host "Existing install script is too old, re-downloading..." + $shouldDownload = $true + } + } + + if ($shouldDownload) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit $uri = "https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1" @@ -383,8 +394,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # If the version of msbuild is going to be xcopied, # use this version. Version matches a package here: - # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/17.12.0 - $defaultXCopyMSBuildVersion = '17.12.0' + # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/18.0.0 + $defaultXCopyMSBuildVersion = '18.0.0' if (!$vsRequirements) { if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') { @@ -533,7 +544,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') { $vswhereVersion = $GlobalJson.tools.vswhere } else { - $vswhereVersion = '2.5.2' + # keep this in sync with the VSWhereVersion in DefaultVersions.props + $vswhereVersion = '3.1.7' } $vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion" @@ -541,7 +553,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir - Write-Host 'Downloading vswhere' + Write-Host "Downloading vswhere $vswhereVersion" + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Retry({ Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -UseBasicParsing -OutFile $vswhereExe }) @@ -611,14 +624,7 @@ function InitializeBuildTool() { } $dotnetPath = Join-Path $dotnetRoot (GetExecutableFileName 'dotnet') - # Use override if it exists - commonly set by source-build - if ($null -eq $env:_OverrideArcadeInitializeBuildToolFramework) { - $initializeBuildToolFramework="net9.0" - } else { - $initializeBuildToolFramework=$env:_OverrideArcadeInitializeBuildToolFramework - } - - $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = $initializeBuildToolFramework } + $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'net' } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore @@ -627,7 +633,7 @@ function InitializeBuildTool() { ExitWithExitCode 1 } - $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472"; ExcludePrereleaseVS = $excludePrereleaseVS } + $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "netframework"; ExcludePrereleaseVS = $excludePrereleaseVS } } else { Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 @@ -660,7 +666,6 @@ function GetNuGetPackageCachePath() { $env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages\' } else { $env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages\' - $env:RESTORENOHTTPCACHE = $true } } @@ -782,26 +787,13 @@ function MSBuild() { $toolsetBuildProject = InitializeToolset $basePath = Split-Path -parent $toolsetBuildProject - $possiblePaths = @( - # new scripts need to work with old packages, so we need to look for the old names/versions - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.Arcade.Sdk.dll')) - ) - $selectedPath = $null - foreach ($path in $possiblePaths) { - if (Test-Path $path -PathType Leaf) { - $selectedPath = $path - break - } - } + $selectedPath = Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll') + if (-not $selectedPath) { - Write-PipelineTelemetryError -Category 'Build' -Message 'Unable to find arcade sdk logger assembly.' + Write-PipelineTelemetryError -Category 'Build' -Message "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 } + $args += "/logger:$selectedPath" } @@ -832,6 +824,11 @@ function MSBuild-Core() { $cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse /p:ContinuousIntegrationBuild=$ci" + # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable + if ($env:MSBUILD_MT_ENABLED -eq "1") { + $cmdArgs += ' -mt' + } + if ($warnAsError) { $cmdArgs += ' /warnaserror /p:TreatWarningsAsErrors=true' } @@ -864,8 +861,8 @@ function MSBuild-Core() { } # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$productBuild -and -not($properties -like "*DotNetBuildRepo=true*")) { + # Skip this when the build is a child of the VMR build. + if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$fromVMR) { Write-PipelineSetResult -Result "Failed" -Message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 01b09b65796c..1b296f646c23 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -5,6 +5,9 @@ # CI mode - set to true on CI server for PR validation build or official build. ci=${ci:-false} +# Build mode +source_build=${source_build:-false} + # Set to true to use the pipelines logger which will enable Azure logging output. # https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md # This flag is meant as a temporary opt-opt for the feature while validate it across @@ -58,7 +61,8 @@ use_installed_dotnet_cli=${use_installed_dotnet_cli:-true} dotnetInstallScriptVersion=${dotnetInstallScriptVersion:-'v1'} # True to use global NuGet cache instead of restoring packages to repository-local directory. -if [[ "$ci" == true ]]; then +# Keep in sync with NuGetPackageroot in Arcade SDK's RepositoryLayout.props. +if [[ "$ci" == true || "$source_build" == true ]]; then use_global_nuget_cache=${use_global_nuget_cache:-false} else use_global_nuget_cache=${use_global_nuget_cache:-true} @@ -68,8 +72,8 @@ fi runtime_source_feed=${runtime_source_feed:-''} runtime_source_feed_key=${runtime_source_feed_key:-''} -# True if the build is a product build -product_build=${product_build:-false} +# True when the build is running within the VMR. +from_vmr=${from_vmr:-false} # Resolve any symlinks in the given path. function ResolvePath { @@ -296,8 +300,29 @@ function GetDotNetInstallScript { local root=$1 local install_script="$root/dotnet-install.sh" local install_script_url="https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh" + local timestamp_file="$root/.dotnet-install.timestamp" + local should_download=false if [[ ! -a "$install_script" ]]; then + should_download=true + elif [[ -f "$timestamp_file" ]]; then + # Check if the script is older than 30 days using timestamp file + local download_time=$(cat "$timestamp_file" 2>/dev/null || echo "0") + local current_time=$(date +%s) + local age_seconds=$((current_time - download_time)) + + # 30 days = 30 * 24 * 60 * 60 = 2592000 seconds + if [[ $age_seconds -gt 2592000 ]]; then + echo "Existing install script is too old, re-downloading..." + should_download=true + fi + else + # No timestamp file exists, assume script is old and re-download + echo "No timestamp found for existing install script, re-downloading..." + should_download=true + fi + + if [[ "$should_download" == true ]]; then mkdir -p "$root" echo "Downloading '$install_script_url'" @@ -324,6 +349,9 @@ function GetDotNetInstallScript { ExitWithExitCode $exit_code } fi + + # Create timestamp file to track download time in seconds from epoch + date +%s > "$timestamp_file" fi # return value _GetDotNetInstallScript="$install_script" @@ -339,22 +367,14 @@ function InitializeBuildTool { # return values _InitializeBuildTool="$_InitializeDotNetCli/dotnet" _InitializeBuildToolCommand="msbuild" - # use override if it exists - commonly set by source-build - if [[ "${_OverrideArcadeInitializeBuildToolFramework:-x}" == "x" ]]; then - _InitializeBuildToolFramework="net9.0" - else - _InitializeBuildToolFramework="${_OverrideArcadeInitializeBuildToolFramework}" - fi } -# Set RestoreNoHttpCache as a workaround for https://github.com/NuGet/Home/issues/3116 function GetNuGetPackageCachePath { if [[ -z ${NUGET_PACKAGES:-} ]]; then if [[ "$use_global_nuget_cache" == true ]]; then export NUGET_PACKAGES="$HOME/.nuget/packages/" else export NUGET_PACKAGES="$repo_root/.packages/" - export RESTORENOHTTPCACHE=true fi fi @@ -451,25 +471,13 @@ function MSBuild { fi local toolset_dir="${_InitializeToolset%/*}" - # new scripts need to work with old packages, so we need to look for the old names/versions - local selectedPath= - local possiblePaths=() - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - for path in "${possiblePaths[@]}"; do - if [[ -f $path ]]; then - selectedPath=$path - break - fi - done + local selectedPath="$toolset_dir/net/Microsoft.DotNet.ArcadeLogging.dll" + if [[ -z "$selectedPath" ]]; then - Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly." + Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 fi + args+=( "-logger:$selectedPath" ) fi @@ -506,8 +514,8 @@ function MSBuild-Core { echo "Build failed with exit code $exit_code. Check errors above." # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$product_build" != true && "$properties" != *"DotNetBuildRepo=true"* ]]; then + # Skip this when the build is a child of the VMR build. + if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$from_vmr" != true ]]; then Write-PipelineSetResult -result "Failed" -message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error @@ -518,7 +526,13 @@ function MSBuild-Core { } } - RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" + # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable + local mt_switch="" + if [[ "${MSBUILD_MT_ENABLED:-}" == "1" ]]; then + mt_switch="-mt" + fi + + RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch $mt_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" } function GetDarc { @@ -530,6 +544,13 @@ function GetDarc { fi "$eng_root/common/darc-init.sh" --toolpath "$darc_path" $version + darc_tool="$darc_path/darc" +} + +# Returns a full path to an Arcade SDK task project file. +function GetSdkTaskProject { + taskName=$1 + echo "$(dirname $_InitializeToolset)/SdkTasks/$taskName.proj" } ResolvePath "${BASH_SOURCE[0]}" diff --git a/eng/common/vmr-sync.ps1 b/eng/common/vmr-sync.ps1 new file mode 100755 index 000000000000..b37992d91cf0 --- /dev/null +++ b/eng/common/vmr-sync.ps1 @@ -0,0 +1,164 @@ +<# +.SYNOPSIS + +This script is used for synchronizing the current repository into a local VMR. +It pulls the current repository's code into the specified VMR directory for local testing or +Source-Build validation. + +.DESCRIPTION + +The tooling used for synchronization will clone the VMR repository into a temporary folder if +it does not already exist. These clones can be reused in future synchronizations, so it is +recommended to dedicate a folder for this to speed up re-runs. + +.EXAMPLE + Synchronize current repository into a local VMR: + ./vmr-sync.ps1 -vmrDir "$HOME/repos/dotnet" -tmpDir "$HOME/repos/tmp" + +.PARAMETER tmpDir +Required. Path to the temporary folder where repositories will be cloned + +.PARAMETER vmrBranch +Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch + +.PARAMETER azdevPat +Optional. Azure DevOps PAT to use for cloning private repositories. + +.PARAMETER vmrDir +Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +.PARAMETER debugOutput +Optional. Enables debug logging in the darc vmr command. + +.PARAMETER ci +Optional. Denotes that the script is running in a CI environment. +#> +param ( + [Parameter(Mandatory=$true, HelpMessage="Path to the temporary folder where repositories will be cloned")] + [string][Alias('t', 'tmp')]$tmpDir, + [string][Alias('b', 'branch')]$vmrBranch, + [string]$remote, + [string]$azdevPat, + [string][Alias('v', 'vmr')]$vmrDir, + [switch]$ci, + [switch]$debugOutput +) + +function Fail { + Write-Host "> $($args[0])" -ForegroundColor 'Red' +} + +function Highlight { + Write-Host "> $($args[0])" -ForegroundColor 'Cyan' +} + +$verbosity = 'verbose' +if ($debugOutput) { + $verbosity = 'debug' +} +# Validation + +if (-not $tmpDir) { + Fail "Missing -tmpDir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +} + +# Sanitize the input + +if (-not $vmrDir) { + $vmrDir = Join-Path $tmpDir 'dotnet' +} + +if (-not (Test-Path -Path $tmpDir -PathType Container)) { + New-Item -ItemType Directory -Path $tmpDir | Out-Null +} + +# Prepare the VMR + +if (-not (Test-Path -Path $vmrDir -PathType Container)) { + Highlight "Cloning 'dotnet/dotnet' into $vmrDir.." + git clone https://github.com/dotnet/dotnet $vmrDir + + if ($vmrBranch) { + git -C $vmrDir switch -c $vmrBranch + } +} +else { + if ((git -C $vmrDir diff --quiet) -eq $false) { + Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes" + exit 1 + } + + if ($vmrBranch) { + Highlight "Preparing $vmrDir" + git -C $vmrDir checkout $vmrBranch + git -C $vmrDir pull + } +} + +Set-StrictMode -Version Latest + +# Prepare darc + +Highlight 'Installing .NET, preparing the tooling..' +. .\eng\common\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true +$env:DOTNET_ROOT = $dotnetRoot +$darc = Get-Darc + +Highlight "Starting the synchronization of VMR.." + +# Synchronize the VMR +$versionDetailsPath = Resolve-Path (Join-Path $PSScriptRoot '..\Version.Details.xml') | Select-Object -ExpandProperty Path +[xml]$versionDetails = Get-Content -Path $versionDetailsPath +$repoName = $versionDetails.SelectSingleNode('//Source').Mapping +if (-not $repoName) { + Fail "Failed to resolve repo mapping from $versionDetailsPath" + exit 1 +} + +$darcArgs = ( + "vmr", "forwardflow", + "--tmp", $tmpDir, + "--$verbosity", + $vmrDir +) + +if ($ci) { + $darcArgs += ("--ci") +} + +if ($azdevPat) { + $darcArgs += ("--azdev-pat", $azdevPat) +} + +& "$darc" $darcArgs + +if ($LASTEXITCODE -eq 0) { + Highlight "Synchronization succeeded" +} +else { + Highlight "Failed to flow code into the local VMR. Falling back to resetting the VMR to match repo contents..." + git -C $vmrDir reset --hard + + $resetArgs = ( + "vmr", "reset", + "${repoName}:HEAD", + "--vmr", $vmrDir, + "--tmp", $tmpDir, + "--additional-remotes", "${repoName}:${repoRoot}" + ) + + & "$darc" $resetArgs + + if ($LASTEXITCODE -eq 0) { + Highlight "Successfully reset the VMR using 'darc vmr reset'" + } + else { + Fail "Synchronization of repo to VMR failed!" + Fail "'$vmrDir' is left in its last state (re-run of this script will reset it)." + Fail "Please inspect the logs which contain path to the failing patch file (use -debugOutput to get all the details)." + Fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script." + exit 1 + } +} diff --git a/eng/common/vmr-sync.sh b/eng/common/vmr-sync.sh new file mode 100755 index 000000000000..198caec59bd4 --- /dev/null +++ b/eng/common/vmr-sync.sh @@ -0,0 +1,227 @@ +#!/bin/bash + +### This script is used for synchronizing the current repository into a local VMR. +### It pulls the current repository's code into the specified VMR directory for local testing or +### Source-Build validation. +### +### The tooling used for synchronization will clone the VMR repository into a temporary folder if +### it does not already exist. These clones can be reused in future synchronizations, so it is +### recommended to dedicate a folder for this to speed up re-runs. +### +### USAGE: +### Synchronize current repository into a local VMR: +### ./vmr-sync.sh --tmp "$HOME/repos/tmp" "$HOME/repos/dotnet" +### +### Options: +### -t, --tmp, --tmp-dir PATH +### Required. Path to the temporary folder where repositories will be cloned +### +### -b, --branch, --vmr-branch BRANCH_NAME +### Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch +### +### --debug +### Optional. Turns on the most verbose logging for the VMR tooling +### +### --remote name:URI +### Optional. Additional remote to use during the synchronization +### This can be used to synchronize to a commit from a fork of the repository +### Example: 'runtime:https://github.com/yourfork/runtime' +### +### --azdev-pat +### Optional. Azure DevOps PAT to use for cloning private repositories. +### +### -v, --vmr, --vmr-dir PATH +### Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +function print_help () { + sed -n '/^### /,/^$/p' "$source" | cut -b 5- +} + +COLOR_RED=$(tput setaf 1 2>/dev/null || true) +COLOR_CYAN=$(tput setaf 6 2>/dev/null || true) +COLOR_CLEAR=$(tput sgr0 2>/dev/null || true) +COLOR_RESET=uniquesearchablestring +FAILURE_PREFIX='> ' + +function fail () { + echo "${COLOR_RED}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_RED}}${COLOR_CLEAR}" >&2 +} + +function highlight () { + echo "${COLOR_CYAN}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_CYAN}}${COLOR_CLEAR}" +} + +tmp_dir='' +vmr_dir='' +vmr_branch='' +additional_remotes='' +verbosity=verbose +azdev_pat='' +ci=false + +while [[ $# -gt 0 ]]; do + opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + case "$opt" in + -t|--tmp|--tmp-dir) + tmp_dir=$2 + shift + ;; + -v|--vmr|--vmr-dir) + vmr_dir=$2 + shift + ;; + -b|--branch|--vmr-branch) + vmr_branch=$2 + shift + ;; + --remote) + additional_remotes="$additional_remotes $2" + shift + ;; + --azdev-pat) + azdev_pat=$2 + shift + ;; + --ci) + ci=true + ;; + -d|--debug) + verbosity=debug + ;; + -h|--help) + print_help + exit 0 + ;; + *) + fail "Invalid argument: $1" + print_help + exit 1 + ;; + esac + + shift +done + +# Validation + +if [[ -z "$tmp_dir" ]]; then + fail "Missing --tmp-dir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +fi + +# Sanitize the input + +if [[ -z "$vmr_dir" ]]; then + vmr_dir="$tmp_dir/dotnet" +fi + +if [[ ! -d "$tmp_dir" ]]; then + mkdir -p "$tmp_dir" +fi + +if [[ "$verbosity" == "debug" ]]; then + set -x +fi + +# Prepare the VMR + +if [[ ! -d "$vmr_dir" ]]; then + highlight "Cloning 'dotnet/dotnet' into $vmr_dir.." + git clone https://github.com/dotnet/dotnet "$vmr_dir" + + if [[ -n "$vmr_branch" ]]; then + git -C "$vmr_dir" switch -c "$vmr_branch" + fi +else + if ! git -C "$vmr_dir" diff --quiet; then + fail "There are changes in the working tree of $vmr_dir. Please commit or stash your changes" + exit 1 + fi + + if [[ -n "$vmr_branch" ]]; then + highlight "Preparing $vmr_dir" + git -C "$vmr_dir" checkout "$vmr_branch" + git -C "$vmr_dir" pull + fi +fi + +set -e + +# Prepare darc + +highlight 'Installing .NET, preparing the tooling..' +source "./eng/common/tools.sh" +InitializeDotNetCli true +GetDarc +dotnetDir=$( cd ./.dotnet/; pwd -P ) +dotnet=$dotnetDir/dotnet + +highlight "Starting the synchronization of VMR.." +set +e + +if [[ -n "$additional_remotes" ]]; then + additional_remotes="--additional-remotes $additional_remotes" +fi + +if [[ -n "$azdev_pat" ]]; then + azdev_pat="--azdev-pat $azdev_pat" +fi + +ci_arg='' +if [[ "$ci" == "true" ]]; then + ci_arg="--ci" +fi + +# Synchronize the VMR + +version_details_path=$(cd "$scriptroot/.."; pwd -P)/Version.Details.xml +repo_name=$(grep -m 1 ' Date: Fri, 10 Apr 2026 09:48:10 +0000 Subject: [PATCH 129/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 266 +++++++-------- eng/Version.Details.xml | 673 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 475 insertions(+), 474 deletions(-) diff --git a/NuGet.config b/NuGet.config index e226baf9b0b6..903609549285 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 94492476bae6..1a73d58a3c79 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,139 +8,139 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-preview.26203.109 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26203-109 - 7.0.2-rc.20409 - 10.0.106 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.0-preview.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 2.0.0-preview.1.26203.109 - 2.2.6 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26203.109 - 10.0.6 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26202.103 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26202-103 + 7.3.0-rc.20303 + 10.0.202 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.0-preview.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26202.103 + 10.0.4 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26203.109 - 10.0.6-servicing.26203.109 - 18.0.2-release-26203-109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 18.0.2-release-26203-109 - 18.0.2-release-26203-109 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26202.103 + 10.0.4-servicing.26119.110 + 18.3.0-release-26202-103 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 18.3.0-release-26202-103 + 18.3.0-release-26202-103 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 2.3.0-preview.26202.5 4.3.0-preview.26202.5 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 3a7cdb3a56c8..a1ff22313714 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 https://github.com/microsoft/testfx @@ -569,9 +568,9 @@ https://github.com/microsoft/testfx cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 6f9207378ac4..0552121a41ea 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.109", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.109", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26202.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26202.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 08e9f088719d7f0db3cae6c8dbacf98e4122193a Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Fri, 10 Apr 2026 14:04:10 +0200 Subject: [PATCH 130/230] Improve support of nuget commands with file-based apps (#53535) --- .../Hidden/List/ListCommandDefinition.cs | 4 +- .../List/ListPackageCommandDefinition.cs | 4 +- .../List/ListReferenceCommandDefinition.cs | 2 +- .../Package/PackageListCommandDefinition.cs | 21 +- .../dotnet/Commands/CliCommandStrings.resx | 5 - src/Cli/dotnet/Commands/NuGet/NuGetCommand.cs | 44 ++- .../NuGet/NuGetVirtualProjectBuilder.cs | 47 +++ .../Commands/Package/Add/PackageAddCommand.cs | 300 ++++-------------- .../Package/List/PackageListCommand.cs | 75 +++-- .../Package/Remove/PackageRemoveCommand.cs | 43 +-- .../Package/VirtualProjectPackageReflector.cs | 63 ++++ .../Project/Convert/ProjectConvertCommand.cs | 1 + .../dotnet/Commands/Run/Api/RunApiCommand.cs | 5 +- .../Run/VirtualProjectBuildingCommand.cs | 10 +- .../Commands/xlf/CliCommandStrings.cs.xlf | 6 - .../Commands/xlf/CliCommandStrings.de.xlf | 6 - .../Commands/xlf/CliCommandStrings.es.xlf | 6 - .../Commands/xlf/CliCommandStrings.fr.xlf | 6 - .../Commands/xlf/CliCommandStrings.it.xlf | 6 - .../Commands/xlf/CliCommandStrings.ja.xlf | 6 - .../Commands/xlf/CliCommandStrings.ko.xlf | 6 - .../Commands/xlf/CliCommandStrings.pl.xlf | 6 - .../Commands/xlf/CliCommandStrings.pt-BR.xlf | 6 - .../Commands/xlf/CliCommandStrings.ru.xlf | 6 - .../Commands/xlf/CliCommandStrings.tr.xlf | 6 - .../xlf/CliCommandStrings.zh-Hans.xlf | 6 - .../xlf/CliCommandStrings.zh-Hant.xlf | 6 - src/Cli/dotnet/Parser.cs | 4 +- src/Common/EnvironmentVariableNames.cs | 1 + .../VirtualProjectBuilder.cs | 22 +- .../CommandTests/NuGet/GivenANuGetCommand.cs | 99 ++++++ .../Package/Add/GivenDotnetPackageAdd.cs | 64 ++-- .../Package/List/GivenDotnetListPackage.cs | 21 ++ .../Remove/GivenDotnetRemovePackage.cs | 6 +- .../Convert/DotnetProjectConvertTests.cs | 3 +- .../List/GivenDotnetListReference.cs | 12 +- .../CommandTests/Run/RunFileTests.cs | 52 +++ 37 files changed, 529 insertions(+), 457 deletions(-) create mode 100644 src/Cli/dotnet/Commands/NuGet/NuGetVirtualProjectBuilder.cs create mode 100644 src/Cli/dotnet/Commands/Package/VirtualProjectPackageReflector.cs diff --git a/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListCommandDefinition.cs b/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListCommandDefinition.cs index ec63176267cd..cefd8ab10014 100644 --- a/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListCommandDefinition.cs +++ b/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListCommandDefinition.cs @@ -20,7 +20,7 @@ public static Argument CreateSlnOrProjectArgument(string name, string de Arity = ArgumentArity.ZeroOrOne }.DefaultToCurrentDirectory(); - public readonly Argument SlnOrProjectArgument = CreateSlnOrProjectArgument(CommandDefinitionStrings.SolutionOrProjectArgumentName, CommandDefinitionStrings.SolutionOrProjectArgumentDescription); + public readonly Argument SlnOrProjectOrFileArgument = CreateSlnOrProjectArgument(CommandDefinitionStrings.SolutionOrProjectOrFileArgumentName, CommandDefinitionStrings.SolutionOrProjectOrFileArgumentDescription); public readonly ListPackageCommandDefinition PackageCommand = new(); public readonly ListReferenceCommandDefinition ReferenceCommand = new(); @@ -31,7 +31,7 @@ public ListCommandDefinition() Hidden = true; this.DocsLink = Link; - Arguments.Add(SlnOrProjectArgument); + Arguments.Add(SlnOrProjectOrFileArgument); Subcommands.Add(PackageCommand); Subcommands.Add(ReferenceCommand); } diff --git a/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListPackageCommandDefinition.cs b/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListPackageCommandDefinition.cs index f79679563733..6e9d02b473c8 100644 --- a/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListPackageCommandDefinition.cs +++ b/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListPackageCommandDefinition.cs @@ -12,6 +12,6 @@ internal sealed class ListPackageCommandDefinition() : PackageListCommandDefinit public ListCommandDefinition Parent => (ListCommandDefinition)Parents.Single(); - public override string? GetFileOrDirectory(ParseResult parseResult) - => parseResult.GetValue(Parent.SlnOrProjectArgument); + public override Argument? GetProjectOrFileArgument() + => Parent.SlnOrProjectOrFileArgument; } diff --git a/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListReferenceCommandDefinition.cs b/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListReferenceCommandDefinition.cs index 748187d7f4fe..d49e703a2d42 100644 --- a/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListReferenceCommandDefinition.cs +++ b/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Hidden/List/ListReferenceCommandDefinition.cs @@ -19,7 +19,7 @@ public ListReferenceCommandDefinition() : base(Name) public ListCommandDefinition Parent => (ListCommandDefinition)Parents.Single(); internal override string? GetFileOrDirectory(ParseResult parseResult) - => parseResult.GetValue(Parent.SlnOrProjectArgument); + => parseResult.GetValue(Parent.SlnOrProjectOrFileArgument); } internal abstract class ListReferenceCommandDefinitionBase : Command diff --git a/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Package/PackageListCommandDefinition.cs b/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Package/PackageListCommandDefinition.cs index 9e0eb70520c9..2db06fe0fb97 100644 --- a/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Package/PackageListCommandDefinition.cs +++ b/src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/Package/PackageListCommandDefinition.cs @@ -6,20 +6,12 @@ namespace Microsoft.DotNet.Cli.Commands.Package.List; -internal sealed class PackageListCommandDefinition : PackageListCommandDefinitionBase +internal sealed class PackageListCommandDefinition() : PackageListCommandDefinitionBase(Name) { public new const string Name = "list"; - public readonly Option ProjectOption = PackageCommandDefinition.CreateProjectOption(); - - public PackageListCommandDefinition() - : base(Name) - { - Options.Add(ProjectOption); - } - - public override string? GetFileOrDirectory(ParseResult parseResult) - => parseResult.GetValue(ProjectOption); + public override Argument? GetProjectOrFileArgument() + => null; } internal abstract class PackageListCommandDefinitionBase : Command @@ -110,6 +102,9 @@ internal abstract class PackageListCommandDefinitionBase : Command Description = CommandDefinitionStrings.CmdOutputVersionDescription }.ForwardAsSingle(o => $"--output-version:{o}"); + public readonly Option ProjectOption = PackageCommandDefinition.CreateProjectOption(); + public readonly Option FileOption = PackageCommandDefinition.CreateFileOption(); + public PackageListCommandDefinitionBase(string name) : base(name, CommandDefinitionStrings.PackageListAppFullName) { @@ -128,9 +123,11 @@ public PackageListCommandDefinitionBase(string name) Options.Add(FormatOption); Options.Add(OutputVersionOption); Options.Add(NoRestore); + Options.Add(ProjectOption); + Options.Add(FileOption); } - public abstract string? GetFileOrDirectory(ParseResult parseResult); + public abstract Argument? GetProjectOrFileArgument(); public void EnforceOptionRules(ParseResult parseResult) { diff --git a/src/Cli/dotnet/Commands/CliCommandStrings.resx b/src/Cli/dotnet/Commands/CliCommandStrings.resx index cb37e3792b84..8987541a2308 100644 --- a/src/Cli/dotnet/Commands/CliCommandStrings.resx +++ b/src/Cli/dotnet/Commands/CliCommandStrings.resx @@ -651,11 +651,6 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Specify only one package reference to remove. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - Command names conflict. Command names are case insensitive. {0} diff --git a/src/Cli/dotnet/Commands/NuGet/NuGetCommand.cs b/src/Cli/dotnet/Commands/NuGet/NuGetCommand.cs index 9a68c31b22e7..296e57ede7db 100644 --- a/src/Cli/dotnet/Commands/NuGet/NuGetCommand.cs +++ b/src/Cli/dotnet/Commands/NuGet/NuGetCommand.cs @@ -6,19 +6,36 @@ using System.CommandLine; using Microsoft.DotNet.Cli.Extensions; using Microsoft.DotNet.Cli.Utils; +using Microsoft.DotNet.ProjectTools; namespace Microsoft.DotNet.Cli.Commands.NuGet; -public class NuGetCommand +internal class NuGetCommand { - public static int Run(string[] args) + public static int Run(string[] args, bool isFileBasedApp = false) { - return Run(args, new NuGetCommandRunner()); + return Run(args, isFileBasedApp + ? new InProcessNuGetCommandRunner(NuGetVirtualProjectBuilder.Instance) + : new NuGetCommandRunner()); } public static int Run(ParseResult parseResult) { - return Run(parseResult.GetArguments(), new NuGetCommandRunner()); + ICommandRunner runner; + + if (parseResult.CommandResult.Command.Name == "why" + && parseResult.CommandResult.Command.Arguments.FirstOrDefault() is Argument pathArg + && parseResult.GetValue(pathArg) is { } path + && VirtualProjectBuilder.IsValidEntryPointPath(path)) + { + runner = new InProcessNuGetCommandRunner(NuGetVirtualProjectBuilder.Instance); + } + else + { + runner = new NuGetCommandRunner(); + } + + return Run(parseResult.GetArguments(), runner); } public static int Run(string[] args, ICommandRunner nugetCommandRunner) @@ -43,11 +60,28 @@ private class NuGetCommandRunner : ICommandRunner public int Run(string[] args) { var nugetApp = new NuGetForwardingApp(args); - nugetApp.WithEnvironmentVariable("DOTNET_HOST_PATH", GetDotnetPath()); + nugetApp.WithEnvironmentVariable(EnvironmentVariableNames.DOTNET_HOST_PATH, GetDotnetPath()); return nugetApp.Execute(); } } + private class InProcessNuGetCommandRunner(NuGetVirtualProjectBuilder virtualProjectBuilder) : ICommandRunner + { + public int Run(string[] args) + { + var originalDotNetHostPath = Environment.GetEnvironmentVariable(EnvironmentVariableNames.DOTNET_HOST_PATH); + Environment.SetEnvironmentVariable(EnvironmentVariableNames.DOTNET_HOST_PATH, GetDotnetPath()); + try + { + return global::NuGet.CommandLine.XPlat.Program.Run(args, virtualProjectBuilder); + } + finally + { + Environment.SetEnvironmentVariable(EnvironmentVariableNames.DOTNET_HOST_PATH, originalDotNetHostPath); + } + } + } + private static string GetDotnetPath() { return new Muxer().MuxerPath; diff --git a/src/Cli/dotnet/Commands/NuGet/NuGetVirtualProjectBuilder.cs b/src/Cli/dotnet/Commands/NuGet/NuGetVirtualProjectBuilder.cs new file mode 100644 index 000000000000..a37f3e2c7aa1 --- /dev/null +++ b/src/Cli/dotnet/Commands/NuGet/NuGetVirtualProjectBuilder.cs @@ -0,0 +1,47 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.Build.Construction; +using Microsoft.Build.Evaluation; +using Microsoft.DotNet.Cli.Commands.Package; +using Microsoft.DotNet.Cli.Commands.Run; +using Microsoft.DotNet.FileBasedPrograms; +using Microsoft.DotNet.ProjectTools; +using NuGet.CommandLine.XPlat; + +namespace Microsoft.DotNet.Cli.Commands.NuGet; + +internal sealed class NuGetVirtualProjectBuilder : IVirtualProjectBuilder +{ + public static NuGetVirtualProjectBuilder Instance => field ??= new(); + + private NuGetVirtualProjectBuilder() { } + + public bool IsValidEntryPointPath(string entryPointFilePath) => VirtualProjectBuilder.IsValidEntryPointPath(entryPointFilePath); + + public string GetVirtualProjectPath(string entryPointFilePath) => VirtualProjectBuilder.GetVirtualProjectPath(entryPointFilePath); + + public ProjectRootElement CreateProjectRootElement(string entryPointFilePath, ProjectCollection projectCollection) + { + if (!Path.IsPathFullyQualified(entryPointFilePath)) + { + throw new ArgumentException($"'{entryPointFilePath}' is not a fully qualified path.", paramName: nameof(entryPointFilePath)); + } + + var builder = new VirtualProjectBuilder(entryPointFilePath, VirtualProjectBuildingCommand.TargetFramework); + + builder.CreateProjectInstance( + projectCollection, + ErrorReporters.IgnoringReporter, + project: out _, + out var projectRootElement, + evaluatedDirectives: out _); + + return projectRootElement; + } + + public void SaveProject(string entryPointFilePath, ProjectRootElement projectRootElement) + { + VirtualProjectPackageReflector.ReflectChangesToDirectives(projectRootElement, entryPointFilePath); + } +} diff --git a/src/Cli/dotnet/Commands/Package/Add/PackageAddCommand.cs b/src/Cli/dotnet/Commands/Package/Add/PackageAddCommand.cs index 7c2bbed46ac4..ceba7066a361 100644 --- a/src/Cli/dotnet/Commands/Package/Add/PackageAddCommand.cs +++ b/src/Cli/dotnet/Commands/Package/Add/PackageAddCommand.cs @@ -3,17 +3,12 @@ using System.CommandLine; using System.Diagnostics; -using Microsoft.Build.Construction; -using Microsoft.Build.Evaluation; -using Microsoft.CodeAnalysis; using Microsoft.DotNet.Cli.CommandLine; using Microsoft.DotNet.Cli.Commands.MSBuild; using Microsoft.DotNet.Cli.Commands.NuGet; using Microsoft.DotNet.Cli.Commands.Run; using Microsoft.DotNet.Cli.Utils; -using Microsoft.DotNet.FileBasedPrograms; using Microsoft.DotNet.ProjectTools; -using NuGet.ProjectModel; namespace Microsoft.DotNet.Cli.Commands.Package.Add; @@ -31,16 +26,14 @@ public override int Execute() { var (fileOrDirectory, allowedAppKinds) = PackageCommandParser.ProcessPathOptions(Definition.FileOption, Definition.ProjectOption, Definition.GetProjectOrFileArgument(), _parseResult); - if (allowedAppKinds.HasFlag(AppKinds.FileBased) && VirtualProjectBuilder.IsValidEntryPointPath(fileOrDirectory)) - { - return ExecuteForFileBasedApp(fileOrDirectory); - } + bool isFileBasedApp = allowedAppKinds.HasFlag(AppKinds.FileBased) && VirtualProjectBuilder.IsValidEntryPointPath(fileOrDirectory); - Debug.Assert(allowedAppKinds.HasFlag(AppKinds.ProjectBased)); + Debug.Assert(isFileBasedApp || allowedAppKinds.HasFlag(AppKinds.ProjectBased)); string projectFilePath; if (!File.Exists(fileOrDirectory)) { + Debug.Assert(!isFileBasedApp); projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory); } else @@ -48,11 +41,15 @@ public override int Execute() projectFilePath = fileOrDirectory; } + if (isFileBasedApp) + { + projectFilePath = Path.GetFullPath(projectFilePath); + } + var tempDgFilePath = string.Empty; if (!_parseResult.GetValue(Definition.NoRestoreOption)) { - try { // Create a Dependency Graph file for the project @@ -64,46 +61,69 @@ public override int Execute() throw new GracefulException(string.Format(CliCommandStrings.CmdDGFileIOException, projectFilePath), ioex); } - GetProjectDependencyGraph(projectFilePath, tempDgFilePath); + GetProjectDependencyGraph(projectFilePath, tempDgFilePath, isFileBasedApp); } - var result = NuGetCommand.Run( - TransformArgs( - _packageId, - tempDgFilePath, - projectFilePath)); + var args = TransformArgs( + _packageId, + tempDgFilePath, + projectFilePath); + + var result = NuGetCommand.Run(args, isFileBasedApp); + DisposeTemporaryFile(tempDgFilePath); return result; } - private static void GetProjectDependencyGraph(string projectFilePath, string dgFilePath) + private static void GetProjectDependencyGraph(string projectFilePath, string dgFilePath, bool isFileBasedApp) { - List args = - [ - // Pass the project file path - projectFilePath, - - // Pass the task as generate restore Dependency Graph file - "-target:GenerateRestoreGraphFile", + int result; + if (isFileBasedApp) + { + result = new VirtualProjectBuildingCommand( + projectFilePath, + MSBuildArgs + .FromProperties(new Dictionary + { + { "RestoreGraphOutputPath", dgFilePath }, + { "RestoreRecursive", "false" }, + { "RestoreDotnetCliToolReferences", "false" }, + }.AsReadOnly()) + .CloneWithVerbosity(VerbosityOptions.quiet) + .CloneWithAdditionalTargets("GenerateRestoreGraphFile")) + { + NoRestore = true, + NoCache = true, + NoWriteBuildMarkers = true, + }.Execute(); + } + else + { + result = new MSBuildForwardingApp( + [ + // Pass the project file path + projectFilePath, - // Pass Dependency Graph file output path - $"-property:RestoreGraphOutputPath=\"{dgFilePath}\"", + // Pass the task as generate restore Dependency Graph file + "-target:GenerateRestoreGraphFile", - // Turn off recursive restore - $"-property:RestoreRecursive=false", + // Pass Dependency Graph file output path + $"-property:RestoreGraphOutputPath=\"{dgFilePath}\"", - // Turn off restore for Dotnet cli tool references so that we do not generate extra dg specs - $"-property:RestoreDotnetCliToolReferences=false", + // Turn off recursive restore + "-property:RestoreRecursive=false", - // Output should not include MSBuild version header - "--nologo", + // Turn off restore for Dotnet cli tool references so that we do not generate extra dg specs + "-property:RestoreDotnetCliToolReferences=false", - // Set verbosity to quiet to avoid cluttering the output for this 'inner' build - "-v:quiet" - ]; + // Output should not include MSBuild version header + "--nologo", - var result = new MSBuildForwardingApp(args).Execute(); + // Set verbosity to quiet to avoid cluttering the output for this 'inner' build + "-v:quiet" + ]).Execute(); + } if (result != 0) { @@ -152,210 +172,4 @@ private string[] TransformArgs(PackageIdentityWithRange packageId, string tempDg return [.. args]; } - - // More logic should live in NuGet: https://github.com/NuGet/Home/issues/14390 - private int ExecuteForFileBasedApp(string path) - { - // Check disallowed options. - ReadOnlySpan /// Path to send to the command - private string GetProjectOrSolution() + private static string GetProjectOrSolution(string fileOrDirectory) { - string resultPath = _fileOrDirectory; + string resultPath = fileOrDirectory; if (Directory.Exists(resultPath)) { diff --git a/src/Cli/dotnet/Commands/Package/Remove/PackageRemoveCommand.cs b/src/Cli/dotnet/Commands/Package/Remove/PackageRemoveCommand.cs index fb98ca18b83f..9a63a7f3f4ec 100644 --- a/src/Cli/dotnet/Commands/Package/Remove/PackageRemoveCommand.cs +++ b/src/Cli/dotnet/Commands/Package/Remove/PackageRemoveCommand.cs @@ -3,11 +3,10 @@ using System.CommandLine; using System.Diagnostics; +using Microsoft.DotNet.Cli.CommandLine; using Microsoft.DotNet.Cli.Commands.NuGet; using Microsoft.DotNet.Cli.Commands.Run; -using Microsoft.DotNet.Cli.CommandLine; using Microsoft.DotNet.Cli.Utils; -using Microsoft.DotNet.FileBasedPrograms; using Microsoft.DotNet.ProjectTools; namespace Microsoft.DotNet.Cli.Commands.Package.Remove; @@ -31,16 +30,14 @@ public override int Execute() _definition.GetProjectOrFileArgument(), _parseResult); - if (allowedAppKinds.HasFlag(AppKinds.FileBased) && VirtualProjectBuilder.IsValidEntryPointPath(fileOrDirectory)) - { - return ExecuteForFileBasedApp(path: fileOrDirectory, packageId: packageToRemove); - } + bool isFileBasedApp = allowedAppKinds.HasFlag(AppKinds.FileBased) && VirtualProjectBuilder.IsValidEntryPointPath(fileOrDirectory); - Debug.Assert(allowedAppKinds.HasFlag(AppKinds.ProjectBased)); + Debug.Assert(isFileBasedApp || allowedAppKinds.HasFlag(AppKinds.ProjectBased)); string projectFilePath; if (!File.Exists(fileOrDirectory)) { + Debug.Assert(!isFileBasedApp); projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory); } else @@ -48,7 +45,12 @@ public override int Execute() projectFilePath = fileOrDirectory; } - var result = NuGetCommand.Run(TransformArgs(packageToRemove, projectFilePath)); + if (isFileBasedApp) + { + projectFilePath = Path.GetFullPath(projectFilePath); + } + + var result = NuGetCommand.Run(TransformArgs(packageToRemove, projectFilePath), isFileBasedApp); return result; } @@ -71,29 +73,4 @@ private string[] TransformArgs(string packageId, string projectFilePath) return [.. args]; } - - private static int ExecuteForFileBasedApp(string path, string packageId) - { - var fullPath = Path.GetFullPath(path); - - // Remove #:package directive from the C# file. - // We go through the directives in reverse order so removing one doesn't affect spans of the remaining ones. - var editor = FileBasedAppSourceEditor.Load(SourceFile.Load(fullPath)); - var count = 0; - var directives = editor.Directives; - for (int i = directives.Length - 1; i >= 0; i--) - { - var directive = directives[i]; - if (directive is CSharpDirective.Package p && - string.Equals(p.Name, packageId, StringComparison.OrdinalIgnoreCase)) - { - editor.Remove(directive); - count++; - } - } - editor.SourceFile.Save(); - - Reporter.Output.WriteLine(CliCommandStrings.DirectivesRemoved, "#:package", count, packageId, fullPath); - return count > 0 ? 0 : 1; // success if any directives were found and removed - } } diff --git a/src/Cli/dotnet/Commands/Package/VirtualProjectPackageReflector.cs b/src/Cli/dotnet/Commands/Package/VirtualProjectPackageReflector.cs new file mode 100644 index 000000000000..9aff1c2c5416 --- /dev/null +++ b/src/Cli/dotnet/Commands/Package/VirtualProjectPackageReflector.cs @@ -0,0 +1,63 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using Microsoft.Build.Construction; +using Microsoft.DotNet.Cli.Commands.Run; +using Microsoft.DotNet.FileBasedPrograms; + +namespace Microsoft.DotNet.Cli.Commands.Package; + +/// +/// Utility for reflecting changes in a (modified by NuGet) +/// back to #:package directives in a C# source file. +/// +internal static class VirtualProjectPackageReflector +{ + /// + /// Reads PackageReference items from the given and + /// updates the #:package directives in the source file at to match. + /// + internal static void ReflectChangesToDirectives(ProjectRootElement projectRootElement, string entryPointFilePath) + { + // Collect PackageReference items from the modified virtual project. + var packageReferences = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var itemGroup in projectRootElement.ItemGroups) + { + foreach (var item in itemGroup.Items) + { + if (string.Equals(item.ItemType, "PackageReference", StringComparison.OrdinalIgnoreCase)) + { + Debug.Assert(!string.IsNullOrEmpty(item.Include), "Expected only PackageReference Include items in virtual project."); + var version = item.Metadata.FirstOrDefault( + m => string.Equals(m.Name, "Version", StringComparison.OrdinalIgnoreCase))?.Value; + packageReferences[item.Include] = version; + } + } + } + + // Load the source file and its current directives. + var editor = FileBasedAppSourceEditor.Load(SourceFile.Load(entryPointFilePath)); + var directives = editor.Directives; + + // Remove directives for packages that are no longer in the project. + // Process in reverse order to avoid invalidating spans. + for (int i = directives.Length - 1; i >= 0; i--) + { + if (directives[i] is CSharpDirective.Package p && + !packageReferences.ContainsKey(p.Name)) + { + editor.Remove(directives[i]); + } + } + + // Add or update directives for packages in the project. + foreach (var (name, version) in packageReferences) + { + // Always update existing directives (version might have changed) and add new ones. + editor.Add(new CSharpDirective.Package(default) { Name = name, Version = version }); + } + + editor.SourceFile.Save(); + } +} diff --git a/src/Cli/dotnet/Commands/Project/Convert/ProjectConvertCommand.cs b/src/Cli/dotnet/Commands/Project/Convert/ProjectConvertCommand.cs index fa79bd32a677..bab18b2e8ac2 100644 --- a/src/Cli/dotnet/Commands/Project/Convert/ProjectConvertCommand.cs +++ b/src/Cli/dotnet/Commands/Project/Convert/ProjectConvertCommand.cs @@ -54,6 +54,7 @@ public override int Execute() projectCollection, VirtualProjectBuildingCommand.ThrowingReporter, out var projectInstance, + projectRootElement: out _, out var evaluatedDirectives, validateAllDirectives: !_force); diff --git a/src/Cli/dotnet/Commands/Run/Api/RunApiCommand.cs b/src/Cli/dotnet/Commands/Run/Api/RunApiCommand.cs index 9504d64da1dd..42d361f2f850 100644 --- a/src/Cli/dotnet/Commands/Run/Api/RunApiCommand.cs +++ b/src/Cli/dotnet/Commands/Run/Api/RunApiCommand.cs @@ -75,7 +75,8 @@ public override RunApiOutput Execute() builder.CreateProjectInstance( new ProjectCollection(), errorReporter, - out var project, + project: out _, + out var projectRootElement, out var evaluatedDirectives, validateAllDirectives: true); @@ -91,7 +92,7 @@ public override RunApiOutput Execute() return new RunApiOutput.Project { Content = csprojWriter.ToString(), - ProjectPath = project.FullPath, + ProjectPath = projectRootElement.FullPath, Diagnostics = diagnostics.ToImmutableArray(), }; } diff --git a/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs b/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs index 2282adbd535c..0d8ea09da7ac 100644 --- a/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs +++ b/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs @@ -113,6 +113,8 @@ internal sealed class VirtualProjectBuildingCommand : CommandBase /// public bool NoWriteBuildMarkers { get; init; } + public bool NoConsoleLogger { get; init; } + public VirtualProjectBuilder Builder { get; } public MSBuildArgs MSBuildArgs { get; } @@ -162,7 +164,9 @@ public override int Execute() bool minimizeStdOut = msbuildGet && MSBuildArgs.GetResultOutputFile is null or []; var verbosity = MSBuildArgs.Verbosity ?? MSBuildForwardingAppWithoutLogging.DefaultVerbosity; - var consoleLogger = minimizeStdOut + var consoleLogger = NoConsoleLogger + ? null + : minimizeStdOut ? new SimpleErrorLogger() : CommonRunHelpers.GetConsoleLogger(MSBuildArgs.CloneWithExplicitArgs([$"--verbosity:{verbosity}", .. MSBuildArgs.OtherMSBuildArgs])); var binaryLogger = GetBinaryLogger(MSBuildArgs.OtherMSBuildArgs); @@ -274,7 +278,8 @@ public override int Execute() // Set up MSBuild. ReadOnlySpan binaryLoggers = binaryLogger is null ? [] : [binaryLogger.Value]; - IEnumerable loggers = [.. binaryLoggers, consoleLogger]; + ReadOnlySpan consoleLoggers = consoleLogger is null ? [] : [consoleLogger]; + IEnumerable loggers = [.. binaryLoggers, .. consoleLoggers]; var projectCollection = new ProjectCollection( MSBuildArgs.GlobalProperties, loggers, @@ -1165,6 +1170,7 @@ public ProjectInstance CreateProjectInstance(ProjectCollection projectCollection projectCollection, ThrowingReporter, out var project, + projectRootElement: out _, out var evaluatedDirectives, Directives, addGlobalProperties); diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf index 0c3e1c231eb2..5b25a0b4082e 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf @@ -378,12 +378,6 @@ Další informace najdete na https://aka.ms/dotnet-test/mtp. Vytvoří a spravuje certifikáty pro vývoj. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - Odebrány direktivy {0} ({1}) pro {2} z umístění: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' Cílový adresář již existuje: {0}. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf index 71c827109717..6013df11d21e 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf @@ -378,12 +378,6 @@ Weitere Informationen finden Sie unter https://aka.ms/dotnet-test/mtp. Hiermit erstellen und verwalten Sie Entwicklungszertifikate. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - Die „{0}“-Direktiven ({1}) für „{2}“ wurden aus folgender Datei entfernt: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' Das Zielverzeichnis ist bereits vorhanden: "{0}" diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf index 5d5198d5e4d7..808fabcec6f5 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf @@ -378,12 +378,6 @@ Consulte https://aka.ms/dotnet-test/mtp para obtener más información. Crea y administra certificados de desarrollo. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - Se eliminaron las directivas '{0}' ({1}) para '{2}' de: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' El directorio de destino ya existe: "{0}" diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf index 5cbb4801ae70..7298d1c4f990 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf @@ -378,12 +378,6 @@ Pour découvrir plus d’informations, consultez https://aka.ms/dotnet-test/mtp. Créez et gérez des certificats de développement. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - Instructions « {0} » ({1}) supprimées pour « {2} » dans : {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' Le répertoire cible existe déjà : « {0} » diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf index 1517e846f0e5..7ff173c7450f 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf @@ -378,12 +378,6 @@ Per altre informazioni, vedere https://aka.ms/dotnet-test/mtp. Consente di creare e gestire i certificati di sviluppo. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - Sono state rimosse le direttive '{0}' ({1}) per '{2}' da: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' La directory di destinazione esiste già: '{0}' diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index 775a01a53db6..9af952478d44 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -378,12 +378,6 @@ See https://aka.ms/dotnet-test/mtp for more information. 開発証明書を作成し、管理します。 - - Removed '{0}' directives ({1}) for '{2}' from: {3} - '{2}' の '{0}' ディレクティブ ({1}) を次から削除しました: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' ターゲット ディレクトリは既に存在します: '{0}' diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf index 7a5f96cd6908..f5a085361b43 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf @@ -378,12 +378,6 @@ See https://aka.ms/dotnet-test/mtp for more information. 개발 인증서를 만들고 관리합니다. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - 다음에서 '{2}'에 대한 '{0}' 지시문({1})을 제거했습니다. {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' 대상 디렉터리가 이미 있습니다. '{0}' diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf index 8919ef774606..68ff0ba7942d 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf @@ -378,12 +378,6 @@ Aby uzyskać więcej informacji, zobacz https://aka.ms/dotnet-test/mtp. Utwórz certyfikaty deweloperskie i zarządzaj nimi. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - Usunięto dyrektywy „{0}” ({1}) dla „{2}” z pliku: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' Katalog docelowy już istnieje: „{0}” diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf index 37cf2fda2adc..3cee39fa42fa 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf @@ -378,12 +378,6 @@ Consulte https://aka.ms/dotnet-test/mtp para obter mais informações. Crie e gerencie certificados de desenvolvimento. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - Diretivas "{0}" removidas ({1}) para "{2}" de: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' O diretório de destino já existe: "{0}" diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index 69230de66319..4c2f8b799955 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -378,12 +378,6 @@ See https://aka.ms/dotnet-test/mtp for more information. Создание сертификатов разработки и управление ими. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - Удалены директивы "{0}" ({1}) для "{2}" из: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' Целевой каталог уже существует: "{0}" diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf index d8e935cf8383..f2cbb5075f24 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf @@ -378,12 +378,6 @@ Daha fazla bilgi için https://aka.ms/dotnet-test/mtp adresine bakın. Geliştirme sertifikaları oluşturun ve yönetin. - - Removed '{0}' directives ({1}) for '{2}' from: {3} - ‘{2}’ için ‘{0}’ yönergeleri ({1}) şuradan kaldırıldı: {3} - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' Hedef dizin zaten mevcut: '{0}' diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf index 832fdc332137..c851f5d272b1 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf @@ -378,12 +378,6 @@ See https://aka.ms/dotnet-test/mtp for more information. 创建和管理开发证书。 - - Removed '{0}' directives ({1}) for '{2}' from: {3} - 已从 {3} 移除“{2}”的“{0}”指令({1}) - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' 目标目录已存在: '{0}' diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf index e795d89891e2..a70f1ca045af 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf @@ -378,12 +378,6 @@ See https://aka.ms/dotnet-test/mtp for more information. 建立及管理開發憑證。 - - Removed '{0}' directives ({1}) for '{2}' from: {3} - 已從 {3} 移除 '{2}' 的 '{0}' 指令 ({1}) - {0} is a directive kind (like '#:package'). {1} is number of removed directives. - {2} is directive key (e.g., package name). {3} is file path from which directives were removed. - The target directory already exists: '{0}' 目標目錄已存在: '{0}' diff --git a/src/Cli/dotnet/Parser.cs b/src/Cli/dotnet/Parser.cs index 475d59655a3b..e5a241e4a49b 100644 --- a/src/Cli/dotnet/Parser.cs +++ b/src/Cli/dotnet/Parser.cs @@ -97,7 +97,7 @@ private static DotNetCommandDefinition CreateCommand() // https://github.com/NuGet/NuGet.Client/blob/bf048eb714eb6b1912ba868edca4c7cfec454841/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/Why/WhyCommand.cs // Add `why` subcommand to the definition instead. var nugetCommand = rootCommand.NuGetCommand; - NuGet.CommandLine.XPlat.Commands.Why.WhyCommand.GetWhyCommand(nugetCommand); + NuGet.CommandLine.XPlat.Commands.Why.WhyCommand.GetWhyCommand(nugetCommand, NuGetVirtualProjectBuilder.Instance); NuGetCommandParser.ConfigureCommand(nugetCommand); @@ -127,7 +127,7 @@ private static DotNetCommandDefinition CreateCommand() // TODO: https://github.com/dotnet/sdk/issues/52661 // https://github.com/NuGet/NuGet.Client/blob/bf048eb714eb6b1912ba868edca4c7cfec454841/src/NuGet.Core/NuGet.CommandLine.XPlat/NuGetCommands.cs // Add `package` subcommands to the definition instead. - NuGet.CommandLine.XPlat.NuGetCommands.Add(rootCommand, CommonOptions.CreateInteractiveOption(acceptArgument: true)); + NuGet.CommandLine.XPlat.NuGetCommands.Add(rootCommand, CommonOptions.CreateInteractiveOption(acceptArgument: true), NuGetVirtualProjectBuilder.Instance); rootCommand.SetAction(parseResult => { diff --git a/src/Common/EnvironmentVariableNames.cs b/src/Common/EnvironmentVariableNames.cs index 6d73b33ab38f..05eca5456fbe 100644 --- a/src/Common/EnvironmentVariableNames.cs +++ b/src/Common/EnvironmentVariableNames.cs @@ -17,6 +17,7 @@ static class EnvironmentVariableNames public static readonly string DOTNET_CLI_FORCE_UTF8_ENCODING = nameof(DOTNET_CLI_FORCE_UTF8_ENCODING); public static readonly string TELEMETRY_OPTOUT = "DOTNET_CLI_TELEMETRY_OPTOUT"; public static readonly string DOTNET_ROOT = "DOTNET_ROOT"; + public static readonly string DOTNET_HOST_PATH = "DOTNET_HOST_PATH"; public static readonly string DOTNET_MSBUILD_SDK_RESOLVER_ENABLE_LOG = "DOTNET_MSBUILD_SDK_RESOLVER_ENABLE_LOG"; public static readonly string DOTNET_MSBUILD_SDK_RESOLVER_SDKS_DIR = "DOTNET_MSBUILD_SDK_RESOLVER_SDKS_DIR"; public static readonly string DOTNET_MSBUILD_SDK_RESOLVER_SDKS_VER = "DOTNET_MSBUILD_SDK_RESOLVER_SDKS_VER"; diff --git a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs index b4adf03ea70c..f95baaa6a5a2 100644 --- a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs +++ b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs @@ -241,7 +241,8 @@ public static ProjectInstance CreateProjectInstance( projectCollection, (text, path, textSpan, message, _) => errorReporter(path, text.Lines.GetLinePositionSpan(textSpan).Start.Line + 1, message), out var projectInstance, - out _); + projectRootElement: out _, + evaluatedDirectives: out _); return projectInstance; } @@ -250,6 +251,7 @@ internal void CreateProjectInstance( ProjectCollection projectCollection, ErrorReporter reportError, out ProjectInstance project, + out ProjectRootElement projectRootElement, out ImmutableArray evaluatedDirectives, ImmutableArray directives = default, Action>? addGlobalProperties = null, @@ -262,7 +264,7 @@ internal void CreateProjectInstance( directives = FileLevelDirectiveHelpers.FindDirectives(EntryPointSourceFile, validateAllDirectives, reportError); } - (string ProjectFileText, ProjectInstance ProjectInstance)? lastProject = null; + (string ProjectFileText, ProjectInstance ProjectInstance, ProjectRootElement ProjectRootElement)? lastProject = null; // If we evaluated directives previously (e.g., during restore), reuse them. // We don't use the additional properties from `addGlobalProperties` @@ -271,7 +273,7 @@ internal void CreateProjectInstance( cached.Original == directivesOriginal) { evaluatedDirectives = cached.Evaluated; - project = CreateProjectInstanceNoEvaluation( + (project, projectRootElement) = CreateProjectInstanceNoEvaluation( projectCollection, evaluatedDirectives, addGlobalProperties); @@ -289,7 +291,7 @@ internal void CreateProjectInstance( do { // Create a project with properties from #:property directives so they can be expanded inside EvaluateDirectives. - project = CreateProjectInstanceNoEvaluation( + (project, projectRootElement) = CreateProjectInstanceNoEvaluation( projectCollection, [.. evaluatedDirectiveBuilder, .. directives], addGlobalProperties); @@ -302,7 +304,7 @@ internal void CreateProjectInstance( if (fileEvaluatedDirectives != directives) { // This project will contain items from #:include/#:exclude directives which we will traverse recursively. - project = CreateProjectInstanceNoEvaluation( + (project, projectRootElement) = CreateProjectInstanceNoEvaluation( projectCollection, evaluatedDirectiveBuilder.ToImmutable(), addGlobalProperties); @@ -345,7 +347,7 @@ bool TryGetNextFileToProcess() return false; } - ProjectInstance CreateProjectInstanceNoEvaluation( + (ProjectInstance, ProjectRootElement) CreateProjectInstanceNoEvaluation( ProjectCollection projectCollection, ImmutableArray directives, Action>? addGlobalProperties = null) @@ -366,7 +368,7 @@ ProjectInstance CreateProjectInstanceNoEvaluation( // If nothing changed, reuse the previous project instance to avoid unnecessary re-evaluations. if (lastProject is { } cachedProject && cachedProject.ProjectFileText == projectFileText) { - return cachedProject.ProjectInstance; + return (cachedProject.ProjectInstance, cachedProject.ProjectRootElement); } var projectRoot = CreateProjectRootElement(projectFileText, projectCollection); @@ -378,15 +380,15 @@ ProjectInstance CreateProjectInstanceNoEvaluation( addGlobalProperties(globalProperties); } - var result = ProjectInstance.FromProjectRootElement(projectRoot, new ProjectOptions + var project = ProjectInstance.FromProjectRootElement(projectRoot, new ProjectOptions { ProjectCollection = projectCollection, GlobalProperties = globalProperties, }); - lastProject = (projectFileText, result); + lastProject = (projectFileText, project, projectRoot); - return result; + return (project, projectRoot); ProjectRootElement CreateProjectRootElement(string projectFileText, ProjectCollection projectCollection) { diff --git a/test/dotnet.Tests/CommandTests/NuGet/GivenANuGetCommand.cs b/test/dotnet.Tests/CommandTests/NuGet/GivenANuGetCommand.cs index 58f4cf8c6dcd..9b64f46dbe79 100644 --- a/test/dotnet.Tests/CommandTests/NuGet/GivenANuGetCommand.cs +++ b/test/dotnet.Tests/CommandTests/NuGet/GivenANuGetCommand.cs @@ -136,6 +136,54 @@ public void ItHasAWhySubcommand() .And.HaveStdOutContaining("has the following dependency"); } + [Fact] + public void ItHasAWhySubcommand_FileBasedApp() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var file = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(file, $""" + #:package Newtonsoft.Json@{ToolsetInfo.GetNewtonsoftJsonPackageVersion()} + Console.WriteLine(); + """); + + new DotnetCommand(Log, "restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdErr(); + + new DotnetCommand(Log, "nuget", "why", "Program.cs", "newtonsoft.json") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdErr() + .And.HaveStdOutContaining("has the following dependency"); + } + + [Fact] + public void ItHasAWhySubcommand_FileBasedApp_WithOptionsBeforePath() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var file = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(file, $""" + #:package Newtonsoft.Json@{ToolsetInfo.GetNewtonsoftJsonPackageVersion()} + Console.WriteLine(); + """); + + new DotnetCommand(Log, "restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdErr(); + + new DotnetCommand(Log, "nuget", "why", "--framework", ToolsetInfo.CurrentTargetFramework, "Program.cs", "newtonsoft.json") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdErr() + .And.HaveStdOutContaining("has the following dependency"); + } + [Fact] public void ItCanUpdatePackages() { @@ -180,5 +228,56 @@ public void ItCanUpdatePackages() updatedVersion.Should().BeGreaterThan(v1); } + + [Fact] + public void ItCanUpdatePackages_FileBasedApp() + { + // Arrange + var testInstance = _testAssetsManager.CreateTestDirectory(); + var file = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(file, """ + Console.WriteLine(); + """); + + NuGetConfigWriter.Write(testInstance.Path, SdkTestContext.Current.TestPackages); + + new DotnetCommand(Log, "package", "add", "dotnet-hello@1.0.0", "--file", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should() + .Pass() + .And.NotHaveStdErr(); + + // Act + var commandResult = new DotnetCommand(Log, "package", "update", "dotnet-hello", "--file", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should() + .Pass() + .And.NotHaveStdErr(); + + // Assert + var listPackageCommandResult = new DotnetCommand(Log, "package", "list", "--format", "json", "--file", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute(); + listPackageCommandResult.Should() + .Pass() + .And.NotHaveStdErr(); + + var updatedPackageVersionString = JObject.Parse(listPackageCommandResult.StdOut) + .SelectToken("$.projects[0].frameworks[0].topLevelPackages[?(@.id == 'dotnet-hello')].requestedVersion") + .ToString(); + + var v1 = NuGetVersion.Parse("1.0.0"); + var updatedVersion = NuGetVersion.Parse(updatedPackageVersionString); + + updatedVersion.Should().BeGreaterThan(v1); + + File.ReadAllText(file).Should().Be($""" + #:package dotnet-hello@{updatedPackageVersionString} + + Console.WriteLine(); + """); + } } } diff --git a/test/dotnet.Tests/CommandTests/Package/Add/GivenDotnetPackageAdd.cs b/test/dotnet.Tests/CommandTests/Package/Add/GivenDotnetPackageAdd.cs index a3727336d7dd..6d6da4f0fdb9 100644 --- a/test/dotnet.Tests/CommandTests/Package/Add/GivenDotnetPackageAdd.cs +++ b/test/dotnet.Tests/CommandTests/Package/Add/GivenDotnetPackageAdd.cs @@ -363,7 +363,7 @@ public void FileBasedApp_ReplaceExisting( .Should().Pass(); File.ReadAllText(file).Should().Be($""" - #:package Newtonsoft.Json@{ToolsetInfo.GetNewtonsoftJsonPackageVersion()} + #:package {sourceFilePackageId}@{ToolsetInfo.GetNewtonsoftJsonPackageVersion()} Console.WriteLine(); """); } @@ -472,7 +472,7 @@ public void FileBasedApp_VersionAndPrerelease(bool legacyForm, bool versionOptio .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Fail() - .And.HaveStdErrContaining(CliCommandStrings.PrereleaseAndVersionAreNotSupportedAtTheSameTime); + .And.HaveStdOutContaining(CliCommandStrings.PrereleaseAndVersionAreNotSupportedAtTheSameTime); File.ReadAllText(file).Should().Be(source); } @@ -600,27 +600,51 @@ public void FileBasedApp_CentralPackageManagement_ReplaceExisting(bool wasInFile """); - new DotnetCommand(Log, args) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); + var directoryPackagesPropsOriginal = File.ReadAllText(directoryPackagesProps); - File.ReadAllText(file).Should().Be(""" - #:package Newtonsoft.Json + var result = new DotnetCommand(Log, args) + .WithWorkingDirectory(testInstance.Path) + .Execute(); - Console.WriteLine(); - """); + if (wasInFile && !noRestore) + { + // When a version is already pinned in both the #:package directive and + // Directory.Packages.props, this is the same invalid state as a project-based CPM + // app with version on both and . NuGet rejects it. + result.Should().Fail(); + File.ReadAllText(file).Should().Be(source); + File.ReadAllText(directoryPackagesProps).Should().Be(directoryPackagesPropsOriginal); + } + else + { + result.Should().Pass(); - File.ReadAllText(directoryPackagesProps).Should().Be($""" - - - true - - - - - - """); + if (wasInFile) + { + // With --no-restore, NuGet doesn't validate the conflicting state. The command + // succeeds, the source file is unchanged but the CPM version is updated. + File.ReadAllText(file).Should().Be(source); + } + else + { + File.ReadAllText(file).Should().Be(""" + #:package Newtonsoft.Json + + Console.WriteLine(); + """); + } + + File.ReadAllText(directoryPackagesProps).Should().Be($""" + + + true + + + + + + """); + } } [Theory, CombinatorialData] diff --git a/test/dotnet.Tests/CommandTests/Package/List/GivenDotnetListPackage.cs b/test/dotnet.Tests/CommandTests/Package/List/GivenDotnetListPackage.cs index 451ea085133a..709815cedc9f 100644 --- a/test/dotnet.Tests/CommandTests/Package/List/GivenDotnetListPackage.cs +++ b/test/dotnet.Tests/CommandTests/Package/List/GivenDotnetListPackage.cs @@ -165,6 +165,27 @@ public void RestoresAndLists() .And.HaveStdOutContaining("NewtonSoft.Json"); } + [Fact] + public void RestoresAndLists_FileBasedApp() + { + var packageId = "Newtonsoft.Json"; + var packageVersion = ToolsetInfo.GetNewtonsoftJsonPackageVersion(); + + var testInstance = _testAssetsManager.CreateTestDirectory(); + var file = Path.Join(testInstance.Path, "file.cs"); + File.WriteAllText(file, $""" + #:package {packageId}@{packageVersion} + Console.WriteLine(); + """); + + new DotnetCommand(Log, "list", "file.cs", "package") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining(packageId) + .And.HaveStdOutContaining(packageVersion); + } + [Fact] public void ItListsTransitivePackage() { diff --git a/test/dotnet.Tests/CommandTests/Package/Remove/GivenDotnetRemovePackage.cs b/test/dotnet.Tests/CommandTests/Package/Remove/GivenDotnetRemovePackage.cs index 9f52282c8d48..f9f56b2791f1 100644 --- a/test/dotnet.Tests/CommandTests/Package/Remove/GivenDotnetRemovePackage.cs +++ b/test/dotnet.Tests/CommandTests/Package/Remove/GivenDotnetRemovePackage.cs @@ -128,7 +128,7 @@ public void FileBasedApp() .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Pass() - .And.HaveStdOut(string.Format(CliCommandStrings.DirectivesRemoved, "#:package", 1, "Humanizer", file)); + .And.HaveStdOutContaining("Removing PackageReference for package 'Humanizer'"); File.ReadAllText(file).Should().Be(""" Console.WriteLine(); @@ -153,7 +153,7 @@ public void FileBasedApp_Multiple() .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Pass() - .And.HaveStdOut(string.Format(CliCommandStrings.DirectivesRemoved, "#:package", 2, "Humanizer", file)); + .And.HaveStdOutContaining("Removing PackageReference for package 'Humanizer'"); File.ReadAllText(file).Should().Be(""" #:package Another@1.0.0 @@ -176,7 +176,7 @@ public void FileBasedApp_None() .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Fail() - .And.HaveStdOut(string.Format(CliCommandStrings.DirectivesRemoved, "#:package", 0, "Humanizer", file)); + .And.HaveStdOutContaining("does not contain any PackageReference 'Humanizer' to Remove"); File.ReadAllText(file).Should().Be(""" Console.WriteLine(); diff --git a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs index 26b00a68e870..3bb43deb767c 100644 --- a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs +++ b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs @@ -1950,7 +1950,8 @@ private static void Convert( builder.CreateProjectInstance( new ProjectCollection(), errorReporter, - out _, + project: out _, + projectRootElement: out _, out directives); } else diff --git a/test/dotnet.Tests/CommandTests/Reference/List/GivenDotnetListReference.cs b/test/dotnet.Tests/CommandTests/Reference/List/GivenDotnetListReference.cs index c4dfc6144e83..800a92809ffe 100644 --- a/test/dotnet.Tests/CommandTests/Reference/List/GivenDotnetListReference.cs +++ b/test/dotnet.Tests/CommandTests/Reference/List/GivenDotnetListReference.cs @@ -13,25 +13,25 @@ public class GivenDotnetListReference : SdkTest List all project-to-project references of the project. Usage: - dotnet list [] reference [options] + dotnet list [] reference [options] Arguments: - The project file to operate on. If a file is not specified, the command will search the current directory for one. [default: {PathUtilities.EnsureTrailingSlash(defaultVal)}] + The project or solution or C# (file-based program) file to operate on. If a file is not specified, the command will search the current directory for a project or solution. [default: {PathUtilities.EnsureTrailingSlash(defaultVal)}] Options: - -?, -h, --help Show command line help."; + -?, -h, --help Show command line help."; private Func ListCommandHelpText = (defaultVal) => $@"Description: List references or packages of a .NET project. Usage: - dotnet list [] [command] [options] + dotnet list [] [command] [options] Arguments: - The project or solution file to operate on. If a file is not specified, the command will search the current directory for one. [default: {PathUtilities.EnsureTrailingSlash(defaultVal)}] + The project or solution or C# (file-based program) file to operate on. If a file is not specified, the command will search the current directory for a project or solution. [default: {PathUtilities.EnsureTrailingSlash(defaultVal)}] Options: - -?, -h, --help Show command line help. + -?, -h, --help Show command line help. Commands: package List all package references of the project or solution. diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index cab95ebf77b3..6cca02d6f4b3 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -11,6 +11,7 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Text; using Microsoft.DotNet.Cli.Commands; +using Microsoft.DotNet.Cli.Commands.NuGet; using Microsoft.DotNet.Cli.Commands.Run; using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.FileBasedPrograms; @@ -6203,6 +6204,57 @@ public void Api_RunCommand() """); } + [Fact] + public void Api_VirtualProjectBuilder_CreateProjectRootElement() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libDir = Path.Join(testInstance.Path, "Lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + + + """); + + File.WriteAllText(Path.Join(libDir, "Lib.cs"), """ + namespace Lib; + public class LibClass + { + public static string GetMessage() => "Hello from Lib"; + } + """); + + var appDir = Path.Join(testInstance.Path, "App"); + Directory.CreateDirectory(appDir); + + var appPath = Path.Join(appDir, "Program.cs"); + File.WriteAllText(appPath, """ + #:project ../$(LibProjectName) + #:property LibProjectName=Lib + Console.WriteLine(Lib.LibClass.GetMessage()); + """); + + using var projectCollection = new ProjectCollection(); + var projectRootElement = NuGetVirtualProjectBuilder.Instance.CreateProjectRootElement(appPath, projectCollection); + + var xml = projectRootElement.RawXml; + Log.WriteLine(xml); + + xml.Should() + // directives are evaluated + .Contain("""""".Replace('\\', Path.DirectorySeparatorChar)) + // it's the virtual project + .And.Contain("true") + // correct target framework is used + .And.Contain($"{ToolsetInfo.CurrentTargetFramework}"); + + projectRootElement.FullPath.Should().Be(VirtualProjectBuilder.GetVirtualProjectPath(appPath)); + } + [Theory, CombinatorialData] public void EntryPointFilePath(bool cscOnly) { From 27caa2d7f69f4c81738b9ac34254d9d2cdc065aa Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Fri, 10 Apr 2026 13:21:49 -0700 Subject: [PATCH 131/230] Incorporate PR feedback and fork testing for tactics workflow Changes based on PR #53596 review feedback and end-to-end testing in marcpopMSFT/sdk: - Switch trigger from issue_comment to slash_command (name: tactics, events: [pull_request_comment]) - Framework handles command validation, auth/role checks, reactions, and status comments automatically - Remove manual Steps 1-3 (validation, auth, reaction) from agent prompt since slash_command handles them - Use sanitized trigger context (steps.sanitized.outputs.text) for safe input handling - Restrict safe-outputs to update-pull-request and noop only - Removed update-issue and add-labels: agent never modifies the original issue - Removed add-comment: framework auto-posts status comment with noop summary (avoids duplicates) - /tactics reads the issue as additional input context only, always writes tactics to the PR description - Fix tool name references in prompt (use underscored names: update_pull_request, noop) - Remove emoji reaction instructions from prompt (framework handles reactions) - Set noop report-as-issue: false - Upgrade gh-aw to v0.67.4 (pins Copilot CLI to v1.0.20, fixes MCP registry auth issue) - Set update-pull-request target to '*' (required for slash_command's issue_comment event context) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../add-tactics-template-on-comment.lock.yml | 542 +++++++++--------- .../add-tactics-template-on-comment.md | 68 +-- 2 files changed, 272 insertions(+), 338 deletions(-) diff --git a/.github/workflows/add-tactics-template-on-comment.lock.yml b/.github/workflows/add-tactics-template-on-comment.lock.yml index f202f592044b..ca318859cbbe 100644 --- a/.github/workflows/add-tactics-template-on-comment.lock.yml +++ b/.github/workflows/add-tactics-template-on-comment.lock.yml @@ -1,4 +1,5 @@ -# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"01ad8ca7141fcb9b5808ae6845dd1decef839fbdd9ce6a6719beaf76b40cf482","compiler_version":"v0.67.1","strict":true,"agent_id":"copilot"} +# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"5662637b183e8ce51773c7516aef2d06b044db0bf4c66dff4e1526db9db81f9a","compiler_version":"v0.67.4","strict":true,"agent_id":"copilot"} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","COPILOT_PAT_0","COPILOT_PAT_1","COPILOT_PAT_2","COPILOT_PAT_3","COPILOT_PAT_4","COPILOT_PAT_5","COPILOT_PAT_6","COPILOT_PAT_7","COPILOT_PAT_8","COPILOT_PAT_9","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"ed597411d8f924073f98dfc5c65a23a2325f34cd","version":"v8"},{"repo":"actions/upload-artifact","sha":"bbbca2ddaa5d8feaa63e36b76fdaad77386f024f","version":"v7"},{"repo":"github/gh-aw-actions/setup","sha":"9d6ae06250fc0ec536a0e5f35de313b35bad7246","version":"v0.67.4"}]} # ___ _ _ # / _ \ | | (_) # | |_| | __ _ ___ _ __ | |_ _ ___ @@ -13,7 +14,7 @@ # \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ # \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ # -# This file was automatically generated by gh-aw (v0.67.1). DO NOT EDIT. +# This file was automatically generated by gh-aw (v0.67.4). DO NOT EDIT. # # To update this file, edit the corresponding .md file and run: # gh aw compile @@ -43,18 +44,19 @@ # - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 # - actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 # - actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 -# - github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 +# - github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 name: "Add Tactics Template On Comment" "on": issue_comment: types: - created + - edited # steps: # Steps injected into pre-activation job # - name: Checkout the select-copilot-pat action folder # uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # with: - # fetch-depth: 1 + # fetch-depth: 1.0 # persist-credentials: false # sparse-checkout: .github/actions/select-copilot-pat # sparse-checkout-cone-mode: true @@ -76,31 +78,37 @@ name: "Add Tactics Template On Comment" permissions: {} concurrency: - group: "gh-aw-${{ github.workflow }}-${{ github.event.issue.number || github.run_id }}" + group: "gh-aw-${{ github.workflow }}-${{ github.event.issue.number || github.event.pull_request.number || github.run_id }}" run-name: "Add Tactics Template On Comment" jobs: activation: needs: pre_activation - if: needs.pre_activation.outputs.activated == 'true' + if: "needs.pre_activation.outputs.activated == 'true' && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/tactics ') || startsWith(github.event.comment.body, '/tactics\n') || github.event.comment.body == '/tactics') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))" runs-on: ubuntu-slim permissions: + actions: read contents: read + discussions: write + issues: write + pull-requests: write outputs: body: ${{ steps.sanitized.outputs.body }} - comment_id: "" - comment_repo: "" + comment_id: ${{ steps.add-comment.outputs.comment-id }} + comment_repo: ${{ steps.add-comment.outputs.comment-repo }} + comment_url: ${{ steps.add-comment.outputs.comment-url }} lockdown_check_failed: ${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }} model: ${{ steps.generate_aw_info.outputs.model }} secret_verification_result: ${{ steps.validate-secret.outputs.verification_result }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} + slash_command: ${{ needs.pre_activation.outputs.matched_command }} text: ${{ steps.sanitized.outputs.text }} title: ${{ steps.sanitized.outputs.title }} steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -111,16 +119,16 @@ jobs: GH_AW_INFO_ENGINE_ID: "copilot" GH_AW_INFO_ENGINE_NAME: "GitHub Copilot CLI" GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || 'auto' }} - GH_AW_INFO_VERSION: "latest" - GH_AW_INFO_AGENT_VERSION: "latest" - GH_AW_INFO_CLI_VERSION: "v0.67.1" + GH_AW_INFO_VERSION: "1.0.20" + GH_AW_INFO_AGENT_VERSION: "1.0.20" + GH_AW_INFO_CLI_VERSION: "v0.67.4" GH_AW_INFO_WORKFLOW_NAME: "Add Tactics Template On Comment" GH_AW_INFO_EXPERIMENTAL: "false" GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true" GH_AW_INFO_STAGED: "false" GH_AW_INFO_ALLOWED_DOMAINS: '["defaults"]' GH_AW_INFO_FIREWALL_ENABLED: "true" - GH_AW_INFO_AWF_VERSION: "v0.25.13" + GH_AW_INFO_AWF_VERSION: "v0.25.18" GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_COMPILED_STRICT: "true" @@ -131,9 +139,22 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs'); await main(core, context); + - name: Add eyes reaction for immediate feedback + id: react + if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_REACTION: "eyes" + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/add_reaction.cjs'); + await main(); - name: Validate COPILOT_GITHUB_TOKEN secret id: validate-secret - run: ${RUNNER_TEMP}/gh-aw/actions/validate_multi_secret.sh COPILOT_GITHUB_TOKEN 'GitHub Copilot CLI' https://github.github.com/gh-aw/reference/engines/#github-copilot-default + run: bash "${RUNNER_TEMP}/gh-aw/actions/validate_multi_secret.sh" COPILOT_GITHUB_TOKEN 'GitHub Copilot CLI' https://github.github.com/gh-aw/reference/engines/#github-copilot-default env: COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} - name: Checkout .github and .agents folders @@ -159,7 +180,7 @@ jobs: - name: Check compile-agentic version uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 env: - GH_AW_COMPILED_VERSION: "v0.67.1" + GH_AW_COMPILED_VERSION: "v0.67.4" with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); @@ -175,6 +196,18 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/compute_text.cjs'); await main(); + - name: Add comment with workflow run link + id: add-comment + if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/add_workflow_run_comment.cjs'); + await main(); - name: Create prompt with built-in context env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt @@ -188,20 +221,21 @@ jobs: GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} GH_AW_IS_PR_COMMENT: ${{ github.event.issue.pull_request && 'true' || '' }} + GH_AW_STEPS_SANITIZED_OUTPUTS_TEXT: ${{ steps.sanitized.outputs.text }} # poutine:ignore untrusted_checkout_exec run: | - bash ${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh + bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh" { - cat << 'GH_AW_PROMPT_f7cb0ab26633bbf6_EOF' + cat << 'GH_AW_PROMPT_b594d25f08b7370b_EOF' - GH_AW_PROMPT_f7cb0ab26633bbf6_EOF + GH_AW_PROMPT_b594d25f08b7370b_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md" cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md" cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md" cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md" - cat << 'GH_AW_PROMPT_f7cb0ab26633bbf6_EOF' + cat << 'GH_AW_PROMPT_b594d25f08b7370b_EOF' - Tools: add_comment(max:3), update_issue, update_pull_request, add_labels, missing_tool, missing_data, noop + Tools: update_pull_request, missing_tool, missing_data, noop The following GitHub context information is available for this workflow: @@ -231,25 +265,25 @@ jobs: {{/if}} - GH_AW_PROMPT_f7cb0ab26633bbf6_EOF + GH_AW_PROMPT_b594d25f08b7370b_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md" if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md" fi - cat << 'GH_AW_PROMPT_f7cb0ab26633bbf6_EOF' + cat << 'GH_AW_PROMPT_b594d25f08b7370b_EOF' {{#runtime-import .github/workflows/add-tactics-template-on-comment.md}} - GH_AW_PROMPT_f7cb0ab26633bbf6_EOF + GH_AW_PROMPT_b594d25f08b7370b_EOF } > "$GH_AW_PROMPT" - name: Interpolate variables and render templates uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_GITHUB_ACTOR: ${{ github.actor }} - GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }} GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }} GH_AW_GITHUB_REPOSITORY: ${{ github.repository }} GH_AW_GITHUB_RUN_ID: ${{ github.run_id }} + GH_AW_STEPS_SANITIZED_OUTPUTS_TEXT: ${{ steps.sanitized.outputs.text }} with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); @@ -270,6 +304,8 @@ jobs: GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }} GH_AW_IS_PR_COMMENT: ${{ github.event.issue.pull_request && 'true' || '' }} GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: ${{ needs.pre_activation.outputs.activated }} + GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_MATCHED_COMMAND: ${{ needs.pre_activation.outputs.matched_command }} + GH_AW_STEPS_SANITIZED_OUTPUTS_TEXT: ${{ steps.sanitized.outputs.text }} with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); @@ -290,19 +326,21 @@ jobs: GH_AW_GITHUB_RUN_ID: process.env.GH_AW_GITHUB_RUN_ID, GH_AW_GITHUB_WORKSPACE: process.env.GH_AW_GITHUB_WORKSPACE, GH_AW_IS_PR_COMMENT: process.env.GH_AW_IS_PR_COMMENT, - GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: process.env.GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED + GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: process.env.GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED, + GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_MATCHED_COMMAND: process.env.GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_MATCHED_COMMAND, + GH_AW_STEPS_SANITIZED_OUTPUTS_TEXT: process.env.GH_AW_STEPS_SANITIZED_OUTPUTS_TEXT } }); - name: Validate prompt placeholders env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt # poutine:ignore untrusted_checkout_exec - run: bash ${RUNNER_TEMP}/gh-aw/actions/validate_prompt_placeholders.sh + run: bash "${RUNNER_TEMP}/gh-aw/actions/validate_prompt_placeholders.sh" - name: Print prompt env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt # poutine:ignore untrusted_checkout_exec - run: bash ${RUNNER_TEMP}/gh-aw/actions/print_prompt_summary.sh + run: bash "${RUNNER_TEMP}/gh-aw/actions/print_prompt_summary.sh" - name: Upload activation artifact if: success() uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 @@ -341,7 +379,7 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -357,9 +395,9 @@ jobs: with: persist-credentials: false - name: Create gh-aw temp directory - run: bash ${RUNNER_TEMP}/gh-aw/actions/create_gh_aw_tmp_dir.sh + run: bash "${RUNNER_TEMP}/gh-aw/actions/create_gh_aw_tmp_dir.sh" - name: Configure gh CLI for GitHub Enterprise - run: bash ${RUNNER_TEMP}/gh-aw/actions/configure_gh_for_ghe.sh + run: bash "${RUNNER_TEMP}/gh-aw/actions/configure_gh_for_ghe.sh" env: GH_TOKEN: ${{ github.token }} - name: Configure Git credentials @@ -390,11 +428,11 @@ jobs: const { main } = require('${{ runner.temp }}/gh-aw/actions/checkout_pr_branch.cjs'); await main(); - name: Install GitHub Copilot CLI - run: ${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh latest + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.20 env: GH_HOST: github.com - name: Install AWF binary - run: bash ${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh v0.25.13 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.18 - name: Determine automatic lockdown mode for GitHub MCP Server id: determine-automatic-lockdown uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 @@ -406,231 +444,142 @@ jobs: const determineAutomaticLockdown = require('${{ runner.temp }}/gh-aw/actions/determine_automatic_lockdown.cjs'); await determineAutomaticLockdown(github, context, core); - name: Download container images - run: bash ${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh ghcr.io/github/gh-aw-firewall/agent:0.25.13 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.13 ghcr.io/github/gh-aw-firewall/squid:0.25.13 ghcr.io/github/gh-aw-mcpg:v0.2.14 ghcr.io/github/github-mcp-server:v0.32.0 node:lts-alpine + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.18 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.18 ghcr.io/github/gh-aw-firewall/squid:0.25.18 ghcr.io/github/gh-aw-mcpg:v0.2.17 ghcr.io/github/github-mcp-server:v0.32.0 node:lts-alpine - name: Write Safe Outputs Config run: | - mkdir -p ${RUNNER_TEMP}/gh-aw/safeoutputs + mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs" mkdir -p /tmp/gh-aw/safeoutputs mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs - cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/config.json << 'GH_AW_SAFE_OUTPUTS_CONFIG_4ee15e6ef326cc5e_EOF' - {"add_comment":{"max":3},"add_labels":{},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{},"update_issue":{"allow_body":true,"max":1,"target":"*"},"update_pull_request":{"allow_body":true,"allow_title":true,"max":1,"target":"*"}} - GH_AW_SAFE_OUTPUTS_CONFIG_4ee15e6ef326cc5e_EOF + cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_ff4702b8b93aa57a_EOF' + {"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{},"update_pull_request":{"allow_body":true,"allow_title":true,"max":1,"target":"*"}} + GH_AW_SAFE_OUTPUTS_CONFIG_ff4702b8b93aa57a_EOF - name: Write Safe Outputs Tools - run: | - cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/tools_meta.json << 'GH_AW_SAFE_OUTPUTS_TOOLS_META_ded16b126e45dd95_EOF' - { - "description_suffixes": { - "add_comment": " CONSTRAINTS: Maximum 3 comment(s) can be added.", - "update_issue": " CONSTRAINTS: Maximum 1 issue(s) can be updated. Target: *.", - "update_pull_request": " CONSTRAINTS: Maximum 1 pull request(s) can be updated. Target: *." - }, - "repo_params": {}, - "dynamic_tools": [] - } - GH_AW_SAFE_OUTPUTS_TOOLS_META_ded16b126e45dd95_EOF - cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/validation.json << 'GH_AW_SAFE_OUTPUTS_VALIDATION_63b99ee7c6c2a583_EOF' - { - "add_comment": { - "defaultMax": 1, - "fields": { - "body": { - "required": true, - "type": "string", - "sanitize": true, - "maxLength": 65000 - }, - "item_number": { - "issueOrPRNumber": true - }, - "repo": { - "type": "string", - "maxLength": 256 - } - } - }, - "add_labels": { - "defaultMax": 5, - "fields": { - "item_number": { - "issueNumberOrTemporaryId": true - }, - "labels": { - "required": true, - "type": "array", - "itemType": "string", - "itemSanitize": true, - "itemMaxLength": 128 - }, - "repo": { - "type": "string", - "maxLength": 256 - } - } - }, - "missing_data": { - "defaultMax": 20, - "fields": { - "alternatives": { - "type": "string", - "sanitize": true, - "maxLength": 256 - }, - "context": { - "type": "string", - "sanitize": true, - "maxLength": 256 - }, - "data_type": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, - "reason": { - "type": "string", - "sanitize": true, - "maxLength": 256 - } - } - }, - "missing_tool": { - "defaultMax": 20, - "fields": { - "alternatives": { - "type": "string", - "sanitize": true, - "maxLength": 512 - }, - "reason": { - "required": true, - "type": "string", - "sanitize": true, - "maxLength": 256 - }, - "tool": { - "type": "string", - "sanitize": true, - "maxLength": 128 - } - } - }, - "noop": { - "defaultMax": 1, - "fields": { - "message": { - "required": true, - "type": "string", - "sanitize": true, - "maxLength": 65000 + env: + GH_AW_TOOLS_META_JSON: | + { + "description_suffixes": { + "update_pull_request": " CONSTRAINTS: Maximum 1 pull request(s) can be updated. Target: *." + }, + "repo_params": {}, + "dynamic_tools": [] + } + GH_AW_VALIDATION_JSON: | + { + "missing_data": { + "defaultMax": 20, + "fields": { + "alternatives": { + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "context": { + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "data_type": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, + "reason": { + "type": "string", + "sanitize": true, + "maxLength": 256 + } } - } - }, - "report_incomplete": { - "defaultMax": 5, - "fields": { - "details": { - "type": "string", - "sanitize": true, - "maxLength": 65000 - }, - "reason": { - "required": true, - "type": "string", - "sanitize": true, - "maxLength": 1024 + }, + "missing_tool": { + "defaultMax": 20, + "fields": { + "alternatives": { + "type": "string", + "sanitize": true, + "maxLength": 512 + }, + "reason": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 256 + }, + "tool": { + "type": "string", + "sanitize": true, + "maxLength": 128 + } } - } - }, - "update_issue": { - "defaultMax": 1, - "fields": { - "assignees": { - "type": "array", - "itemType": "string", - "itemSanitize": true, - "itemMaxLength": 39 - }, - "body": { - "type": "string", - "sanitize": true, - "maxLength": 65000 - }, - "issue_number": { - "issueOrPRNumber": true - }, - "labels": { - "type": "array", - "itemType": "string", - "itemSanitize": true, - "itemMaxLength": 128 - }, - "milestone": { - "optionalPositiveInteger": true - }, - "operation": { - "type": "string", - "enum": [ - "replace", - "append", - "prepend", - "replace-island" - ] - }, - "repo": { - "type": "string", - "maxLength": 256 - }, - "status": { - "type": "string", - "enum": [ - "open", - "closed" - ] - }, - "title": { - "type": "string", - "sanitize": true, - "maxLength": 128 + }, + "noop": { + "defaultMax": 1, + "fields": { + "message": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 65000 + } } }, - "customValidation": "requiresOneOf:status,title,body" - }, - "update_pull_request": { - "defaultMax": 1, - "fields": { - "body": { - "type": "string", - "sanitize": true, - "maxLength": 65000 - }, - "draft": { - "type": "boolean" - }, - "operation": { - "type": "string", - "enum": [ - "replace", - "append", - "prepend" - ] - }, - "pull_request_number": { - "issueOrPRNumber": true - }, - "repo": { - "type": "string", - "maxLength": 256 - }, - "title": { - "type": "string", - "sanitize": true, - "maxLength": 256 + "report_incomplete": { + "defaultMax": 5, + "fields": { + "details": { + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "reason": { + "required": true, + "type": "string", + "sanitize": true, + "maxLength": 1024 + } } }, - "customValidation": "requiresOneOf:title,body" + "update_pull_request": { + "defaultMax": 1, + "fields": { + "body": { + "type": "string", + "sanitize": true, + "maxLength": 65000 + }, + "draft": { + "type": "boolean" + }, + "operation": { + "type": "string", + "enum": [ + "replace", + "append", + "prepend" + ] + }, + "pull_request_number": { + "issueOrPRNumber": true + }, + "repo": { + "type": "string", + "maxLength": 256 + }, + "title": { + "type": "string", + "sanitize": true, + "maxLength": 256 + } + }, + "customValidation": "requiresOneOf:title,body" + } } - } - GH_AW_SAFE_OUTPUTS_VALIDATION_63b99ee7c6c2a583_EOF - node ${RUNNER_TEMP}/gh-aw/actions/generate_safe_outputs_tools.cjs + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_safe_outputs_tools.cjs'); + await main(); - name: Generate Safe Outputs MCP Server Config id: safe-outputs-config run: | @@ -669,7 +618,7 @@ jobs: export GH_AW_SAFE_OUTPUTS_CONFIG_PATH export GH_AW_MCP_LOG_DIR - bash ${RUNNER_TEMP}/gh-aw/actions/start_safe_outputs_server.sh + bash "${RUNNER_TEMP}/gh-aw/actions/start_safe_outputs_server.sh" - name: Start MCP Gateway id: start-mcp-gateway @@ -696,10 +645,10 @@ jobs: export DEBUG="*" export GH_AW_ENGINE="copilot" - export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.2.14' + export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.2.17' mkdir -p /home/runner/.copilot - cat << GH_AW_MCP_CONFIG_e019437147a17257_EOF | bash ${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh + cat << GH_AW_MCP_CONFIG_54e8e71f80362629_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh" { "mcpServers": { "github": { @@ -740,7 +689,7 @@ jobs: "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" } } - GH_AW_MCP_CONFIG_e019437147a17257_EOF + GH_AW_MCP_CONFIG_54e8e71f80362629_EOF - name: Download activation artifact uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: @@ -748,7 +697,7 @@ jobs: path: /tmp/gh-aw - name: Clean git credentials continue-on-error: true - run: bash ${RUNNER_TEMP}/gh-aw/actions/clean_git_credentials.sh + run: bash "${RUNNER_TEMP}/gh-aw/actions/clean_git_credentials.sh" - name: Execute GitHub Copilot CLI id: agentic_execution # Copilot CLI tool arguments (sorted): @@ -757,8 +706,8 @@ jobs: set -o pipefail touch /tmp/gh-aw/agent-step-summary.md # shellcheck disable=SC1003 - sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --exclude-env GITHUB_MCP_SERVER_TOKEN --exclude-env MCP_GATEWAY_API_KEY --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.13 --skip-pull --enable-api-proxy \ - -- /bin/bash -c '/usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --allow-all-tools --allow-all-paths --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log + sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --exclude-env GITHUB_MCP_SERVER_TOKEN --exclude-env MCP_GATEWAY_API_KEY --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.18 --skip-pull --enable-api-proxy \ + -- /bin/bash -c 'node ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --allow-all-tools --allow-all-paths --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log env: COPILOT_AGENT_RUNNER_TYPE: STANDALONE COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} @@ -767,9 +716,10 @@ jobs: GH_AW_PHASE: agent GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} - GH_AW_VERSION: v0.67.1 + GH_AW_VERSION: v0.67.4 GITHUB_API_URL: ${{ github.api_url }} GITHUB_AW: true + GITHUB_COPILOT_INTEGRATION_ID: agentic-workflows GITHUB_HEAD_REF: ${{ github.head_ref }} GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} GITHUB_REF_NAME: ${{ github.ref_name }} @@ -785,7 +735,7 @@ jobs: id: detect-inference-error if: always() continue-on-error: true - run: bash ${RUNNER_TEMP}/gh-aw/actions/detect_inference_access_error.sh + run: bash "${RUNNER_TEMP}/gh-aw/actions/detect_inference_access_error.sh" - name: Configure Git credentials env: REPO_NAME: ${{ github.repository }} @@ -802,7 +752,7 @@ jobs: - name: Copy Copilot session state files to logs if: always() continue-on-error: true - run: bash ${RUNNER_TEMP}/gh-aw/actions/copy_copilot_session_state.sh + run: bash "${RUNNER_TEMP}/gh-aw/actions/copy_copilot_session_state.sh" - name: Stop MCP Gateway if: always() continue-on-error: true @@ -811,7 +761,7 @@ jobs: MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }} GATEWAY_PID: ${{ steps.start-mcp-gateway.outputs.gateway-pid }} run: | - bash ${RUNNER_TEMP}/gh-aw/actions/stop_mcp_gateway.sh "$GATEWAY_PID" + bash "${RUNNER_TEMP}/gh-aw/actions/stop_mcp_gateway.sh" "$GATEWAY_PID" - name: Redact secrets in logs if: always() uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 @@ -839,7 +789,7 @@ jobs: SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Append agent step summary if: always() - run: bash ${RUNNER_TEMP}/gh-aw/actions/append_agent_step_summary.sh + run: bash "${RUNNER_TEMP}/gh-aw/actions/append_agent_step_summary.sh" - name: Copy Safe Outputs if: always() env: @@ -856,6 +806,7 @@ jobs: GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" GITHUB_SERVER_URL: ${{ github.server_url }} GITHUB_API_URL: ${{ github.api_url }} + GH_AW_COMMAND: tactics with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); @@ -955,8 +906,6 @@ jobs: runs-on: ubuntu-slim permissions: contents: read - discussions: write - issues: write pull-requests: write concurrency: group: "gh-aw-conclusion-add-tactics-template-on-comment" @@ -969,7 +918,7 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -997,7 +946,7 @@ jobs: GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} - GH_AW_NOOP_REPORT_AS_ISSUE: "true" + GH_AW_NOOP_REPORT_AS_ISSUE: "false" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -1005,7 +954,7 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_noop_message.cjs'); await main(); - - name: Record Missing Tool + - name: Record missing tool id: missing_tool uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 env: @@ -1019,7 +968,7 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/missing_tool.cjs'); await main(); - - name: Record Incomplete + - name: Record incomplete id: report_incomplete uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 env: @@ -1033,7 +982,7 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/report_incomplete_handler.cjs'); await main(); - - name: Handle Agent Failure + - name: Handle agent failure id: handle_agent_failure if: always() uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 @@ -1058,6 +1007,24 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_agent_failure.cjs'); await main(); + - name: Update reaction comment with completion status + id: conclusion + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_COMMENT_ID: ${{ needs.activation.outputs.comment_id }} + GH_AW_COMMENT_REPO: ${{ needs.activation.outputs.comment_repo }} + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" + GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} + GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.outputs.detection_conclusion }} + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/notify_comment_error.cjs'); + await main(); detection: needs: @@ -1074,7 +1041,7 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -1100,7 +1067,7 @@ jobs: persist-credentials: false # --- Threat Detection --- - name: Download container images - run: bash ${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh ghcr.io/github/gh-aw-firewall/agent:0.25.13 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.13 ghcr.io/github/gh-aw-firewall/squid:0.25.13 + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.18 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.18 ghcr.io/github/gh-aw-firewall/squid:0.25.18 - name: Check if detection needed id: detection_guard if: always() @@ -1154,11 +1121,11 @@ jobs: mkdir -p /tmp/gh-aw/threat-detection touch /tmp/gh-aw/threat-detection/detection.log - name: Install GitHub Copilot CLI - run: ${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh latest + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.20 env: GH_HOST: github.com - name: Install AWF binary - run: bash ${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh v0.25.13 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.18 - name: Execute GitHub Copilot CLI if: always() && steps.detection_guard.outputs.run_detection == 'true' id: detection_agentic_execution @@ -1168,17 +1135,18 @@ jobs: set -o pipefail touch /tmp/gh-aw/agent-step-summary.md # shellcheck disable=SC1003 - sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,github.com,host.docker.internal,telemetry.enterprise.githubcopilot.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.13 --skip-pull --enable-api-proxy \ - -- /bin/bash -c '/usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --allow-all-tools --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/threat-detection/detection.log + sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,github.com,host.docker.internal,telemetry.enterprise.githubcopilot.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.18 --skip-pull --enable-api-proxy \ + -- /bin/bash -c 'node ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --allow-all-tools --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/threat-detection/detection.log env: COPILOT_AGENT_RUNNER_TYPE: STANDALONE COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} COPILOT_MODEL: ${{ vars.GH_AW_MODEL_DETECTION_COPILOT || '' }} GH_AW_PHASE: detection GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt - GH_AW_VERSION: v0.67.1 + GH_AW_VERSION: v0.67.4 GITHUB_API_URL: ${{ github.api_url }} GITHUB_AW: true + GITHUB_COPILOT_INTEGRATION_ID: agentic-workflows GITHUB_HEAD_REF: ${{ github.head_ref }} GITHUB_REF_NAME: ${{ github.ref_name }} GITHUB_SERVER_URL: ${{ github.server_url }} @@ -1210,21 +1178,22 @@ jobs: await main(); pre_activation: + if: "github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/tactics ') || startsWith(github.event.comment.body, '/tactics\n') || github.event.comment.body == '/tactics') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment')" runs-on: ubuntu-slim outputs: - activated: ${{ steps.check_membership.outputs.is_team_member == 'true' }} + activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }} copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} - matched_command: '' + matched_command: ${{ steps.check_command_position.outputs.matched_command }} select-copilot-pat_result: ${{ steps.select-copilot-pat.outcome }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} - - name: Check team membership for workflow + - name: Check team membership for command workflow id: check_membership uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 env: @@ -1236,6 +1205,17 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Check command position + id: check_command_position + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_COMMANDS: "[\"tactics\"]" + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); + await main(); - name: Checkout the select-copilot-pat action folder uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: @@ -1267,8 +1247,6 @@ jobs: runs-on: ubuntu-slim permissions: contents: read - discussions: write - issues: write pull-requests: write timeout-minutes: 15 env: @@ -1281,8 +1259,6 @@ jobs: outputs: code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }} code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }} - comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }} - comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }} create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }} create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }} process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }} @@ -1290,7 +1266,7 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@80471a493be8c528dd27daf73cd644242a7965e0 # v0.67.1 + uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -1326,7 +1302,7 @@ jobs: GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" GITHUB_SERVER_URL: ${{ github.server_url }} GITHUB_API_URL: ${{ github.api_url }} - GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"add_comment\":{\"max\":3},\"add_labels\":{},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"},\"report_incomplete\":{},\"update_issue\":{\"allow_body\":true,\"max\":1,\"target\":\"*\"},\"update_pull_request\":{\"allow_body\":true,\"allow_title\":true,\"max\":1,\"target\":\"*\"}}" + GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"false\"},\"report_incomplete\":{},\"update_pull_request\":{\"allow_body\":true,\"allow_title\":true,\"max\":1,\"target\":\"*\"}}" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -1334,11 +1310,11 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/safe_output_handler_manager.cjs'); await main(); - - name: Upload Safe Output Items + - name: Upload Safe Outputs Items if: always() uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 with: - name: safe-output-items + name: safe-outputs-items path: /tmp/gh-aw/safe-output-items.jsonl if-no-files-found: ignore diff --git a/.github/workflows/add-tactics-template-on-comment.md b/.github/workflows/add-tactics-template-on-comment.md index 2a7cb642968e..6baceb623c6c 100644 --- a/.github/workflows/add-tactics-template-on-comment.md +++ b/.github/workflows/add-tactics-template-on-comment.md @@ -9,18 +9,15 @@ network: - defaults safe-outputs: - add-comment: - max: 3 - add-labels: - update-issue: - target: "*" update-pull-request: target: "*" noop: + report-as-issue: false on: - issue_comment: - types: [created] + slash_command: + name: tactics + events: [pull_request_comment] # ############################################################### # Override the COPILOT_GITHUB_TOKEN secret usage for the workflow @@ -79,36 +76,19 @@ You are an expert .NET SDK engineer who helps fill in "tactics" for servicing pu ### Trigger Context -- **Comment ID**: `${{ github.event.comment.id }}` - **Issue/PR number**: `${{ github.event.issue.number }}` - **Repository**: `${{ github.repository }}` - **Triggering actor**: `${{ github.actor }}` - **Run URL**: `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}` +- **Sanitized trigger context**: "${{ steps.sanitized.outputs.text }}" ### Your Task Follow these steps precisely: -#### Step 1: Validate the command - -Use the GitHub API to fetch the comment with ID `${{ github.event.comment.id }}` on issue/PR #`${{ github.event.issue.number }}` in this repository. Read its body text. - -The comment body **must** start with `/tactics` (case-insensitive). The comment may optionally include an issue number after the command (e.g. `/tactics 12345`). - -- If the comment does **not** start with `/tactics`, call the `noop` tool with a message indicating the comment was not a `/tactics` command and stop. Do nothing else. -- Use the GitHub API to check if issue #`${{ github.event.issue.number }}` is a pull request. If it is **not** a pull request, call the `noop` tool noting this command only works on PRs and stop. - -#### Step 2: Verify authorization +#### Step 1: Gather PR context -Use the GitHub API to check the repository collaborator permission level for `${{ github.actor }}`. - -- If the actor does **not** have write or admin access, use the `add-comment` tool to post a comment on PR #`${{ github.event.issue.number }}` explaining that only collaborators with write access may trigger this workflow, then stop. - -#### Step 3: React to the request - -Add an 👀 (eyes) reaction to the triggering comment (comment ID: `${{ github.event.comment.id }}`) to signal that the workflow has started. - -#### Step 4: Gather PR context +The `/tactics` command may optionally include an issue number (e.g. `/tactics 12345`). Parse the sanitized trigger context above to extract any issue number provided after the command. For PR #`${{ github.event.issue.number }}`, gather the following information: @@ -118,7 +98,7 @@ For PR #`${{ github.event.issue.number }}`, gather the following information: 4. **Review comments**: all non-bot code-level review comments, including which file they reference 5. **Linked issue**: If the `/tactics` command included an issue number, use that. Otherwise, parse the PR body for keywords like `fixes #N`, `closes #N`, or `resolves #N` to find a linked issue. If found, fetch the issue title and body. -#### Step 5: Generate tactics +#### Step 2: Generate tactics Based on all the gathered context, produce a tactics analysis following this exact template. Be specific and detailed—avoid vague statements. Do not speculate or invent details not present in the context. If information for a section is genuinely unavailable, say so clearly. @@ -154,44 +134,22 @@ The output format must be exactly: [your text] ``` -#### Step 6: Apply tactics and report status - -**If a linked issue was found:** +#### Step 3: Apply tactics and report status -1. Update the issue body by adding (or replacing) a tactics section delimited by `` and `` markers. The section should contain: +1. Use the `update_pull_request` tool to update the **PR description** by adding (or replacing) a tactics section delimited by `` and `` markers. The section should contain: ``` ## Tactics - *Generated from PR #[PR number]* - [generated tactics content] ``` If the markers already exist in the body, replace the content between them. Otherwise, append the block at the end. -2. Add the `Servicing-consider` label to the issue. - -3. Post a comment on the PR: "✅ Tactics have been added to issue #[issue number] and the `Servicing-consider` label has been applied. See [workflow details](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})." - -4. Add a 👍 (+1) reaction to the triggering comment. - -**If no linked issue was found:** - -1. Update the **PR description** instead, using the same `` / `` markers, with a note that no linked issue was found. +2. If a linked issue was found and used as input, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description using context from issue #[issue number]." Include the PR number and a brief snippet of the generated tactics summary. -2. Post a comment on the PR: "⚠️ No linked issue found for this PR. Tactics have been added to the PR description instead. To apply tactics to a specific issue, use `/tactics `. See [workflow details](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})." - -3. Add a 👍 (+1) reaction to the triggering comment. - -#### Step 7: Report completion - -Call the `noop` tool with a well-formatted markdown summary of what was done, including the PR number, issue number (if applicable), and a brief snippet of the generated tactics. +3. If no linked issue was found, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description." Include the PR number and a brief snippet of the generated tactics summary. ### Error Handling -If any step fails unexpectedly: - -1. Post a comment on PR #`${{ github.event.issue.number }}`: "❌ Failed to generate or apply tactics. Please check [the workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details." -2. Add a 😕 (confused) reaction to the triggering comment (ID: `${{ github.event.comment.id }}`). -3. Call the `noop` tool with the error details. +If any step fails unexpectedly, call the `noop` tool with a markdown summary including "❌ Failed to generate or apply tactics" and the error details. The framework will post the failure status automatically. From 90c2460bb53268e24fb66cc441a6e7a34cb53994 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 11 Apr 2026 10:09:20 +0200 Subject: [PATCH 132/230] [release/10.0.1xx] Fix working directory of simple file-based apps (#53803) Co-authored-by: Jan Jones --- src/Cli/dotnet/Commands/Run/RunCommand.cs | 3 +- .../CommandTests/Run/RunFileTests.cs | 124 +++++++++++++++++- 2 files changed, 122 insertions(+), 5 deletions(-) diff --git a/src/Cli/dotnet/Commands/Run/RunCommand.cs b/src/Cli/dotnet/Commands/Run/RunCommand.cs index 542fc76ffbcd..c1fc0d0ff9a2 100644 --- a/src/Cli/dotnet/Commands/Run/RunCommand.cs +++ b/src/Cli/dotnet/Commands/Run/RunCommand.cs @@ -469,8 +469,7 @@ static ICommand CreateCommandForCscBuiltProgram(string entryPointFileFullPath, s var artifactsPath = VirtualProjectBuildingCommand.GetArtifactsPath(entryPointFileFullPath); var exePath = Path.Join(artifactsPath, "bin", "debug", Path.GetFileNameWithoutExtension(entryPointFileFullPath) + FileNameSuffixes.CurrentPlatform.Exe); var commandSpec = new CommandSpec(path: exePath, args: ArgumentEscaper.EscapeAndConcatenateArgArrayForProcessStart(args)); - var command = CommandFactoryUsingResolver.Create(commandSpec) - .WorkingDirectory(Path.GetDirectoryName(entryPointFileFullPath)); + var command = CommandFactoryUsingResolver.Create(commandSpec); SetRootVariableName( command, diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index 145200be148c..044f3bdd8419 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -866,6 +866,124 @@ public void EmptyFile() .And.HaveStdOutContaining("error CS5001:"); // Program does not contain a static 'Main' method suitable for an entry point } + /// + /// See . + /// + [Theory, CombinatorialData] + public void WorkingDirectory(bool cscOnly) + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: cscOnly ? OutOfTreeBaseDirectory : null); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + + var code = """ + Console.WriteLine("v1"); + Console.WriteLine(Environment.CurrentDirectory); + Console.WriteLine(Directory.GetCurrentDirectory()); + Console.WriteLine(new DirectoryInfo(".").FullName); + Console.WriteLine(AppContext.GetData("EntryPointFileDirectoryPath")); + """; + + File.WriteAllText(programPath, code); + + var workDir = TestPathUtility.ResolveTempPrefixLink(Path.GetTempPath()).TrimEnd(Path.DirectorySeparatorChar); + + var artifactsDir = VirtualProjectBuildingCommand.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, + expectedLevel: cscOnly ? BuildLevel.Csc : BuildLevel.All, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v1", workDir)); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, + expectedLevel: BuildLevel.Csc, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v2", workDir)); + + string GetExpectedOutput(string version, string workDir) => $""" + {version} + {workDir} + {workDir} + {workDir} + {Path.GetDirectoryName(programPath)} + """; + } + + /// + /// Combination of and . + /// + [Fact] + public void WorkingDirectory_CscOnly_AfterMSBuild() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + + var code = """ + #:property Configuration=Release + Console.WriteLine("v1"); + Console.WriteLine(Environment.CurrentDirectory); + Console.WriteLine(Directory.GetCurrentDirectory()); + Console.WriteLine(new DirectoryInfo(".").FullName); + Console.WriteLine(AppContext.GetData("EntryPointFileDirectoryPath")); + """; + + File.WriteAllText(programPath, code); + + var workDir = TestPathUtility.ResolveTempPrefixLink(Path.GetTempPath()).TrimEnd(Path.DirectorySeparatorChar); + + var artifactsDir = VirtualProjectBuildingCommand.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, + expectedLevel: BuildLevel.All, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v1", workDir)); + + Build(testInstance, + expectedLevel: BuildLevel.None, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v1", workDir)); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, + expectedLevel: BuildLevel.Csc, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v2", workDir)); + + // Can be overridden with a #:property. + var workDir2 = Path.Join(testInstance.Path, "dir2"); + Directory.CreateDirectory(workDir2); + code = $""" + #:property RunWorkingDirectory={workDir2} + {code} + """; + File.WriteAllText(programPath, code); + + Build(testInstance, + expectedLevel: BuildLevel.All, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v2", workDir2)); + + string GetExpectedOutput(string version, string workDir) => $""" + {version} + {workDir} + {workDir} + {workDir} + {Path.GetDirectoryName(programPath)} + """; + } + /// /// Implicit build files have an effect. /// @@ -3134,7 +3252,7 @@ Release config Build(testInstance, BuildLevel.Csc); } - private void Build(TestDirectory testInstance, BuildLevel expectedLevel, ReadOnlySpan args = default, string expectedOutput = "Hello from Program", string programFileName = "Program.cs") + private void Build(TestDirectory testInstance, BuildLevel expectedLevel, ReadOnlySpan args = default, string expectedOutput = "Hello from Program", string programFileName = "Program.cs", string? workDir = null) { string prefix = expectedLevel switch { @@ -3145,12 +3263,12 @@ private void Build(TestDirectory testInstance, BuildLevel expectedLevel, ReadOnl }; new DotnetCommand(Log, ["run", programFileName, "-bl", .. args]) - .WithWorkingDirectory(testInstance.Path) + .WithWorkingDirectory(workDir ?? testInstance.Path) .Execute() .Should().Pass() .And.HaveStdOut(prefix + expectedOutput); - var binlogs = new DirectoryInfo(testInstance.Path) + var binlogs = new DirectoryInfo(workDir ?? testInstance.Path) .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly); binlogs.Select(f => f.Name) From 0a8a0b120a6445a6bd4ef3d6e6d2d0de61338651 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 11 Apr 2026 08:10:19 +0000 Subject: [PATCH 133/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 266 +++++++-------- eng/Version.Details.xml | 673 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 475 insertions(+), 474 deletions(-) diff --git a/NuGet.config b/NuGet.config index e226baf9b0b6..903609549285 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 94492476bae6..1a73d58a3c79 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,139 +8,139 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-preview.26203.109 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26203-109 - 7.0.2-rc.20409 - 10.0.106 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.0-preview.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 2.0.0-preview.1.26203.109 - 2.2.6 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26203.109 - 10.0.6 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26202.103 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26202-103 + 7.3.0-rc.20303 + 10.0.202 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.0-preview.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26202.103 + 10.0.4 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26203.109 - 10.0.6-servicing.26203.109 - 18.0.2-release-26203-109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 18.0.2-release-26203-109 - 18.0.2-release-26203-109 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26202.103 + 10.0.4-servicing.26119.110 + 18.3.0-release-26202-103 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 18.3.0-release-26202-103 + 18.3.0-release-26202-103 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 2.3.0-preview.26202.5 4.3.0-preview.26202.5 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 3a7cdb3a56c8..a1ff22313714 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 https://github.com/microsoft/testfx @@ -569,9 +568,9 @@ https://github.com/microsoft/testfx cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 6f9207378ac4..0552121a41ea 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.109", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.109", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26202.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26202.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From e2a4d88e75fc01458062141027208c854a1bf4f3 Mon Sep 17 00:00:00 2001 From: "Donna Chen (BEYONDSOFT CONSULTING INC)" Date: Mon, 13 Apr 2026 14:35:35 +0800 Subject: [PATCH 134/230] Revert the change on RunFileTests.cs --- .../CommandTests/Run/RunFileTests.cs | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index 976ba34a730f..166bee41841e 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Runtime.Versioning; @@ -1012,7 +1012,7 @@ public void WorkingDirectory(bool cscOnly) var workDir = TestPathUtility.ResolveTempPrefixLink(Path.GetTempPath()).TrimEnd(Path.DirectorySeparatorChar); - var artifactsDir = VirtualProjectBuildingCommand.GetArtifactsPath(programPath); + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); Build(testInstance, @@ -1061,7 +1061,7 @@ public void WorkingDirectory_CscOnly_AfterMSBuild() var workDir = TestPathUtility.ResolveTempPrefixLink(Path.GetTempPath()).TrimEnd(Path.DirectorySeparatorChar); - var artifactsDir = VirtualProjectBuildingCommand.GetArtifactsPath(programPath); + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); Build(testInstance, @@ -3523,7 +3523,14 @@ Release config Build(testInstance, BuildLevel.Csc); } - private void Build(TestDirectory testInstance, BuildLevel expectedLevel, ReadOnlySpan args = default, string expectedOutput = "Hello from Program", string programFileName = "Program.cs", string? workDir = null) + private void Build( + TestDirectory testInstance, + BuildLevel expectedLevel, + ReadOnlySpan args = default, + string expectedOutput = "Hello from Program", + string programFileName = "Program.cs", + string? workDir = null, + Func? customizeCommand = null) { string prefix = expectedLevel switch { @@ -3533,13 +3540,18 @@ private void Build(TestDirectory testInstance, BuildLevel expectedLevel, ReadOnl _ => throw new ArgumentOutOfRangeException(paramName: nameof(expectedLevel)), }; - new DotnetCommand(Log, ["run", programFileName, "-bl", .. args]) - .WithWorkingDirectory(workDir ?? testInstance.Path) - .Execute() + var command = new DotnetCommand(Log, ["run", programFileName, "-bl", .. args]) + .WithWorkingDirectory(workDir ?? testInstance.Path); + + if (customizeCommand != null) + { + command = customizeCommand(command); + } + + command.Execute() .Should().Pass() .And.HaveStdOut(prefix + expectedOutput); - var binlogs = new DirectoryInfo(workDir ?? testInstance.Path) var binlogs = new DirectoryInfo(workDir ?? testInstance.Path) .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly); From 37730698d53edc963fff5ec2548377d5e9ad042c Mon Sep 17 00:00:00 2001 From: "Donna Chen (BEYONDSOFT CONSULTING INC)" Date: Mon, 13 Apr 2026 14:42:06 +0800 Subject: [PATCH 135/230] Revert the change on RunFileTests.cs --- test/dotnet.Tests/CommandTests/Run/RunFileTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index 166bee41841e..e775adea5da0 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Runtime.Versioning; From efcd7c0066c95a4ae21efde6934eaa4596da3b69 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Mon, 13 Apr 2026 19:43:33 +0200 Subject: [PATCH 136/230] Fix `dotnet clean file-based-apps` in docs (#53806) --- documentation/general/dotnet-run-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/general/dotnet-run-file.md b/documentation/general/dotnet-run-file.md index 9636bc0ff88b..9b731cc3e561 100644 --- a/documentation/general/dotnet-run-file.md +++ b/documentation/general/dotnet-run-file.md @@ -167,7 +167,7 @@ removes current user's `dotnet run` build outputs that haven't been used in 30 d They are not cleaned immediately because they can be re-used on subsequent runs for better performance. The automatic cleanup can be disabled by environment variable `DOTNET_CLI_DISABLE_FILE_BASED_APP_ARTIFACTS_AUTOMATIC_CLEANUP=true`, but other parameters of the automatic cleanup are currently not configurable. -The same cleanup can be performed manually via command `dotnet clean-file-based-app-artifacts`. +The same cleanup can be performed manually via command `dotnet clean file-based-apps`. ## Directives for project metadata From 775c884a50c59e4b7aca37a1da42227a8a1a0f0a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 14 Apr 2026 07:06:32 +0000 Subject: [PATCH 137/230] Reset files to release/10.0.1xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 52 +- eng/Version.Details.props | 290 +++++ eng/Version.Details.xml | 1081 ++++++++--------- eng/common/CIBuild.cmd | 2 +- eng/common/SetupNugetSources.ps1 | 90 +- eng/common/SetupNugetSources.sh | 192 +-- eng/common/build.ps1 | 11 +- eng/common/build.sh | 33 +- eng/common/cibuild.sh | 2 +- eng/common/core-templates/job/job.yml | 48 +- eng/common/core-templates/job/onelocbuild.yml | 39 +- .../job/publish-build-assets.yml | 83 +- .../core-templates/job/source-build.yml | 15 +- .../job/source-index-stage1.yml | 47 +- .../core-templates/jobs/codeql-build.yml | 1 - eng/common/core-templates/jobs/jobs.yml | 15 +- .../core-templates/jobs/source-build.yml | 23 +- .../core-templates/post-build/post-build.yml | 42 +- .../steps/cleanup-microbuild.yml | 28 + .../core-templates/steps/generate-sbom.yml | 2 +- .../steps/get-delegation-sas.yml | 11 +- .../steps/install-microbuild.yml | 110 ++ .../core-templates/steps/publish-logs.yml | 8 +- .../core-templates/steps/source-build.yml | 88 +- .../steps/source-index-stage1-publish.yml | 35 + eng/common/cross/arm64/tizen/tizen.patch | 2 +- eng/common/cross/build-android-rootfs.sh | 49 +- eng/common/cross/build-rootfs.sh | 237 ++-- eng/common/cross/install-debs.py | 334 +++++ eng/common/cross/tizen-build-rootfs.sh | 0 eng/common/cross/tizen-fetch.sh | 9 +- eng/common/cross/toolchain.cmake | 82 +- eng/common/darc-init.sh | 2 +- eng/common/dotnet.cmd | 7 + eng/common/dotnet.ps1 | 11 + eng/common/dotnet.sh | 26 + eng/common/generate-locproject.ps1 | 49 +- eng/common/generate-sbom-prep.sh | 0 eng/common/native/install-dependencies.sh | 62 + eng/common/post-build/publish-using-darc.ps1 | 9 +- eng/common/post-build/redact-logs.ps1 | 5 +- eng/common/sdk-task.ps1 | 14 +- eng/common/sdk-task.sh | 121 ++ eng/common/sdl/packages.config | 2 +- eng/common/templates-official/job/job.yml | 4 +- .../steps/publish-build-artifacts.yml | 7 +- .../steps/source-index-stage1-publish.yml | 7 + .../variables/pool-providers.yml | 2 +- eng/common/templates/job/job.yml | 4 +- .../steps/publish-build-artifacts.yml | 8 +- .../steps/source-index-stage1-publish.yml | 7 + eng/common/templates/steps/vmr-sync.yml | 186 +++ .../templates/variables/pool-providers.yml | 2 +- eng/common/templates/vmr-build-pr.yml | 43 + eng/common/tools.ps1 | 71 +- eng/common/tools.sh | 81 +- eng/common/vmr-sync.ps1 | 164 +++ eng/common/vmr-sync.sh | 227 ++++ global.json | 21 +- 59 files changed, 2940 insertions(+), 1263 deletions(-) create mode 100644 eng/Version.Details.props mode change 100644 => 100755 eng/common/SetupNugetSources.sh create mode 100644 eng/common/core-templates/steps/cleanup-microbuild.yml create mode 100644 eng/common/core-templates/steps/install-microbuild.yml create mode 100644 eng/common/core-templates/steps/source-index-stage1-publish.yml create mode 100755 eng/common/cross/install-debs.py mode change 100644 => 100755 eng/common/cross/tizen-build-rootfs.sh mode change 100644 => 100755 eng/common/cross/tizen-fetch.sh create mode 100644 eng/common/dotnet.cmd create mode 100644 eng/common/dotnet.ps1 create mode 100755 eng/common/dotnet.sh mode change 100644 => 100755 eng/common/generate-sbom-prep.sh create mode 100755 eng/common/native/install-dependencies.sh create mode 100755 eng/common/sdk-task.sh create mode 100644 eng/common/templates-official/steps/source-index-stage1-publish.yml create mode 100644 eng/common/templates/steps/source-index-stage1-publish.yml create mode 100644 eng/common/templates/steps/vmr-sync.yml create mode 100644 eng/common/templates/vmr-build-pr.yml create mode 100755 eng/common/vmr-sync.ps1 create mode 100755 eng/common/vmr-sync.sh diff --git a/NuGet.config b/NuGet.config index 4460caf81a88..e226baf9b0b6 100644 --- a/NuGet.config +++ b/NuGet.config @@ -3,44 +3,15 @@ - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - @@ -51,6 +22,8 @@ + + @@ -60,19 +33,14 @@ + + + - - - - - - - - diff --git a/eng/Version.Details.props b/eng/Version.Details.props new file mode 100644 index 000000000000..94492476bae6 --- /dev/null +++ b/eng/Version.Details.props @@ -0,0 +1,290 @@ + + + + + 2.1.0 + + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.0-preview.26203.109 + 10.0.6 + 10.0.6 + 18.0.11 + 18.0.11-servicing-26203-109 + 7.0.2-rc.20409 + 10.0.106 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 10.0.0-preview.26203.109 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 2.0.0-preview.1.26203.109 + 2.2.6 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6-servicing.26203.109 + 10.0.0-beta.26203.109 + 10.0.0-beta.26203.109 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 14.0.106-servicing.26203.109 + 10.0.6 + 5.0.0-2.26203.109 + 5.0.0-2.26203.109 + 10.0.6-servicing.26203.109 + 10.0.6 + 10.0.6 + 10.0.0-preview.7.25377.103 + 10.0.0-preview.26203.109 + 10.0.6-servicing.26203.109 + 18.0.2-release-26203-109 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106 + 10.0.106-servicing.26203.109 + 10.0.106 + 10.0.106-servicing.26203.109 + 10.0.106 + 10.0.106 + 10.0.106-servicing.26203.109 + 18.0.2-release-26203-109 + 18.0.2-release-26203-109 + 3.2.6 + 10.0.6 + 10.0.6-servicing.26203.109 + 10.0.6 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 7.0.2-rc.20409 + 10.0.6 + 2.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + + 2.3.0-preview.26202.5 + 4.3.0-preview.26202.5 + + + + + $(NETStandardLibraryRefPackageVersion) + + $(dotnetdevcertsPackageVersion) + $(dotnetuserjwtsPackageVersion) + $(dotnetusersecretsPackageVersion) + $(MicrosoftAspNetCoreAnalyzersPackageVersion) + $(MicrosoftAspNetCoreAppRefPackageVersion) + $(MicrosoftAspNetCoreAppRefInternalPackageVersion) + $(MicrosoftAspNetCoreAuthenticationFacebookPackageVersion) + $(MicrosoftAspNetCoreAuthenticationGooglePackageVersion) + $(MicrosoftAspNetCoreAuthenticationMicrosoftAccountPackageVersion) + $(MicrosoftAspNetCoreAuthorizationPackageVersion) + $(MicrosoftAspNetCoreComponentsPackageVersion) + $(MicrosoftAspNetCoreComponentsAnalyzersPackageVersion) + $(MicrosoftAspNetCoreComponentsFormsPackageVersion) + $(MicrosoftAspNetCoreComponentsSdkAnalyzersPackageVersion) + $(MicrosoftAspNetCoreComponentsWebPackageVersion) + $(MicrosoftAspNetCoreComponentsWebAssemblyPackageVersion) + $(MicrosoftAspNetCoreComponentsWebAssemblyServerPackageVersion) + $(MicrosoftAspNetCoreComponentsWebViewPackageVersion) + $(MicrosoftAspNetCoreDeveloperCertificatesXPlatPackageVersion) + $(MicrosoftAspNetCoreMetadataPackageVersion) + $(MicrosoftAspNetCoreMvcAnalyzersPackageVersion) + $(MicrosoftAspNetCoreMvcApiAnalyzersPackageVersion) + $(MicrosoftAspNetCoreMvcRazorExtensionsToolingInternalPackageVersion) + $(MicrosoftAspNetCoreTestHostPackageVersion) + $(MicrosoftBclAsyncInterfacesPackageVersion) + $(MicrosoftBuildPackageVersion) + $(MicrosoftBuildLocalizationPackageVersion) + $(MicrosoftBuildNuGetSdkResolverPackageVersion) + $(MicrosoftBuildTasksGitPackageVersion) + $(MicrosoftCodeAnalysisPackageVersion) + $(MicrosoftCodeAnalysisBuildClientPackageVersion) + $(MicrosoftCodeAnalysisCSharpPackageVersion) + $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) + $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) + $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) + $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftDeploymentDotNetReleasesPackageVersion) + $(MicrosoftDiaSymReaderPackageVersion) + $(MicrosoftDotNetArcadeSdkPackageVersion) + $(MicrosoftDotNetBuildTasksInstallersPackageVersion) + $(MicrosoftDotNetBuildTasksTemplatingPackageVersion) + $(MicrosoftDotNetBuildTasksWorkloadsPackageVersion) + $(MicrosoftDotNetHelixSdkPackageVersion) + $(MicrosoftDotNetSignToolPackageVersion) + $(MicrosoftDotNetWebItemTemplates100PackageVersion) + $(MicrosoftDotNetWebProjectTemplates100PackageVersion) + $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) + $(MicrosoftDotNetXliffTasksPackageVersion) + $(MicrosoftDotNetXUnitExtensionsPackageVersion) + $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyModelPackageVersion) + $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) + $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) + $(MicrosoftExtensionsFileSystemGlobbingPackageVersion) + $(MicrosoftExtensionsLoggingPackageVersion) + $(MicrosoftExtensionsLoggingAbstractionsPackageVersion) + $(MicrosoftExtensionsLoggingConsolePackageVersion) + $(MicrosoftExtensionsObjectPoolPackageVersion) + $(MicrosoftFSharpCompilerPackageVersion) + $(MicrosoftJSInteropPackageVersion) + $(MicrosoftNetCompilersToolsetPackageVersion) + $(MicrosoftNetCompilersToolsetFrameworkPackageVersion) + $(MicrosoftNETHostModelPackageVersion) + $(MicrosoftNETILLinkTasksPackageVersion) + $(MicrosoftNETRuntimeEmscripten3156Cachewinx64PackageVersion) + $(MicrosoftNETRuntimeEmscriptenSdkInternalPackageVersion) + $(MicrosoftNETSdkRazorSourceGeneratorsTransportPackageVersion) + $(MicrosoftNETSdkWindowsDesktopPackageVersion) + $(MicrosoftNETTestSdkPackageVersion) + $(MicrosoftNETCoreAppRefPackageVersion) + $(MicrosoftNETCorePlatformsPackageVersion) + $(MicrosoftSourceLinkAzureReposGitPackageVersion) + $(MicrosoftSourceLinkBitbucketGitPackageVersion) + $(MicrosoftSourceLinkCommonPackageVersion) + $(MicrosoftSourceLinkGitHubPackageVersion) + $(MicrosoftSourceLinkGitLabPackageVersion) + $(MicrosoftTemplateEngineAbstractionsPackageVersion) + $(MicrosoftTemplateEngineAuthoringTemplateVerifierPackageVersion) + $(MicrosoftTemplateEngineEdgePackageVersion) + $(MicrosoftTemplateEngineMocksPackageVersion) + $(MicrosoftTemplateEngineOrchestratorRunnableProjectsPackageVersion) + $(MicrosoftTemplateEngineTestHelperPackageVersion) + $(MicrosoftTemplateEngineUtilsPackageVersion) + $(MicrosoftTemplateSearchCommonPackageVersion) + $(MicrosoftTemplateSearchTemplateDiscoveryPackageVersion) + $(MicrosoftTestPlatformBuildPackageVersion) + $(MicrosoftTestPlatformCLIPackageVersion) + $(MicrosoftWebXdtPackageVersion) + $(MicrosoftWin32SystemEventsPackageVersion) + $(MicrosoftWindowsDesktopAppInternalPackageVersion) + $(MicrosoftWindowsDesktopAppRefPackageVersion) + $(NuGetBuildTasksPackageVersion) + $(NuGetBuildTasksConsolePackageVersion) + $(NuGetBuildTasksPackPackageVersion) + $(NuGetCommandLineXPlatPackageVersion) + $(NuGetCommandsPackageVersion) + $(NuGetCommonPackageVersion) + $(NuGetConfigurationPackageVersion) + $(NuGetCredentialsPackageVersion) + $(NuGetDependencyResolverCorePackageVersion) + $(NuGetFrameworksPackageVersion) + $(NuGetLibraryModelPackageVersion) + $(NuGetLocalizationPackageVersion) + $(NuGetPackagingPackageVersion) + $(NuGetProjectModelPackageVersion) + $(NuGetProtocolPackageVersion) + $(NuGetVersioningPackageVersion) + $(SystemCodeDomPackageVersion) + $(SystemCommandLinePackageVersion) + $(SystemComponentModelCompositionPackageVersion) + $(SystemCompositionAttributedModelPackageVersion) + $(SystemCompositionConventionPackageVersion) + $(SystemCompositionHostingPackageVersion) + $(SystemCompositionRuntimePackageVersion) + $(SystemCompositionTypedPartsPackageVersion) + $(SystemConfigurationConfigurationManagerPackageVersion) + $(SystemDiagnosticsDiagnosticSourcePackageVersion) + $(SystemFormatsAsn1PackageVersion) + $(SystemIOHashingPackageVersion) + $(SystemReflectionMetadataLoadContextPackageVersion) + $(SystemResourcesExtensionsPackageVersion) + $(SystemSecurityCryptographyPkcsPackageVersion) + $(SystemSecurityCryptographyProtectedDataPackageVersion) + $(SystemSecurityCryptographyXmlPackageVersion) + $(SystemSecurityPermissionsPackageVersion) + $(SystemServiceProcessServiceControllerPackageVersion) + $(SystemTextEncodingCodePagesPackageVersion) + $(SystemTextJsonPackageVersion) + $(SystemWindowsExtensionsPackageVersion) + + $(MicrosoftTestingPlatformPackageVersion) + $(MSTestPackageVersion) + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 25d8b3f5e48f..3a7cdb3a56c8 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,634 +1,577 @@ + - - https://github.com/dotnet/templating - 34a5893f3ec336db55d3da5621a96106b418db5b - - - https://github.com/dotnet/templating - 34a5893f3ec336db55d3da5621a96106b418db5b - - - - https://github.com/dotnet/templating - b73682307aa0128c5edbec94c2e6a070d13ae6bb - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - - https://github.com/dotnet/emsdk - fb1326b0f4622f04f21584dc133f1c71f7554509 - - - - https://github.com/dotnet/emsdk - fb1326b0f4622f04f21584dc133f1c71f7554509 - - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - - https://github.com/dotnet/fsharp - 14987c804f33917bf15f4c25e0cd16ecd01807f4 - - - - https://github.com/dotnet/fsharp - 14987c804f33917bf15f4c25e0cd16ecd01807f4 - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 - - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6a953e76162f3f079405f80e28664fa51b136740 + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/nuget/nuget.client - 0da03caba83448ee887f0f1846dd05e1f1705d45 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 - - - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 - + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - f3d1a3c90c44fd18aecd8fb8a7006807f64b2710 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 72d4e0415ec4ae0771a5df3e05260691a5d6775b - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-winforms - 9399df09f8f8a187dcf1941b1d07a538ca197171 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - 72d4e0415ec4ae0771a5df3e05260691a5d6775b - - - https://github.com/dotnet/xdt - 63ae81154c50a1cf9287cc47d8351d55b4289e6d - - - - https://github.com/dotnet/xdt - 63ae81154c50a1cf9287cc47d8351d55b4289e6d - - - - https://github.com/dotnet/roslyn-analyzers - 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn-analyzers - 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 - - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - - https://github.com/dotnet/symreader - 0710a7892d89999956e8808c28e9dd0512bd53f3 - - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db - - - - - https://github.com/dotnet/source-build-externals - 71dbdccd13f28cfd1a35649263b55ebbeab26ee7 - - - - - https://github.com/dotnet/source-build-reference-packages - 6092b62b7f35fddbd6bf31e19b2ab64bbe2443ae - - - - https://github.com/dotnet/deployment-tools - b2d5c0c5841de4bc036ef4c84b5db3532504e5f3 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - - - https://github.com/dotnet/deployment-tools - b2d5c0c5841de4bc036ef4c84b5db3532504e5f3 - - - - - https://github.com/dotnet/symreader - 0710a7892d89999956e8808c28e9dd0512bd53f3 - + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - baa6b294e728e6171378b4e8c52e42e7c4d4ed63 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - - https://github.com/dotnet/arcade - 01c94b66e75697e9298eb79a49db74489f8d343e - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 19c07820cb72aafc554c3bc8fe3c54010f5123f0 - - - https://github.com/dotnet/arcade-services - e156e649f28395d9d0ee1e848225a689b59e0fd3 - - - https://github.com/dotnet/arcade-services - e156e649f28395d9d0ee1e848225a689b59e0fd3 - - - https://github.com/dotnet/scenario-tests - 0f750c53b3052a593c6daacc0d60eb8c0d2d9cf1 - - - - https://github.com/dotnet/scenario-tests - 0f750c53b3052a593c6daacc0d60eb8c0d2d9cf1 - - - - - https://github.com/dotnet/aspire - 5fa9337a84a52e9bd185d04d156eccbdcf592f74 - - - - https://github.com/dotnet/aspire - 5fa9337a84a52e9bd185d04d156eccbdcf592f74 - - - - https://github.com/dotnet/runtime - e77011b31a3e5c47d931248a64b47f9b2d47853d + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + + https://github.com/microsoft/testfx + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + + + https://github.com/microsoft/testfx + cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + + + https://github.com/dotnet/dotnet + 6165bd7ac3499cb712ca489f2ce44bb665174a1a diff --git a/eng/common/CIBuild.cmd b/eng/common/CIBuild.cmd index 56c2f25ac22f..ac1f72bf94e0 100644 --- a/eng/common/CIBuild.cmd +++ b/eng/common/CIBuild.cmd @@ -1,2 +1,2 @@ @echo off -powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" \ No newline at end of file +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 792b60b49d42..65ed3a8adef0 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -1,13 +1,14 @@ # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # # See example call for this script below. # # - task: PowerShell@2 -# displayName: Setup Private Feeds Credentials +# displayName: Setup internal Feeds Credentials # condition: eq(variables['Agent.OS'], 'Windows_NT') # inputs: # filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 @@ -34,19 +35,28 @@ Set-StrictMode -Version 2.0 . $PSScriptRoot\tools.ps1 +# Adds or enables the package source with the given name +function AddOrEnablePackageSource($sources, $disabledPackageSources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { + if ($disabledPackageSources -eq $null -or -not (EnableInternalPackageSource -DisabledPackageSources $disabledPackageSources -Creds $creds -PackageSourceName $SourceName)) { + AddPackageSource -Sources $sources -SourceName $SourceName -SourceEndPoint $SourceEndPoint -Creds $creds -Username $userName -pwd $Password + } +} + # Add source entry to PackageSources function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']") if ($packageSource -eq $null) { + Write-Host "Adding package source $SourceName" + $packageSource = $doc.CreateElement("add") $packageSource.SetAttribute("key", $SourceName) $packageSource.SetAttribute("value", $SourceEndPoint) $sources.AppendChild($packageSource) | Out-Null } else { - Write-Host "Package source $SourceName already present." + Write-Host "Package source $SourceName already present and enabled." } AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd @@ -59,6 +69,8 @@ function AddCredential($creds, $source, $username, $pwd) { return; } + Write-Host "Inserting credential for feed: " $source + # Looks for credential configuration for the given SourceName. Create it if none is found. $sourceElement = $creds.SelectSingleNode($Source) if ($sourceElement -eq $null) @@ -91,24 +103,27 @@ function AddCredential($creds, $source, $username, $pwd) { $passwordElement.SetAttribute("value", $pwd) } -function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) { - $maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]") - - Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds." - - ForEach ($PackageSource in $maestroPrivateSources) { - Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key - AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd +# Enable all darc-int package sources. +function EnableMaestroInternalPackageSources($DisabledPackageSources, $Creds) { + $maestroInternalSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") + ForEach ($DisabledPackageSource in $maestroInternalSources) { + EnableInternalPackageSource -DisabledPackageSources $DisabledPackageSources -Creds $Creds -PackageSourceName $DisabledPackageSource.key } } -function EnablePrivatePackageSources($DisabledPackageSources) { - $maestroPrivateSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") - ForEach ($DisabledPackageSource in $maestroPrivateSources) { - Write-Host "`tEnsuring private source '$($DisabledPackageSource.key)' is enabled by deleting it from disabledPackageSource" +# Enables an internal package source by name, if found. Returns true if the package source was found and enabled, false otherwise. +function EnableInternalPackageSource($DisabledPackageSources, $Creds, $PackageSourceName) { + $DisabledPackageSource = $DisabledPackageSources.SelectSingleNode("add[@key='$PackageSourceName']") + if ($DisabledPackageSource) { + Write-Host "Enabling internal source '$($DisabledPackageSource.key)'." + # Due to https://github.com/NuGet/Home/issues/10291, we must actually remove the disabled entries $DisabledPackageSources.RemoveChild($DisabledPackageSource) + + AddCredential -Creds $creds -Source $DisabledPackageSource.Key -Username $userName -pwd $Password + return $true } + return $false } if (!(Test-Path $ConfigFile -PathType Leaf)) { @@ -121,15 +136,17 @@ $doc = New-Object System.Xml.XmlDocument $filename = (Get-Item $ConfigFile).FullName $doc.Load($filename) -# Get reference to or create one if none exist already +# Get reference to - fail if none exist $sources = $doc.DocumentElement.SelectSingleNode("packageSources") if ($sources -eq $null) { - $sources = $doc.CreateElement("packageSources") - $doc.DocumentElement.AppendChild($sources) | Out-Null + Write-PipelineTelemetryError -Category 'Build' -Message "Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 } $creds = $null +$feedSuffix = "v3/index.json" if ($Password) { + $feedSuffix = "v2" # Looks for a node. Create it if none is found. $creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials") if ($creds -eq $null) { @@ -138,34 +155,35 @@ if ($Password) { } } +$userName = "dn-bot" + # Check for disabledPackageSources; we'll enable any darc-int ones we find there $disabledSources = $doc.DocumentElement.SelectSingleNode("disabledPackageSources") if ($disabledSources -ne $null) { Write-Host "Checking for any darc-int disabled package sources in the disabledPackageSources node" - EnablePrivatePackageSources -DisabledPackageSources $disabledSources + EnableMaestroInternalPackageSources -DisabledPackageSources $disabledSources -Creds $creds } - -$userName = "dn-bot" - -# Insert credential nodes for Maestro's private feeds -InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password - -# 3.1 uses a different feed url format so it's handled differently here -$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") -if ($dotnet31Source -ne $null) { - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password -} - -$dotnetVersions = @('5','6','7','8','9') +$dotnetVersions = @('5','6','7','8','9','10') foreach ($dotnetVersion in $dotnetVersions) { $feedPrefix = "dotnet" + $dotnetVersion; $dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']") if ($dotnetSource -ne $null) { - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password } } +# Check for dotnet-eng and add dotnet-eng-internal if present +$dotnetEngSource = $sources.SelectSingleNode("add[@key='dotnet-eng']") +if ($dotnetEngSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-eng-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + +# Check for dotnet-tools and add dotnet-tools-internal if present +$dotnetToolsSource = $sources.SelectSingleNode("add[@key='dotnet-tools']") +if ($dotnetToolsSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-tools-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + $doc.Save($filename) diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh old mode 100644 new mode 100755 index facb415ca6ff..b2163abbe71b --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # @@ -52,81 +53,139 @@ if [[ `uname -s` == "Darwin" ]]; then TB='' fi -# Ensure there is a ... section. -grep -i "" $ConfigFile -if [ "$?" != "0" ]; then - echo "Adding ... section." - ConfigNodeHeader="" - PackageSourcesTemplate="${TB}${NL}${TB}" +# Enables an internal package source by name, if found. Returns 0 if found and enabled, 1 if not found. +EnableInternalPackageSource() { + local PackageSourceName="$1" + + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return 1 # No disabled sources section + fi + + # Check if this source name is disabled + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Enabling internal source '$PackageSourceName'." + # Remove the disabled entry (including any surrounding comments or whitespace on the same line) + sed -i.bak "//d" "$ConfigFile" + + # Add the source name to PackageSources for credential handling + PackageSources+=("$PackageSourceName") + return 0 # Found and enabled + fi + + return 1 # Not found in disabled sources +} + +# Add source entry to PackageSources +AddPackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Check if source already exists + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Package source $SourceName already present and enabled." + PackageSources+=("$SourceName") + return + fi + + echo "Adding package source $SourceName" + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" "$ConfigFile" + PackageSources+=("$SourceName") +} + +# Adds or enables the package source with the given name +AddOrEnablePackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Try to enable if disabled, if not found then add new source + EnableInternalPackageSource "$SourceName" + if [ "$?" != "0" ]; then + AddPackageSource "$SourceName" "$SourceEndPoint" + fi +} - sed -i.bak "s|$ConfigNodeHeader|$ConfigNodeHeader${NL}$PackageSourcesTemplate|" $ConfigFile -fi +# Enable all darc-int package sources +EnableMaestroInternalPackageSources() { + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return # No disabled sources section + fi + + # Find all darc-int disabled sources + local DisabledDarcIntSources=() + DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' "$ConfigFile" | tr -d '"') + + for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do + if [[ $DisabledSourceName == darc-int* ]]; then + EnableInternalPackageSource "$DisabledSourceName" + fi + done +} -# Ensure there is a ... section. -grep -i "" $ConfigFile +# Ensure there is a ... section. +grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding ... section." - - PackageSourcesNodeFooter="" - PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile + Write-PipelineTelemetryError -Category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 fi PackageSources=() -# Ensure dotnet3.1-internal and dotnet3.1-internal-transport are in the packageSources if the public dotnet3.1 feeds are present -grep -i "... section. + grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + echo "Adding ... section." - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=('dotnet3.1-internal') - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal-transport to the packageSources." PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile fi - PackageSources+=('dotnet3.1-internal-transport') fi -DotNetVersions=('5' '6' '7' '8' '9') +# Check for disabledPackageSources; we'll enable any darc-int ones we find there +grep -i "" $ConfigFile > /dev/null +if [ "$?" == "0" ]; then + echo "Checking for any darc-int disabled package sources in the disabledPackageSources node" + EnableMaestroInternalPackageSources +fi + +DotNetVersions=('5' '6' '7' '8' '9' '10') for DotNetVersion in ${DotNetVersions[@]} ; do FeedPrefix="dotnet${DotNetVersion}"; - grep -i " /dev/null if [ "$?" == "0" ]; then - grep -i "" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal") - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding $FeedPrefix-internal-transport to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal-transport") + AddOrEnablePackageSource "$FeedPrefix-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal/nuget/$FeedSuffix" + AddOrEnablePackageSource "$FeedPrefix-internal-transport" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal-transport/nuget/$FeedSuffix" fi done +# Check for dotnet-eng and add dotnet-eng-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-eng-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$FeedSuffix" +fi + +# Check for dotnet-tools and add dotnet-tools-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-tools-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$FeedSuffix" +fi + # I want things split line by line PrevIFS=$IFS IFS=$'\n' @@ -139,29 +198,12 @@ if [ "$CredToken" ]; then # Check if there is no existing credential for this FeedName grep -i "<$FeedName>" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding credentials for $FeedName." + echo " Inserting credential for feed: $FeedName" PackageSourceCredentialsNodeFooter="" - NewCredential="${TB}${TB}<$FeedName>${NL}${NL}${NL}" + NewCredential="${TB}${TB}<$FeedName>${NL}${TB}${NL}${TB}${TB}${NL}${TB}${TB}" sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" $ConfigFile fi done fi - -# Re-enable any entries in disabledPackageSources where the feed name contains darc-int -grep -i "" $ConfigFile -if [ "$?" == "0" ]; then - DisabledDarcIntSources=() - echo "Re-enabling any disabled \"darc-int\" package sources in $ConfigFile" - DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' $ConfigFile | tr -d '"') - for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do - if [[ $DisabledSourceName == darc-int* ]] - then - OldDisableValue="" - NewDisableValue="" - sed -i.bak "s|$OldDisableValue|$NewDisableValue|" $ConfigFile - echo "Neutralized disablePackageSources entry for '$DisabledSourceName'" - fi - done -fi diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 438f9920c43e..8cfee107e7a3 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -7,6 +7,7 @@ Param( [string] $msbuildEngine = $null, [bool] $warnAsError = $true, [bool] $nodeReuse = $true, + [switch] $buildCheck = $false, [switch][Alias('r')]$restore, [switch] $deployDeps, [switch][Alias('b')]$build, @@ -20,6 +21,7 @@ Param( [switch] $publish, [switch] $clean, [switch][Alias('pb')]$productBuild, + [switch]$fromVMR, [switch][Alias('bl')]$binaryLog, [switch][Alias('nobl')]$excludeCIBinarylog, [switch] $ci, @@ -71,6 +73,9 @@ function Print-Usage() { Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio" Write-Host " -nativeToolsOnMachine Sets the native tools on machine environment variable (indicating that the script should use native tools on machine)" + Write-Host " -nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" + Write-Host " -buildCheck Sets /check msbuild parameter" + Write-Host " -fromVMR Set when building from within the VMR" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." @@ -97,6 +102,7 @@ function Build { $bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'Build.binlog') } else { '' } $platformArg = if ($platform) { "/p:Platform=$platform" } else { '' } + $check = if ($buildCheck) { '/check' } else { '' } if ($projects) { # Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons. @@ -113,6 +119,7 @@ function Build { MSBuild $toolsetBuildProj ` $bl ` $platformArg ` + $check ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` /p:Restore=$restore ` @@ -122,11 +129,13 @@ function Build { /p:Deploy=$deploy ` /p:Test=$test ` /p:Pack=$pack ` - /p:DotNetBuildRepo=$productBuild ` + /p:DotNetBuild=$productBuild ` + /p:DotNetBuildFromVMR=$fromVMR ` /p:IntegrationTest=$integrationTest ` /p:PerformanceTest=$performanceTest ` /p:Sign=$sign ` /p:Publish=$publish ` + /p:RestoreStaticGraphEnableBinaryLogger=$binaryLog ` @properties } diff --git a/eng/common/build.sh b/eng/common/build.sh index ac1ee8620cd2..9767bb411a4f 100755 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -42,6 +42,8 @@ usage() echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" + echo " --buildCheck Sets /check msbuild parameter" + echo " --fromVMR Set when building from within the VMR" echo "" echo "Command line arguments not listed above are passed thru to msbuild." echo "Arguments can also be passed in with a single hyphen." @@ -63,6 +65,7 @@ restore=false build=false source_build=false product_build=false +from_vmr=false rebuild=false test=false integration_test=false @@ -76,6 +79,7 @@ clean=false warn_as_error=true node_reuse=true +build_check=false binary_log=false exclude_ci_binary_log=false pipelines_log=false @@ -87,7 +91,7 @@ verbosity='minimal' runtime_source_feed='' runtime_source_feed_key='' -properties='' +properties=() while [[ $# > 0 ]]; do opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in @@ -127,19 +131,22 @@ while [[ $# > 0 ]]; do -pack) pack=true ;; - -sourcebuild|-sb) + -sourcebuild|-source-build|-sb) build=true source_build=true product_build=true restore=true pack=true ;; - -productBuild|-pb) + -productbuild|-product-build|-pb) build=true product_build=true restore=true pack=true ;; + -fromvmr|-from-vmr) + from_vmr=true + ;; -test|-t) test=true ;; @@ -173,6 +180,9 @@ while [[ $# > 0 ]]; do node_reuse=$2 shift ;; + -buildcheck) + build_check=true + ;; -runtimesourcefeed) runtime_source_feed=$2 shift @@ -182,7 +192,7 @@ while [[ $# > 0 ]]; do shift ;; *) - properties="$properties $1" + properties+=("$1") ;; esac @@ -216,7 +226,7 @@ function Build { InitializeCustomToolset if [[ ! -z "$projects" ]]; then - properties="$properties /p:Projects=$projects" + properties+=("/p:Projects=$projects") fi local bl="" @@ -224,15 +234,21 @@ function Build { bl="/bl:\"$log_dir/Build.binlog\"" fi + local check="" + if [[ "$build_check" == true ]]; then + check="/check" + fi + MSBuild $_InitializeToolset \ $bl \ + $check \ /p:Configuration=$configuration \ /p:RepoRoot="$repo_root" \ /p:Restore=$restore \ /p:Build=$build \ - /p:DotNetBuildRepo=$product_build \ - /p:ArcadeBuildFromSource=$source_build \ + /p:DotNetBuild=$product_build \ /p:DotNetBuildSourceOnly=$source_build \ + /p:DotNetBuildFromVMR=$from_vmr \ /p:Rebuild=$rebuild \ /p:Test=$test \ /p:Pack=$pack \ @@ -240,7 +256,8 @@ function Build { /p:PerformanceTest=$performance_test \ /p:Sign=$sign \ /p:Publish=$publish \ - $properties + /p:RestoreStaticGraphEnableBinaryLogger=$binary_log \ + ${properties[@]+"${properties[@]}"} ExitWithExitCode 0 } diff --git a/eng/common/cibuild.sh b/eng/common/cibuild.sh index 1a02c0dec8fd..66e3b0ac61c3 100755 --- a/eng/common/cibuild.sh +++ b/eng/common/cibuild.sh @@ -13,4 +13,4 @@ while [[ -h $source ]]; do done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ \ No newline at end of file +. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index 8da43d3b5837..5ce518406198 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -19,11 +19,11 @@ parameters: # publishing defaults artifacts: '' enableMicrobuild: false + enableMicrobuildForMacAndLinux: false microbuildUseESRP: true enablePublishBuildArtifacts: false enablePublishBuildAssets: false enablePublishTestResults: false - enablePublishUsingPipelines: false enableBuildRetry: false mergeTestResults: false testRunTitle: '' @@ -74,9 +74,6 @@ jobs: - ${{ if ne(parameters.enableTelemetry, 'false') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE value: '$(Build.Repository.Uri)' - - ${{ if eq(parameters.enableRichCodeNavigation, 'true') }}: - - name: EnableRichCodeNavigation - value: 'true' # Retry signature validation up to three times, waiting 2 seconds between attempts. # See https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028#retry-untrusted-root-failures - name: NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY @@ -128,23 +125,12 @@ jobs: - ${{ preStep }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin - inputs: - signType: $(_SignType) - zipSources: false - feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json - ${{ if eq(parameters.microbuildUseESRP, true) }}: - ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: - ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea - ${{ else }}: - ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca - env: - TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: '$(Agent.TempDirectory)' + - template: /eng/common/core-templates/steps/install-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} + microbuildUseESRP: ${{ parameters.microbuildUseESRP }} continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) - ${{ if and(eq(parameters.runAsPublic, 'false'), eq(variables['System.TeamProject'], 'internal')) }}: - task: NuGetAuthenticate@1 @@ -160,27 +146,15 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} - - ${{ if eq(parameters.enableRichCodeNavigation, true) }}: - - task: RichCodeNavIndexer@0 - displayName: RichCodeNav Upload - inputs: - languages: ${{ coalesce(parameters.richCodeNavigationLanguage, 'csharp') }} - environment: ${{ coalesce(parameters.richCodeNavigationEnvironment, 'internal') }} - richNavLogOutputDirectory: $(System.DefaultWorkingDirectory)/artifacts/bin - uploadRichNavArtifacts: ${{ coalesce(parameters.richCodeNavigationUploadArtifacts, false) }} - continueOnError: true - - ${{ each step in parameters.componentGovernanceSteps }}: - ${{ step }} - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: MicroBuildCleanup@1 - displayName: Execute Microbuild cleanup tasks - condition: and(always(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: /eng/common/core-templates/steps/cleanup-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} continueOnError: ${{ parameters.continueOnError }} - env: - TeamName: $(_TeamName) # Publish test results - ${{ if or(and(eq(parameters.enablePublishTestResults, 'true'), eq(parameters.testResultsFormat, '')), eq(parameters.testResultsFormat, 'xunit')) }}: diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index edefa789d360..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -4,7 +4,7 @@ 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) @@ -27,7 +27,7 @@ parameters: is1ESPipeline: '' jobs: - job: OneLocBuild${{ parameters.JobNameSuffix }} - + dependsOn: ${{ parameters.dependsOn }} displayName: OneLocBuild${{ parameters.JobNameSuffix }} @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: @@ -86,8 +86,7 @@ jobs: isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }} ${{ if eq(parameters.CreatePr, true) }}: isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} - ${{ if eq(parameters.RepoType, 'gitHub') }}: - isShouldReusePrSelected: ${{ parameters.ReusePr }} + isShouldReusePrSelected: ${{ parameters.ReusePr }} packageSourceAuth: patAuth patVariable: ${{ parameters.CeapexPat }} ${{ if eq(parameters.RepoType, 'gitHub') }}: @@ -100,22 +99,20 @@ jobs: mirrorBranch: ${{ parameters.MirrorBranch }} condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} - args: - displayName: Publish Localization Files - pathToPublish: '$(Build.ArtifactStagingDirectory)/loc' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} + # Copy the locProject.json to the root of the Loc directory, then publish a pipeline artifact + - task: CopyFiles@2 + displayName: Copy LocProject.json + inputs: + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/Localize/' + Contents: 'LocProject.json' + TargetFolder: '$(Build.ArtifactStagingDirectory)/loc' + condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: - displayName: Publish LocProject.json - pathToPublish: '$(System.DefaultWorkingDirectory)/eng/Localize/' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} \ No newline at end of file + targetPath: '$(Build.ArtifactStagingDirectory)/loc' + artifactName: 'Loc' + displayName: 'Publish Localization Files' + condition: ${{ parameters.condition }} diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index 3cb20fb5041f..9afcb8ae1590 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -20,9 +20,6 @@ parameters: # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing - publishUsingPipelines: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing publishAssetsImmediately: false @@ -32,6 +29,15 @@ parameters: is1ESPipeline: '' + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + + # Optional, publishing version + publishingVersion: 3 + + # Optional: A minimatch pattern for the asset manifests to publish to BAR + assetManifestsPattern: '*/manifests/**/*.xml' + repositoryAlias: self officialBuildId: '' @@ -68,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -84,18 +90,44 @@ jobs: - checkout: ${{ parameters.repositoryAlias }} fetchDepth: 3 clean: true - - - task: DownloadBuildArtifacts@0 - displayName: Download artifact - inputs: - artifactName: AssetManifests - downloadPath: '$(Build.StagingDirectory)/Download' - checkDownloadedFiles: true - condition: ${{ parameters.condition }} - continueOnError: ${{ parameters.continueOnError }} + + - ${{ if eq(parameters.isAssetlessBuild, 'false') }}: + - ${{ if eq(parameters.publishingVersion, 3) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Asset Manifests + inputs: + artifactName: AssetManifests + targetPath: '$(Build.StagingDirectory)/AssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - ${{ if eq(parameters.publishingVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download V4 asset manifests + inputs: + itemPattern: '*/manifests/**/*.xml' + targetPath: '$(Build.StagingDirectory)/AllAssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - task: CopyFiles@2 + displayName: Copy V4 asset manifests to AssetManifests + inputs: + SourceFolder: '$(Build.StagingDirectory)/AllAssetManifests' + Contents: ${{ parameters.assetManifestsPattern }} + TargetFolder: '$(Build.StagingDirectory)/AssetManifests' + flattenFolders: true + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} - task: NuGetAuthenticate@1 + # Populate internal runtime variables. + - template: /eng/common/templates/steps/enable-internal-sources.yml + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + + - template: /eng/common/templates/steps/enable-internal-runtimes.yml + - task: AzureCLI@2 displayName: Publish Build Assets inputs: @@ -104,10 +136,13 @@ jobs: scriptLocation: scriptPath scriptPath: $(System.DefaultWorkingDirectory)/eng/common/sdk-task.ps1 arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet - /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' + /p:ManifestsPath='$(Build.StagingDirectory)/AssetManifests' + /p:IsAssetlessBuild=${{ parameters.isAssetlessBuild }} /p:MaestroApiEndpoint=https://maestro.dot.net - /p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }} /p:OfficialBuildId=$(OfficialBuildId) + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' + condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} @@ -129,6 +164,17 @@ jobs: Copy-Item -Path $symbolExclusionfile -Destination "$(Build.StagingDirectory)/ReleaseConfigs" } + - ${{ if eq(parameters.publishingVersion, 4) }}: + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + parameters: + is1ESPipeline: ${{ parameters.is1ESPipeline }} + args: + targetPath: '$(Build.ArtifactStagingDirectory)/MergedManifest.xml' + artifactName: AssetManifests + displayName: 'Publish Merged Manifest' + retryCountOnTaskFailure: 10 # for any logs being locked + sbomEnabled: false # we don't need SBOM for logs + - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -138,7 +184,7 @@ jobs: publishLocation: Container artifactName: ReleaseConfigs - - ${{ if eq(parameters.publishAssetsImmediately, 'true') }}: + - ${{ if or(eq(parameters.publishAssetsImmediately, 'true'), eq(parameters.isAssetlessBuild, 'true')) }}: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: BARBuildId: ${{ parameters.BARBuildId }} @@ -164,6 +210,9 @@ jobs: -WaitPublishingFinish true -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - template: /eng/common/core-templates/steps/publish-logs.yml diff --git a/eng/common/core-templates/job/source-build.yml b/eng/common/core-templates/job/source-build.yml index d943748ac10e..1997c2ae00d7 100644 --- a/eng/common/core-templates/job/source-build.yml +++ b/eng/common/core-templates/job/source-build.yml @@ -12,9 +12,10 @@ parameters: # The name of the job. This is included in the job ID. # targetRID: '' # The name of the target RID to use, instead of the one auto-detected by Arcade. - # nonPortable: false + # portableBuild: false # Enables non-portable mode. This means a more specific RID (e.g. fedora.32-x64 rather than - # linux-x64), and compiling against distro-provided packages rather than portable ones. + # linux-x64), and compiling against distro-provided packages rather than portable ones. The + # default is portable mode. # skipPublishValidation: false # Disables publishing validation. By default, a check is performed to ensure no packages are # published by source-build. @@ -33,9 +34,6 @@ parameters: # container and pool. platform: {} - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: '' # If set to true and running on a non-public project, @@ -62,7 +60,7 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] - demands: ImageOverride -equals build.ubuntu.2004.amd64 + demands: ImageOverride -equals build.azurelinux.3.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] image: build.azurelinux.3.amd64 @@ -71,10 +69,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] - demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open + demands: ImageOverride -equals build.azurelinux.3.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] - demands: ImageOverride -equals Build.Ubuntu.2204.Amd64 + demands: ImageOverride -equals build.azurelinux.3.amd64 ${{ if ne(parameters.platform.pool, '') }}: pool: ${{ parameters.platform.pool }} @@ -96,4 +94,3 @@ jobs: parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} platform: ${{ parameters.platform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} diff --git a/eng/common/core-templates/job/source-index-stage1.yml b/eng/common/core-templates/job/source-index-stage1.yml index ddf8c2e00d80..76baf5c27258 100644 --- a/eng/common/core-templates/job/source-index-stage1.yml +++ b/eng/common/core-templates/job/source-index-stage1.yml @@ -1,8 +1,5 @@ parameters: runAsPublic: false - sourceIndexUploadPackageVersion: 2.0.0-20250425.2 - sourceIndexProcessBinlogPackageVersion: 1.0.1-20250425.2 - sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" preSteps: [] binlogPath: artifacts/log/Debug/Build.binlog @@ -16,12 +13,6 @@ jobs: dependsOn: ${{ parameters.dependsOn }} condition: ${{ parameters.condition }} variables: - - name: SourceIndexUploadPackageVersion - value: ${{ parameters.sourceIndexUploadPackageVersion }} - - name: SourceIndexProcessBinlogPackageVersion - value: ${{ parameters.sourceIndexProcessBinlogPackageVersion }} - - name: SourceIndexPackageSource - value: ${{ parameters.sourceIndexPackageSource }} - name: BinlogPath value: ${{ parameters.binlogPath }} - template: /eng/common/core-templates/variables/pool-providers.yml @@ -34,12 +25,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - image: 1es-windows-2022-open - os: windows + image: windows.vs2026preview.scout.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 - os: windows + image: windows.vs2026preview.scout.amd64 steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -47,35 +36,9 @@ jobs: - ${{ each preStep in parameters.preSteps }}: - ${{ preStep }} - - - task: UseDotNet@2 - displayName: Use .NET 8 SDK - inputs: - packageType: sdk - version: 8.0.x - installationPath: $(Agent.TempDirectory)/dotnet - workingDirectory: $(Agent.TempDirectory) - - - script: | - $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(sourceIndexProcessBinlogPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(sourceIndexUploadPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - displayName: Download Tools - # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. - workingDirectory: $(Agent.TempDirectory) - - script: ${{ parameters.sourceIndexBuildCommand }} displayName: Build Repository - - script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i $(BinlogPath) -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output - displayName: Process Binlog into indexable sln - - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: AzureCLI@2 - displayName: Log in to Azure and upload stage1 artifacts to source index - inputs: - azureSubscription: 'SourceDotNet Stage1 Publish' - addSpnToEnvironment: true - scriptType: 'ps' - scriptLocation: 'inlineScript' - inlineScript: | - $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 + - template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + binLogPath: ${{ parameters.binLogPath }} diff --git a/eng/common/core-templates/jobs/codeql-build.yml b/eng/common/core-templates/jobs/codeql-build.yml index 4571a7864df6..dbc14ac580a2 100644 --- a/eng/common/core-templates/jobs/codeql-build.yml +++ b/eng/common/core-templates/jobs/codeql-build.yml @@ -15,7 +15,6 @@ jobs: enablePublishBuildArtifacts: false enablePublishTestResults: false enablePublishBuildAssets: false - enablePublishUsingPipelines: false enableTelemetry: true variables: diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index bf33cdc2cc77..01ada7476651 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -5,9 +5,6 @@ parameters: # Optional: Include PublishBuildArtifacts task enablePublishBuildArtifacts: false - # Optional: Enable publishing using release pipelines - enablePublishUsingPipelines: false - # Optional: Enable running the source-build jobs to build repo from source enableSourceBuild: false @@ -30,6 +27,9 @@ parameters: # Optional: Publish the assets as soon as the publish to BAR stage is complete, rather doing so in a separate stage. publishAssetsImmediately: false + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + # Optional: If using publishAssetsImmediately and additional parameters are needed, can be used to send along additional parameters (normally sent to post-build.yml) artifactsPublishingAdditionalParameters: '' signingValidationAdditionalParameters: '' @@ -85,7 +85,6 @@ jobs: - template: /eng/common/core-templates/jobs/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - allCompletedJobId: Source_Build_Complete ${{ each parameter in parameters.sourceBuildParameters }}: ${{ parameter.key }}: ${{ parameter.value }} @@ -98,7 +97,7 @@ jobs: ${{ parameter.key }}: ${{ parameter.value }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: + - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, ''), eq(parameters.isAssetlessBuild, true)) }}: - template: ../job/publish-build-assets.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -110,12 +109,10 @@ jobs: - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.jobs }}: - ${{ job.job }} - - ${{ if eq(parameters.enableSourceBuild, true) }}: - - Source_Build_Complete runAsPublic: ${{ parameters.runAsPublic }} - publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} - publishAssetsImmediately: ${{ parameters.publishAssetsImmediately }} + publishAssetsImmediately: ${{ or(parameters.publishAssetsImmediately, parameters.isAssetlessBuild) }} + isAssetlessBuild: ${{ parameters.isAssetlessBuild }} enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }} diff --git a/eng/common/core-templates/jobs/source-build.yml b/eng/common/core-templates/jobs/source-build.yml index 0b408a67bd51..d92860cba208 100644 --- a/eng/common/core-templates/jobs/source-build.yml +++ b/eng/common/core-templates/jobs/source-build.yml @@ -2,28 +2,19 @@ parameters: # This template adds arcade-powered source-build to CI. A job is created for each platform, as # well as an optional server job that completes when all platform jobs complete. - # The name of the "join" job for all source-build platforms. If set to empty string, the job is - # not included. Existing repo pipelines can use this job depend on all source-build jobs - # completing without maintaining a separate list of every single job ID: just depend on this one - # server job. By default, not included. Recommended name if used: 'Source_Build_Complete'. - allCompletedJobId: '' - # See /eng/common/core-templates/job/source-build.yml jobNamePrefix: 'Source_Build' # This is the default platform provided by Arcade, intended for use by a managed-only repo. defaultManagedPlatform: name: 'Managed' - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9' + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-10-amd64' # Defines the platforms on which to run build jobs. One job is created for each platform, and the # object in this array is sent to the job template as 'platform'. If no platforms are specified, # one job runs on 'defaultManagedPlatform'. platforms: [] - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: '' # If set to true and running on a non-public project, @@ -34,23 +25,12 @@ parameters: jobs: -- ${{ if ne(parameters.allCompletedJobId, '') }}: - - job: ${{ parameters.allCompletedJobId }} - displayName: Source-Build Complete - pool: server - dependsOn: - - ${{ each platform in parameters.platforms }}: - - ${{ parameters.jobNamePrefix }}_${{ platform.name }} - - ${{ if eq(length(parameters.platforms), 0) }}: - - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }} - - ${{ each platform in parameters.platforms }}: - template: /eng/common/core-templates/job/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ platform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} enableInternalSources: ${{ parameters.enableInternalSources }} - ${{ if eq(length(parameters.platforms), 0) }}: @@ -59,5 +39,4 @@ jobs: is1ESPipeline: ${{ parameters.is1ESPipeline }} jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ parameters.defaultManagedPlatform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} enableInternalSources: ${{ parameters.enableInternalSources }} diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index 864427d9694a..2df4acb76859 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -60,6 +60,11 @@ parameters: artifactNames: '' downloadArtifacts: true + - name: isAssetlessBuild + type: boolean + displayName: Is Assetless Build + default: false + # These parameters let the user customize the call to sdk-task.ps1 for publishing # symbols & general artifacts as well as for signing validation - name: symbolPublishingAdditionalParameters @@ -115,18 +120,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: windows.vs2022.amd64 + image: windows.vs2026preview.scout.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -159,18 +164,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -188,9 +193,6 @@ stages: buildId: $(AzDOBuildId) artifactName: PackageArtifacts checkDownloadedFiles: true - itemPattern: | - ** - !**/Microsoft.SourceBuild.Intermediate.*.nupkg # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -223,18 +225,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -284,18 +286,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -305,6 +307,13 @@ stages: - task: NuGetAuthenticate@1 + # Populate internal runtime variables. + - template: /eng/common/templates/steps/enable-internal-sources.yml + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + + - template: /eng/common/templates/steps/enable-internal-runtimes.yml + # Darc is targeting 8.0, so make sure it's installed - task: UseDotNet@2 inputs: @@ -325,3 +334,6 @@ stages: -RequireDefaultChannels ${{ parameters.requireDefaultChannels }} -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' diff --git a/eng/common/core-templates/steps/cleanup-microbuild.yml b/eng/common/core-templates/steps/cleanup-microbuild.yml new file mode 100644 index 000000000000..c0fdcd3379d7 --- /dev/null +++ b/eng/common/core-templates/steps/cleanup-microbuild.yml @@ -0,0 +1,28 @@ +parameters: + # Enable cleanup tasks for MicroBuild + enableMicrobuild: false + # Enable cleanup tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - task: MicroBuildCleanup@1 + displayName: Execute Microbuild cleanup tasks + condition: and( + always(), + or( + and( + eq(variables['Agent.Os'], 'Windows_NT'), + in(variables['_SignType'], 'real', 'test') + ), + and( + ${{ eq(parameters.enableMicrobuildForMacAndLinux, true) }}, + ne(variables['Agent.Os'], 'Windows_NT'), + eq(variables['_SignType'], 'real') + ) + )) + continueOnError: ${{ parameters.continueOnError }} + env: + TeamName: $(_TeamName) diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml index 7f5b84c4cb82..c05f65027979 100644 --- a/eng/common/core-templates/steps/generate-sbom.yml +++ b/eng/common/core-templates/steps/generate-sbom.yml @@ -5,7 +5,7 @@ # IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. parameters: - PackageVersion: 9.0.0 + PackageVersion: 10.0.0 BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' PackageName: '.NET' ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom diff --git a/eng/common/core-templates/steps/get-delegation-sas.yml b/eng/common/core-templates/steps/get-delegation-sas.yml index 9db5617ea7de..d2901470a7f0 100644 --- a/eng/common/core-templates/steps/get-delegation-sas.yml +++ b/eng/common/core-templates/steps/get-delegation-sas.yml @@ -31,16 +31,7 @@ steps: # Calculate the expiration of the SAS token and convert to UTC $expiry = (Get-Date).AddHours(${{ parameters.expiryInHours }}).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") - # Temporarily work around a helix issue where SAS tokens with / in them will cause incorrect downloads - # of correlation payloads. https://github.com/dotnet/dnceng/issues/3484 - $sas = "" - do { - $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv - if ($LASTEXITCODE -ne 0) { - Write-Error "Failed to generate SAS token." - exit 1 - } - } while($sas.IndexOf('/') -ne -1) + $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv if ($LASTEXITCODE -ne 0) { Write-Error "Failed to generate SAS token." diff --git a/eng/common/core-templates/steps/install-microbuild.yml b/eng/common/core-templates/steps/install-microbuild.yml new file mode 100644 index 000000000000..553fce66b940 --- /dev/null +++ b/eng/common/core-templates/steps/install-microbuild.yml @@ -0,0 +1,110 @@ +parameters: + # Enable install tasks for MicroBuild + enableMicrobuild: false + # Enable install tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + # Determines whether the ESRP service connection information should be passed to the signing plugin. + # This overlaps with _SignType to some degree. We only need the service connection for real signing. + # It's important that the service connection not be passed to the MicroBuildSigningPlugin task in this place. + # Doing so will cause the service connection to be authorized for the pipeline, which isn't allowed and won't work for non-prod. + # Unfortunately, _SignType can't be used to exclude the use of the service connection in non-real sign scenarios. The + # variable is not available in template expression. _SignType has a very large proliferation across .NET, so replacing it is tough. + microbuildUseESRP: true + # Microbuild installation directory + microBuildOutputFolder: $(Agent.TempDirectory)/MicroBuild + + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, 'true') }}: + # Needed to download the MicroBuild plugin nupkgs on Mac and Linux when nuget.exe is unavailable + - task: UseDotNet@2 + displayName: Install .NET 8.0 SDK for MicroBuild Plugin + inputs: + packageType: sdk + version: 8.0.x + installationPath: ${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + set -euo pipefail + + # UseDotNet@2 prepends the dotnet executable path to the PATH variable, so we can call dotnet directly + version=$(dotnet --version) + cat << 'EOF' > ${{ parameters.microBuildOutputFolder }}/global.json + { + "sdk": { + "version": "$version", + "paths": [ + "${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild" + ], + "errorMessage": "The .NET SDK version $version is required to install the MicroBuild signing plugin." + } + } + EOF + displayName: 'Add global.json to MicroBuild Installation path' + workingDirectory: ${{ parameters.microBuildOutputFolder }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + REM Check if ESRP is disabled while SignType is real + if /I "${{ parameters.microbuildUseESRP }}"=="false" if /I "$(_SignType)"=="real" ( + echo Error: ESRP must be enabled when SignType is real. + exit /b 1 + ) + displayName: 'Validate ESRP usage (Windows)' + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT')) + - script: | + # Check if ESRP is disabled while SignType is real + if [ "${{ parameters.microbuildUseESRP }}" = "false" ] && [ "$(_SignType)" = "real" ]; then + echo "Error: ESRP must be enabled when SignType is real." + exit 1 + fi + displayName: 'Validate ESRP usage (Non-Windows)' + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + # Two different MB install steps. This is due to not being able to use the agent OS during + # YAML expansion, and Windows vs. Linux/Mac uses different service connections. However, + # we can avoid including the MB install step if not enabled at all. This avoids a bunch of + # extra pipeline authorizations, since most pipelines do not sign on non-Windows. + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea + ${{ else }}: + ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) + + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, true) }}: + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (non-Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + workingDirectory: ${{ parameters.microBuildOutputFolder }} + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: beb8cb23-b303-4c95-ab26-9e44bc958d39 + ${{ else }}: + ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index 0623ac6e1123..a9ea99ba6aaa 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -26,15 +26,18 @@ steps: # If the file exists - sensitive data for redaction will be sourced from it # (single entry per line, lines starting with '# ' are considered comments and skipped) arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs' - -BinlogToolVersion ${{parameters.BinlogToolVersion}} + -BinlogToolVersion '${{parameters.BinlogToolVersion}}' -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' '$(publishing-dnceng-devdiv-code-r-build-re)' - '$(MaestroAccessToken)' '$(dn-bot-all-orgs-artifact-feeds-rw)' '$(akams-client-id)' '$(microsoft-symbol-server-pat)' '$(symweb-symbol-server-pat)' + '$(dnceng-symbol-server-pat)' '$(dn-bot-all-orgs-build-rw-code-rw)' + '$(System.AccessToken)' ${{parameters.CustomSensitiveDataList}} continueOnError: true condition: always() @@ -45,6 +48,7 @@ steps: SourceFolder: '$(System.DefaultWorkingDirectory)/PostBuildLogs' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' + condition: always() - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml index 7846584d2a77..b9c86c18ae42 100644 --- a/eng/common/core-templates/steps/source-build.yml +++ b/eng/common/core-templates/steps/source-build.yml @@ -11,10 +11,6 @@ parameters: # for details. The entire object is described in the 'job' template for simplicity, even though # the usage of the properties on this object is split between the 'job' and 'steps' templates. platform: {} - - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: false steps: @@ -23,25 +19,12 @@ steps: set -x df -h - # If file changes are detected, set CopyWipIntoInnerSourceBuildRepo to copy the WIP changes into the inner source build repo. - internalRestoreArgs= - if ! git diff --quiet; then - internalRestoreArgs='/p:CopyWipIntoInnerSourceBuildRepo=true' - # The 'Copy WIP' feature of source build uses git stash to apply changes from the original repo. - # This only works if there is a username/email configured, which won't be the case in most CI runs. - git config --get user.email - if [ $? -ne 0 ]; then - git config user.email dn-bot@microsoft.com - git config user.name dn-bot - fi - fi - # If building on the internal project, the internal storage variable may be available (usually only if needed) # In that case, add variables to allow the download of internal runtimes if the specified versions are not found # in the default public locations. internalRuntimeDownloadArgs= if [ '$(dotnetbuilds-internal-container-read-token-base64)' != '$''(dotnetbuilds-internal-container-read-token-base64)' ]; then - internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey $(dotnetbuilds-internal-container-read-token-base64)' + internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey '$(dotnetbuilds-internal-container-read-token-base64)'' fi buildConfig=Release @@ -50,88 +33,33 @@ steps: buildConfig='$(_BuildConfig)' fi - officialBuildArgs= - if [ '${{ and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}' = 'True' ]; then - officialBuildArgs='/p:DotNetPublishUsingPipelines=true /p:OfficialBuildId=$(BUILD.BUILDNUMBER)' - fi - targetRidArgs= if [ '${{ parameters.platform.targetRID }}' != '' ]; then targetRidArgs='/p:TargetRid=${{ parameters.platform.targetRID }}' fi - runtimeOsArgs= - if [ '${{ parameters.platform.runtimeOS }}' != '' ]; then - runtimeOsArgs='/p:RuntimeOS=${{ parameters.platform.runtimeOS }}' - fi - - baseOsArgs= - if [ '${{ parameters.platform.baseOS }}' != '' ]; then - baseOsArgs='/p:BaseOS=${{ parameters.platform.baseOS }}' - fi - - publishArgs= - if [ '${{ parameters.platform.skipPublishValidation }}' != 'true' ]; then - publishArgs='--publish' - fi - - assetManifestFileName=SourceBuild_RidSpecific.xml - if [ '${{ parameters.platform.name }}' != '' ]; then - assetManifestFileName=SourceBuild_${{ parameters.platform.name }}.xml + portableBuildArgs= + if [ '${{ parameters.platform.portableBuild }}' != '' ]; then + portableBuildArgs='/p:PortableBuild=${{ parameters.platform.portableBuild }}' fi ${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \ --configuration $buildConfig \ - --restore --build --pack $publishArgs -bl \ + --restore --build --pack -bl \ + --source-build \ ${{ parameters.platform.buildArguments }} \ - $officialBuildArgs \ $internalRuntimeDownloadArgs \ - $internalRestoreArgs \ $targetRidArgs \ - $runtimeOsArgs \ - $baseOsArgs \ - /p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \ - /p:ArcadeBuildFromSource=true \ - /p:DotNetBuildSourceOnly=true \ - /p:DotNetBuildRepo=true \ - /p:AssetManifestFileName=$assetManifestFileName + $portableBuildArgs \ displayName: Build -# Upload build logs for diagnosis. -- task: CopyFiles@2 - displayName: Prepare BuildLogs staging directory - inputs: - SourceFolder: '$(System.DefaultWorkingDirectory)' - Contents: | - **/*.log - **/*.binlog - artifacts/sb/prebuilt-report/** - TargetFolder: '$(Build.StagingDirectory)/BuildLogs' - CleanTargetFolder: true - continueOnError: true - condition: succeededOrFailed() - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish BuildLogs - targetPath: '$(Build.StagingDirectory)/BuildLogs' + targetPath: artifacts/log/${{ coalesce(variables._BuildConfig, 'Release') }} artifactName: BuildLogs_SourceBuild_${{ parameters.platform.name }}_Attempt$(System.JobAttempt) continueOnError: true condition: succeededOrFailed() sbomEnabled: false # we don't need SBOM for logs - -# Manually inject component detection so that we can ignore the source build upstream cache, which contains -# a nupkg cache of input packages (a local feed). -# This path must match the upstream cache path in property 'CurrentRepoSourceBuiltNupkgCacheDir' -# in src\Microsoft.DotNet.Arcade.Sdk\tools\SourceBuild\SourceBuildArcade.targets -- template: /eng/common/core-templates/steps/component-governance.yml - parameters: - displayName: Component Detection (Exclude upstream cache) - is1ESPipeline: ${{ parameters.is1ESPipeline }} - ${{ if eq(length(parameters.componentGovernanceIgnoreDirectories), 0) }}: - componentGovernanceIgnoreDirectories: '$(System.DefaultWorkingDirectory)/artifacts/sb/src/artifacts/obj/source-built-upstream-cache' - ${{ else }}: - componentGovernanceIgnoreDirectories: ${{ join(',', parameters.componentGovernanceIgnoreDirectories) }} - disableComponentGovernance: ${{ eq(variables['System.TeamProject'], 'public') }} diff --git a/eng/common/core-templates/steps/source-index-stage1-publish.yml b/eng/common/core-templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..e9a694afa58e --- /dev/null +++ b/eng/common/core-templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,35 @@ +parameters: + sourceIndexUploadPackageVersion: 2.0.0-20250818.1 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20250818.1 + sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json + binlogPath: artifacts/log/Debug/Build.binlog + +steps: +- task: UseDotNet@2 + displayName: "Source Index: Use .NET 9 SDK" + inputs: + packageType: sdk + version: 9.0.x + installationPath: $(Agent.TempDirectory)/dotnet + workingDirectory: $(Agent.TempDirectory) + +- script: | + $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version ${{parameters.sourceIndexProcessBinlogPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version ${{parameters.sourceIndexUploadPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + displayName: "Source Index: Download netsourceindex Tools" + # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. + workingDirectory: $(Agent.TempDirectory) + +- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i ${{parameters.BinlogPath}} -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output + displayName: "Source Index: Process Binlog into indexable sln" + +- ${{ if and(ne(parameters.runAsPublic, 'true'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: AzureCLI@2 + displayName: "Source Index: Upload Source Index stage1 artifacts to Azure" + inputs: + azureSubscription: 'SourceDotNet Stage1 Publish' + addSpnToEnvironment: true + scriptType: 'ps' + scriptLocation: 'inlineScript' + inlineScript: | + $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 diff --git a/eng/common/cross/arm64/tizen/tizen.patch b/eng/common/cross/arm64/tizen/tizen.patch index af7c8be05906..2cebc547382e 100644 --- a/eng/common/cross/arm64/tizen/tizen.patch +++ b/eng/common/cross/arm64/tizen/tizen.patch @@ -5,5 +5,5 @@ diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-littleaarch64) --GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib/ld-linux-aarch64.so.1 ) ) +-GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-aarch64.so.1 ) ) +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-aarch64.so.1 ) ) diff --git a/eng/common/cross/build-android-rootfs.sh b/eng/common/cross/build-android-rootfs.sh index 7e9ba2b75ed3..fbd8d80848a6 100755 --- a/eng/common/cross/build-android-rootfs.sh +++ b/eng/common/cross/build-android-rootfs.sh @@ -6,10 +6,11 @@ usage() { echo "Creates a toolchain and sysroot used for cross-compiling for Android." echo - echo "Usage: $0 [BuildArch] [ApiLevel]" + echo "Usage: $0 [BuildArch] [ApiLevel] [--ndk NDKVersion]" echo echo "BuildArch is the target architecture of Android. Currently only arm64 is supported." echo "ApiLevel is the target Android API level. API levels usually match to Android releases. See https://source.android.com/source/build-numbers.html" + echo "NDKVersion is the version of Android NDK. The default is r21. See https://developer.android.com/ndk/downloads/revision_history" echo echo "By default, the toolchain and sysroot will be generated in cross/android-rootfs/toolchain/[BuildArch]. You can change this behavior" echo "by setting the TOOLCHAIN_DIR environment variable" @@ -25,10 +26,15 @@ __BuildArch=arm64 __AndroidArch=aarch64 __AndroidToolchain=aarch64-linux-android -for i in "$@" - do - lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" - case $lowerI in +while :; do + if [[ "$#" -le 0 ]]; then + break + fi + + i=$1 + + lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" + case $lowerI in -?|-h|--help) usage exit 1 @@ -43,6 +49,10 @@ for i in "$@" __AndroidArch=arm __AndroidToolchain=arm-linux-androideabi ;; + --ndk) + shift + __NDK_Version=$1 + ;; *[0-9]) __ApiLevel=$i ;; @@ -50,8 +60,17 @@ for i in "$@" __UnprocessedBuildArgs="$__UnprocessedBuildArgs $i" ;; esac + shift done +if [[ "$__NDK_Version" == "r21" ]] || [[ "$__NDK_Version" == "r22" ]]; then + __NDK_File_Arch_Spec=-x86_64 + __SysRoot=sysroot +else + __NDK_File_Arch_Spec= + __SysRoot=toolchains/llvm/prebuilt/linux-x86_64/sysroot +fi + # Obtain the location of the bash script to figure out where the root of the repo is. __ScriptBaseDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" @@ -78,6 +97,7 @@ fi echo "Target API level: $__ApiLevel" echo "Target architecture: $__BuildArch" +echo "NDK version: $__NDK_Version" echo "NDK location: $__NDK_Dir" echo "Target Toolchain location: $__ToolchainDir" @@ -85,8 +105,8 @@ echo "Target Toolchain location: $__ToolchainDir" if [ ! -d $__NDK_Dir ]; then echo Downloading the NDK into $__NDK_Dir mkdir -p $__NDK_Dir - wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux-x86_64.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip - unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip -d $__CrossDir + wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux$__NDK_File_Arch_Spec.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux.zip + unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux.zip -d $__CrossDir fi if [ ! -d $__lldb_Dir ]; then @@ -116,16 +136,11 @@ for path in $(wget -qO- https://packages.termux.dev/termux-main-21/dists/stable/ fi done -cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/sysroot/usr/" +cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/$__SysRoot/usr/" # Generate platform file for build.sh script to assign to __DistroRid echo "Generating platform file..." -echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/sysroot/android_platform - -echo "Now to build coreclr, libraries and installers; run:" -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory coreclr -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory libraries -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory installer +echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/$__SysRoot/android_platform + +echo "Now to build coreclr, libraries and host; run:" +echo ROOTFS_DIR=$(realpath $__ToolchainDir/$__SysRoot) ./build.sh clr+libs+host --cross --arch $__BuildArch diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 4b5e8d7166bd..8abfb71f7275 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -5,7 +5,7 @@ set -e usage() { echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir ]" - echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86" + echo "BuildArch can be: arm(default), arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64, x86" echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine" echo " for alpine can be specified with version: alpineX.YY or alpineedge" echo " for FreeBSD can be: freebsd13, freebsd14" @@ -15,6 +15,7 @@ usage() echo "llvmx[.y] - optional, LLVM version for LLVM related packages." echo "--skipunmount - optional, will skip the unmount of rootfs folder." echo "--skipsigcheck - optional, will skip package signature checks (allowing untrusted packages)." + echo "--skipemulation - optional, will skip qemu and debootstrap requirement when building environment for debian based systems." echo "--use-mirror - optional, use mirror URL to fetch resources, when available." echo "--jobs N - optional, restrict to N jobs." exit 1 @@ -52,28 +53,27 @@ __UbuntuPackages+=" symlinks" __UbuntuPackages+=" libicu-dev" __UbuntuPackages+=" liblttng-ust-dev" __UbuntuPackages+=" libunwind8-dev" -__UbuntuPackages+=" libnuma-dev" __AlpinePackages+=" gettext-dev" __AlpinePackages+=" icu-dev" __AlpinePackages+=" libunwind-dev" __AlpinePackages+=" lttng-ust-dev" __AlpinePackages+=" compiler-rt" -__AlpinePackages+=" numactl-dev" # runtime libraries' dependencies __UbuntuPackages+=" libcurl4-openssl-dev" __UbuntuPackages+=" libkrb5-dev" __UbuntuPackages+=" libssl-dev" __UbuntuPackages+=" zlib1g-dev" +__UbuntuPackages+=" libbrotli-dev" __AlpinePackages+=" curl-dev" __AlpinePackages+=" krb5-dev" __AlpinePackages+=" openssl-dev" __AlpinePackages+=" zlib-dev" -__FreeBSDBase="13.3-RELEASE" -__FreeBSDPkg="1.17.0" +__FreeBSDBase="13.4-RELEASE" +__FreeBSDPkg="1.21.3" __FreeBSDABI="13" __FreeBSDPackages="libunwind" __FreeBSDPackages+=" icu" @@ -91,18 +91,18 @@ __HaikuPackages="gcc_syslibs" __HaikuPackages+=" gcc_syslibs_devel" __HaikuPackages+=" gmp" __HaikuPackages+=" gmp_devel" -__HaikuPackages+=" icu66" -__HaikuPackages+=" icu66_devel" +__HaikuPackages+=" icu[0-9]+" +__HaikuPackages+=" icu[0-9]*_devel" __HaikuPackages+=" krb5" __HaikuPackages+=" krb5_devel" __HaikuPackages+=" libiconv" __HaikuPackages+=" libiconv_devel" -__HaikuPackages+=" llvm12_libunwind" -__HaikuPackages+=" llvm12_libunwind_devel" +__HaikuPackages+=" llvm[0-9]*_libunwind" +__HaikuPackages+=" llvm[0-9]*_libunwind_devel" __HaikuPackages+=" mpfr" __HaikuPackages+=" mpfr_devel" -__HaikuPackages+=" openssl" -__HaikuPackages+=" openssl_devel" +__HaikuPackages+=" openssl3" +__HaikuPackages+=" openssl3_devel" __HaikuPackages+=" zlib" __HaikuPackages+=" zlib_devel" @@ -128,10 +128,12 @@ __AlpineKeys=' 616adfeb:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0BFD1D4lIxQcsqEpQzU\npNCYM3aP1V/fxxVdT4DWvSI53JHTwHQamKdMWtEXetWVbP5zSROniYKFXd/xrD9X\n0jiGHey3lEtylXRIPxe5s+wXoCmNLcJVnvTcDtwx/ne2NLHxp76lyc25At+6RgE6\nADjLVuoD7M4IFDkAsd8UQ8zM0Dww9SylIk/wgV3ZkifecvgUQRagrNUdUjR56EBZ\nraQrev4hhzOgwelT0kXCu3snbUuNY/lU53CoTzfBJ5UfEJ5pMw1ij6X0r5S9IVsy\nKLWH1hiO0NzU2c8ViUYCly4Fe9xMTFc6u2dy/dxf6FwERfGzETQxqZvSfrRX+GLj\n/QZAXiPg5178hT/m0Y3z5IGenIC/80Z9NCi+byF1WuJlzKjDcF/TU72zk0+PNM/H\nKuppf3JT4DyjiVzNC5YoWJT2QRMS9KLP5iKCSThwVceEEg5HfhQBRT9M6KIcFLSs\nmFjx9kNEEmc1E8hl5IR3+3Ry8G5/bTIIruz14jgeY9u5jhL8Vyyvo41jgt9sLHR1\n/J1TxKfkgksYev7PoX6/ZzJ1ksWKZY5NFoDXTNYUgzFUTOoEaOg3BAQKadb3Qbbq\nXIrxmPBdgrn9QI7NCgfnAY3Tb4EEjs3ON/BNyEhUENcXOH6I1NbcuBQ7g9P73kE4\nVORdoc8MdJ5eoKBpO8Ww8HECAwEAAQ== 616ae350:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyduVzi1mWm+lYo2Tqt/0\nXkCIWrDNP1QBMVPrE0/ZlU2bCGSoo2Z9FHQKz/mTyMRlhNqTfhJ5qU3U9XlyGOPJ\npiM+b91g26pnpXJ2Q2kOypSgOMOPA4cQ42PkHBEqhuzssfj9t7x47ppS94bboh46\nxLSDRff/NAbtwTpvhStV3URYkxFG++cKGGa5MPXBrxIp+iZf9GnuxVdST5PGiVGP\nODL/b69sPJQNbJHVquqUTOh5Ry8uuD2WZuXfKf7/C0jC/ie9m2+0CttNu9tMciGM\nEyKG1/Xhk5iIWO43m4SrrT2WkFlcZ1z2JSf9Pjm4C2+HovYpihwwdM/OdP8Xmsnr\nDzVB4YvQiW+IHBjStHVuyiZWc+JsgEPJzisNY0Wyc/kNyNtqVKpX6dRhMLanLmy+\nf53cCSI05KPQAcGj6tdL+D60uKDkt+FsDa0BTAobZ31OsFVid0vCXtsbplNhW1IF\nHwsGXBTVcfXg44RLyL8Lk/2dQxDHNHzAUslJXzPxaHBLmt++2COa2EI1iWlvtznk\nOk9WP8SOAIj+xdqoiHcC4j72BOVVgiITIJNHrbppZCq6qPR+fgXmXa+sDcGh30m6\n9Wpbr28kLMSHiENCWTdsFij+NQTd5S47H7XTROHnalYDuF1RpS+DpQidT5tUimaT\nJZDr++FjKrnnijbyNF8b98UCAwEAAQ== 616db30d:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnpUpyWDWjlUk3smlWeA0\nlIMW+oJ38t92CRLHH3IqRhyECBRW0d0aRGtq7TY8PmxjjvBZrxTNDpJT6KUk4LRm\na6A6IuAI7QnNK8SJqM0DLzlpygd7GJf8ZL9SoHSH+gFsYF67Cpooz/YDqWrlN7Vw\ntO00s0B+eXy+PCXYU7VSfuWFGK8TGEv6HfGMALLjhqMManyvfp8hz3ubN1rK3c8C\nUS/ilRh1qckdbtPvoDPhSbTDmfU1g/EfRSIEXBrIMLg9ka/XB9PvWRrekrppnQzP\nhP9YE3x/wbFc5QqQWiRCYyQl/rgIMOXvIxhkfe8H5n1Et4VAorkpEAXdsfN8KSVv\nLSMazVlLp9GYq5SUpqYX3KnxdWBgN7BJoZ4sltsTpHQ/34SXWfu3UmyUveWj7wp0\nx9hwsPirVI00EEea9AbP7NM2rAyu6ukcm4m6ATd2DZJIViq2es6m60AE6SMCmrQF\nwmk4H/kdQgeAELVfGOm2VyJ3z69fQuywz7xu27S6zTKi05Qlnohxol4wVb6OB7qG\nLPRtK9ObgzRo/OPumyXqlzAi/Yvyd1ZQk8labZps3e16bQp8+pVPiumWioMFJDWV\nGZjCmyMSU8V6MB6njbgLHoyg2LCukCAeSjbPGGGYhnKLm1AKSoJh3IpZuqcKCk5C\n8CM1S15HxV78s9dFntEqIokCAwEAAQ== +66ba20fe:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtfB12w4ZgqsXWZDfUAV/\n6Y4aHUKIu3q4SXrNZ7CXF9nXoAVYrS7NAxJdAodsY3vPCN0g5O8DFXR+390LdOuQ\n+HsGKCc1k5tX5ZXld37EZNTNSbR0k+NKhd9h6X3u6wqPOx7SIKxwAQR8qeeFq4pP\nrt9GAGlxtuYgzIIcKJPwE0dZlcBCg+GnptCUZXp/38BP1eYC+xTXSL6Muq1etYfg\nodXdb7Yl+2h1IHuOwo5rjgY5kpY7GcAs8AjGk3lDD/av60OTYccknH0NCVSmPoXK\nvrxDBOn0LQRNBLcAfnTKgHrzy0Q5h4TNkkyTgxkoQw5ObDk9nnabTxql732yy9BY\ns+hM9+dSFO1HKeVXreYSA2n1ndF18YAvAumzgyqzB7I4pMHXq1kC/8bONMJxwSkS\nYm6CoXKyavp7RqGMyeVpRC7tV+blkrrUml0BwNkxE+XnwDRB3xDV6hqgWe0XrifD\nYTfvd9ScZQP83ip0r4IKlq4GMv/R5shcCRJSkSZ6QSGshH40JYSoiwJf5FHbj9ND\n7do0UAqebWo4yNx63j/wb2ULorW3AClv0BCFSdPsIrCStiGdpgJDBR2P2NZOCob3\nG9uMj+wJD6JJg2nWqNJxkANXX37Qf8plgzssrhrgOvB0fjjS7GYhfkfmZTJ0wPOw\nA8+KzFseBh4UFGgue78KwgkCAwEAAQ== ' __Keyring= __KeyringFile="/usr/share/keyrings/ubuntu-archive-keyring.gpg" __SkipSigCheck=0 +__SkipEmulation=0 __UseMirror=0 __UnprocessedBuildArgs= @@ -162,9 +164,13 @@ while :; do armel) __BuildArch=armel __UbuntuArch=armel - __UbuntuRepo="http://ftp.debian.org/debian/" - __CodeName=jessie + __UbuntuRepo="http://archive.debian.org/debian/" + __CodeName=buster __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __LLDB_Package="liblldb-6.0-dev" + __UbuntuPackages="${__UbuntuPackages// libomp-dev/}" + __UbuntuPackages="${__UbuntuPackages// libomp5/}" + __UbuntuSuites= ;; armv6) __BuildArch=armv6 @@ -180,6 +186,18 @@ while :; do __Keyring="--keyring $__KeyringFile" fi ;; + loongarch64) + __BuildArch=loongarch64 + __AlpineArch=loongarch64 + __QEMUArch=loongarch64 + __UbuntuArch=loong64 + __UbuntuSuites=unreleased + __LLDB_Package="liblldb-19-dev" + + if [[ "$__CodeName" == "sid" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; riscv64) __BuildArch=riscv64 __AlpineArch=riscv64 @@ -264,44 +282,21 @@ while :; do ;; xenial) # Ubuntu 16.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=xenial - fi - ;; - zesty) # Ubuntu 17.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=zesty - fi + __CodeName=xenial ;; bionic) # Ubuntu 18.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=bionic - fi + __CodeName=bionic ;; focal) # Ubuntu 20.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=focal - fi + __CodeName=focal ;; jammy) # Ubuntu 22.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=jammy - fi + __CodeName=jammy ;; noble) # Ubuntu 24.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=noble - fi - if [[ -n "$__LLDB_Package" ]]; then - __LLDB_Package="liblldb-18-dev" - fi - ;; - jessie) # Debian 8 - __CodeName=jessie - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __CodeName=noble + if [[ -z "$__LLDB_Package" ]]; then + __LLDB_Package="liblldb-19-dev" fi ;; stretch) # Debian 9 @@ -319,7 +314,7 @@ while :; do __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __UbuntuRepo="http://archive.debian.org/debian/" fi ;; bullseye) # Debian 11 @@ -340,10 +335,28 @@ while :; do ;; sid) # Debian sid __CodeName=sid - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __UbuntuSuites= - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + # Debian-Ports architectures need different values + case "$__UbuntuArch" in + amd64|arm64|armel|armhf|i386|mips64el|ppc64el|riscv64|s390x) + __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.debian.org/debian/" + fi + ;; + *) + __KeyringFile="/usr/share/keyrings/debian-ports-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; + esac + + if [[ -e "$__KeyringFile" ]]; then + __Keyring="--keyring $__KeyringFile" fi ;; tizen) @@ -370,7 +383,7 @@ while :; do ;; freebsd14) __CodeName=freebsd - __FreeBSDBase="14.0-RELEASE" + __FreeBSDBase="14.2-RELEASE" __FreeBSDABI="14" __SkipUnmount=1 ;; @@ -388,6 +401,9 @@ while :; do --skipsigcheck) __SkipSigCheck=1 ;; + --skipemulation) + __SkipEmulation=1 + ;; --rootfsdir|-rootfsdir) shift __RootfsDir="$1" @@ -420,16 +436,15 @@ case "$__AlpineVersion" in elif [[ "$__AlpineArch" == "x86" ]]; then __AlpineVersion=3.17 # minimum version that supports lldb-dev __AlpinePackages+=" llvm15-libs" - elif [[ "$__AlpineArch" == "riscv64" ]]; then + elif [[ "$__AlpineArch" == "riscv64" || "$__AlpineArch" == "loongarch64" ]]; then + __AlpineVersion=3.21 # minimum version that supports lldb-dev + __AlpinePackages+=" llvm19-libs" + elif [[ -n "$__AlpineMajorVersion" ]]; then + # use whichever alpine version is provided and select the latest toolchain libs __AlpineLlvmLibsLookup=1 - __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive) else __AlpineVersion=3.13 # 3.13 to maximize compatibility __AlpinePackages+=" llvm10-libs" - - if [[ "$__AlpineArch" == "armv7" ]]; then - __AlpinePackages="${__AlpinePackages//numactl-dev/}" - fi fi esac @@ -439,15 +454,6 @@ if [[ "$__AlpineVersion" =~ 3\.1[345] ]]; then __AlpinePackages="${__AlpinePackages/compiler-rt/compiler-rt-static}" fi -if [[ "$__BuildArch" == "armel" ]]; then - __LLDB_Package="lldb-3.5-dev" -fi - -if [[ "$__CodeName" == "xenial" && "$__UbuntuArch" == "armhf" ]]; then - # libnuma-dev is not available on armhf for xenial - __UbuntuPackages="${__UbuntuPackages//libnuma-dev/}" -fi - __UbuntuPackages+=" ${__LLDB_Package:-}" if [[ -z "$__UbuntuRepo" ]]; then @@ -496,7 +502,7 @@ if [[ "$__CodeName" == "alpine" ]]; then arch="$(uname -m)" ensureDownloadTool - + if [[ "$__hasWget" == 1 ]]; then wget -P "$__ApkToolsDir" "https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v$__ApkToolsVersion/$arch/apk.static" else @@ -512,11 +518,6 @@ if [[ "$__CodeName" == "alpine" ]]; then echo "$__ApkToolsSHA512SUM $__ApkToolsDir/apk.static" | sha512sum -c chmod +x "$__ApkToolsDir/apk.static" - if [[ -f "/usr/bin/qemu-$__QEMUArch-static" ]]; then - mkdir -p "$__RootfsDir"/usr/bin - cp -v "/usr/bin/qemu-$__QEMUArch-static" "$__RootfsDir/usr/bin" - fi - if [[ "$__AlpineVersion" == "edge" ]]; then version=edge else @@ -536,6 +537,10 @@ if [[ "$__CodeName" == "alpine" ]]; then __ApkSignatureArg="--keys-dir $__ApkKeysDir" fi + if [[ "$__SkipEmulation" == "1" ]]; then + __NoEmulationArg="--no-scripts" + fi + # initialize DB # shellcheck disable=SC2086 "$__ApkToolsDir/apk.static" \ @@ -557,7 +562,7 @@ if [[ "$__CodeName" == "alpine" ]]; then "$__ApkToolsDir/apk.static" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \ - -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" \ + -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" $__NoEmulationArg \ add $__AlpinePackages rm -r "$__ApkToolsDir" @@ -573,7 +578,7 @@ elif [[ "$__CodeName" == "freebsd" ]]; then curl -SL "https://download.freebsd.org/ftp/releases/${__FreeBSDArch}/${__FreeBSDMachineArch}/${__FreeBSDBase}/base.txz" | tar -C "$__RootfsDir" -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version fi echo "ABI = \"FreeBSD:${__FreeBSDABI}:${__FreeBSDMachineArch}\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > "${__RootfsDir}"/usr/local/etc/pkg.conf - echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf + echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf mkdir -p "$__RootfsDir"/tmp # get and build package manager if [[ "$__hasWget" == 1 ]]; then @@ -681,7 +686,7 @@ elif [[ "$__CodeName" == "haiku" ]]; then ensureDownloadTool - echo "Downloading Haiku package tool" + echo "Downloading Haiku package tools" git clone https://github.com/haiku/haiku-toolchains-ubuntu --depth 1 "$__RootfsDir/tmp/script" if [[ "$__hasWget" == 1 ]]; then wget -O "$__RootfsDir/tmp/download/hosttools.zip" "$("$__RootfsDir/tmp/script/fetch.sh" --hosttools)" @@ -691,34 +696,42 @@ elif [[ "$__CodeName" == "haiku" ]]; then unzip -o "$__RootfsDir/tmp/download/hosttools.zip" -d "$__RootfsDir/tmp/bin" - DepotBaseUrl="https://depot.haiku-os.org/__api/v2/pkg/get-pkg" - HpkgBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuPortsBaseUrl="https://eu.hpkg.haiku-os.org/haikuports/master/$__HaikuArch/current" + + echo "Downloading HaikuPorts package repository index..." + if [[ "$__hasWget" == 1 ]]; then + wget -P "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + else + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + fi - # Download Haiku packages echo "Downloading Haiku packages" read -ra array <<<"$__HaikuPackages" for package in "${array[@]}"; do echo "Downloading $package..." - # API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60 - # The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598 + hpkgFilename="$(LD_LIBRARY_PATH="$__RootfsDir/tmp/bin" "$__RootfsDir/tmp/bin/package_repo" list -f "$__RootfsDir/tmp/download/repo" | + grep -E "${package}-" | sort -V | tail -n 1 | xargs)" + if [ -z "$hpkgFilename" ]; then + >&2 echo "ERROR: package $package missing." + exit 1 + fi + echo "Resolved filename: $hpkgFilename..." + hpkgDownloadUrl="$HaikuPortsBaseUrl/packages/$hpkgFilename" if [[ "$__hasWget" == 1 ]]; then - hpkgDownloadUrl="$(wget -qO- --post-data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" wget -P "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" else - hpkgDownloadUrl="$(curl -sSL -XPOST --data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" fi done for package in haiku haiku_devel; do echo "Downloading $package..." if [[ "$__hasWget" == 1 ]]; then - hpkgVersion="$(wget -qO- "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - wget -P "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(wget -qO- "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + wget -P "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" else - hpkgVersion="$(curl -sSL "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(curl -sSL "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" fi done @@ -744,25 +757,67 @@ elif [[ "$__CodeName" == "haiku" ]]; then popd rm -rf "$__RootfsDir/tmp" elif [[ -n "$__CodeName" ]]; then + __Suites="$__CodeName $(for suite in $__UbuntuSuites; do echo -n "$__CodeName-$suite "; done)" + + if [[ "$__SkipEmulation" == "1" ]]; then + if [[ -z "$AR" ]]; then + if command -v ar &>/dev/null; then + AR="$(command -v ar)" + elif command -v llvm-ar &>/dev/null; then + AR="$(command -v llvm-ar)" + else + echo "Unable to find ar or llvm-ar on PATH, add them to PATH or set AR environment variable pointing to the available AR tool" + exit 1 + fi + fi + + PYTHON=${PYTHON_EXECUTABLE:-python3} + + # shellcheck disable=SC2086,SC2046 + echo running "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + + # shellcheck disable=SC2086,SC2046 + "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + exit 0 + fi + + __UpdateOptions= if [[ "$__SkipSigCheck" == "0" ]]; then __Keyring="$__Keyring --force-check-gpg" + else + __Keyring= + __UpdateOptions="--allow-unauthenticated --allow-insecure-repositories" fi # shellcheck disable=SC2086 echo running debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" - debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" + # shellcheck disable=SC2086 + if ! debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo"; then + echo "debootstrap failed! dumping debootstrap.log" + cat "$__RootfsDir/debootstrap/debootstrap.log" + exit 1 + fi + + rm -rf "$__RootfsDir"/etc/apt/*.{sources,list} "$__RootfsDir"/etc/apt/sources.list.d mkdir -p "$__RootfsDir/etc/apt/sources.list.d/" + + # shellcheck disable=SC2086 cat > "$__RootfsDir/etc/apt/sources.list.d/$__CodeName.sources" < token2) - (token1 < token2) + else: + return -1 if isinstance(token1, str) else 1 + + return len(tokens1) - len(tokens2) + +def compare_debian_versions(version1, version2): + """Compare two Debian package versions.""" + epoch1, upstream1, revision1 = parse_debian_version(version1) + epoch2, upstream2, revision2 = parse_debian_version(version2) + + if epoch1 != epoch2: + return epoch1 - epoch2 + + result = compare_upstream_version(upstream1, upstream2) + if result != 0: + return result + + return compare_upstream_version(revision1, revision2) + +def resolve_dependencies(packages, aliases, desired_packages): + """Recursively resolves dependencies for the desired packages.""" + resolved = [] + to_process = deque(desired_packages) + + while to_process: + current = to_process.popleft() + resolved_package = current if current in packages else aliases.get(current, [None])[0] + + if not resolved_package: + print(f"Error: Package '{current}' was not found in the available packages.") + sys.exit(1) + + if resolved_package not in resolved: + resolved.append(resolved_package) + + deps = packages.get(resolved_package, {}).get("Depends", "") + if deps: + deps = [dep.split(' ')[0] for dep in deps.split(', ') if dep] + for dep in deps: + if dep not in resolved and dep not in to_process and dep in packages: + to_process.append(dep) + + return resolved + +def parse_package_index(content): + """Parses the Packages.gz file and returns package information.""" + packages = {} + aliases = {} + entries = re.split(r'\n\n+', content) + + for entry in entries: + fields = dict(re.findall(r'^(\S+): (.+)$', entry, re.MULTILINE)) + if "Package" in fields: + package_name = fields["Package"] + version = fields.get("Version") + filename = fields.get("Filename") + depends = fields.get("Depends") + provides = fields.get("Provides", None) + + # Only update if package_name is not in packages or if the new version is higher + if package_name not in packages or compare_debian_versions(version, packages[package_name]["Version"]) > 0: + packages[package_name] = { + "Version": version, + "Filename": filename, + "Depends": depends + } + + # Update aliases if package provides any alternatives + if provides: + provides_list = [x.strip() for x in provides.split(",")] + for alias in provides_list: + # Strip version specifiers + alias_name = re.sub(r'\s*\(=.*\)', '', alias) + if alias_name not in aliases: + aliases[alias_name] = [] + if package_name not in aliases[alias_name]: + aliases[alias_name].append(package_name) + + return packages, aliases + +def install_packages(mirror, packages_info, aliases, tmp_dir, extract_dir, ar_tool, desired_packages): + """Downloads .deb files and extracts them.""" + resolved_packages = resolve_dependencies(packages_info, aliases, desired_packages) + print(f"Resolved packages (including dependencies): {resolved_packages}") + + packages_to_download = {} + + for pkg in resolved_packages: + if pkg in packages_info: + packages_to_download[pkg] = packages_info[pkg] + + if pkg in aliases: + for alias in aliases[pkg]: + if alias in packages_info: + packages_to_download[alias] = packages_info[alias] + + asyncio.run(download_deb_files_parallel(mirror, packages_to_download, tmp_dir)) + + package_to_deb_file_map = {} + for pkg in resolved_packages: + pkg_info = packages_info.get(pkg) + if pkg_info: + deb_filename = pkg_info.get("Filename") + if deb_filename: + deb_file_path = os.path.join(tmp_dir, os.path.basename(deb_filename)) + package_to_deb_file_map[pkg] = deb_file_path + + for pkg in reversed(resolved_packages): + deb_file = package_to_deb_file_map.get(pkg) + if deb_file and os.path.exists(deb_file): + extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool) + + print("All done!") + +def extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool): + """Extract .deb file contents""" + + os.makedirs(extract_dir, exist_ok=True) + + with tempfile.TemporaryDirectory(dir=tmp_dir) as tmp_subdir: + result = subprocess.run(f"{ar_tool} t {os.path.abspath(deb_file)}", cwd=tmp_subdir, check=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + tar_filename = None + for line in result.stdout.decode().splitlines(): + if line.startswith("data.tar"): + tar_filename = line.strip() + break + + if not tar_filename: + raise FileNotFoundError(f"Could not find 'data.tar.*' in {deb_file}.") + + tar_file_path = os.path.join(tmp_subdir, tar_filename) + print(f"Extracting {tar_filename} from {deb_file}..") + + subprocess.run(f"{ar_tool} p {os.path.abspath(deb_file)} {tar_filename} > {tar_file_path}", check=True, shell=True) + + file_extension = os.path.splitext(tar_file_path)[1].lower() + + if file_extension == ".xz": + mode = "r:xz" + elif file_extension == ".gz": + mode = "r:gz" + elif file_extension == ".zst": + # zstd is not supported by standard library yet + decompressed_tar_path = tar_file_path.replace(".zst", "") + with open(tar_file_path, "rb") as zst_file, open(decompressed_tar_path, "wb") as decompressed_file: + dctx = zstandard.ZstdDecompressor() + dctx.copy_stream(zst_file, decompressed_file) + + tar_file_path = decompressed_tar_path + mode = "r" + else: + raise ValueError(f"Unsupported compression format: {file_extension}") + + with tarfile.open(tar_file_path, mode) as tar: + tar.extractall(path=extract_dir, filter='fully_trusted') + +def finalize_setup(rootfsdir): + lib_dir = os.path.join(rootfsdir, 'lib') + usr_lib_dir = os.path.join(rootfsdir, 'usr', 'lib') + + if os.path.exists(lib_dir): + if os.path.islink(lib_dir): + os.remove(lib_dir) + else: + os.makedirs(usr_lib_dir, exist_ok=True) + + for item in os.listdir(lib_dir): + src = os.path.join(lib_dir, item) + dest = os.path.join(usr_lib_dir, item) + + if os.path.isdir(src): + shutil.copytree(src, dest, dirs_exist_ok=True) + else: + shutil.copy2(src, dest) + + shutil.rmtree(lib_dir) + + os.symlink(usr_lib_dir, lib_dir) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Generate rootfs for .NET runtime on Debian-like OS") + parser.add_argument("--distro", required=False, help="Distro name (e.g., debian, ubuntu, etc.)") + parser.add_argument("--arch", required=True, help="Architecture (e.g., amd64, loong64, etc.)") + parser.add_argument("--rootfsdir", required=True, help="Destination directory.") + parser.add_argument('--suite', required=True, action='append', help='Specify one or more repository suites to collect index data.') + parser.add_argument("--mirror", required=False, help="Mirror (e.g., http://ftp.debian.org/debian-ports etc.)") + parser.add_argument("--artool", required=False, default="ar", help="ar tool to extract debs (e.g., ar, llvm-ar etc.)") + parser.add_argument("packages", nargs="+", help="List of package names to be installed.") + + args = parser.parse_args() + + if args.mirror is None: + if args.distro == "ubuntu": + args.mirror = "http://archive.ubuntu.com/ubuntu" if args.arch in ["amd64", "i386"] else "http://ports.ubuntu.com/ubuntu-ports" + elif args.distro == "debian": + args.mirror = "http://ftp.debian.org/debian-ports" + else: + raise Exception("Unsupported distro") + + DESIRED_PACKAGES = args.packages + [ # base packages + "dpkg", + "busybox", + "libc-bin", + "base-files", + "base-passwd", + "debianutils" + ] + + print(f"Creating rootfs. rootfsdir: {args.rootfsdir}, distro: {args.distro}, arch: {args.arch}, suites: {args.suite}, mirror: {args.mirror}") + + package_index_content = asyncio.run(download_package_index_parallel(args.mirror, args.arch, args.suite)) + + packages_info, aliases = parse_package_index(package_index_content) + + with tempfile.TemporaryDirectory() as tmp_dir: + install_packages(args.mirror, packages_info, aliases, tmp_dir, args.rootfsdir, args.artool, DESIRED_PACKAGES) + + finalize_setup(args.rootfsdir) diff --git a/eng/common/cross/tizen-build-rootfs.sh b/eng/common/cross/tizen-build-rootfs.sh old mode 100644 new mode 100755 diff --git a/eng/common/cross/tizen-fetch.sh b/eng/common/cross/tizen-fetch.sh old mode 100644 new mode 100755 index 28936ceef3a7..37c3a61f1de8 --- a/eng/common/cross/tizen-fetch.sh +++ b/eng/common/cross/tizen-fetch.sh @@ -156,13 +156,8 @@ fetch_tizen_pkgs() done } -if [ "$TIZEN_ARCH" == "riscv64" ]; then - BASE="Tizen-Base-RISCV" - UNIFIED="Tizen-Unified-RISCV" -else - BASE="Tizen-Base" - UNIFIED="Tizen-Unified" -fi +BASE="Tizen-Base" +UNIFIED="Tizen-Unified" Inform "Initialize ${TIZEN_ARCH} base" fetch_tizen_pkgs_init standard $BASE diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake index 9a7ecfbd42c5..0ff85cf0367e 100644 --- a/eng/common/cross/toolchain.cmake +++ b/eng/common/cross/toolchain.cmake @@ -67,6 +67,13 @@ elseif(TARGET_ARCH_NAME STREQUAL "armv6") else() set(TOOLCHAIN "arm-linux-gnueabihf") endif() +elseif(TARGET_ARCH_NAME STREQUAL "loongarch64") + set(CMAKE_SYSTEM_PROCESSOR "loongarch64") + if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/loongarch64-alpine-linux-musl) + set(TOOLCHAIN "loongarch64-alpine-linux-musl") + else() + set(TOOLCHAIN "loongarch64-linux-gnu") + endif() elseif(TARGET_ARCH_NAME STREQUAL "ppc64le") set(CMAKE_SYSTEM_PROCESSOR ppc64le) if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/powerpc64le-alpine-linux-musl) @@ -118,7 +125,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86") set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu") endif() else() - message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, ppc64le, riscv64, s390x, x64 and x86 are supported!") + message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64 and x86 are supported!") endif() if(DEFINED ENV{TOOLCHAIN}) @@ -148,6 +155,25 @@ if(TIZEN) include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++/${TIZEN_TOOLCHAIN}) endif() +function(locate_toolchain_exec exec var) + set(TOOLSET_PREFIX ${TOOLCHAIN}-) + string(TOUPPER ${exec} EXEC_UPPERCASE) + if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") + set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) + return() + endif() + + find_program(EXEC_LOCATION_${exec} + NAMES + "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" + "${TOOLSET_PREFIX}${exec}") + + if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") + message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") + endif() + set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) +endfunction() + if(ANDROID) if(TARGET_ARCH_NAME STREQUAL "arm") set(ANDROID_ABI armeabi-v7a) @@ -178,66 +204,24 @@ elseif(FREEBSD) set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=lld") elseif(ILLUMOS) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") + set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") include_directories(SYSTEM ${CROSS_ROOTFS}/include) - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") - locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") elseif(HAIKU) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") set(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};${CROSS_ROOTFS}/cross-tools-x86_64/bin") - - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") - # let CMake set up the correct search paths include(Platform/Haiku) else() @@ -307,7 +291,7 @@ endif() # Specify compile options -if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) +if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|loongarch64|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN}) diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index 36dbd45e1ce8..e889f439b8dc 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -68,7 +68,7 @@ function InstallDarcCli { fi fi - local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" + local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" echo "Installing Darc CLI version $darcVersion..." echo "You may need to restart your command shell if this is the first dotnet tool you have installed." diff --git a/eng/common/dotnet.cmd b/eng/common/dotnet.cmd new file mode 100644 index 000000000000..527fa4bb38fb --- /dev/null +++ b/eng/common/dotnet.cmd @@ -0,0 +1,7 @@ +@echo off + +:: This script is used to install the .NET SDK. +:: It will also invoke the SDK with any provided arguments. + +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0dotnet.ps1""" %*" +exit /b %ErrorLevel% diff --git a/eng/common/dotnet.ps1 b/eng/common/dotnet.ps1 new file mode 100644 index 000000000000..45e5676c9ebd --- /dev/null +++ b/eng/common/dotnet.ps1 @@ -0,0 +1,11 @@ +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +. $PSScriptRoot\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true + +# Invoke acquired SDK with args if they are provided +if ($args.count -gt 0) { + $env:DOTNET_NOLOGO=1 + & "$dotnetRoot\dotnet.exe" $args +} diff --git a/eng/common/dotnet.sh b/eng/common/dotnet.sh new file mode 100755 index 000000000000..2ef68235675f --- /dev/null +++ b/eng/common/dotnet.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +source="${BASH_SOURCE[0]}" +# resolve $SOURCE until the file is no longer a symlink +while [[ -h $source ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +source $scriptroot/tools.sh +InitializeDotNetCli true # install + +# Invoke acquired SDK with args if they are provided +if [[ $# > 0 ]]; then + __dotnetDir=${_InitializeDotNetCli} + dotnetPath=${__dotnetDir}/dotnet + ${dotnetPath} "$@" +fi diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1 index 524aaa57f2b7..fa1cdc2b3007 100644 --- a/eng/common/generate-locproject.ps1 +++ b/eng/common/generate-locproject.ps1 @@ -33,15 +33,27 @@ $jsonTemplateFiles | ForEach-Object { $jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern +$wxlFilesV3 = @() +$wxlFilesV5 = @() $wxlFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\.+\.wxl" -And -Not( $_.Directory.Name -Match "\d{4}" ) } # localized files live in four digit lang ID directories; this excludes them if (-not $wxlFiles) { $wxlEnFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\1033\\.+\.wxl" } # pick up en files (1033 = en) specifically so we can copy them to use as the neutral xlf files if ($wxlEnFiles) { - $wxlFiles = @() - $wxlEnFiles | ForEach-Object { - $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" - $wxlFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru - } + $wxlFiles = @() + $wxlEnFiles | ForEach-Object { + $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" + $content = Get-Content $_.FullName -Raw + + # Split files on schema to select different parser settings in the generated project. + if ($content -like "*http://wixtoolset.org/schemas/v4/wxl*") + { + $wxlFilesV5 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + elseif ($content -like "*http://schemas.microsoft.com/wix/2006/localization*") + { + $wxlFilesV3 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + } } } @@ -114,7 +126,32 @@ $locJson = @{ CloneLanguageSet = "WiX_CloneLanguages" LssFiles = @( "wxl_loc.lss" ) LocItems = @( - $wxlFiles | ForEach-Object { + $wxlFilesV3 | ForEach-Object { + $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" + $continue = $true + foreach ($exclusion in $exclusions.Exclusions) { + if ($_.FullName.Contains($exclusion)) { + $continue = $false + } + } + $sourceFile = ($_.FullName | Resolve-Path -Relative) + if ($continue) + { + return @{ + SourceFile = $sourceFile + CopyOption = "LangIDOnPath" + OutputPath = $outputPath + } + } + } + ) + }, + @{ + LanguageSet = $LanguageSet + CloneLanguageSet = "WiX_CloneLanguages" + LssFiles = @( "P210WxlSchemaV4.lss" ) + LocItems = @( + $wxlFilesV5 | ForEach-Object { $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" $continue = $true foreach ($exclusion in $exclusions.Exclusions) { diff --git a/eng/common/generate-sbom-prep.sh b/eng/common/generate-sbom-prep.sh old mode 100644 new mode 100755 diff --git a/eng/common/native/install-dependencies.sh b/eng/common/native/install-dependencies.sh new file mode 100755 index 000000000000..477a44f335be --- /dev/null +++ b/eng/common/native/install-dependencies.sh @@ -0,0 +1,62 @@ +#!/bin/sh + +set -e + +# This is a simple script primarily used for CI to install necessary dependencies +# +# Usage: +# +# ./install-dependencies.sh + +os="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + +if [ -z "$os" ]; then + . "$(dirname "$0")"/init-os-and-arch.sh +fi + +case "$os" in + linux) + if [ -e /etc/os-release ]; then + . /etc/os-release + fi + + if [ "$ID" = "debian" ] || [ "$ID_LIKE" = "debian" ]; then + apt update + + apt install -y build-essential gettext locales cmake llvm clang lld lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev \ + libssl-dev libkrb5-dev pigz cpio + + localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 + elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ] || [ "$ID" = "azurelinux" ]; then + pkg_mgr="$(command -v tdnf 2>/dev/null || command -v dnf)" + $pkg_mgr install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio + elif [ "$ID" = "alpine" ]; then + apk add build-base cmake bash curl clang llvm-dev lld lldb krb5-dev lttng-ust-dev icu-dev openssl-dev pigz cpio + else + echo "Unsupported distro. distro: $ID" + exit 1 + fi + ;; + + osx|maccatalyst|ios|iossimulator|tvos|tvossimulator) + echo "Installed xcode version: $(xcode-select -p)" + + export HOMEBREW_NO_INSTALL_CLEANUP=1 + export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 + # Skip brew update for now, see https://github.com/actions/setup-python/issues/577 + # brew update --preinstall + brew bundle --no-upgrade --file=- < Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." + Write-Host " -excludeCIBinaryLog When running on CI, allow no binary log (short: -nobl)" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." } @@ -34,10 +39,11 @@ function Print-Usage() { function Build([string]$target) { $logSuffix = if ($target -eq 'Execute') { '' } else { ".$target" } $log = Join-Path $LogDir "$task$logSuffix.binlog" + $binaryLogArg = if ($binaryLog) { "/bl:$log" } else { "" } $outputPath = Join-Path $ToolsetDir "$task\" MSBuild $taskProject ` - /bl:$log ` + $binaryLogArg ` /t:$target ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` @@ -64,7 +70,7 @@ try { $GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty } if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) { - $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.12.0" -MemberType NoteProperty + $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "18.0.0" -MemberType NoteProperty } if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") { $xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true diff --git a/eng/common/sdk-task.sh b/eng/common/sdk-task.sh new file mode 100755 index 000000000000..3270f83fa9a7 --- /dev/null +++ b/eng/common/sdk-task.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash + +show_usage() { + echo "Common settings:" + echo " --task Name of Arcade task (name of a project in SdkTasks directory of the Arcade SDK package)" + echo " --restore Restore dependencies" + echo " --verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]" + echo " --help Print help and exit" + echo "" + + echo "Advanced settings:" + echo " --excludeCIBinarylog Don't output binary log (short: -nobl)" + echo " --noWarnAsError Do not warn as error" + echo "" + echo "Command line arguments not listed above are passed thru to msbuild." +} + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +Build() { + local target=$1 + local log_suffix="" + [[ "$target" != "Execute" ]] && log_suffix=".$target" + local log="$log_dir/$task$log_suffix.binlog" + local binaryLogArg="" + [[ $binary_log == true ]] && binaryLogArg="/bl:$log" + local output_path="$toolset_dir/$task/" + + MSBuild "$taskProject" \ + $binaryLogArg \ + /t:"$target" \ + /p:Configuration="$configuration" \ + /p:RepoRoot="$repo_root" \ + /p:BaseIntermediateOutputPath="$output_path" \ + /v:"$verbosity" \ + $properties +} + +binary_log=true +configuration="Debug" +verbosity="minimal" +exclude_ci_binary_log=false +restore=false +help=false +properties='' +warnAsError=true + +while (($# > 0)); do + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + case $lowerI in + --task) + task=$2 + shift 2 + ;; + --restore) + restore=true + shift 1 + ;; + --verbosity) + verbosity=$2 + shift 2 + ;; + --excludecibinarylog|--nobl) + binary_log=false + exclude_ci_binary_log=true + shift 1 + ;; + --noWarnAsError) + warnAsError=false + shift 1 + ;; + --help) + help=true + shift 1 + ;; + *) + properties="$properties $1" + shift 1 + ;; + esac +done + +ci=true + +if $help; then + show_usage + exit 0 +fi + +. "$scriptroot/tools.sh" +InitializeToolset + +if [[ -z "$task" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'MissingTask' -Message "Missing required parameter '-task '" + ExitWithExitCode 1 +fi + +taskProject=$(GetSdkTaskProject "$task") +if [[ ! -e "$taskProject" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'UnknownTask' -Message "Unknown task: $task" + ExitWithExitCode 1 +fi + +if $restore; then + Build "Restore" +fi + +Build "Execute" + + +ExitWithExitCode 0 diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config index 4585cfd6bba1..e5f543ea68c2 100644 --- a/eng/common/sdl/packages.config +++ b/eng/common/sdl/packages.config @@ -1,4 +1,4 @@ - + diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml index 81ea7a261f2d..92a0664f5647 100644 --- a/eng/common/templates-official/job/job.yml +++ b/eng/common/templates-official/job/job.yml @@ -31,6 +31,7 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked continueOnError: true - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - output: pipelineArtifact @@ -39,6 +40,7 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked sbomEnabled: false # we don't need SBOM for logs - ${{ if eq(parameters.enablePublishBuildArtifacts, true) }}: @@ -46,7 +48,7 @@ jobs: displayName: Publish Logs PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' publishLocation: Container - ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() sbomEnabled: false # we don't need SBOM for logs diff --git a/eng/common/templates-official/steps/publish-build-artifacts.yml b/eng/common/templates-official/steps/publish-build-artifacts.yml index 100a3fc98493..fcf6637b2ebc 100644 --- a/eng/common/templates-official/steps/publish-build-artifacts.yml +++ b/eng/common/templates-official/steps/publish-build-artifacts.yml @@ -24,6 +24,10 @@ parameters: - name: is1ESPipeline type: boolean default: true + +- name: retryCountOnTaskFailure + type: string + default: 10 steps: - ${{ if ne(parameters.is1ESPipeline, true) }}: @@ -38,4 +42,5 @@ steps: PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: ArtifactName: ${{ parameters.artifactName }} - + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates-official/steps/source-index-stage1-publish.yml b/eng/common/templates-official/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..9b8b80942b5c --- /dev/null +++ b/eng/common/templates-official/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: true + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 5bdd3dd85fd2..238fa0818f7b 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -46,6 +46,7 @@ jobs: artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: @@ -56,6 +57,7 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked sbomEnabled: false # we don't need SBOM for logs - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: @@ -66,7 +68,7 @@ jobs: displayName: Publish Logs pathToPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' publishLocation: Container - artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() diff --git a/eng/common/templates/steps/publish-build-artifacts.yml b/eng/common/templates/steps/publish-build-artifacts.yml index 6428a98dfef6..605e602e94d1 100644 --- a/eng/common/templates/steps/publish-build-artifacts.yml +++ b/eng/common/templates/steps/publish-build-artifacts.yml @@ -25,6 +25,10 @@ parameters: type: string default: 'Container' +- name: retryCountOnTaskFailure + type: string + default: 10 + steps: - ${{ if eq(parameters.is1ESPipeline, true) }}: - 'eng/common/templates cannot be referenced from a 1ES managed template': error @@ -37,4 +41,6 @@ steps: PublishLocation: ${{ parameters.publishLocation }} PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: - ArtifactName: ${{ parameters.artifactName }} \ No newline at end of file + ArtifactName: ${{ parameters.artifactName }} + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates/steps/source-index-stage1-publish.yml b/eng/common/templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..182cec33a7bb --- /dev/null +++ b/eng/common/templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: false + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates/steps/vmr-sync.yml b/eng/common/templates/steps/vmr-sync.yml new file mode 100644 index 000000000000..eb619c502683 --- /dev/null +++ b/eng/common/templates/steps/vmr-sync.yml @@ -0,0 +1,186 @@ +### These steps synchronize new code from product repositories into the VMR (https://github.com/dotnet/dotnet). +### They initialize the darc CLI and pull the new updates. +### Changes are applied locally onto the already cloned VMR (located in $vmrPath). + +parameters: +- name: targetRef + displayName: Target revision in dotnet/ to synchronize + type: string + default: $(Build.SourceVersion) + +- name: vmrPath + displayName: Path where the dotnet/dotnet is checked out to + type: string + default: $(Agent.BuildDirectory)/vmr + +- name: additionalSyncs + displayName: Optional list of package names whose repo's source will also be synchronized in the local VMR, e.g. NuGet.Protocol + type: object + default: [] + +steps: +- checkout: vmr + displayName: Clone dotnet/dotnet + path: vmr + clean: true + +- checkout: self + displayName: Clone $(Build.Repository.Name) + path: repo + fetchDepth: 0 + +# This step is needed so that when we get a detached HEAD / shallow clone, +# we still pull the commit into the temporary repo clone to use it during the sync. +# Also unshallow the clone so that forwardflow command would work. +- script: | + git branch repo-head + git rev-parse HEAD + displayName: Label PR commit + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global user.name "dotnet-maestro[bot]" + git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com" + displayName: Set git author to dotnet-maestro[bot] + workingDirectory: ${{ parameters.vmrPath }} + +- script: | + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync repo into VMR (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global diff.astextplain.textconv echo + git config --system core.longpaths true + displayName: Configure Windows git (longpaths, astextplain) + condition: eq(variables['Agent.OS'], 'Windows_NT') + +- powershell: | + ./eng/common/vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync repo into VMR (Windows) + condition: eq(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - task: CopyFiles@2 + displayName: Collect failed patches + condition: failed() + inputs: + SourceFolder: '$(Agent.TempDirectory)' + Contents: '*.patch' + TargetFolder: '$(Build.ArtifactStagingDirectory)/FailedPatches' + + - publish: '$(Build.ArtifactStagingDirectory)/FailedPatches' + artifact: $(System.JobDisplayName)_FailedPatches + displayName: Upload failed patches + condition: failed() + +- ${{ each assetName in parameters.additionalSyncs }}: + # The vmr-sync script ends up staging files in the local VMR so we have to commit those + - script: + git commit --allow-empty -am "Forward-flow $(Build.Repository.Name)" + displayName: Commit local VMR changes + workingDirectory: ${{ parameters.vmrPath }} + + - script: | + set -ex + + echo "Searching for details of asset ${{ assetName }}..." + + # Use darc to get dependencies information + dependencies=$(./.dotnet/dotnet darc get-dependencies --name '${{ assetName }}' --ci) + + # Extract repository URL and commit hash + repository=$(echo "$dependencies" | grep 'Repo:' | sed 's/Repo:[[:space:]]*//' | head -1) + + if [ -z "$repository" ]; then + echo "##vso[task.logissue type=error]Asset ${{ assetName }} not found in the dependency list" + exit 1 + fi + + commit=$(echo "$dependencies" | grep 'Commit:' | sed 's/Commit:[[:space:]]*//' | head -1) + + echo "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync ${{ assetName }} into (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + + - powershell: | + $ErrorActionPreference = 'Stop' + + Write-Host "Searching for details of asset ${{ assetName }}..." + + $dependencies = .\.dotnet\dotnet darc get-dependencies --name '${{ assetName }}' --ci + + $repository = $dependencies | Select-String -Pattern 'Repo:\s+([^\s]+)' | Select-Object -First 1 + $repository -match 'Repo:\s+([^\s]+)' | Out-Null + $repository = $matches[1] + + if ($repository -eq $null) { + Write-Error "Asset ${{ assetName }} not found in the dependency list" + exit 1 + } + + $commit = $dependencies | Select-String -Pattern 'Commit:\s+([^\s]+)' | Select-Object -First 1 + $commit -match 'Commit:\s+([^\s]+)' | Out-Null + $commit = $matches[1] + + Write-Host "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + .\eng\common\vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync ${{ assetName }} into (Windows) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/eng/common/templates/vmr-build-pr.yml b/eng/common/templates/vmr-build-pr.yml new file mode 100644 index 000000000000..2f3694fa1323 --- /dev/null +++ b/eng/common/templates/vmr-build-pr.yml @@ -0,0 +1,43 @@ +# This pipeline is used for running the VMR verification of the PR changes in repo-level PRs. +# +# It will run a full set of verification jobs defined in: +# https://github.com/dotnet/dotnet/blob/10060d128e3f470e77265f8490f5e4f72dae738e/eng/pipelines/templates/stages/vmr-build.yml#L27-L38 +# +# For repos that do not need to run the full set, you would do the following: +# +# 1. Copy this YML file to a repo-specific location, i.e. outside of eng/common. +# +# 2. Add `verifications` parameter to VMR template reference +# +# Examples: +# - For source-build stage 1 verification, add the following: +# verifications: [ "source-build-stage1" ] +# +# - For Windows only verifications, add the following: +# verifications: [ "unified-build-windows-x64", "unified-build-windows-x86" ] + +trigger: none +pr: none + +variables: +- template: /eng/common/templates/variables/pool-providers.yml@self + +- name: skipComponentGovernanceDetection # we run CG on internal builds only + value: true + +- name: Codeql.Enabled # we run CodeQL on internal builds only + value: false + +resources: + repositories: + - repository: vmr + type: github + name: dotnet/dotnet + endpoint: dotnet + ref: refs/heads/main # Set to whatever VMR branch the PR build should insert into + +stages: +- template: /eng/pipelines/templates/stages/vmr-build.yml@vmr + parameters: + isBuiltFromVmr: false + scope: lite diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index a06513a59407..977a2d4b1039 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -65,10 +65,8 @@ $ErrorActionPreference = 'Stop' # Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed [string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null } -# True if the build is a product build -[bool]$productBuild = if (Test-Path variable:productBuild) { $productBuild } else { $false } - -[String[]]$properties = if (Test-Path variable:properties) { $properties } else { @() } +# True when the build is running within the VMR. +[bool]$fromVMR = if (Test-Path variable:fromVMR) { $fromVMR } else { $false } function Create-Directory ([string[]] $path) { New-Item -Path $path -Force -ItemType 'Directory' | Out-Null @@ -259,7 +257,20 @@ function Retry($downloadBlock, $maxRetries = 5) { function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' + $shouldDownload = $false + if (!(Test-Path $installScript)) { + $shouldDownload = $true + } else { + # Check if the script is older than 30 days + $fileAge = (Get-Date) - (Get-Item $installScript).LastWriteTime + if ($fileAge.Days -gt 30) { + Write-Host "Existing install script is too old, re-downloading..." + $shouldDownload = $true + } + } + + if ($shouldDownload) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit $uri = "https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1" @@ -383,8 +394,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # If the version of msbuild is going to be xcopied, # use this version. Version matches a package here: - # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/17.12.0 - $defaultXCopyMSBuildVersion = '17.12.0' + # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/18.0.0 + $defaultXCopyMSBuildVersion = '18.0.0' if (!$vsRequirements) { if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') { @@ -533,7 +544,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') { $vswhereVersion = $GlobalJson.tools.vswhere } else { - $vswhereVersion = '2.5.2' + # keep this in sync with the VSWhereVersion in DefaultVersions.props + $vswhereVersion = '3.1.7' } $vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion" @@ -541,7 +553,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir - Write-Host 'Downloading vswhere' + Write-Host "Downloading vswhere $vswhereVersion" + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Retry({ Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -UseBasicParsing -OutFile $vswhereExe }) @@ -611,14 +624,7 @@ function InitializeBuildTool() { } $dotnetPath = Join-Path $dotnetRoot (GetExecutableFileName 'dotnet') - # Use override if it exists - commonly set by source-build - if ($null -eq $env:_OverrideArcadeInitializeBuildToolFramework) { - $initializeBuildToolFramework="net9.0" - } else { - $initializeBuildToolFramework=$env:_OverrideArcadeInitializeBuildToolFramework - } - - $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = $initializeBuildToolFramework } + $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'net' } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore @@ -627,7 +633,7 @@ function InitializeBuildTool() { ExitWithExitCode 1 } - $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472"; ExcludePrereleaseVS = $excludePrereleaseVS } + $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "netframework"; ExcludePrereleaseVS = $excludePrereleaseVS } } else { Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 @@ -660,7 +666,6 @@ function GetNuGetPackageCachePath() { $env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages\' } else { $env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages\' - $env:RESTORENOHTTPCACHE = $true } } @@ -782,26 +787,13 @@ function MSBuild() { $toolsetBuildProject = InitializeToolset $basePath = Split-Path -parent $toolsetBuildProject - $possiblePaths = @( - # new scripts need to work with old packages, so we need to look for the old names/versions - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.Arcade.Sdk.dll')) - ) - $selectedPath = $null - foreach ($path in $possiblePaths) { - if (Test-Path $path -PathType Leaf) { - $selectedPath = $path - break - } - } + $selectedPath = Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll') + if (-not $selectedPath) { - Write-PipelineTelemetryError -Category 'Build' -Message 'Unable to find arcade sdk logger assembly.' + Write-PipelineTelemetryError -Category 'Build' -Message "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 } + $args += "/logger:$selectedPath" } @@ -832,6 +824,11 @@ function MSBuild-Core() { $cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse /p:ContinuousIntegrationBuild=$ci" + # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable + if ($env:MSBUILD_MT_ENABLED -eq "1") { + $cmdArgs += ' -mt' + } + if ($warnAsError) { $cmdArgs += ' /warnaserror /p:TreatWarningsAsErrors=true' } @@ -864,8 +861,8 @@ function MSBuild-Core() { } # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$productBuild -and -not($properties -like "*DotNetBuildRepo=true*")) { + # Skip this when the build is a child of the VMR build. + if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$fromVMR) { Write-PipelineSetResult -Result "Failed" -Message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 01b09b65796c..1b296f646c23 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -5,6 +5,9 @@ # CI mode - set to true on CI server for PR validation build or official build. ci=${ci:-false} +# Build mode +source_build=${source_build:-false} + # Set to true to use the pipelines logger which will enable Azure logging output. # https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md # This flag is meant as a temporary opt-opt for the feature while validate it across @@ -58,7 +61,8 @@ use_installed_dotnet_cli=${use_installed_dotnet_cli:-true} dotnetInstallScriptVersion=${dotnetInstallScriptVersion:-'v1'} # True to use global NuGet cache instead of restoring packages to repository-local directory. -if [[ "$ci" == true ]]; then +# Keep in sync with NuGetPackageroot in Arcade SDK's RepositoryLayout.props. +if [[ "$ci" == true || "$source_build" == true ]]; then use_global_nuget_cache=${use_global_nuget_cache:-false} else use_global_nuget_cache=${use_global_nuget_cache:-true} @@ -68,8 +72,8 @@ fi runtime_source_feed=${runtime_source_feed:-''} runtime_source_feed_key=${runtime_source_feed_key:-''} -# True if the build is a product build -product_build=${product_build:-false} +# True when the build is running within the VMR. +from_vmr=${from_vmr:-false} # Resolve any symlinks in the given path. function ResolvePath { @@ -296,8 +300,29 @@ function GetDotNetInstallScript { local root=$1 local install_script="$root/dotnet-install.sh" local install_script_url="https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh" + local timestamp_file="$root/.dotnet-install.timestamp" + local should_download=false if [[ ! -a "$install_script" ]]; then + should_download=true + elif [[ -f "$timestamp_file" ]]; then + # Check if the script is older than 30 days using timestamp file + local download_time=$(cat "$timestamp_file" 2>/dev/null || echo "0") + local current_time=$(date +%s) + local age_seconds=$((current_time - download_time)) + + # 30 days = 30 * 24 * 60 * 60 = 2592000 seconds + if [[ $age_seconds -gt 2592000 ]]; then + echo "Existing install script is too old, re-downloading..." + should_download=true + fi + else + # No timestamp file exists, assume script is old and re-download + echo "No timestamp found for existing install script, re-downloading..." + should_download=true + fi + + if [[ "$should_download" == true ]]; then mkdir -p "$root" echo "Downloading '$install_script_url'" @@ -324,6 +349,9 @@ function GetDotNetInstallScript { ExitWithExitCode $exit_code } fi + + # Create timestamp file to track download time in seconds from epoch + date +%s > "$timestamp_file" fi # return value _GetDotNetInstallScript="$install_script" @@ -339,22 +367,14 @@ function InitializeBuildTool { # return values _InitializeBuildTool="$_InitializeDotNetCli/dotnet" _InitializeBuildToolCommand="msbuild" - # use override if it exists - commonly set by source-build - if [[ "${_OverrideArcadeInitializeBuildToolFramework:-x}" == "x" ]]; then - _InitializeBuildToolFramework="net9.0" - else - _InitializeBuildToolFramework="${_OverrideArcadeInitializeBuildToolFramework}" - fi } -# Set RestoreNoHttpCache as a workaround for https://github.com/NuGet/Home/issues/3116 function GetNuGetPackageCachePath { if [[ -z ${NUGET_PACKAGES:-} ]]; then if [[ "$use_global_nuget_cache" == true ]]; then export NUGET_PACKAGES="$HOME/.nuget/packages/" else export NUGET_PACKAGES="$repo_root/.packages/" - export RESTORENOHTTPCACHE=true fi fi @@ -451,25 +471,13 @@ function MSBuild { fi local toolset_dir="${_InitializeToolset%/*}" - # new scripts need to work with old packages, so we need to look for the old names/versions - local selectedPath= - local possiblePaths=() - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - for path in "${possiblePaths[@]}"; do - if [[ -f $path ]]; then - selectedPath=$path - break - fi - done + local selectedPath="$toolset_dir/net/Microsoft.DotNet.ArcadeLogging.dll" + if [[ -z "$selectedPath" ]]; then - Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly." + Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 fi + args+=( "-logger:$selectedPath" ) fi @@ -506,8 +514,8 @@ function MSBuild-Core { echo "Build failed with exit code $exit_code. Check errors above." # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$product_build" != true && "$properties" != *"DotNetBuildRepo=true"* ]]; then + # Skip this when the build is a child of the VMR build. + if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$from_vmr" != true ]]; then Write-PipelineSetResult -result "Failed" -message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error @@ -518,7 +526,13 @@ function MSBuild-Core { } } - RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" + # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable + local mt_switch="" + if [[ "${MSBUILD_MT_ENABLED:-}" == "1" ]]; then + mt_switch="-mt" + fi + + RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch $mt_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" } function GetDarc { @@ -530,6 +544,13 @@ function GetDarc { fi "$eng_root/common/darc-init.sh" --toolpath "$darc_path" $version + darc_tool="$darc_path/darc" +} + +# Returns a full path to an Arcade SDK task project file. +function GetSdkTaskProject { + taskName=$1 + echo "$(dirname $_InitializeToolset)/SdkTasks/$taskName.proj" } ResolvePath "${BASH_SOURCE[0]}" diff --git a/eng/common/vmr-sync.ps1 b/eng/common/vmr-sync.ps1 new file mode 100755 index 000000000000..b37992d91cf0 --- /dev/null +++ b/eng/common/vmr-sync.ps1 @@ -0,0 +1,164 @@ +<# +.SYNOPSIS + +This script is used for synchronizing the current repository into a local VMR. +It pulls the current repository's code into the specified VMR directory for local testing or +Source-Build validation. + +.DESCRIPTION + +The tooling used for synchronization will clone the VMR repository into a temporary folder if +it does not already exist. These clones can be reused in future synchronizations, so it is +recommended to dedicate a folder for this to speed up re-runs. + +.EXAMPLE + Synchronize current repository into a local VMR: + ./vmr-sync.ps1 -vmrDir "$HOME/repos/dotnet" -tmpDir "$HOME/repos/tmp" + +.PARAMETER tmpDir +Required. Path to the temporary folder where repositories will be cloned + +.PARAMETER vmrBranch +Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch + +.PARAMETER azdevPat +Optional. Azure DevOps PAT to use for cloning private repositories. + +.PARAMETER vmrDir +Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +.PARAMETER debugOutput +Optional. Enables debug logging in the darc vmr command. + +.PARAMETER ci +Optional. Denotes that the script is running in a CI environment. +#> +param ( + [Parameter(Mandatory=$true, HelpMessage="Path to the temporary folder where repositories will be cloned")] + [string][Alias('t', 'tmp')]$tmpDir, + [string][Alias('b', 'branch')]$vmrBranch, + [string]$remote, + [string]$azdevPat, + [string][Alias('v', 'vmr')]$vmrDir, + [switch]$ci, + [switch]$debugOutput +) + +function Fail { + Write-Host "> $($args[0])" -ForegroundColor 'Red' +} + +function Highlight { + Write-Host "> $($args[0])" -ForegroundColor 'Cyan' +} + +$verbosity = 'verbose' +if ($debugOutput) { + $verbosity = 'debug' +} +# Validation + +if (-not $tmpDir) { + Fail "Missing -tmpDir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +} + +# Sanitize the input + +if (-not $vmrDir) { + $vmrDir = Join-Path $tmpDir 'dotnet' +} + +if (-not (Test-Path -Path $tmpDir -PathType Container)) { + New-Item -ItemType Directory -Path $tmpDir | Out-Null +} + +# Prepare the VMR + +if (-not (Test-Path -Path $vmrDir -PathType Container)) { + Highlight "Cloning 'dotnet/dotnet' into $vmrDir.." + git clone https://github.com/dotnet/dotnet $vmrDir + + if ($vmrBranch) { + git -C $vmrDir switch -c $vmrBranch + } +} +else { + if ((git -C $vmrDir diff --quiet) -eq $false) { + Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes" + exit 1 + } + + if ($vmrBranch) { + Highlight "Preparing $vmrDir" + git -C $vmrDir checkout $vmrBranch + git -C $vmrDir pull + } +} + +Set-StrictMode -Version Latest + +# Prepare darc + +Highlight 'Installing .NET, preparing the tooling..' +. .\eng\common\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true +$env:DOTNET_ROOT = $dotnetRoot +$darc = Get-Darc + +Highlight "Starting the synchronization of VMR.." + +# Synchronize the VMR +$versionDetailsPath = Resolve-Path (Join-Path $PSScriptRoot '..\Version.Details.xml') | Select-Object -ExpandProperty Path +[xml]$versionDetails = Get-Content -Path $versionDetailsPath +$repoName = $versionDetails.SelectSingleNode('//Source').Mapping +if (-not $repoName) { + Fail "Failed to resolve repo mapping from $versionDetailsPath" + exit 1 +} + +$darcArgs = ( + "vmr", "forwardflow", + "--tmp", $tmpDir, + "--$verbosity", + $vmrDir +) + +if ($ci) { + $darcArgs += ("--ci") +} + +if ($azdevPat) { + $darcArgs += ("--azdev-pat", $azdevPat) +} + +& "$darc" $darcArgs + +if ($LASTEXITCODE -eq 0) { + Highlight "Synchronization succeeded" +} +else { + Highlight "Failed to flow code into the local VMR. Falling back to resetting the VMR to match repo contents..." + git -C $vmrDir reset --hard + + $resetArgs = ( + "vmr", "reset", + "${repoName}:HEAD", + "--vmr", $vmrDir, + "--tmp", $tmpDir, + "--additional-remotes", "${repoName}:${repoRoot}" + ) + + & "$darc" $resetArgs + + if ($LASTEXITCODE -eq 0) { + Highlight "Successfully reset the VMR using 'darc vmr reset'" + } + else { + Fail "Synchronization of repo to VMR failed!" + Fail "'$vmrDir' is left in its last state (re-run of this script will reset it)." + Fail "Please inspect the logs which contain path to the failing patch file (use -debugOutput to get all the details)." + Fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script." + exit 1 + } +} diff --git a/eng/common/vmr-sync.sh b/eng/common/vmr-sync.sh new file mode 100755 index 000000000000..198caec59bd4 --- /dev/null +++ b/eng/common/vmr-sync.sh @@ -0,0 +1,227 @@ +#!/bin/bash + +### This script is used for synchronizing the current repository into a local VMR. +### It pulls the current repository's code into the specified VMR directory for local testing or +### Source-Build validation. +### +### The tooling used for synchronization will clone the VMR repository into a temporary folder if +### it does not already exist. These clones can be reused in future synchronizations, so it is +### recommended to dedicate a folder for this to speed up re-runs. +### +### USAGE: +### Synchronize current repository into a local VMR: +### ./vmr-sync.sh --tmp "$HOME/repos/tmp" "$HOME/repos/dotnet" +### +### Options: +### -t, --tmp, --tmp-dir PATH +### Required. Path to the temporary folder where repositories will be cloned +### +### -b, --branch, --vmr-branch BRANCH_NAME +### Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch +### +### --debug +### Optional. Turns on the most verbose logging for the VMR tooling +### +### --remote name:URI +### Optional. Additional remote to use during the synchronization +### This can be used to synchronize to a commit from a fork of the repository +### Example: 'runtime:https://github.com/yourfork/runtime' +### +### --azdev-pat +### Optional. Azure DevOps PAT to use for cloning private repositories. +### +### -v, --vmr, --vmr-dir PATH +### Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +function print_help () { + sed -n '/^### /,/^$/p' "$source" | cut -b 5- +} + +COLOR_RED=$(tput setaf 1 2>/dev/null || true) +COLOR_CYAN=$(tput setaf 6 2>/dev/null || true) +COLOR_CLEAR=$(tput sgr0 2>/dev/null || true) +COLOR_RESET=uniquesearchablestring +FAILURE_PREFIX='> ' + +function fail () { + echo "${COLOR_RED}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_RED}}${COLOR_CLEAR}" >&2 +} + +function highlight () { + echo "${COLOR_CYAN}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_CYAN}}${COLOR_CLEAR}" +} + +tmp_dir='' +vmr_dir='' +vmr_branch='' +additional_remotes='' +verbosity=verbose +azdev_pat='' +ci=false + +while [[ $# -gt 0 ]]; do + opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + case "$opt" in + -t|--tmp|--tmp-dir) + tmp_dir=$2 + shift + ;; + -v|--vmr|--vmr-dir) + vmr_dir=$2 + shift + ;; + -b|--branch|--vmr-branch) + vmr_branch=$2 + shift + ;; + --remote) + additional_remotes="$additional_remotes $2" + shift + ;; + --azdev-pat) + azdev_pat=$2 + shift + ;; + --ci) + ci=true + ;; + -d|--debug) + verbosity=debug + ;; + -h|--help) + print_help + exit 0 + ;; + *) + fail "Invalid argument: $1" + print_help + exit 1 + ;; + esac + + shift +done + +# Validation + +if [[ -z "$tmp_dir" ]]; then + fail "Missing --tmp-dir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +fi + +# Sanitize the input + +if [[ -z "$vmr_dir" ]]; then + vmr_dir="$tmp_dir/dotnet" +fi + +if [[ ! -d "$tmp_dir" ]]; then + mkdir -p "$tmp_dir" +fi + +if [[ "$verbosity" == "debug" ]]; then + set -x +fi + +# Prepare the VMR + +if [[ ! -d "$vmr_dir" ]]; then + highlight "Cloning 'dotnet/dotnet' into $vmr_dir.." + git clone https://github.com/dotnet/dotnet "$vmr_dir" + + if [[ -n "$vmr_branch" ]]; then + git -C "$vmr_dir" switch -c "$vmr_branch" + fi +else + if ! git -C "$vmr_dir" diff --quiet; then + fail "There are changes in the working tree of $vmr_dir. Please commit or stash your changes" + exit 1 + fi + + if [[ -n "$vmr_branch" ]]; then + highlight "Preparing $vmr_dir" + git -C "$vmr_dir" checkout "$vmr_branch" + git -C "$vmr_dir" pull + fi +fi + +set -e + +# Prepare darc + +highlight 'Installing .NET, preparing the tooling..' +source "./eng/common/tools.sh" +InitializeDotNetCli true +GetDarc +dotnetDir=$( cd ./.dotnet/; pwd -P ) +dotnet=$dotnetDir/dotnet + +highlight "Starting the synchronization of VMR.." +set +e + +if [[ -n "$additional_remotes" ]]; then + additional_remotes="--additional-remotes $additional_remotes" +fi + +if [[ -n "$azdev_pat" ]]; then + azdev_pat="--azdev-pat $azdev_pat" +fi + +ci_arg='' +if [[ "$ci" == "true" ]]; then + ci_arg="--ci" +fi + +# Synchronize the VMR + +version_details_path=$(cd "$scriptroot/.."; pwd -P)/Version.Details.xml +repo_name=$(grep -m 1 ' Date: Tue, 14 Apr 2026 09:17:31 +0200 Subject: [PATCH 138/230] Keep strong reference to virtual project's ProjectRootElement to prevent GC (#53807) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../VirtualProjectBuilder.cs | 11 +++++ .../CommandTests/Run/RunFileTests.cs | 48 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs index f95baaa6a5a2..164f72c23a68 100644 --- a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs +++ b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs @@ -22,6 +22,16 @@ public sealed class VirtualProjectBuilder private (ImmutableArray Original, ImmutableArray Evaluated)? _evaluatedDirectives; + /// + /// Prevents the virtual project's from being garbage collected + /// when MSBuild's demotes it to a weak reference + /// (which can happen when many SDK import files fill the cache during NuGet restore). + /// Without this, nested <MSBuild> tasks that re-evaluate the project with different properties + /// would fail to find the in the cache and try to load it from disk, + /// resulting in MSB4025 because the virtual project file does not exist on disk. + /// + private ProjectRootElement? _projectRootElement; + internal string EntryPointFileFullPath { get; } internal SourceFile EntryPointSourceFile @@ -396,6 +406,7 @@ ProjectRootElement CreateProjectRootElement(string projectFileText, ProjectColle using var xmlReader = XmlReader.Create(reader); var projectRoot = ProjectRootElement.Create(xmlReader, projectCollection); projectRoot.FullPath = GetVirtualProjectPath(EntryPointFileFullPath); + _projectRootElement = projectRoot; return projectRoot; } } diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index 6cca02d6f4b3..baa1adcd74e7 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -6484,4 +6484,52 @@ Dictionary ReadFiles() return result; } } + + /// + /// Regression test for https://github.com/dotnet/sdk/issues/52714. + /// The virtual project's must survive GC + /// even after being evicted from MSBuild's strong cache (LRU of size N). + /// We force eviction via MSBUILDPROJECTROOTELEMENTCACHESIZE=1 + /// and trigger GC via an inline task during NuGet restore. + /// Without the fix (strong reference in VirtualProjectBuilder._projectRootElement), + /// this fails with MSB4025 "The project file could not be loaded". + /// + [Fact] + public void VirtualProject_SurvivesGCDuringRestore() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine("Hello from virtual project"); + """); + + // Directory.Build.targets that forces GC during restore, + // after SDK imports have already evicted the virtual PRE from the strong cache. + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ + + + + + + + + <_ForceGCTask /> + + + """); + + new DotnetCommand(Log, "run", "--no-cache", "Program.cs") + // A cache size of 1 ensures the virtual PRE is evicted from the strong cache + // as soon as any SDK .targets/.props file is loaded during evaluation. + .WithEnvironmentVariable("MSBUILDPROJECTROOTELEMENTCACHESIZE", "1") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from virtual project"); + } } From 75f222d01c0b177f029e3498e7bca0436466f5fd Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Tue, 14 Apr 2026 10:01:31 +0200 Subject: [PATCH 139/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2950549 --- .../xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.de.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.es.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.it.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf | 8 ++++---- .../xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf | 8 ++++---- 13 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf index 03f1e965d7b2..def094ce9c0e 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.cs.xlf @@ -1835,22 +1835,22 @@ Rozšíření a uživatelem definované převody se u obecných typů nepodporuj Add '#!' (shebang) - Add '#!' (shebang) + Přidat '#!' (shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + Pokud se program založený na souborech skládá z více souborů, měl by soubor vstupního bodu začínat řádkem shebang ('#!'), aby byl jasně odlišen od ostatních zahrnutých souborů. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Vstupní bod programu založeného na souborech by měl začínat znaky '#!'. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Vstupní bod programu založeného na souborech by měl začínat znaky '#!'. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf index cbc4ff561ee1..4cdcb24353f8 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.de.xlf @@ -1835,22 +1835,22 @@ Erweiterungen und benutzerdefinierte Konvertierungen werden bei generischen Type Add '#!' (shebang) - Add '#!' (shebang) + "#!" hinzufügen (Shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + Wenn ein dateibasiertes Programm aus mehreren Dateien besteht, sollte die Einstiegsdatei mit einer Shebang-Zeile ("#!") beginnen, um sie klar von anderen eingebundenen Dateien zu unterscheiden. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Der Einstiegspunkt eines dateibasierten Programms sollte mit "#!" beginnen. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Der Einstiegspunkt eines dateibasierten Programms sollte mit "#!" beginnen. diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf index 5896354af2af..ec3fc34aac1b 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.es.xlf @@ -1835,22 +1835,22 @@ La ampliación y las conversiones definidas por el usuario no se admiten con tip Add '#!' (shebang) - Add '#!' (shebang) + Agregar "#!" (shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + Cuando un programa basado en archivos consta de varios archivos, el archivo de entrada debe comenzar con una línea shebang ("#!") para distinguirlo claramente de los demás archivos incluidos. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + El punto de entrada del programa basado en archivos debe empezar por "#!" File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + El punto de entrada del programa basado en archivos debe empezar por "#!" diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf index bed19cb8e096..c3b2a40b48ee 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.fr.xlf @@ -1835,22 +1835,22 @@ Les conversions étendues et définies par l’utilisateur ne sont pas prises en Add '#!' (shebang) - Add '#!' (shebang) + Ajouter « #! » (shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + Lorsqu’un programme basé sur fichier comprend plusieurs fichiers, le fichier de point d’entrée doit commencer par une ligne shebang (« #! ») pour bien le distinguer des autres fichiers inclus. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Le point d’entrée du programme basé sur fichier doit commencer par « #! » File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Le point d’entrée du programme basé sur fichier doit commencer par « #! » diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf index ea2f9539b9a1..3868247f4fd2 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.it.xlf @@ -1835,22 +1835,22 @@ L'ampliamento e le conversioni definite dall'utente non sono supportate con tipi Add '#!' (shebang) - Add '#!' (shebang) + Aggiungere '#!' (shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + Quando un programma basato su file è costituito da più file, il file del punto di ingresso dovrebbe iniziare con una riga shebang ('#!') per distinguerlo chiaramente dagli altri file inclusi. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Il punto di ingresso del programma basato su file deve iniziare con '#!' File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Il punto di ingresso del programma basato su file deve iniziare con '#!' diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf index f37c847af7f9..9c09cf0e42dd 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ja.xlf @@ -1835,22 +1835,22 @@ Enumerable.OfType<T> で使用されるジェネリック型チェック ( Add '#!' (shebang) - Add '#!' (shebang) + '#!' の追加(シバン) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + ファイルベースのプログラムが複数のファイルで構成されている場合、エントリ ポイントのファイルは、他のインクルード ファイルと明確に区別するために、シバン ('#!') 行で始める必要があります。 File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + ファイルベースのプログラムのエントリ ポイントは '#!' で始まる必要があります File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + ファイルベースのプログラムのエントリ ポイントは '#!' で始まる必要があります diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf index 8575638e2767..9143d09fd02d 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ko.xlf @@ -1835,22 +1835,22 @@ Enumerable.OfType<T>에서 사용하는 제네릭 형식 검사(C# 'is' Add '#!' (shebang) - Add '#!' (shebang) + '#!' 추가 (셔뱅) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + 파일 기반 프로그램이 여러 파일로 구성된 경우, 진입점 파일은 포함된 다른 파일과 명확히 구분하기 위해 셔뱅('#!') 줄로 시작해야 합니다. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + 파일 기반 프로그램 진입점은 '#!'로 시작해야 함 File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + 파일 기반 프로그램 진입점은 '#!'로 시작해야 함 diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf index 0e7b13760bac..eccc24d78ed2 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pl.xlf @@ -1835,22 +1835,22 @@ Konwersje poszerzane i zdefiniowane przez użytkownika nie są obsługiwane w pr Add '#!' (shebang) - Add '#!' (shebang) + Dodaj „#!” (shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + Gdy program oparty na plikach składa się z wielu plików, plik punktu wejścia powinien zaczynać się od ciągu shebang („#!”), aby wyraźnie odróżnić go od innych dołączonych plików. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Punkt wejścia programu opartego na plikach powinien zaczynać się od „#!” File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Punkt wejścia programu opartego na plikach powinien zaczynać się od „#!” diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf index a3fc46da599c..97fe95638ce9 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.pt-BR.xlf @@ -1835,22 +1835,22 @@ As ampliação e conversões definidas pelo usuário não são compatíveis com Add '#!' (shebang) - Add '#!' (shebang) + Adicionar ''#!'' (shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + Quando um programa baseado em arquivos tem vários arquivos, o arquivo de ponto de entrada deve começar com uma linha shebang ('#!') para diferenciá-lo claramente dos outros arquivos incluídos. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + O ponto de entrada do programa baseado em arquivos deve começar com ''#!'' File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + O ponto de entrada do programa baseado em arquivos deve começar com ''#!'' diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf index e97cb8f514af..17e190e2caaa 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.ru.xlf @@ -1835,22 +1835,22 @@ Widening and user defined conversions are not supported with generic types. Add '#!' (shebang) - Add '#!' (shebang) + Добавить "#!" (shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + Если программа, основанная на файлах, состоит из нескольких файлов, файл точки входа должен начинаться со строки shebang ("#!"), чтобы четко отличать его от других включаемых файлов. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Точка входа файловой программы должна начинаться с "#!" File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Точка входа файловой программы должна начинаться с "#!" diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf index 095fec929995..484ee6794c02 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.tr.xlf @@ -1835,22 +1835,22 @@ Genel türlerde genişletme ve kullanıcı tanımlı dönüştürmeler desteklen Add '#!' (shebang) - Add '#!' (shebang) + + Ekle‘#!’ ekle (shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + Dosya tabanlı bir program birden fazla dosyadan oluştuğunda, giriş noktası dosyası diğer dahil edilen dosyalardan açıkça ayırt edilebilmesi için bir shebang (‘#!’) satırıyla başlamalıdır. File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Dosya tabanlı program giriş noktası ‘#!’ ile başlamalıdır File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + Dosya tabanlı program giriş noktası ‘#!’ ile başlamalıdır diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf index 40cccfbb4381..f1426ad52ced 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hans.xlf @@ -1835,22 +1835,22 @@ Enumerable.OfType<T> 使用的泛型类型检查(C# 'is' operator/IL 'isin Add '#!' (shebang) - Add '#!' (shebang) + 添加 "#!"(shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + 当基于文件的程序由多个文件组成时,入口点文件应以 shebang ("#!")行开头,以便清楚地区分它与其他包含的文件。 File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + 基于文件的程序入口点应以 "#!" 开头 File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + 基于文件的程序入口点应以 "#!" 开头 diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf index 0e95e70cea6b..d5f8d26f841b 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers/Microsoft.NetCore.Analyzers/xlf/MicrosoftNetCoreAnalyzersResources.zh-Hant.xlf @@ -1835,22 +1835,22 @@ Enumerable.OfType<T> 使用的一般型別檢查 (C# 'is' operator/IL 'isi Add '#!' (shebang) - Add '#!' (shebang) + 新增 '#!'(shebang) When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. - When a file-based program consists of multiple files, the entry point file should start with a shebang ('#!') line to clearly distinguish it from other included files. + 當檔案型程式包含多個檔案時,進入點檔案開頭應該為 shebang ('#!') 行,以明確區分它與其他包含的檔案。 File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + 檔案型程式進入點的開頭應該為 '#!' File-based program entry point should start with '#!' - File-based program entry point should start with '#!' + 檔案型程式進入點的開頭應該為 '#!' From 9f927ea3760646c2cabf7c9ed640f032300787ed Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 14 Apr 2026 09:03:20 +0000 Subject: [PATCH 140/230] Reset files to release/10.0.2xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 4 +- eng/Version.Details.props | 266 +++++++-------- eng/Version.Details.xml | 673 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 475 insertions(+), 474 deletions(-) diff --git a/NuGet.config b/NuGet.config index e226baf9b0b6..903609549285 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + @@ -39,6 +39,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 94492476bae6..1a73d58a3c79 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,139 +8,139 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-preview.26203.109 - 10.0.6 - 10.0.6 - 18.0.11 - 18.0.11-servicing-26203-109 - 7.0.2-rc.20409 - 10.0.106 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.0-preview.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 2.0.0-preview.1.26203.109 - 2.2.6 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26203.109 - 10.0.6 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4-servicing.26119.110 + 10.0.0-preview.26202.103 + 10.0.4 + 10.0.4 + 18.3.3 + 18.3.3-servicing-26202-103 + 7.3.0-rc.20303 + 10.0.202 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.0-preview.26202.103 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 2.0.0-preview.1.26119.110 + 2.2.4 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.0-beta.26202.103 + 10.0.0-beta.26202.103 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 15.2.202-servicing.26202.103 + 10.0.4 + 5.3.0-2.26202.103 + 5.3.0-2.26202.103 + 10.0.4-servicing.26119.110 + 10.0.4 + 10.0.4 10.0.0-preview.7.25377.103 - 10.0.0-preview.26203.109 - 10.0.6-servicing.26203.109 - 18.0.2-release-26203-109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 18.0.2-release-26203-109 - 18.0.2-release-26203-109 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26202.103 + 10.0.4-servicing.26119.110 + 18.3.0-release-26202-103 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202-servicing.26202.103 + 10.0.202 + 10.0.202 + 10.0.202-servicing.26202.103 + 18.3.0-release-26202-103 + 18.3.0-release-26202-103 + 3.2.4 + 10.0.4 + 10.0.4-servicing.26119.110 + 10.0.4 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 7.3.0-rc.20303 + 10.0.4 + 2.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 + 10.0.4 2.3.0-preview.26202.5 4.3.0-preview.26202.5 @@ -185,6 +185,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) @@ -200,7 +201,6 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) - $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 3a7cdb3a56c8..a1ff22313714 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + 0c538445912b51b36242aac75dd5e81265bbe37f - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 https://github.com/microsoft/testfx @@ -569,9 +568,9 @@ https://github.com/microsoft/testfx cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 - - https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 diff --git a/global.json b/global.json index 6f9207378ac4..0552121a41ea 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.201", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.109", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.109", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26202.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26202.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 86eee90d74a85af0b0e7ddf3012a423c7297cb33 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Apr 2026 00:27:31 +0000 Subject: [PATCH 141/230] Plan: Apply 3 commits to disable failing C++/CLI and compilation context tests Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/2b6794df-e56e-4365-b6c2-85d8912d78c2 Co-authored-by: MiYanni <17788297+MiYanni@users.noreply.github.com> --- .../src/Microsoft.CodeAnalysis.NetAnalyzers.sarif | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif index d57e8529fa6e..754fb0b4eda4 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif @@ -7092,4 +7092,4 @@ } } ] -} +} \ No newline at end of file From e600a1b9fcac0c21aa711d43e5c0fa0a182b9bfc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Apr 2026 00:28:00 +0000 Subject: [PATCH 142/230] Disable C++/CLI and net46 tests pending toolset/framework fixes Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/2b6794df-e56e-4365-b6c2-85d8912d78c2 Co-authored-by: MiYanni <17788297+MiYanni@users.noreply.github.com> --- .../GivenThatWeWantToBuildACppCliProject.cs | 16 ++++++++-------- ...antToBuildACppCliProjectWithTransitiveDeps.cs | 6 +++--- .../Microsoft.NET.Build.Tests/SourceLinkTests.cs | 2 +- .../GivenThatWeWantToPackACppCliProject.cs | 2 +- ...ivenThatWeWantToPreserveCompilationContext.cs | 3 ++- .../GivenThatWeWantToPublishACppCliProject.cs | 2 +- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs index 83ff1a3553d6..3a2915cc928f 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs @@ -13,7 +13,7 @@ public GivenThatWeWantToBuildACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_builds_and_runs() { var testAsset = _testAssetsManager @@ -49,7 +49,7 @@ public void It_builds_and_runs() .HaveStdOutContaining("Hello, World!"); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_builds_and_runs_with_package_reference() { var targetFramework = ToolsetInfo.CurrentTargetFramework + "-windows"; @@ -84,7 +84,7 @@ public void It_builds_and_runs_with_package_reference() } } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void Given_no_restore_It_builds_cpp_project() { var testAsset = _testAssetsManager @@ -98,7 +98,7 @@ public void Given_no_restore_It_builds_cpp_project() .Pass(); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void Given_Wpf_framework_reference_It_builds_cpp_project() { var testAsset = _testAssetsManager @@ -111,7 +111,7 @@ public void Given_Wpf_framework_reference_It_builds_cpp_project() .Pass(); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_fails_with_error_message_on_EnableComHosting() { var testAsset = _testAssetsManager @@ -139,7 +139,7 @@ public void It_fails_with_error_message_on_EnableComHosting() .HaveStdOutContaining(Strings.NoSupportCppEnableComHosting); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_fails_with_error_message_on_fullframework() { var testAsset = _testAssetsManager @@ -156,7 +156,7 @@ public void It_fails_with_error_message_on_fullframework() .HaveStdOutContaining(Strings.NETFrameworkWithoutUsingNETSdkDefaults); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_fails_with_error_message_on_tfm_lower_than_3_1() { var testAsset = _testAssetsManager @@ -173,7 +173,7 @@ public void It_fails_with_error_message_on_tfm_lower_than_3_1() .HaveStdOutContaining(Strings.CppRequiresTFMVersion31); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void When_run_with_selfcontained_It_fails_with_error_message() { var testAsset = _testAssetsManager diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs index 4808f781d25a..9bac9adf9619 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs @@ -12,7 +12,7 @@ public GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps(ITestOutputHelper private readonly Lazy _buildAsset; - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_can_generate_correct_depsJson_file() { TestAsset testAsset = _buildAsset.Value; @@ -23,7 +23,7 @@ public void It_can_generate_correct_depsJson_file() depsJsonContent.Should().Contain("NETCoreCppCliTestC.dll", "should contain transitive reference"); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_can_generate_all_runtimeconfig_files_to_output_folder() { TestAsset testAsset = _buildAsset.Value; @@ -35,7 +35,7 @@ public void It_can_generate_all_runtimeconfig_files_to_output_folder() }); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_can_generate_all_depsjson_files_to_output_folder() { TestAsset testAsset = _buildAsset.Value; diff --git a/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs b/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs index 5fa880ec9812..544e18dbe2dd 100644 --- a/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs +++ b/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs @@ -290,7 +290,7 @@ public void SuppressImplicitGitSourceLink_ExplicitPackage(bool multitarget) } } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void Cpp() { var testAsset = _testAssetsManager diff --git a/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs b/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs index 28a9660ac8fb..10a8bdaaadc1 100644 --- a/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs +++ b/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs @@ -11,7 +11,7 @@ public GivenThatWeWantToPackACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_cannot_pack_the_cppcliproject() { var testAsset = _testAssetsManager diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs index 1b4b5eaabcab..18dece1d353a 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs @@ -14,7 +14,8 @@ public GivenThatWeWantToPreserveCompilationContext(ITestOutputHelper log) : base } [Theory] - [InlineData("net46", "netstandard1.3", false)] + // Skip = "https://github.com/dotnet/sdk/issues/53796" + //[InlineData("net46", "netstandard1.3", false)] [InlineData("netcoreapp2.0", "netstandard2.0", false)] [InlineData("netcoreapp2.0", "netstandard2.0", true)] [InlineData("netcoreapp3.0", "netstandard2.0", false)] diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs index 8a1408ba0e61..67d48f9712ef 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs @@ -11,7 +11,7 @@ public GivenThatWeWantToPublishACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void When_referenced_by_csharp_project_it_publishes_and_runs() { var testAsset = _testAssetsManager From 6ddabc1bb960f4e41ff6be693cad15f3f7ed558b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Apr 2026 00:33:37 +0000 Subject: [PATCH 143/230] Apply CI fixes: disable C++/CLI tests and skip net46 test pending toolset fix Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/8e0aaefa-58b0-4318-9a34-e043019cf251 Co-authored-by: MiYanni <17788297+MiYanni@users.noreply.github.com> --- .../GivenThatWeWantToBuildACppCliProject.cs | 16 ++++++++-------- ...antToBuildACppCliProjectWithTransitiveDeps.cs | 6 +++--- .../Microsoft.NET.Build.Tests/SourceLinkTests.cs | 2 +- .../GivenThatWeWantToPackACppCliProject.cs | 2 +- ...ivenThatWeWantToPreserveCompilationContext.cs | 3 ++- .../GivenThatWeWantToPublishACppCliProject.cs | 2 +- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs index 83ff1a3553d6..3a2915cc928f 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs @@ -13,7 +13,7 @@ public GivenThatWeWantToBuildACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_builds_and_runs() { var testAsset = _testAssetsManager @@ -49,7 +49,7 @@ public void It_builds_and_runs() .HaveStdOutContaining("Hello, World!"); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_builds_and_runs_with_package_reference() { var targetFramework = ToolsetInfo.CurrentTargetFramework + "-windows"; @@ -84,7 +84,7 @@ public void It_builds_and_runs_with_package_reference() } } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void Given_no_restore_It_builds_cpp_project() { var testAsset = _testAssetsManager @@ -98,7 +98,7 @@ public void Given_no_restore_It_builds_cpp_project() .Pass(); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void Given_Wpf_framework_reference_It_builds_cpp_project() { var testAsset = _testAssetsManager @@ -111,7 +111,7 @@ public void Given_Wpf_framework_reference_It_builds_cpp_project() .Pass(); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_fails_with_error_message_on_EnableComHosting() { var testAsset = _testAssetsManager @@ -139,7 +139,7 @@ public void It_fails_with_error_message_on_EnableComHosting() .HaveStdOutContaining(Strings.NoSupportCppEnableComHosting); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_fails_with_error_message_on_fullframework() { var testAsset = _testAssetsManager @@ -156,7 +156,7 @@ public void It_fails_with_error_message_on_fullframework() .HaveStdOutContaining(Strings.NETFrameworkWithoutUsingNETSdkDefaults); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_fails_with_error_message_on_tfm_lower_than_3_1() { var testAsset = _testAssetsManager @@ -173,7 +173,7 @@ public void It_fails_with_error_message_on_tfm_lower_than_3_1() .HaveStdOutContaining(Strings.CppRequiresTFMVersion31); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void When_run_with_selfcontained_It_fails_with_error_message() { var testAsset = _testAssetsManager diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs index 4808f781d25a..9bac9adf9619 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs @@ -12,7 +12,7 @@ public GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps(ITestOutputHelper private readonly Lazy _buildAsset; - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_can_generate_correct_depsJson_file() { TestAsset testAsset = _buildAsset.Value; @@ -23,7 +23,7 @@ public void It_can_generate_correct_depsJson_file() depsJsonContent.Should().Contain("NETCoreCppCliTestC.dll", "should contain transitive reference"); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_can_generate_all_runtimeconfig_files_to_output_folder() { TestAsset testAsset = _buildAsset.Value; @@ -35,7 +35,7 @@ public void It_can_generate_all_runtimeconfig_files_to_output_folder() }); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_can_generate_all_depsjson_files_to_output_folder() { TestAsset testAsset = _buildAsset.Value; diff --git a/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs b/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs index 5fa880ec9812..544e18dbe2dd 100644 --- a/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs +++ b/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs @@ -290,7 +290,7 @@ public void SuppressImplicitGitSourceLink_ExplicitPackage(bool multitarget) } } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void Cpp() { var testAsset = _testAssetsManager diff --git a/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs b/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs index 28a9660ac8fb..10a8bdaaadc1 100644 --- a/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs +++ b/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs @@ -11,7 +11,7 @@ public GivenThatWeWantToPackACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_cannot_pack_the_cppcliproject() { var testAsset = _testAssetsManager diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs index 1b4b5eaabcab..18dece1d353a 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs @@ -14,7 +14,8 @@ public GivenThatWeWantToPreserveCompilationContext(ITestOutputHelper log) : base } [Theory] - [InlineData("net46", "netstandard1.3", false)] + // Skip = "https://github.com/dotnet/sdk/issues/53796" + //[InlineData("net46", "netstandard1.3", false)] [InlineData("netcoreapp2.0", "netstandard2.0", false)] [InlineData("netcoreapp2.0", "netstandard2.0", true)] [InlineData("netcoreapp3.0", "netstandard2.0", false)] diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs index 8a1408ba0e61..67d48f9712ef 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs @@ -11,7 +11,7 @@ public GivenThatWeWantToPublishACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void When_referenced_by_csharp_project_it_publishes_and_runs() { var testAsset = _testAssetsManager From 2c7da313bec2b47ec40fdb0cb748735c449e79c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Matou=C5=A1ek?= Date: Wed, 15 Apr 2026 08:15:45 +0300 Subject: [PATCH 144/230] [watch] Fixes command line parsing and TFM selection for FBAs (#53698) --- src/Cli/dotnet/Commands/Run/RunCommand.cs | 20 +-- .../Watch/AppModels/HotReloadAppModel.cs | 7 +- .../Watch/Build/ProjectGraphFactory.cs | 13 +- .../Watch/HotReload/HotReloadDotNetWatcher.cs | 58 +++++-- src/Dotnet.Watch/Watch/UI/IReporter.cs | 4 +- .../CommandLine/CommandLineOptions.cs | 50 ++++-- src/Dotnet.Watch/dotnet-watch/Program.cs | 11 +- .../Watch/MsBuildFileSetFactory.cs | 3 +- .../PublicAPI.Unshipped.txt | 1 + .../VirtualProjectBuilder.cs | 14 ++ .../AspireLauncherTests.cs | 5 + .../TestAssetsManager.cs | 11 ++ .../Build/ProjectGraphFactoryTests.cs | 16 +- .../CommandLine/CommandLineOptionsTests.cs | 34 ++-- .../ProgramTests.GetProjectOptions.cs | 15 +- .../HotReload/BuildProjectsTests.cs | 152 +++++++++++++++--- .../HotReload/CompilationHandlerTests.cs | 4 +- .../HotReload/FileBasedAppTests.cs | 103 ++++++++++++ ...ceFileUpdateTests.HotReloadNotSupported.cs | 2 +- 19 files changed, 414 insertions(+), 109 deletions(-) create mode 100644 test/dotnet-watch.Tests/HotReload/FileBasedAppTests.cs diff --git a/src/Cli/dotnet/Commands/Run/RunCommand.cs b/src/Cli/dotnet/Commands/Run/RunCommand.cs index e5d36444e661..af35ce75ad46 100644 --- a/src/Cli/dotnet/Commands/Run/RunCommand.cs +++ b/src/Cli/dotnet/Commands/Run/RunCommand.cs @@ -352,7 +352,7 @@ private bool TrySelectTargetFrameworkForFileBasedProject() // Get frameworks from source file directives var frameworks = GetTargetFrameworksFromSourceFile(EntryPointFileFullPath); - if (frameworks is null || frameworks.Length == 0) + if (frameworks is []) { return true; // Not multi-targeted } @@ -370,21 +370,11 @@ private bool TrySelectTargetFrameworkForFileBasedProject() /// /// Parses a source file to extract target frameworks from directives. /// - /// Array of frameworks if TargetFrameworks is specified, null otherwise - private static string[]? GetTargetFrameworksFromSourceFile(string sourceFilePath) + /// Array of frameworks if TargetFrameworks is specified, empty array otherwise + private static string[] GetTargetFrameworksFromSourceFile(string sourceFilePath) { - var sourceFile = SourceFile.Load(sourceFilePath); - var directives = FileLevelDirectiveHelpers.FindDirectives(sourceFile, reportAllErrors: false, ErrorReporters.IgnoringReporter); - - var targetFrameworksDirective = directives.OfType() - .FirstOrDefault(p => string.Equals(p.Name, "TargetFrameworks", StringComparison.OrdinalIgnoreCase)); - - if (targetFrameworksDirective is null) - { - return null; - } - - return targetFrameworksDirective.Value.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + var value = VirtualProjectBuilder.GetPropertyFromSourceFile(sourceFilePath, "TargetFrameworks"); + return value?.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) ?? []; } /// diff --git a/src/Dotnet.Watch/Watch/AppModels/HotReloadAppModel.cs b/src/Dotnet.Watch/Watch/AppModels/HotReloadAppModel.cs index 5c9810fa3c13..72f1eb760c63 100644 --- a/src/Dotnet.Watch/Watch/AppModels/HotReloadAppModel.cs +++ b/src/Dotnet.Watch/Watch/AppModels/HotReloadAppModel.cs @@ -60,7 +60,7 @@ internal static bool IsManagedAgentSupported(ProjectGraphNode project, ILogger l { if (!project.IsNetCoreApp(Versions.Version6_0)) { - LogWarning("target framework is older than 6.0"); + logger.Log(MessageDescriptor.ProjectDoesNotSupportHotReload_TargetFramework, Versions.Version6_0); return false; } @@ -80,13 +80,10 @@ internal static bool IsManagedAgentSupported(ProjectGraphNode project, ILogger l ? (PropertyNames.PublishTrimmed, true) : (PropertyNames.StartupHookSupport, false); - LogWarning(string.Format("'{0}' property is '{1}'", propertyName, propertyValue)); + logger.Log(MessageDescriptor.ProjectDoesNotSupportHotReload_Property, propertyName, propertyValue.ToString(), PropertyNames.StartupHookSupport, "True"); return false; } return true; - - void LogWarning(string reason) - => logger.Log(MessageDescriptor.ProjectDoesNotSupportHotReload, reason); } } diff --git a/src/Dotnet.Watch/Watch/Build/ProjectGraphFactory.cs b/src/Dotnet.Watch/Watch/Build/ProjectGraphFactory.cs index 0e98272acd92..4d9bb21adda5 100644 --- a/src/Dotnet.Watch/Watch/Build/ProjectGraphFactory.cs +++ b/src/Dotnet.Watch/Watch/Build/ProjectGraphFactory.cs @@ -16,7 +16,6 @@ namespace Microsoft.DotNet.Watch; internal sealed class ProjectGraphFactory( ImmutableArray rootProjects, - string? virtualProjectTargetFramework, ImmutableDictionary buildProperties, ILogger logger, GlobalOptions globalOptions, @@ -39,8 +38,6 @@ internal sealed class ProjectGraphFactory( useAsynchronousLogging: false, reuseProjectRootElementCache: true); - private readonly string _virtualProjectTargetFramework = virtualProjectTargetFramework ?? GetProductTargetFramework(); - public ILogger Logger => logger; private static string GetProductTargetFramework() @@ -53,14 +50,16 @@ private static string GetProductTargetFramework() /// /// Tries to create a project graph by running the build evaluation phase on root projects. /// - public LoadedProjectGraph? TryLoadProjectGraph(bool projectGraphRequired, CancellationToken cancellationToken) + public LoadedProjectGraph? TryLoadProjectGraph(bool projectGraphRequired, string? virtualProjectTargetFramework, CancellationToken cancellationToken) { + virtualProjectTargetFramework ??= GetProductTargetFramework(); + var entryPoints = rootProjects.Select(p => new ProjectGraphEntryPoint(p.ProjectGraphPath, buildProperties)); try { var stopwatch = Stopwatch.StartNew(); var graph = new LoadedProjectGraph( - new ProjectGraph(entryPoints, _collection, (path, globalProperties, collection) => CreateProjectInstance(path, globalProperties, collection, logger), cancellationToken), + new ProjectGraph(entryPoints, _collection, (path, globalProperties, collection) => CreateProjectInstance(path, globalProperties, collection, virtualProjectTargetFramework, logger), cancellationToken), _collection, logger, globalOptions, @@ -112,7 +111,7 @@ void Report(Exception e) return null; } - private ProjectInstance CreateProjectInstance(string projectPath, Dictionary globalProperties, ProjectCollection projectCollection, ILogger logger) + private ProjectInstance CreateProjectInstance(string projectPath, Dictionary globalProperties, ProjectCollection projectCollection, string virtualProjectTargetFramework, ILogger logger) { if (!File.Exists(projectPath)) { @@ -129,7 +128,7 @@ private ProjectInstance CreateProjectInstance(string projectPath, Dictionary { diff --git a/src/Dotnet.Watch/Watch/HotReload/HotReloadDotNetWatcher.cs b/src/Dotnet.Watch/Watch/HotReload/HotReloadDotNetWatcher.cs index 301a7adea0f9..d2b8bad2d90b 100644 --- a/src/Dotnet.Watch/Watch/HotReload/HotReloadDotNetWatcher.cs +++ b/src/Dotnet.Watch/Watch/HotReload/HotReloadDotNetWatcher.cs @@ -7,6 +7,7 @@ using Microsoft.Build.Execution; using Microsoft.CodeAnalysis; using Microsoft.DotNet.HotReload; +using Microsoft.DotNet.ProjectTools; using Microsoft.Extensions.Logging; namespace Microsoft.DotNet.Watch; @@ -51,7 +52,6 @@ public HotReloadDotNetWatcher( _designTimeBuildGraphFactory = new ProjectGraphFactory( context.RootProjects, - context.MainProjectOptions?.TargetFramework, buildProperties: EvaluationResult.GetGlobalBuildProperties( context.BuildArguments, context.EnvironmentOptions), @@ -109,7 +109,7 @@ public async Task WatchAsync(CancellationToken shutdownCancellationToken) // Try load project graph and perform design-time build even if the build failed. // This allows us to watch the project and source files for changes that will trigger restart. - projectGraph = rootProjectsBuildResult.ProjectGraph ?? TryLoadProjectGraph(iterationCancellationToken); + projectGraph = rootProjectsBuildResult.ProjectGraph ?? TryLoadProjectGraph(rootProjectsBuildResult.MainProjectTargetFramework, iterationCancellationToken); if (projectGraph == null) { continue; @@ -364,16 +364,18 @@ async Task> CaptureChangedFilesSnapshot(IReadOnlyLis { // TODO: consider reloading/reevaluating only affected projects instead of the whole graph. + var targetFramework = mainProjectOptions?.TargetFramework; + while (true) { iterationCancellationToken.ThrowIfCancellationRequested(); - projectGraph = TryLoadProjectGraph(iterationCancellationToken); + projectGraph = TryLoadProjectGraph(targetFramework, iterationCancellationToken); if (projectGraph != null) { fileWatcher.WatchFiles(projectGraph.BuildFiles); - evaluationResult = await TryEvaluateProjectGraphAsync(projectGraph, mainProjectOptions?.TargetFramework, restore: true, iterationCancellationToken); + evaluationResult = await TryEvaluateProjectGraphAsync(projectGraph, targetFramework, restore: true, iterationCancellationToken); if (evaluationResult != null) { break; @@ -932,8 +934,8 @@ static string GetPluralMessage(ChangeKind kind) }; } - private LoadedProjectGraph? TryLoadProjectGraph(CancellationToken cancellationToken) - => _designTimeBuildGraphFactory.TryLoadProjectGraph(projectGraphRequired: true, cancellationToken); + private LoadedProjectGraph? TryLoadProjectGraph(string? virtualProjectTargetFramework, CancellationToken cancellationToken) + => _designTimeBuildGraphFactory.TryLoadProjectGraph(projectGraphRequired: true, virtualProjectTargetFramework, cancellationToken); private ValueTask TryEvaluateProjectGraphAsync(LoadedProjectGraph projectGraph, string? mainProjectTargetFramework, bool restore, CancellationToken cancellationToken) => EvaluationResult.TryCreateAsync( @@ -995,12 +997,44 @@ internal async Task BuildProjectsAsync( async ValueTask BuildWithFrameworkAndDeviceSelectionAsync() { - var needsFrameworkSelection = targetFramework == null && frameworkSelector != null; + // Framework selection for file-based programs: + // If framework is specified on command line use it to create the virtual project. + // Otherwise, use TargetFramework/TargetFrameworks property specified in the source file, if any. + // + // Device selection not applicable to file based apps. + if (mainProjectOptions?.Representation.EntryPointFilePath is { } sourcePath) + { + if (targetFramework == null) + { + if (VirtualProjectBuilder.GetPropertyFromSourceFile(sourcePath, PropertyNames.TargetFramework) is { } framework and not "") + { + targetFramework = framework; + } + else if (VirtualProjectBuilder.GetPropertyFromSourceFile(sourcePath, PropertyNames.TargetFrameworks) is { } frameworks and not "") + { + var frameworkList = frameworks.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + + if (frameworkSelector != null) + { + targetFramework = await frameworkSelector(frameworkList, cancellationToken); + } + else + { + _context.BuildLogger.Log(MessageDescriptor.FileSpecifiesMultipleTargetFrameworks, sourcePath, string.Join("', '", frameworkList)); + + return false; + } + } + } + + return await BuildAsync(BuildAction.RestoreAndBuild, targetFramework); + } + var needsDeviceSelection = selectedDevice == null && deviceSelector != null; + var needsFrameworkSelection = targetFramework == null && frameworkSelector != null; if (mainProjectOptions == null || - (!needsFrameworkSelection && !needsDeviceSelection) || - !mainProjectOptions.Representation.IsProjectFile) + (!needsFrameworkSelection && !needsDeviceSelection)) { return await BuildAsync(BuildAction.RestoreAndBuild, targetFramework); } @@ -1011,7 +1045,7 @@ async ValueTask BuildWithFrameworkAndDeviceSelectionAsync() } // load project graph after restore so that props and targets files from packages are imported: - projectGraph = TryLoadProjectGraph(cancellationToken); + projectGraph = TryLoadProjectGraph(targetFramework, cancellationToken); if (projectGraph == null) { return false; @@ -1022,7 +1056,7 @@ async ValueTask BuildWithFrameworkAndDeviceSelectionAsync() // Select target framework if needed: if (needsFrameworkSelection) { - Debug.Assert(frameworkSelector is not null); + Debug.Assert(frameworkSelector != null); if (rootProject.GetTargetFramework() is var framework and not "") { @@ -1043,7 +1077,7 @@ async ValueTask BuildWithFrameworkAndDeviceSelectionAsync() if (needsDeviceSelection && rootProject.Targets.ContainsKey(TargetNames.ComputeAvailableDevices)) { - Debug.Assert(deviceSelector is not null); + Debug.Assert(deviceSelector != null); var deviceInfo = await TrySelectDeviceAsync(projectGraph, rootProject, targetFramework, deviceSelector, cancellationToken); if (deviceInfo == null) diff --git a/src/Dotnet.Watch/Watch/UI/IReporter.cs b/src/Dotnet.Watch/Watch/UI/IReporter.cs index 000ca3015327..515a422126ea 100644 --- a/src/Dotnet.Watch/Watch/UI/IReporter.cs +++ b/src/Dotnet.Watch/Watch/UI/IReporter.cs @@ -262,7 +262,8 @@ public static MessageDescriptor GetDescriptor(EventId id) public static readonly MessageDescriptor UnableToApplyChanges = Create("Unable to apply changes due to compilation errors.", Emoji.HotReload, LogLevel.Information); public static readonly MessageDescriptor RestartNeededToApplyChanges = Create("Restart is needed to apply the changes.", Emoji.HotReload, LogLevel.Information); public static readonly MessageDescriptor HotReloadEnabled = Create("Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload.", Emoji.HotReload, LogLevel.Information); - public static readonly MessageDescriptor ProjectDoesNotSupportHotReload = Create("Project does not support Hot Reload: {0}. Application will be restarted when updated.", Emoji.Warning, LogLevel.Warning); + public static readonly MessageDescriptor ProjectDoesNotSupportHotReload_TargetFramework = Create("Project does not support Hot Reload: Target Framework is older than {0}. Application will be restarted when updated.", Emoji.Warning, LogLevel.Warning); + public static readonly MessageDescriptor<(string, string, string, string)> ProjectDoesNotSupportHotReload_Property = Create<(string, string, string, string)>("Project does not support Hot Reload: '{0}' property is '{1}'. Application will be restarted when updated. Set '{2}' project property to '{3}' to enable Hot Reload.", Emoji.Warning, LogLevel.Warning); public static readonly MessageDescriptor PressCtrlRToRestart = Create("Press Ctrl+R to restart.", Emoji.LightBulb, LogLevel.Information); public static readonly MessageDescriptor<(string, string)> ApplicationKind_BlazorHosted = Create<(string, string)>("Application kind: BlazorHosted. '{0}' references BlazorWebAssembly project '{1}'.", Emoji.Default, LogLevel.Debug); public static readonly MessageDescriptor ApplicationKind_BlazorWebAssembly = Create("Application kind: BlazorWebAssembly.", Emoji.Default, LogLevel.Debug); @@ -283,6 +284,7 @@ public static MessageDescriptor GetDescriptor(EventId id) public static readonly MessageDescriptor<(IEnumerable projects, bool success)> BuildCompletedNotification = CreateNotification<(IEnumerable projects, bool success)>(); public static readonly MessageDescriptor ManifestFileNotFound = Create(LogEvents.ManifestFileNotFound, Emoji.Default); public static readonly MessageDescriptor NoDevicesAvailable = Create("No devices are available for this project.", Emoji.Error, LogLevel.Error); + public static readonly MessageDescriptor<(string, string)> FileSpecifiesMultipleTargetFrameworks = Create<(string, string)>("File '{0}' specifies multiple target frameworks: '{1}'. Specify which framework to run using '--framework'.", Emoji.Watch, LogLevel.Error); } internal sealed class MessageDescriptor(string? format, Emoji emoji, LogLevel level, EventId id) diff --git a/src/Dotnet.Watch/dotnet-watch/CommandLine/CommandLineOptions.cs b/src/Dotnet.Watch/dotnet-watch/CommandLine/CommandLineOptions.cs index 6662b89fa9a1..4004dfdc8c54 100644 --- a/src/Dotnet.Watch/dotnet-watch/CommandLine/CommandLineOptions.cs +++ b/src/Dotnet.Watch/dotnet-watch/CommandLine/CommandLineOptions.cs @@ -11,6 +11,7 @@ using Microsoft.DotNet.Cli.Commands; using Microsoft.DotNet.Cli.Commands.Build; using Microsoft.DotNet.Cli.Commands.MSBuild; +using Microsoft.DotNet.Cli.Commands.Run; using Microsoft.DotNet.Cli.Commands.Test; using Microsoft.Extensions.Logging; @@ -20,6 +21,12 @@ internal sealed class CommandLineOptions { private static readonly ImmutableArray s_binaryLogOptionNames = ["-bl", "/bl", "-binaryLogger", "--binaryLogger", "/binaryLogger"]; + public static readonly ParserConfiguration ParserConfiguration = new() + { + // To match dotnet command line parsing (see https://github.com/dotnet/sdk/blob/4712b35b94f2ad672e69ec35097cf86fc16c2e5e/src/Cli/dotnet/Parser.cs#L169): + EnablePosixBundling = false, + }; + public bool List { get; init; } public required GlobalOptions GlobalOptions { get; init; } @@ -34,12 +41,17 @@ internal sealed class CommandLineOptions /// public required IReadOnlyList CommandArguments { get; init; } + /// + /// excluding binlog options. Workaround for https://github.com/dotnet/sdk/issues/49989. + /// + public required IReadOnlyList CommandArgumentsWithoutBinLog { get; init; } + /// /// Arguments passed to `dotnet build` and to design-time build evaluation. /// public required IReadOnlyList BuildArguments { get; init; } - public required string Command { get; init; } + public required Command Command { get; init; } public required bool IsExplicitCommand { get; init; } @@ -53,14 +65,8 @@ internal sealed class CommandLineOptions var rootCommandInvoked = false; definition.SetAction(parseResult => rootCommandInvoked = true); - ParserConfiguration parseConfig = new() - { - // To match dotnet command line parsing (see https://github.com/dotnet/sdk/blob/4712b35b94f2ad672e69ec35097cf86fc16c2e5e/src/Cli/dotnet/Parser.cs#L169): - EnablePosixBundling = false, - }; - // parse without forwarded options first: - var parseResult = definition.Parse(args, parseConfig); + var parseResult = definition.Parse(args, ParserConfiguration); if (ReportErrors(parseResult, logger)) { errorCode = 1; @@ -80,7 +86,7 @@ internal sealed class CommandLineOptions } // reparse with forwarded options: - parseResult = definition.Parse(args, parseConfig); + parseResult = definition.Parse(args, ParserConfiguration); if (ReportErrors(parseResult, logger)) { errorCode = 1; @@ -116,7 +122,8 @@ internal sealed class CommandLineOptions command, isExplicitCommand, out var binLogToken, - out var binLogPath); + out var binLogPath, + out var commandArgumentsWithoutBinLog); // We assume that forwarded options, if any, are intended for `dotnet build`. // Exclude --target option since we need to control the targets being built. @@ -155,7 +162,8 @@ internal sealed class CommandLineOptions }, CommandArguments = commandArguments, - Command = command.Name, + CommandArgumentsWithoutBinLog = commandArgumentsWithoutBinLog, + Command = command, IsExplicitCommand = isExplicitCommand, ProjectPath = projectValue, @@ -189,7 +197,8 @@ private static IReadOnlyList GetCommandArguments( Command command, bool isExplicitCommand, out string? binLogToken, - out string? binLogPath) + out string? binLogPath, + out IReadOnlyList argumentsWithoutBinLog) { var definition = (DotnetWatchCommandDefinition)parseResult.CommandResult.Command; @@ -255,9 +264,14 @@ private static IReadOnlyList GetCommandArguments( var seenCommand = false; var dashDashInserted = false; + + var argumentsWithoutBinLogBuilder = new List(); + argumentsWithoutBinLogBuilder.AddRange(arguments); + for (int i = 0; i < parseResult.UnmatchedTokens.Count; i++) { var token = parseResult.UnmatchedTokens[i]; + var isBinLogToken = false; if (i < unmatchedTokensBeforeDashDash) { @@ -283,6 +297,9 @@ private static IReadOnlyList GetCommandArguments( binLogToken = token; binLogPath = token[(name.Length + 1)..]; } + + isBinLogToken = true; + break; } } } @@ -290,12 +307,19 @@ private static IReadOnlyList GetCommandArguments( if (!dashDashInserted && i >= unmatchedTokensBeforeDashDash) { arguments.Add("--"); + argumentsWithoutBinLogBuilder.Add("--"); dashDashInserted = true; } arguments.Add(token); + + if (!isBinLogToken) + { + argumentsWithoutBinLogBuilder.Add(token); + } } + argumentsWithoutBinLog = argumentsWithoutBinLogBuilder; return arguments; } @@ -363,7 +387,7 @@ public ProjectOptions GetMainProjectOptions(ProjectRepresentation project, strin WorkingDirectory = workingDirectory, TargetFramework = TargetFramework, Device = Device, - Command = Command, + Command = Command.Name, CommandArguments = CommandArguments, LaunchEnvironmentVariables = [], LaunchProfileName = LaunchProfileName, diff --git a/src/Dotnet.Watch/dotnet-watch/Program.cs b/src/Dotnet.Watch/dotnet-watch/Program.cs index c4cd7ab0600c..54d114a60a41 100644 --- a/src/Dotnet.Watch/dotnet-watch/Program.cs +++ b/src/Dotnet.Watch/dotnet-watch/Program.cs @@ -1,10 +1,12 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.CommandLine; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Runtime.Loader; using Microsoft.Build.Locator; +using Microsoft.DotNet.Cli.Commands.Run; using Microsoft.DotNet.ProjectTools; using Microsoft.Extensions.Logging; @@ -148,7 +150,14 @@ public static async Task Main(string[] args) private static bool TryFindFileEntryPoint(string workingDirectory, CommandLineOptions options, ILogger logger, [NotNullWhen(true)] out string? entryPointPath) { - if (options.CommandArguments is not [var firstArg, ..]) + if (options.Command is not RunCommandDefinition runCommandDefinition) + { + entryPointPath = null; + return false; + } + + var runParseResult = runCommandDefinition.Parse(options.CommandArgumentsWithoutBinLog, CommandLineOptions.ParserConfiguration); + if (runParseResult.GetValue(runCommandDefinition.ApplicationArguments) is not [var firstArg, ..]) { entryPointPath = null; return false; diff --git a/src/Dotnet.Watch/dotnet-watch/Watch/MsBuildFileSetFactory.cs b/src/Dotnet.Watch/dotnet-watch/Watch/MsBuildFileSetFactory.cs index aa61f05d95e7..2fcc8466059c 100644 --- a/src/Dotnet.Watch/dotnet-watch/Watch/MsBuildFileSetFactory.cs +++ b/src/Dotnet.Watch/dotnet-watch/Watch/MsBuildFileSetFactory.cs @@ -32,7 +32,6 @@ internal class MSBuildFileSetFactory( private readonly ProjectGraphFactory _buildGraphFactory = new( [new ProjectRepresentation(rootProjectFile, entryPointFilePath: null)], - targetFramework, buildProperties: BuildUtilities.ParseBuildProperties(buildArguments).ToImmutableDictionary(keySelector: arg => arg.key, elementSelector: arg => arg.value), logger, globalOptions, @@ -133,7 +132,7 @@ void AddFile(string filePath, string? staticWebAssetPath) LoadedProjectGraph? projectGraph = null; if (requireProjectGraph != null) { - projectGraph = _buildGraphFactory.TryLoadProjectGraph(requireProjectGraph.Value, cancellationToken); + projectGraph = _buildGraphFactory.TryLoadProjectGraph(requireProjectGraph.Value, targetFramework, cancellationToken); if (projectGraph == null && requireProjectGraph == true) { return null; diff --git a/src/Microsoft.DotNet.ProjectTools/PublicAPI.Unshipped.txt b/src/Microsoft.DotNet.ProjectTools/PublicAPI.Unshipped.txt index 230cecc99717..854c0f7a5f6b 100644 --- a/src/Microsoft.DotNet.ProjectTools/PublicAPI.Unshipped.txt +++ b/src/Microsoft.DotNet.ProjectTools/PublicAPI.Unshipped.txt @@ -3,6 +3,7 @@ Microsoft.DotNet.ProjectTools.LaunchSettings Microsoft.DotNet.ProjectTools.VirtualProjectBuilder static Microsoft.DotNet.ProjectTools.LaunchSettings.TryFindLaunchSettingsFile(string! projectOrEntryPointFilePath, string? launchProfile, System.Action! report) -> string? static Microsoft.DotNet.ProjectTools.VirtualProjectBuilder.CreateProjectInstance(string! entryPointFilePath, string! targetFramework, Microsoft.Build.Evaluation.ProjectCollection! projectCollection, System.Action! errorReporter) -> Microsoft.Build.Execution.ProjectInstance! +static Microsoft.DotNet.ProjectTools.VirtualProjectBuilder.GetPropertyFromSourceFile(string! sourceFilePath, string! propertyName) -> string? static Microsoft.DotNet.ProjectTools.VirtualProjectBuilder.GetVirtualProjectPath(string! entryPointFilePath) -> string! static Microsoft.DotNet.ProjectTools.VirtualProjectBuilder.IsValidEntryPointPath(string! entryPointFilePath) -> bool static Microsoft.DotNet.ProjectTools.VirtualProjectBuilder.TryGetEntryPointFilePathFromVirtualProjectPath(string! projectPath, out string? entryPointFilePath) -> bool diff --git a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs index 164f72c23a68..c8fb09c95f28 100644 --- a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs +++ b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs @@ -115,6 +115,20 @@ public static bool TryGetEntryPointFilePathFromVirtualProjectPath(string project return false; } + /// + /// Parses a source file to extract property value from directives. + /// + /// Array of frameworks if TargetFrameworks is specified, or empty otherwise + public static string? GetPropertyFromSourceFile(string sourceFilePath, string propertyName) + { + var sourceFile = SourceFile.Load(sourceFilePath); + var directives = FileLevelDirectiveHelpers.FindDirectives(sourceFile, reportAllErrors: false, ErrorReporters.IgnoringReporter); + + // Return the first value. Duplicate directives are not supported. + return directives.OfType() + .FirstOrDefault(p => string.Equals(p.Name, propertyName, StringComparison.OrdinalIgnoreCase))?.Value; + } + /// /// Obtains a temporary subdirectory for file-based app artifacts, e.g., /tmp/dotnet/runfile/. /// diff --git a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs index 2d64735848d0..7e30a869bbaf 100644 --- a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs +++ b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs @@ -82,6 +82,11 @@ public async Task ServerAndResources() "--resource", serviceProjectB, ]); + // Wait until running projects for the services are initialized, + // so that we can deterministically test updates to their source code: + await server.WaitUntilOutputContains(MessageDescriptor.Capabilities, $"A ({tfm})"); + await server.WaitUntilOutputContains(MessageDescriptor.Capabilities, $"B ({tfm})"); + await server.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); // valid code change: diff --git a/test/Microsoft.NET.TestFramework/TestAssetsManager.cs b/test/Microsoft.NET.TestFramework/TestAssetsManager.cs index 9db89e7e4c78..7a6c70028718 100644 --- a/test/Microsoft.NET.TestFramework/TestAssetsManager.cs +++ b/test/Microsoft.NET.TestFramework/TestAssetsManager.cs @@ -50,6 +50,17 @@ public TestAsset CopyTestAsset( return testAsset; } + public TestAsset CreateTestAsset( + string name, + [CallerMemberName] string callingMethod = "", + string? identifier = "") + { + var testDestinationDirectory = GetTestDestinationDirectoryPath(name, callingMethod, identifier); + TestDestinationDirectories.Add(testDestinationDirectory); + + return new TestAsset(testDestinationDirectory, SdkTestContext.Current.SdkVersion, Log); + } + /// /// Writes an in-memory test project onto the disk. /// diff --git a/test/dotnet-watch.Tests/Build/ProjectGraphFactoryTests.cs b/test/dotnet-watch.Tests/Build/ProjectGraphFactoryTests.cs index 3f0322c2c0bb..10a770abb171 100644 --- a/test/dotnet-watch.Tests/Build/ProjectGraphFactoryTests.cs +++ b/test/dotnet-watch.Tests/Build/ProjectGraphFactoryTests.cs @@ -20,9 +20,9 @@ public void RegularProject() var projectPath = Path.Combine(testAsset.Path, "WatchNoDepsApp.csproj"); var projectRepr = new ProjectRepresentation(projectPath, entryPointFilePath: null); - var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions(asset: testAsset)); + var factory = new ProjectGraphFactory([projectRepr], buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions(asset: testAsset)); - var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, CancellationToken.None); + var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, virtualProjectTargetFramework: null, CancellationToken.None); Assert.NotNull(graph); var root = graph.Graph.GraphRoots.Single(); @@ -40,9 +40,9 @@ public void VirtualProject() """); var projectRepr = new ProjectRepresentation(projectPath: null, entryPointFilePath); - var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions()); + var factory = new ProjectGraphFactory([projectRepr], buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions()); - var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, CancellationToken.None); + var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, virtualProjectTargetFramework: null, CancellationToken.None); Assert.NotNull(graph); var root = graph.Graph.GraphRoots.Single(); @@ -60,9 +60,9 @@ public void VirtualProject_Error() """); var projectRepr = new ProjectRepresentation(projectPath: null, entryPointFilePath); - var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions()); + var factory = new ProjectGraphFactory([projectRepr], buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions()); - var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, CancellationToken.None); + var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, virtualProjectTargetFramework: null, CancellationToken.None); Assert.Null(graph); var message = string.Format(FileBasedProgramsResources.InvalidProjectDirective, @@ -92,9 +92,9 @@ public void VirtualProject_ProjectDirective() """); var projectRepr = new ProjectRepresentation(projectPath: null, entryPointFilePath); - var factory = new ProjectGraphFactory([projectRepr], virtualProjectTargetFramework: null, buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions(asset: testAsset)); + var factory = new ProjectGraphFactory([projectRepr], buildProperties: [], _testLogger, TestOptions.GlobalOptions, TestOptions.GetEnvironmentOptions(asset: testAsset)); - var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, CancellationToken.None); + var graph = factory.TryLoadProjectGraph(projectGraphRequired: true, virtualProjectTargetFramework: null, CancellationToken.None); Assert.NotNull(graph); AssertEx.SequenceEqual( diff --git a/test/dotnet-watch.Tests/CommandLine/CommandLineOptionsTests.cs b/test/dotnet-watch.Tests/CommandLine/CommandLineOptionsTests.cs index aa356d57f8db..6b89a7010482 100644 --- a/test/dotnet-watch.Tests/CommandLine/CommandLineOptionsTests.cs +++ b/test/dotnet-watch.Tests/CommandLine/CommandLineOptionsTests.cs @@ -59,7 +59,7 @@ public void HelpArgs(string[] args) public void ImplicitCommand() { var options = VerifyOptions([]); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual([], options.CommandArguments); } @@ -91,7 +91,7 @@ public void ExplicitCommand(string command) var options = VerifyOptions([command]); var args = options.CommandArguments.ToList(); Assert.True(options.IsExplicitCommand); - Assert.Equal(command, options.Command); + Assert.Equal(command, options.Command.Name); Assert.Empty(args); } @@ -102,7 +102,7 @@ public void WatchOptions_NotPassedThrough( bool beforeCommand) { var options = VerifyOptions(beforeCommand ? [option, "test"] : ["test", option]); - Assert.Equal("test", options.Command); + Assert.Equal("test", options.Command.Name); AssertEx.SequenceEqual([], options.CommandArguments); } @@ -118,7 +118,7 @@ public void RunOptions_LaunchProfile_Watch() { var options = VerifyOptions(["-lp", "P", "run"]); Assert.Equal("P", options.LaunchProfileName); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual(["-lp", "P"], options.CommandArguments); } @@ -127,7 +127,7 @@ public void RunOptions_LaunchProfile_Run() { var options = VerifyOptions(["run", "-lp", "P"]); Assert.Equal("P", options.LaunchProfileName); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual(["-lp", "P"], options.CommandArguments); } @@ -144,7 +144,7 @@ public void RunOptions_NoProfile_Watch() var options = VerifyOptions(["--no-launch-profile", "run"]); Assert.False(options.LaunchProfileName.HasValue); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual(["--no-launch-profile"], options.CommandArguments); } @@ -154,7 +154,7 @@ public void RunOptions_NoProfile_Run() var options = VerifyOptions(["run", "--no-launch-profile"]); Assert.False(options.LaunchProfileName.HasValue); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual(["--no-launch-profile"], options.CommandArguments); } @@ -164,7 +164,7 @@ public void RunOptions_NoProfile_Both() var options = VerifyOptions(["--no-launch-profile", "run", "--no-launch-profile"]); Assert.False(options.LaunchProfileName.HasValue); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual(["--no-launch-profile"], options.CommandArguments); } @@ -174,7 +174,7 @@ public void RemainingOptions() var options = VerifyOptions(["-watchArg", "--verbose", "run", "-runArg"]); Assert.Equal(LogLevel.Debug, options.GlobalOptions.LogLevel); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual(["-watchArg", "-runArg"], options.CommandArguments); } @@ -184,7 +184,7 @@ public void UnknownOption() var options = VerifyOptions(["--verbose", "--unknown", "x", "y", "run", "--project", "p"]); Assert.Equal("p", options.ProjectPath); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual(["--project", "p", "--unknown", "x", "y"], options.CommandArguments); } @@ -194,7 +194,7 @@ public void RemainingOptionsDashDash() var options = VerifyOptions(["-watchArg", "--", "--verbose", "run", "-runArg"]); Assert.Equal(LogLevel.Information, options.GlobalOptions.LogLevel); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual(["-watchArg", "--", "--verbose", "run", "-runArg",], options.CommandArguments); } @@ -204,7 +204,7 @@ public void RemainingOptionsDashDashRun() var options = VerifyOptions(["--", "run"]); Assert.Equal(LogLevel.Information, options.GlobalOptions.LogLevel); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual(["--", "run"], options.CommandArguments); } @@ -212,7 +212,7 @@ public void RemainingOptionsDashDashRun() public void NoOptionsAfterDashDash() { var options = VerifyOptions(["--"]); - Assert.Equal("run", options.Command); + Assert.Equal("run", options.Command.Name); AssertEx.SequenceEqual([], options.CommandArguments); } @@ -283,11 +283,15 @@ public void BinaryLoggerOption_AfterDashDash(string option) var options1 = VerifyOptions(["--", option]); AssertEx.SequenceEqual(["--", option], options1.CommandArguments); + AssertEx.SequenceEqual(["--", option], options1.CommandArgumentsWithoutBinLog); AssertEx.SequenceEqual(["--property:NuGetInteractive=false"], options1.BuildArguments); - var options2 = VerifyOptions([option, "A", "--", "-bl:XXX"]); + var options2 = VerifyOptions(["-bl:1", option, "A", "--", "-bl:XXX"]); - AssertEx.SequenceEqual([option, "A", "--", "-bl:XXX"], options2.CommandArguments); + AssertEx.SequenceEqual(["-bl:1", option, "A", "--", "-bl:XXX"], options2.CommandArguments); + AssertEx.SequenceEqual(["A", "--", "-bl:XXX"], options2.CommandArgumentsWithoutBinLog); + + // the last bin log option before "--" is used: AssertEx.SequenceEqual(["--property:NuGetInteractive=false", option], options2.BuildArguments); } diff --git a/test/dotnet-watch.Tests/CommandLine/ProgramTests.GetProjectOptions.cs b/test/dotnet-watch.Tests/CommandLine/ProgramTests.GetProjectOptions.cs index 7f606283a24c..eff2ee038389 100644 --- a/test/dotnet-watch.Tests/CommandLine/ProgramTests.GetProjectOptions.cs +++ b/test/dotnet-watch.Tests/CommandLine/ProgramTests.GetProjectOptions.cs @@ -214,11 +214,18 @@ public void FileWithShebangSpecifiedAsArgument() File.WriteAllText(filePath, "#!"); // dotnet watch App.txt - var options = ParseOptions([filePath]); - var result = Program.GetMainProjectOptions(options, tempDir, _testLogger); + var options1 = ParseOptions([filePath]); + var result1 = Program.GetMainProjectOptions(options1, tempDir, _testLogger); - Assert.NotNull(result); - Assert.Equal(filePath, result.Representation.EntryPointFilePath); + Assert.NotNull(result1); + Assert.Equal(filePath, result1.Representation.EntryPointFilePath); + + // dotnet watch -bl -e X=1 App.txt + var options2 = ParseOptions(["-bl", "-e", "X=1", filePath]); + var result2 = Program.GetMainProjectOptions(options2, tempDir, _testLogger); + + Assert.NotNull(result2); + Assert.Equal(filePath, result2.Representation.EntryPointFilePath); } [Fact] diff --git a/test/dotnet-watch.Tests/HotReload/BuildProjectsTests.cs b/test/dotnet-watch.Tests/HotReload/BuildProjectsTests.cs index 15b0bcb6c3b6..6d34620eec1a 100644 --- a/test/dotnet-watch.Tests/HotReload/BuildProjectsTests.cs +++ b/test/dotnet-watch.Tests/HotReload/BuildProjectsTests.cs @@ -13,6 +13,7 @@ private class TestContext : IDisposable public readonly HotReloadDotNetWatcher Watcher; public readonly FileWatcher FileWatcher; public readonly TestConsole Console; + public readonly TestLogger BuildLogger; public readonly List BuildInvocations = []; public string? SolutionFile; @@ -31,12 +32,14 @@ public TestContext(ITestOutputHelper output, ImmutableArray @@ -136,9 +139,9 @@ [new ProjectRepresentation(project1, entryPointFilePath: null)], [Fact] public async Task MultipleProjects() { - var dir = Path.GetTempPath(); - var project1 = Path.Combine(dir, "Project1.csproj"); - var project2 = Path.Combine(dir, "Project2.csproj"); + var dir = TestAssetsManager.CreateTestDirectory(); + var project1 = Path.Combine(dir.Path, "Project1.csproj"); + var project2 = Path.Combine(dir.Path, "Project2.csproj"); using var context = CreateContext(); @@ -161,10 +164,13 @@ public async Task MultipleProjects() [Theory] [CombinatorialData] - public async Task SingleFile(bool isMain) + public async Task FileBasedApp_NoFrameworkProperties(bool isMain) { - var dir = Path.GetTempPath(); - var file1 = Path.Combine(dir, "File1.cs"); + var dir = TestAssetsManager.CreateTestDirectory(identifiers: [isMain]); + var file1 = Path.Combine(dir.Path, "File1.cs"); + File.WriteAllText(file1, """ + Console.WriteLine(1); + """); using var context = CreateContext([file1]); @@ -185,12 +191,112 @@ [new ProjectRepresentation(projectPath: null, entryPointFilePath: file1)], AssertEx.SequenceEqual([$"build {file1} -p A=1"], context.BuildInvocations); } + [Theory] + [CombinatorialData] + public async Task FileBasedApp_TargetFrameworkProperty(bool nonInteractive) + { + var dir = TestAssetsManager.CreateTestDirectory(identifiers: [nonInteractive]); + var file1 = Path.Combine(dir.Path, "File1.cs"); + File.WriteAllText(file1, """ + #:property TargetFramework= net9.0 + Console.WriteLine(1); + """); + + using var context = CreateContext([file1]); + + var result = await context.Watcher.BuildProjectsAsync( + [new ProjectRepresentation(projectPath: null, entryPointFilePath: file1)], + context.FileWatcher, + mainProjectOptions: TestOptions.GetProjectOptions(["--file", file1]), + frameworkSelector: nonInteractive ? null : (_, _) => + { + Assert.Fail("Selector should not be invoked"); + return ValueTask.FromResult("n/a"); + }, + deviceSelector: null, + CancellationToken.None); + + Assert.True(result.Success); + + AssertEx.SequenceEqual([$"build {file1} -p A=1 --framework net9.0"], context.BuildInvocations); + } + + [Theory] + [CombinatorialData] + public async Task FileBasedApp_TargetFrameworksProperty(bool nonInteractive) + { + var dir = TestAssetsManager.CreateTestDirectory(identifiers: [nonInteractive]); + var file1 = Path.Combine(dir.Path, "File1.cs"); + File.WriteAllText(file1, """ + #:property TargetFrameworks=net9.0;net10.0 + Console.WriteLine(1); + """); + + using var context = CreateContext([file1]); + + var result = await context.Watcher.BuildProjectsAsync( + [new ProjectRepresentation(projectPath: null, entryPointFilePath: file1)], + context.FileWatcher, + mainProjectOptions: TestOptions.GetProjectOptions(["--file", file1]), + frameworkSelector: nonInteractive ? null : (_, _) => + { + return ValueTask.FromResult("net9.0"); + }, + deviceSelector: null, + CancellationToken.None); + + if (nonInteractive) + { + AssertEx.SequenceEqual( + [ + "[Error] " + MessageDescriptor.FileSpecifiesMultipleTargetFrameworks.GetMessage((file1, "net9.0', 'net10.0")) + ], context.BuildLogger.GetAndClearMessages()); + + Assert.False(result.Success); + Assert.Empty(context.BuildInvocations); + } + else + { + Assert.True(result.Success); + AssertEx.SequenceEqual([$"build {file1} -p A=1 --framework net9.0"], context.BuildInvocations); + } + } + + [Fact] + public async Task FileBasedApp_TargetFrameworkOption() + { + var dir = TestAssetsManager.CreateTestDirectory(); + var file1 = Path.Combine(dir.Path, "File1.cs"); + File.WriteAllText(file1, """ + #:property TargetFrameworks=net9.0;net10.0 + Console.WriteLine(1); + """); + + using var context = CreateContext([file1]); + + var result = await context.Watcher.BuildProjectsAsync( + [new ProjectRepresentation(projectPath: null, entryPointFilePath: file1)], + context.FileWatcher, + mainProjectOptions: TestOptions.GetProjectOptions(["--file", file1, "-f", "net8.0"]), + frameworkSelector: (_, _) => + { + Assert.Fail("Selector should not be invoked"); + return ValueTask.FromResult("n/a"); + }, + deviceSelector: null, + CancellationToken.None); + + Assert.True(result.Success); + + AssertEx.SequenceEqual([$"build {file1} -p A=1 --framework net8.0"], context.BuildInvocations); + } + [Fact] public async Task MultipleFiles() { - var dir = Path.GetTempPath(); - var file1 = Path.Combine(dir, "File1.cs"); - var file2 = Path.Combine(dir, "File2.cs"); + var dir = TestAssetsManager.CreateTestDirectory(); + var file1 = Path.Combine(dir.Path, "File1.cs"); + var file2 = Path.Combine(dir.Path, "File2.cs"); using var context = CreateContext(); @@ -218,10 +324,10 @@ public async Task MultipleFiles() [Fact] public async Task SingleProject_MultipleFiles() { - var dir = Path.GetTempPath(); - var project1 = Path.Combine(dir, "Project1.csproj"); - var file1 = Path.Combine(dir, "File1.cs"); - var file2 = Path.Combine(dir, "File2.cs"); + var dir = TestAssetsManager.CreateTestDirectory(); + var project1 = Path.Combine(dir.Path, "Project1.csproj"); + var file1 = Path.Combine(dir.Path, "File1.cs"); + var file2 = Path.Combine(dir.Path, "File2.cs"); using var context = CreateContext(); @@ -251,11 +357,11 @@ public async Task SingleProject_MultipleFiles() [Fact] public async Task MultipleProjects_MultipleFiles() { - var dir = Path.GetTempPath(); - var project1 = Path.Combine(dir, "Project1.csproj"); - var project2 = Path.Combine(dir, "Project2.csproj"); - var file1 = Path.Combine(dir, "File1.cs"); - var file2 = Path.Combine(dir, "File2.cs"); + var dir = TestAssetsManager.CreateTestDirectory(); + var project1 = Path.Combine(dir.Path, "Project1.csproj"); + var project2 = Path.Combine(dir.Path, "Project2.csproj"); + var file1 = Path.Combine(dir.Path, "File1.cs"); + var file2 = Path.Combine(dir.Path, "File2.cs"); using var context = CreateContext(); diff --git a/test/dotnet-watch.Tests/HotReload/CompilationHandlerTests.cs b/test/dotnet-watch.Tests/HotReload/CompilationHandlerTests.cs index 041b411beae9..776dd6dd1535 100644 --- a/test/dotnet-watch.Tests/HotReload/CompilationHandlerTests.cs +++ b/test/dotnet-watch.Tests/HotReload/CompilationHandlerTests.cs @@ -22,8 +22,8 @@ public async Task ReferenceOutputAssembly_False() var projectOptions = TestOptions.GetProjectOptions(cmdOptions); var environmentOptions = TestOptions.GetEnvironmentOptions(Environment.CurrentDirectory); - var factory = new ProjectGraphFactory([hostProjectRepr], virtualProjectTargetFramework: null, buildProperties: [], NullLogger.Instance, cmdOptions.GlobalOptions, environmentOptions); - var projectGraph = factory.TryLoadProjectGraph(projectGraphRequired: false, CancellationToken.None); + var factory = new ProjectGraphFactory([hostProjectRepr], buildProperties: [], NullLogger.Instance, cmdOptions.GlobalOptions, environmentOptions); + var projectGraph = factory.TryLoadProjectGraph(projectGraphRequired: false, virtualProjectTargetFramework: null, CancellationToken.None); Assert.NotNull(projectGraph); var processOutputReporter = new TestProcessOutputReporter(); diff --git a/test/dotnet-watch.Tests/HotReload/FileBasedAppTests.cs b/test/dotnet-watch.Tests/HotReload/FileBasedAppTests.cs new file mode 100644 index 000000000000..43a9c2e23262 --- /dev/null +++ b/test/dotnet-watch.Tests/HotReload/FileBasedAppTests.cs @@ -0,0 +1,103 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.DotNet.Watch.UnitTests; + +public class FileBasedAppTests(ITestOutputHelper output) : DotNetWatchTestBase(output) +{ + [Fact] + public async Task IncludeDirective() + { + var testAsset = TestAssets.CreateTestAsset("FBA"); + + var entryPointFilePath = Path.Combine(testAsset.Path, "App.cs"); + File.WriteAllText(entryPointFilePath, """ + #:property ExperimentalFileBasedProgramEnableIncludeDirective=true + #:property StartupHookSupport=true + #:include Lib.cs + + using System.Reflection; + using System.Runtime.Versioning; + + Console.WriteLine(typeof(Program).Assembly.GetCustomAttribute()!.FrameworkName); + + while (true) + { + Lib.F(); + Thread.Sleep(1000); + } + """); + + var referencedFilePath = Path.Combine(testAsset.Path, "Lib.cs"); + File.WriteAllText(referencedFilePath, """ + class Lib + { + public static void F() + { + Console.WriteLine("Library"); + } + } + """); + + App.Start(testAsset, ["App.cs"]); + + await App.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); + + await App.WaitUntilOutputContains(ToolsetInfo.CurrentTargetFrameworkMoniker); + await App.WaitUntilOutputContains("Library"); + + App.Process.ClearOutput(); + UpdateSourceFile(referencedFilePath, src => src.Replace("Library", "")); + + await App.WaitUntilOutputContains(""); + } + + [Fact] + public async Task TargetFrameworks_Selection() + { + var testAsset = TestAssets.CreateTestAsset("FBA"); + + var entryPointFilePath = Path.Combine(testAsset.Path, "App.cs"); + File.WriteAllText(entryPointFilePath, """ + #:property TargetFrameworks= net9.0; net10.0 + using System.Reflection; + using System.Runtime.Versioning; + + Console.WriteLine(typeof(Program).Assembly.GetCustomAttribute()!.FrameworkName); + """); + + App.Start(testAsset, ["App.cs"], testFlags: TestFlags.ReadKeyFromStdin); + + await App.WaitUntilOutputContains(Resources.SelectTargetFrameworkPrompt); + + foreach (var c in "net9.0") + { + App.SendKey(c); + } + + App.SendKey('\r'); + + await App.WaitUntilOutputContains(".NETCoreApp,Version=v9.0"); + await App.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); + } + + [Fact] + public async Task TargetFramework() + { + var testAsset = TestAssets.CreateTestAsset("FBA"); + + var entryPointFilePath = Path.Combine(testAsset.Path, "App.cs"); + File.WriteAllText(entryPointFilePath, """ + #:property TargetFramework=net9.0 + using System.Reflection; + using System.Runtime.Versioning; + + Console.WriteLine(typeof(Program).Assembly.GetCustomAttribute()!.FrameworkName); + """); + + App.Start(testAsset, ["App.cs"]); + + await App.WaitUntilOutputContains(".NETCoreApp,Version=v9.0"); + await App.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); + } +} diff --git a/test/dotnet-watch.Tests/HotReload/SourceFileUpdateTests.HotReloadNotSupported.cs b/test/dotnet-watch.Tests/HotReload/SourceFileUpdateTests.HotReloadNotSupported.cs index b8f84c7fd249..a94622063833 100644 --- a/test/dotnet-watch.Tests/HotReload/SourceFileUpdateTests.HotReloadNotSupported.cs +++ b/test/dotnet-watch.Tests/HotReload/SourceFileUpdateTests.HotReloadNotSupported.cs @@ -28,7 +28,7 @@ public async Task ChangeFileInAotProject(string propertyName, string propertyVal App.Start(testAsset, ["--non-interactive"]); - var message = MessageDescriptor.ProjectDoesNotSupportHotReload.GetMessage($"'{propertyName}' property is '{propertyValue}'"); + var message = MessageDescriptor.ProjectDoesNotSupportHotReload_Property.GetMessage((propertyName, propertyValue, PropertyNames.StartupHookSupport, "True")); await App.WaitForOutputLineContaining($"[{projectDisplay}] {message}"); await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForChanges); App.Process.ClearOutput(); From 80922e4e3d3cc8985be4b4c83645e9380cd20b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Matou=C5=A1ek?= Date: Wed, 15 Apr 2026 08:18:08 +0300 Subject: [PATCH 145/230] Fix reporting Hot Reload capabilities of WASM projects (#53665) --- .../HotReloadClient/Logging/LogEvents.cs | 3 ++ .../Logging/LoggingUtilities.cs | 2 +- .../Web/WebAssemblyHotReloadClient.cs | 6 ++- .../Watch/AppModels/WebApplicationAppModel.cs | 2 +- src/Dotnet.Watch/Watch/UI/IReporter.cs | 6 ++- test/Microsoft.NET.TestFramework/TestAsset.cs | 19 +++++-- .../WatchBlazorWasm/blazorwasm.csproj | 5 -- .../Browser/BrowserTests.cs | 2 +- .../HotReload/RazorHotReloadTests.cs | 49 +++++++++---------- .../Watch/FileUpdateTests.cs | 1 + 10 files changed, 51 insertions(+), 44 deletions(-) diff --git a/src/Dotnet.Watch/HotReloadClient/Logging/LogEvents.cs b/src/Dotnet.Watch/HotReloadClient/Logging/LogEvents.cs index 939103f5bb47..648e897c8008 100644 --- a/src/Dotnet.Watch/HotReloadClient/Logging/LogEvents.cs +++ b/src/Dotnet.Watch/HotReloadClient/Logging/LogEvents.cs @@ -3,6 +3,7 @@ #nullable enable +using System; using System.Runtime.CompilerServices; using Microsoft.Extensions.Logging; @@ -76,5 +77,7 @@ public static void Log(this ILogger logger, LogEvent<(TArg1 public static readonly LogEvent RefreshServerRunningAt = Create(LogLevel.Debug, "Refresh server running at {0}."); public static readonly LogEvent ConnectedToRefreshServer = Create(LogLevel.Debug, "Connected to refresh server."); public static readonly LogEvent ManifestFileNotFound = Create(LogLevel.Debug, "Manifest file '{0}' not found."); + public static readonly LogEvent ProjectSpecifiesCapabilities = Create(LogLevel.Debug, "Project specifies capabilities: {0}."); + public static readonly LogEvent<(Version, string)> UsingCapabilitiesBasedOnTargetFrameworkVersion = Create<(Version, string)>(LogLevel.Debug, "Using capabilities based on project target framework version: '{0}': {1}."); } diff --git a/src/Dotnet.Watch/HotReloadClient/Logging/LoggingUtilities.cs b/src/Dotnet.Watch/HotReloadClient/Logging/LoggingUtilities.cs index 28b60f04fa7b..7e193d526382 100644 --- a/src/Dotnet.Watch/HotReloadClient/Logging/LoggingUtilities.cs +++ b/src/Dotnet.Watch/HotReloadClient/Logging/LoggingUtilities.cs @@ -12,7 +12,7 @@ internal static class LoggingUtilities public static ILogger CreateLogger(this ILoggerFactory factory, string componentName, string displayName) => factory.CreateLogger($"{componentName}|{displayName}"); - public static (string comonentName, string? displayName) ParseCategoryName(string categoryName) + public static (string componentName, string? displayName) ParseCategoryName(string categoryName) => categoryName.IndexOf('|') is int index && index > 0 ? (categoryName[..index], categoryName[(index + 1)..]) : (categoryName, null); diff --git a/src/Dotnet.Watch/HotReloadClient/Web/WebAssemblyHotReloadClient.cs b/src/Dotnet.Watch/HotReloadClient/Web/WebAssemblyHotReloadClient.cs index 814fa1a7d09d..cdb5e40ec2f3 100644 --- a/src/Dotnet.Watch/HotReloadClient/Web/WebAssemblyHotReloadClient.cs +++ b/src/Dotnet.Watch/HotReloadClient/Web/WebAssemblyHotReloadClient.cs @@ -60,11 +60,13 @@ private static ImmutableArray GetUpdateCapabilities(ILogger logger, Immu var capabilitiesStr = string.Join(", ", capabilities); if (projectHotReloadCapabilities.IsEmpty) { - logger.LogDebug("Project specifies capabilities: {Capabilities}.", capabilitiesStr); + // Note that this is not possible with SDK 10+ since the WASM SDK always defines the capabilities in the project, + // but the code is shared with VS and CDK which might not use the latest SDK. + logger.Log(LogEvents.UsingCapabilitiesBasedOnTargetFrameworkVersion, projectTargetFrameworkVersion, capabilitiesStr); } else { - logger.LogDebug("Using capabilities based on project target framework version: '{Version}': {Capabilities}.", projectTargetFrameworkVersion, capabilitiesStr); + logger.Log(LogEvents.ProjectSpecifiesCapabilities, capabilitiesStr); } return capabilities; diff --git a/src/Dotnet.Watch/Watch/AppModels/WebApplicationAppModel.cs b/src/Dotnet.Watch/Watch/AppModels/WebApplicationAppModel.cs index b4b72f3b7a64..a48047c1b91f 100644 --- a/src/Dotnet.Watch/Watch/AppModels/WebApplicationAppModel.cs +++ b/src/Dotnet.Watch/Watch/AppModels/WebApplicationAppModel.cs @@ -95,7 +95,7 @@ public bool IsServerSupported(ProjectGraphNode projectNode, ILogger logger) return false; } - logger.Log(MessageDescriptor.ConfiguredToUseBrowserRefresh); + logger.Log(MessageDescriptor.UsingBrowserRefreshMiddleware); return true; } } diff --git a/src/Dotnet.Watch/Watch/UI/IReporter.cs b/src/Dotnet.Watch/Watch/UI/IReporter.cs index 515a422126ea..140558c3c867 100644 --- a/src/Dotnet.Watch/Watch/UI/IReporter.cs +++ b/src/Dotnet.Watch/Watch/UI/IReporter.cs @@ -209,6 +209,8 @@ public static MessageDescriptor GetDescriptor(EventId id) public static readonly MessageDescriptor<(int, string)> UpdateBatchFailedWithError = Create(LogEvents.UpdateBatchFailedWithError, Emoji.HotReload); public static readonly MessageDescriptor<(int, string)> UpdateBatchExceptionStackTrace = Create(LogEvents.UpdateBatchExceptionStackTrace, Emoji.HotReload); public static readonly MessageDescriptor Capabilities = Create(LogEvents.Capabilities, Emoji.HotReload); + public static readonly MessageDescriptor ProjectSpecifiesCapabilities = Create(LogEvents.ProjectSpecifiesCapabilities, Emoji.HotReload); + public static readonly MessageDescriptor<(Version, string)> UsingCapabilitiesBasedOnTargetFrameworkVersion = Create(LogEvents.UsingCapabilitiesBasedOnTargetFrameworkVersion, Emoji.HotReload); public static readonly MessageDescriptor WaitingForFileChangeBeforeRestarting = Create("Waiting for a file to change before restarting ...", Emoji.Wait, LogLevel.Warning); public static readonly MessageDescriptor WatchingWithHotReload = Create("Watching with Hot Reload.", Emoji.Watch, LogLevel.Debug); public static readonly MessageDescriptor RestartInProgress = Create("Restart in progress.", Emoji.Restart, LogLevel.Information); @@ -220,8 +222,8 @@ public static MessageDescriptor GetDescriptor(EventId id) public static readonly MessageDescriptor ApplyUpdate_Verbose = Create("{0}", Emoji.Default, LogLevel.Debug); public static readonly MessageDescriptor ApplyUpdate_AutoVerbose = Create("{0}", Emoji.Default, LogLevel.Debug); public static readonly MessageDescriptor ApplyUpdate_ChangingEntryPoint = Create("{0} Press \"Ctrl + R\" to restart.", Emoji.Warning, LogLevel.Warning); - public static readonly MessageDescriptor ConfiguredToLaunchBrowser = Create("dotnet-watch is configured to launch a browser on ASP.NET Core application startup.", Emoji.Watch, LogLevel.Debug); - public static readonly MessageDescriptor ConfiguredToUseBrowserRefresh = Create("Using browser-refresh middleware", Emoji.Default, LogLevel.Debug); + public static readonly MessageDescriptor ConfiguredToLaunchBrowser = Create("Configured to launch a browser on ASP.NET Core application startup.", Emoji.Watch, LogLevel.Debug); + public static readonly MessageDescriptor UsingBrowserRefreshMiddleware = Create("Using browser-refresh middleware", Emoji.Default, LogLevel.Debug); public static readonly MessageDescriptor BrowserRefreshSuppressedViaEnvironmentVariable_ManualRefreshRequired = Create("Browser refresh is suppressed via environment variable '{0}'. To reload static assets after an update refresh browser manually.", Emoji.Watch, LogLevel.Debug); public static readonly MessageDescriptor BrowserRefreshSuppressedViaEnvironmentVariable_ApplicationWillBeRestarted = Create("Browser refresh is suppressed via environment variable '{0}'. Application will be restarted when updated.", Emoji.Watch, LogLevel.Warning); public static readonly MessageDescriptor BrowserRefreshNotSupportedByProjectTargetFramework_ManualRefreshRequired = Create("Browser refresh is not supported by the project target framework. To reload static assets after an update refresh browser manually. For more information see 'https://aka.ms/dotnet/watch/unsupported-tfm'.", Emoji.Watch, LogLevel.Warning); diff --git a/test/Microsoft.NET.TestFramework/TestAsset.cs b/test/Microsoft.NET.TestFramework/TestAsset.cs index 26eda24f928c..558c623d25e2 100644 --- a/test/Microsoft.NET.TestFramework/TestAsset.cs +++ b/test/Microsoft.NET.TestFramework/TestAsset.cs @@ -63,8 +63,15 @@ internal void FindProjectFiles() /// /// Copies all of the source code from the TestAsset's original location to the previously-configured destination directory. /// - /// - public TestAsset WithSource() + /// + /// Target framework to use for $(CurrentTargetFramework) property. + /// + /// + /// Properties used in PackageReference version attributes in the test projects that should be replaced with the given values. + /// + public TestAsset WithSource( + string? targetFramework = null, + IEnumerable<(string versionPropertyName, string version)>? packageVersionPropertySubstitutions = null) { _projectFiles = new List(); @@ -93,10 +100,12 @@ public TestAsset WithSource() File.Copy(srcFile, destFile, true); } + targetFramework ??= ToolsetInfo.CurrentTargetFramework; + var substitutions = new[] { - (propertyName: "TargetFramework", variableName: "CurrentTargetFramework", value: ToolsetInfo.CurrentTargetFramework), - (propertyName: "CurrentTargetFramework", variableName: "CurrentTargetFramework", value: ToolsetInfo.CurrentTargetFramework), + (propertyName: "TargetFramework", variableName: "CurrentTargetFramework", value: targetFramework), + (propertyName: "CurrentTargetFramework", variableName: "CurrentTargetFramework", value: targetFramework), (propertyName: "RuntimeIdentifier", variableName: "LatestWinRuntimeIdentifier", value: ToolsetInfo.LatestWinRuntimeIdentifier), (propertyName: "RuntimeIdentifier", variableName: "LatestLinuxRuntimeIdentifier", value: ToolsetInfo.LatestLinuxRuntimeIdentifier), (propertyName: "RuntimeIdentifier", variableName: "LatestMacRuntimeIdentifier", value: ToolsetInfo.LatestMacRuntimeIdentifier), @@ -108,7 +117,7 @@ public TestAsset WithSource() UpdateProjProperty(propertyName, variableName, value); } - foreach (var (propertyName, version) in ToolsetInfo.GetPackageVersionProperties()) + foreach (var (propertyName, version) in packageVersionPropertySubstitutions ?? ToolsetInfo.GetPackageVersionProperties()) { ReplacePackageVersionVariable(propertyName, version); } diff --git a/test/TestAssets/TestProjects/WatchBlazorWasm/blazorwasm.csproj b/test/TestAssets/TestProjects/WatchBlazorWasm/blazorwasm.csproj index faf089dff1c0..a576734b5fda 100644 --- a/test/TestAssets/TestProjects/WatchBlazorWasm/blazorwasm.csproj +++ b/test/TestAssets/TestProjects/WatchBlazorWasm/blazorwasm.csproj @@ -9,11 +9,6 @@ - - - true - - diff --git a/test/dotnet-watch.Tests/Browser/BrowserTests.cs b/test/dotnet-watch.Tests/Browser/BrowserTests.cs index e94edb8b8169..fed7f3fd2e0a 100644 --- a/test/dotnet-watch.Tests/Browser/BrowserTests.cs +++ b/test/dotnet-watch.Tests/Browser/BrowserTests.cs @@ -37,7 +37,7 @@ public async Task BrowserDiagnostics() App.Start(testAsset, ["--urls", url], relativeProjectDirectory: "RazorApp", testFlags: TestFlags.ReadKeyFromStdin); - await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToUseBrowserRefresh); + await App.WaitUntilOutputContains(MessageDescriptor.UsingBrowserRefreshMiddleware); await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToLaunchBrowser); await App.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); diff --git a/test/dotnet-watch.Tests/HotReload/RazorHotReloadTests.cs b/test/dotnet-watch.Tests/HotReload/RazorHotReloadTests.cs index 72387910b17c..31df062b773c 100644 --- a/test/dotnet-watch.Tests/HotReload/RazorHotReloadTests.cs +++ b/test/dotnet-watch.Tests/HotReload/RazorHotReloadTests.cs @@ -1,39 +1,35 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -#nullable disable - namespace Microsoft.DotNet.Watch.UnitTests; public class RazorHotReloadTests(ITestOutputHelper logger) : DotNetWatchTestBase(logger) { [PlatformSpecificTheory(TestPlatforms.Windows | TestPlatforms.OSX)] // https://github.com/dotnet/sdk/issues/53114 - [CombinatorialData] - public async Task BlazorWasm(bool projectSpecifiesCapabilities) + [InlineData("net6.0", "6.0.36")] + [InlineData(ToolsetInfo.CurrentTargetFramework, null)] + public async Task BlazorWasm(string tfm, string? wasmVersion) { - var tfm = ToolsetInfo.CurrentTargetFramework; - - var testAsset = TestAssets.CopyTestAsset("WatchBlazorWasm", identifier: projectSpecifiesCapabilities.ToString()) - .WithSource(); - - if (projectSpecifiesCapabilities) - { - testAsset = testAsset.WithProjectChanges(proj => - { - proj.Root.Descendants() - .First(e => e.Name.LocalName == "PropertyGroup") - .Add(XElement.Parse(""" - Baseline;AddMethodToExistingType - """)); - }); - } + var testAsset = TestAssets.CopyTestAsset("WatchBlazorWasm", identifier: $"{tfm}_{wasmVersion}").WithSource( + targetFramework: tfm, + packageVersionPropertySubstitutions: wasmVersion != null ? [("MicrosoftAspNetCoreAppRefPackageVersion", wasmVersion)] : null); var port = TestOptions.GetTestPort(); App.Start(testAsset, ["--urls", "http://localhost:" + port], testFlags: TestFlags.MockBrowser); - await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToUseBrowserRefresh); + await App.WaitUntilOutputContains(MessageDescriptor.UsingBrowserRefreshMiddleware); await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToLaunchBrowser); + // AddExplicitInterfaceImplementation is an implicit capability that's always added for .NET targets: + string[] expectedCapabilities = tfm switch + { + "net6.0" => ["Baseline", "AddMethodToExistingType", "AddStaticFieldToExistingType", "NewTypeDefinition", "ChangeCustomAttributes", "AddExplicitInterfaceImplementation"], + _ => ["Baseline", "AddMethodToExistingType", "AddStaticFieldToExistingType", "NewTypeDefinition", "ChangeCustomAttributes", "AddInstanceFieldToExistingType", + "GenericAddMethodToExistingType", "GenericUpdateMethod", "UpdateParameters", "GenericAddFieldToExistingType", "AddExplicitInterfaceImplementation" ] + }; + + await App.WaitUntilOutputContains(MessageDescriptor.ProjectSpecifiesCapabilities.GetMessage(string.Join(", ", expectedCapabilities))); + // env variable passed when launching the server: await App.WaitUntilOutputContains($"HOTRELOAD_DELTA_CLIENT_LOG_MESSAGES=dotnet watch 🕵️ [blazorwasm ({tfm})]"); @@ -61,8 +57,7 @@ public async Task BlazorWasm(bool projectSpecifiesCapabilities) UpdateSourceFile(Path.Combine(testAsset.Path, "Pages", "Index.razor"), newSource); - // WebAssemblyHotReloadCapabilities set by project is overwritten in WASM SDK targets: - await App.WaitUntilOutputContains("dotnet watch 🔥 Hot reload capabilities: AddExplicitInterfaceImplementation AddInstanceFieldToExistingType AddMethodToExistingType AddStaticFieldToExistingType Baseline ChangeCustomAttributes GenericAddFieldToExistingType GenericAddMethodToExistingType GenericUpdateMethod NewTypeDefinition UpdateParameters."); + await App.WaitUntilOutputContains($"dotnet watch 🔥 Hot reload capabilities: {string.Join(" ", expectedCapabilities.Order())}."); await App.WaitUntilOutputContains(MessageDescriptor.ManagedCodeChangesApplied); } @@ -74,7 +69,7 @@ public async Task BlazorWasm_MSBuildWarning() .WithSource() .WithProjectChanges(proj => { - proj.Root.Descendants() + proj.Root!.Descendants() .Single(e => e.Name.LocalName == "ItemGroup") .Add(XElement.Parse(""" @@ -99,7 +94,7 @@ public async Task BlazorWasm_Restart() await App.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); - await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToUseBrowserRefresh); + await App.WaitUntilOutputContains(MessageDescriptor.UsingBrowserRefreshMiddleware); await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToLaunchBrowser); await App.WaitUntilOutputContains(MessageDescriptor.PressCtrlRToRestart); @@ -120,7 +115,7 @@ public async Task BlazorWasmHosted() var port = TestOptions.GetTestPort(); App.Start(testAsset, ["--urls", "http://localhost:" + port], "blazorhosted", testFlags: TestFlags.MockBrowser); - await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToUseBrowserRefresh); + await App.WaitUntilOutputContains(MessageDescriptor.UsingBrowserRefreshMiddleware); await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToLaunchBrowser); await App.WaitUntilOutputContains(MessageDescriptor.ApplicationKind_BlazorHosted); } @@ -136,7 +131,7 @@ public async Task Razor_Component_ScopedCssAndStaticAssets() await App.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); - await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToUseBrowserRefresh); + await App.WaitUntilOutputContains(MessageDescriptor.UsingBrowserRefreshMiddleware); await App.WaitUntilOutputContains(MessageDescriptor.ConfiguredToLaunchBrowser); await App.WaitUntilOutputContains(MessageDescriptor.LaunchingBrowser.GetMessage($"http://localhost:{port}")); App.Process.ClearOutput(); diff --git a/test/dotnet-watch.Tests/Watch/FileUpdateTests.cs b/test/dotnet-watch.Tests/Watch/FileUpdateTests.cs index e244fae8115c..6a322b1fce09 100644 --- a/test/dotnet-watch.Tests/Watch/FileUpdateTests.cs +++ b/test/dotnet-watch.Tests/Watch/FileUpdateTests.cs @@ -76,6 +76,7 @@ public void Test1() await App.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); await App.WaitUntilOutputContains("Failed!"); + await App.WaitForOutputLineContaining(MessageDescriptor.WaitingForFileChangeBeforeRestarting); App.Process.ClearOutput(); UpdateSourceFile(testFile, """ From cc3acf3f0403a35f708d7670589c28192e0bf709 Mon Sep 17 00:00:00 2001 From: Karol Zadora-Przylecki Date: Tue, 14 Apr 2026 15:07:30 -0700 Subject: [PATCH 146/230] Fix AspireHostLauncher not launching the Aspire host --- .../Watch.Aspire/Host/AspireHostLauncher.cs | 4 +++- .../Server/AspireWatcherLauncher.cs | 4 +++- .../AspireHostLauncherTests.cs | 18 +++++++++--------- .../AspireLauncherTests.cs | 1 + 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs b/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs index facbff0e88f7..fbfd214ca92c 100644 --- a/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs +++ b/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs @@ -43,7 +43,7 @@ internal sealed class AspireHostLauncher( launchProfileName: noLaunchProfile ? Optional.NoValue : launchProfile); } - internal ProjectOptions GetProjectOptions() + protected override ProjectOptions? GetProjectOptions() { var commandArguments = new List() { @@ -75,6 +75,8 @@ internal ProjectOptions GetProjectOptions() }; } + internal ProjectOptions GetHostProjectOptions() => GetProjectOptions()!; + public override async Task LaunchAsync(CancellationToken cancellationToken) { return await LaunchWatcherAsync( diff --git a/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs b/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs index ea8f75b1e53b..c0da9e8e66ac 100644 --- a/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs +++ b/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs @@ -28,7 +28,7 @@ protected async Task LaunchWatcherAsync( ProcessRunner = new ProcessRunner(EnvironmentOptions.GetProcessCleanupTimeout()), Options = GlobalOptions, EnvironmentOptions = EnvironmentOptions, - MainProjectOptions = null, + MainProjectOptions = GetProjectOptions(), BuildArguments = [], RootProjects = rootProjects, BrowserRefreshServerFactory = new BrowserRefreshServerFactory(), @@ -50,4 +50,6 @@ protected async Task LaunchWatcherAsync( return 0; } + + protected virtual ProjectOptions? GetProjectOptions() => null; } diff --git a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireHostLauncherTests.cs b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireHostLauncherTests.cs index 0718b7205d0b..94abac0ac2ca 100644 --- a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireHostLauncherTests.cs +++ b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireHostLauncherTests.cs @@ -44,7 +44,7 @@ public void GetProjectOptions_ProjectFile_UsesProjectFlag() { var launcher = CreateLauncher("myapp.csproj"); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.False(options.LaunchProfileName.HasValue); @@ -56,7 +56,7 @@ public void GetProjectOptions_EntryPointFile_UsesFileFlag() { var launcher = CreateLauncher("Program.cs"); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.False(options.LaunchProfileName.HasValue); @@ -68,7 +68,7 @@ public void GetProjectOptions_WithLaunchProfile_AddsLaunchProfileArguments() { var launcher = CreateLauncher("myapp.csproj", launchProfileName: "MyProfile"); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.True(options.LaunchProfileName.HasValue); @@ -81,7 +81,7 @@ public void GetProjectOptions_NoLaunchProfile_AddsNoLaunchProfileFlag() { var launcher = CreateLauncher("myapp.csproj", launchProfileName: Optional.NoValue); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.False(options.LaunchProfileName.HasValue); @@ -94,7 +94,7 @@ public void GetProjectOptions_NullLaunchProfile_UsesDefault() // null value (HasValue=true) means use default launch profile - no --launch-profile or --no-launch-profile flag var launcher = CreateLauncher("myapp.csproj", launchProfileName: (string?)null); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.True(options.LaunchProfileName.HasValue); @@ -107,7 +107,7 @@ public void GetProjectOptions_WithApplicationArguments_AppendsArguments() { var launcher = CreateLauncher("myapp.csproj", launchProfileName: "Profile", applicationArguments: ["arg1", "arg2"]); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.True(options.LaunchProfileName.HasValue); @@ -120,7 +120,7 @@ public void GetProjectOptions_SetsCustomWorkingDirectory() { var launcher = CreateLauncher("myapp.csproj", workingDirectory: "/custom/path"); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.Equal("/custom/path", options.WorkingDirectory); @@ -131,7 +131,7 @@ public void GetProjectOptions_EntryPointFile_WithLaunchProfileAndArguments() { var launcher = CreateLauncher("Program.cs", launchProfileName: "Dev", applicationArguments: ["--port", "8080"]); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.True(options.LaunchProfileName.HasValue); @@ -144,7 +144,7 @@ public void GetProjectOptions_NoLaunchProfile_WithApplicationArguments() { var launcher = CreateLauncher("myapp.csproj", launchProfileName: Optional.NoValue, applicationArguments: ["--urls", "http://localhost:5000"]); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions(); AssertCommonProperties(options, launcher); Assert.False(options.LaunchProfileName.HasValue); diff --git a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs index 7e30a869bbaf..e909805befd2 100644 --- a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs +++ b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs @@ -42,6 +42,7 @@ public async Task Host() host.Start(testAsset, ["--entrypoint", projectPath]); await host.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); + await host.WaitUntilOutputContains("Started"); } [PlatformSpecificFact(TestPlatforms.Windows | TestPlatforms.Linux)] // https://github.com/dotnet/sdk/issues/53061 From 3930f032929bdd2c275a23a617a7c7103243a5eb Mon Sep 17 00:00:00 2001 From: Karol Zadora-Przylecki Date: Tue, 14 Apr 2026 18:20:44 -0700 Subject: [PATCH 147/230] Improve AspireHostLauncher interface --- src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs b/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs index fbfd214ca92c..84c991188aed 100644 --- a/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs +++ b/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs @@ -43,7 +43,7 @@ internal sealed class AspireHostLauncher( launchProfileName: noLaunchProfile ? Optional.NoValue : launchProfile); } - protected override ProjectOptions? GetProjectOptions() + protected override ProjectOptions GetProjectOptions() { var commandArguments = new List() { @@ -75,7 +75,7 @@ internal sealed class AspireHostLauncher( }; } - internal ProjectOptions GetHostProjectOptions() => GetProjectOptions()!; + internal ProjectOptions GetHostProjectOptions() => GetProjectOptions(); public override async Task LaunchAsync(CancellationToken cancellationToken) { From b278293d24c3580614ab7cbcafe069a1a5edd974 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Wed, 15 Apr 2026 10:20:12 +0200 Subject: [PATCH 148/230] Implement `#:ref` directive for file-based apps (#53480) --- .github/copilot/skills/incremental-test.md | 1 + documentation/general/dotnet-run-file.md | 31 +- .../FileBasedProgramsResources.resx | 8 + .../FileLevelDirectiveHelpers.cs | 95 ++ .../InternalAPI.Unshipped.txt | 17 + .../xlf/FileBasedProgramsResources.cs.xlf | 10 + .../xlf/FileBasedProgramsResources.de.xlf | 10 + .../xlf/FileBasedProgramsResources.es.xlf | 10 + .../xlf/FileBasedProgramsResources.fr.xlf | 10 + .../xlf/FileBasedProgramsResources.it.xlf | 10 + .../xlf/FileBasedProgramsResources.ja.xlf | 10 + .../xlf/FileBasedProgramsResources.ko.xlf | 10 + .../xlf/FileBasedProgramsResources.pl.xlf | 10 + .../xlf/FileBasedProgramsResources.pt-BR.xlf | 10 + .../xlf/FileBasedProgramsResources.ru.xlf | 10 + .../xlf/FileBasedProgramsResources.tr.xlf | 10 + .../FileBasedProgramsResources.zh-Hans.xlf | 10 + .../FileBasedProgramsResources.zh-Hant.xlf | 10 + .../dotnet/Commands/CliCommandStrings.resx | 4 + .../Project/Convert/ProjectConvertCommand.cs | 311 +++-- .../Run/VirtualProjectBuildingCommand.cs | 76 +- .../Commands/xlf/CliCommandStrings.cs.xlf | 5 + .../Commands/xlf/CliCommandStrings.de.xlf | 5 + .../Commands/xlf/CliCommandStrings.es.xlf | 5 + .../Commands/xlf/CliCommandStrings.fr.xlf | 5 + .../Commands/xlf/CliCommandStrings.it.xlf | 5 + .../Commands/xlf/CliCommandStrings.ja.xlf | 5 + .../Commands/xlf/CliCommandStrings.ko.xlf | 5 + .../Commands/xlf/CliCommandStrings.pl.xlf | 5 + .../Commands/xlf/CliCommandStrings.pt-BR.xlf | 5 + .../Commands/xlf/CliCommandStrings.ru.xlf | 5 + .../Commands/xlf/CliCommandStrings.tr.xlf | 5 + .../xlf/CliCommandStrings.zh-Hans.xlf | 5 + .../xlf/CliCommandStrings.zh-Hant.xlf | 5 + .../VirtualProjectBuilder.cs | 31 +- .../Convert/DotnetProjectConvertTests.cs | 452 +++++++ .../CommandTests/Run/RunFileTests.cs | 1072 +++++++++++++++-- 37 files changed, 2126 insertions(+), 167 deletions(-) diff --git a/.github/copilot/skills/incremental-test.md b/.github/copilot/skills/incremental-test.md index a15c42f6cd28..7422b8a28d79 100644 --- a/.github/copilot/skills/incremental-test.md +++ b/.github/copilot/skills/incremental-test.md @@ -6,6 +6,7 @@ Use it after making source code changes to quickly build only the modified proje ## Prerequisites - A full build must have been completed at least once (via `build.cmd` or `build.sh`) so that the redist SDK layout exists at `artifacts\bin\redist\Debug\dotnet\sdk\\`. +- The repo-local `.dotnet` SDK must match the version expected by the test projects. If the runtime or SDK version is out of date (e.g., test build fails with a missing framework error), run `.\restore.cmd` (or `./restore.sh` on macOS/Linux) to download the correct SDK into `.dotnet`. - This workflow uses Windows/PowerShell commands and paths. On macOS/Linux, substitute forward slashes and use `cp` instead of `Copy-Item`. ## When to use diff --git a/documentation/general/dotnet-run-file.md b/documentation/general/dotnet-run-file.md index 9b731cc3e561..9c9ed03ab167 100644 --- a/documentation/general/dotnet-run-file.md +++ b/documentation/general/dotnet-run-file.md @@ -112,8 +112,8 @@ If a dash (`-`) is given instead of the target path (i.e., `dotnet run -`), the In this case, the current working directory is not used to search for other files (launch profiles, other sources in case of multi-file apps); the compilation consists solely of the single file read from the standard input. However, the current working directory is still used as the working directory for building and executing the program. -To reference projects relative to the current working directory (instead of relative to the temporary directory the file is isolated in), -you can use something like `#:project $(MSBuildStartupDirectory)/relative/path`. +To reference projects or files relative to the current working directory (instead of relative to the temporary directory the file is isolated in), +you can use something like `#:project $(MSBuildStartupDirectory)/relative/path` or `#:ref $(MSBuildStartupDirectory)/relative/lib.cs`. `dotnet path.cs` is a shortcut for `dotnet run --file path.cs` provided that `path.cs` is a valid [target path](#target-path) (`dotnet -` is currently not supported) and it is not a DLL path, built-in command, or a NuGet tool (e.g., `dotnet watch` invokes the `dotnet-watch` tool @@ -180,11 +180,12 @@ which are [ignored][ignored-directives] by the C# language but recognized by the #:property LangVersion=preview #:package System.CommandLine@2.0.0-* #:project ../MyLibrary +#:ref ../lib/lib.cs #:include ./**/*.cs ``` Each directive has a kind (e.g., `package`), a name (e.g., `System.CommandLine`), a separator (e.g., `@`), and a value (e.g., the package version). -The value is required for `#:property`, optional for `#:package`/`#:sdk`, and disallowed for `#:project`/`#:include`. +The value is required for `#:property`, optional for `#:package`/`#:sdk`, and disallowed for `#:project`/`#:ref`/`#:include`. The name must be separated from the kind of the directive by whitespace and any leading and trailing white space is not considered part of the name and value. @@ -211,6 +212,26 @@ The directives are processed as follows: (because `ProjectReference` items don't support directory paths). An error is reported if zero or more than one projects are found in the directory, just like `dotnet reference add` would do. +- Each `#:ref` references another `.cs` file as a separate project reference. + A virtual project is created for the referenced file (e.g., `lib.cs` produces a virtual `lib.cs.csproj`), + and a `` is injected in an ``. + It is an error if the name is empty or if the referenced file does not exist. + Unlike `#:project`, `#:ref` points to a `.cs` file (not a `.csproj` file or directory). + + The referenced file is itself a file-based program with its own virtual project (defaulting to `OutputType=Exe`). + Library files without an entry point should use `#:property OutputType=Library` to avoid compilation errors. + Because the referenced file is compiled as a separate assembly, internal members of the referenced file are not accessible from the referencing file. + The `#:ref` directive is transitive: a referenced file can itself contain `#:ref` directives (or any other directives). + + Relative paths are resolved relative to the file containing the directive. + MSBuild variables (like `$(MSBuildProjectDirectory)`) can be used in the path. + + During [conversion](#grow-up), each `#:ref` directive creates a separate library project in a sibling directory + and a corresponding `` entry is added to the converted project. + The conversion is recursive: any `#:ref` directives in the referenced files are also converted in the same way. + + This directive is currently gated under a feature flag that can be enabled by setting the MSBuild property `ExperimentalFileBasedProgramEnableRefDirective=true`. + - Each `#:include` is injected as `<{1} Include="{0}" />` in an `` where `{0}` is the directive's value and `{1}` is determined by its extension. The mapping can be customized by setting the MSBuild property `FileBasedProgramsItemMapping` @@ -230,9 +251,9 @@ The directives are processed as follows: - Other directive kinds result in an error, reserving them for future use. Directive values support MSBuild variables (like `$(..)`) normally as they are translated literally and left to MSBuild engine to process. -However, in `#:project` directives, variables might not be preserved during [grow up](#grow-up), +However, in `#:project` and `#:ref` directives, variables might not be preserved during [grow up](#grow-up), because there is additional processing of those directives that makes it technically challenging to preserve variables in all cases -(project directive values need to be resolved to be relative to the target directory +(project and ref directive values need to be resolved to be relative to the target directory and also to point to a project file rather than a directory). Note that it is not expected that variables inside the path change their meaning during the conversion, so for example `#:project ../$(LibName)` is translated to `` (i.e., the variable is preserved). diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileBasedProgramsResources.resx b/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileBasedProgramsResources.resx index cbe3d3838aa3..57a847ae25f7 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileBasedProgramsResources.resx +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileBasedProgramsResources.resx @@ -165,6 +165,14 @@ The '#:project' directive is invalid: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + + + Could not find file '{0}'. + {0} is the file path. + Missing name of '{0}'. {0} is the directive name like 'package' or 'sdk'. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs b/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs index 89413dc860cc..bee6360deaaf 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs @@ -323,6 +323,7 @@ public void ReportError(TextSpan span, string message) case "property": return Property.Parse(context); case "package": return Package.Parse(context); case "project": return Project.Parse(context); + case "ref": return Ref.Parse(context); case "include" or "exclude": return IncludeOrExclude.Parse(context); default: context.ReportError(string.Format(FileBasedProgramsResources.UnrecognizedDirective, context.DirectiveKind)); @@ -587,6 +588,100 @@ void ReportError(string message) public override string ToString() => $"#:project {Name}"; } + /// + /// #:ref directive. References another file-based app as a library. + /// + public sealed class Ref : Named + { + public const string ExperimentalFileBasedProgramEnableRefDirective = nameof(ExperimentalFileBasedProgramEnableRefDirective); + + [SetsRequiredMembers] + public Ref(in ParseInfo info, string name) : base(info) + { + Name = name; + OriginalName = name; + } + + /// + /// Preserved across calls, i.e., + /// this is the original directive text as entered by the user. + /// + public string OriginalName { get; init; } + + /// + /// This is the with MSBuild $(..) vars expanded. + /// + public string? ExpandedName { get; init; } + + /// + /// The resolved full path to the referenced .cs file. + /// + public string? ResolvedPath { get; init; } + + public static new Ref? Parse(in ParseContext context) + { + var directiveText = context.DirectiveText; + if (directiveText.IsWhiteSpace()) + { + context.ReportError(string.Format(FileBasedProgramsResources.MissingDirectiveName, context.DirectiveKind)); + return null; + } + + return new Ref(context.Info, directiveText); + } + + public enum NameKind + { + /// + /// Change and . + /// + Expanded = 1, + + /// + /// Change and . + /// + Resolved = 2, + + /// + /// Change only . + /// + Final = 3, + } + + public Ref WithName(string name, NameKind kind) + { + return new Ref(Info, name) + { + OriginalName = OriginalName, + ExpandedName = kind == NameKind.Expanded ? name : ExpandedName, + ResolvedPath = kind == NameKind.Resolved ? name : ResolvedPath, + }; + } + + /// + /// Resolves the path relative to the source file's directory. + /// + public Ref EnsureResolvedPath(ErrorReporter errorReporter) + { + var sourcePath = Info.SourceFile.Path; + var sourceDirectory = Path.GetDirectoryName(sourcePath) + ?? throw new InvalidOperationException($"Source file path '{sourcePath}' does not have a containing directory."); + + var resolvedFilePath = Path.GetFullPath(Path.Combine(sourceDirectory, Name.Replace('\\', '/'))); + + if (!File.Exists(resolvedFilePath)) + { + errorReporter(Info.SourceFile.Text, sourcePath, Info.Span, + string.Format(FileBasedProgramsResources.InvalidRefDirective, + string.Format(FileBasedProgramsResources.CouldNotFindRefFile, resolvedFilePath))); + } + + return WithName(resolvedFilePath, NameKind.Resolved); + } + + public override string ToString() => $"#:ref {Name}"; + } + public enum IncludeOrExcludeKind { Include, diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt b/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt index 8beab97ae92c..bbf3d44bc01b 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt @@ -3,6 +3,7 @@ const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.Experi const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableItemMapping = "ExperimentalFileBasedProgramEnableItemMapping" -> string! const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives = "ExperimentalFileBasedProgramEnableTransitiveDirectives" -> string! const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.MappingPropertyName = "FileBasedProgramsItemMapping" -> string! +const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective = "ExperimentalFileBasedProgramEnableRefDirective" -> string! Microsoft.DotNet.FileBasedPrograms.CSharpDirective Microsoft.DotNet.FileBasedPrograms.CSharpDirective.CSharpDirective(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo info) -> void Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude @@ -71,6 +72,20 @@ Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Property Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Property.Property(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo info) -> void Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Property.Value.get -> string! Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Property.Value.init -> void +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.EnsureResolvedPath(Microsoft.DotNet.FileBasedPrograms.ErrorReporter! errorReporter) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref! +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.ExpandedName.get -> string? +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.ExpandedName.init -> void +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.NameKind +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.NameKind.Expanded = 1 -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.NameKind +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.NameKind.Final = 3 -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.NameKind +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.NameKind.Resolved = 2 -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.NameKind +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.OriginalName.get -> string! +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.OriginalName.init -> void +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.Ref(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo info, string! name) -> void +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.ResolvedPath.get -> string? +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.ResolvedPath.init -> void +Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.WithName(string! name, Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.NameKind kind) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref! Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk.Sdk(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo info) -> void Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk.Version.get -> string? @@ -123,6 +138,7 @@ override Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.ToS override Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Package.ToString() -> string! override Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project.ToString() -> string! override Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Property.ToString() -> string! +override Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.ToString() -> string! override Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk.ToString() -> string! override Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Shebang.ToString() -> string! override Microsoft.DotNet.FileBasedPrograms.SourceFile.GetHashCode() -> int @@ -134,6 +150,7 @@ static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Package.Parse(in Micro static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Parse(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext context) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Named? static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project.Parse(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext context) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project? static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Property.Parse(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext context) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Property? +static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.Parse(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext context) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref? static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk.Parse(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext context) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk? static Microsoft.DotNet.FileBasedPrograms.ErrorReporters.CreateCollectingReporter(out System.Collections.Immutable.ImmutableArray.Builder! builder) -> Microsoft.DotNet.FileBasedPrograms.ErrorReporter! static Microsoft.DotNet.FileBasedPrograms.ExternalHelpers.CombineHashCodes(int value1, int value2) -> int diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf index fccd6ec81449..c7b527bc9754 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf @@ -17,6 +17,11 @@ Nenašel se projekt ani adresář {0}. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error chyba @@ -57,6 +62,11 @@ Direktiva #:project je neplatná: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Chybí název pro: {0}. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf index acfc69549e69..ae85b7a2a9fb 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf @@ -17,6 +17,11 @@ Das Projekt oder Verzeichnis "{0}" wurde nicht gefunden. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error Fehler @@ -57,6 +62,11 @@ Die Anweisung „#:p roject“ ist ungültig: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Fehlender Name der Anweisung „{0}“. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf index 7fcfcf9a443e..99af05fd0a22 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf @@ -17,6 +17,11 @@ No se encuentra el proyecto o directorio "{0}". + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error error @@ -57,6 +62,11 @@ La directiva "#:project" no es válida: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Falta el nombre de "{0}". diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf index 88c34c93ba8a..90add5915dd1 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf @@ -17,6 +17,11 @@ Projet ou répertoire '{0}' introuvable. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error erreur @@ -57,6 +62,11 @@ La directive « #:project » n’est pas valide : {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Nom manquant pour « {0} ». diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf index 655d5b367356..47de1ef37010 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf @@ -17,6 +17,11 @@ Non sono stati trovati progetti o directory `{0}`. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error errore @@ -57,6 +62,11 @@ La direttiva '#:project' non è valida: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Manca il nome di '{0}'. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf index 2d2cc195c23a..573c9be2ff5c 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf @@ -17,6 +17,11 @@ プロジェクトまたはディレクトリ `{0}` が見つかりませんでした。 + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error エラー @@ -57,6 +62,11 @@ '#:p roject' ディレクティブが無効です: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. '{0}' の名前がありません。 diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf index 7082b47f9aa8..b466d59e7a63 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf @@ -17,6 +17,11 @@ 프로젝트 또는 디렉터리 {0}을(를) 찾을 수 없습니다. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error 오류 @@ -57,6 +62,11 @@ '#:p roject' 지시문이 잘못되었습니다. {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. '{0}' 이름이 없습니다. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf index 4cd99b2c63c3..eaf6b0b78253 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf @@ -17,6 +17,11 @@ Nie można odnaleźć projektu ani katalogu „{0}”. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error błąd @@ -57,6 +62,11 @@ Dyrektywa „#:project” jest nieprawidłowa: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Brak nazwy „{0}”. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf index a5ef266abb7e..72cc2e9f3706 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf @@ -17,6 +17,11 @@ Não foi possível encontrar o projeto ou diretório ‘{0}’. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error erro @@ -57,6 +62,11 @@ A diretiva '#:project' é inválida:{0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Nome de '{0}' ausente. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf index 3405fe15916b..5d580c932efe 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf @@ -17,6 +17,11 @@ Не удалось найти проект или каталог "{0}". + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error ошибка @@ -57,6 +62,11 @@ Недопустимая директива "#:project": {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Отсутствует имя "{0}". diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf index 40ee3f703b98..e64081b711aa 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf @@ -17,6 +17,11 @@ `{0}` projesi veya dizini bulunamadı. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error hata @@ -57,6 +62,11 @@ ‘#:project’ yönergesi geçersizdir: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. '{0}' adı eksik. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf index b5c92edfd759..bbcefb9f1d7f 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf @@ -17,6 +17,11 @@ 找不到项目或目录“{0}”。 + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error 错误 @@ -57,6 +62,11 @@ '#:project' 指令无效: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. 缺少 '{0}' 的名称。 diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf index d65f38fe59f2..ecfe1971bf1c 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf @@ -17,6 +17,11 @@ 找不到專案或目錄 `{0}`。 + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error 錯誤 @@ -57,6 +62,11 @@ '#:project' 指示詞無效: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. 缺少 '{0}' 的名稱。 diff --git a/src/Cli/dotnet/Commands/CliCommandStrings.resx b/src/Cli/dotnet/Commands/CliCommandStrings.resx index 8987541a2308..7b40ab16089e 100644 --- a/src/Cli/dotnet/Commands/CliCommandStrings.resx +++ b/src/Cli/dotnet/Commands/CliCommandStrings.resx @@ -862,6 +862,10 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man No - keep all source files + + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Project(s) diff --git a/src/Cli/dotnet/Commands/Project/Convert/ProjectConvertCommand.cs b/src/Cli/dotnet/Commands/Project/Convert/ProjectConvertCommand.cs index bab18b2e8ac2..4838b909c8ae 100644 --- a/src/Cli/dotnet/Commands/Project/Convert/ProjectConvertCommand.cs +++ b/src/Cli/dotnet/Commands/Project/Convert/ProjectConvertCommand.cs @@ -4,8 +4,8 @@ using System.Collections.Immutable; using System.CommandLine; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; using Microsoft.Build.Evaluation; +using Microsoft.Build.Execution; using Microsoft.DotNet.Cli.Commands.Run; using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.FileBasedPrograms; @@ -58,90 +58,121 @@ public override int Execute() out var evaluatedDirectives, validateAllDirectives: !_force); + // When the entry point has #:ref directives, place all converted projects in subfolders. + bool hasRefs = evaluatedDirectives.Any(static d => d is CSharpDirective.Ref); + string entryPointName = Path.GetFileNameWithoutExtension(file); + string entryPointOutputDir = hasRefs ? Path.Combine(targetDirectory, entryPointName) : targetDirectory; + + // Pre-validate ref target directories (check for duplicates and existing dirs). + if (hasRefs) + { + var usedFolderNames = new HashSet(StringComparer.OrdinalIgnoreCase) { entryPointName }; + ValidateRefTargetDirectories(evaluatedDirectives, Path.GetDirectoryName(file)!, + new HashSet(StringComparer.OrdinalIgnoreCase), usedFolderNames); + } + + ConvertFile(file, entryPointOutputDir, isEntryPointFile: true); + // Find other items to copy over, e.g., default Content items like JSON files in Web apps. - var includeItems = FindIncludedItems().ToList(); + var includeItems = FindIncludedItems(builder, projectInstance, file).ToList(); - CreateDirectory(targetDirectory); + // Convert referenced files (#:ref directives) into library projects. + var convertedRefFiles = new HashSet(StringComparer.OrdinalIgnoreCase); + var refIncludeItems = new List<(string ItemType, string FullPath, string RelativePath)>(); + ConvertReferencedFiles(evaluatedDirectives, Path.GetDirectoryName(file)!); - var targetFile = Path.Join(targetDirectory, Path.GetFileName(file)); + // Copy or move over included items. + CopyIncludedItems(includeItems, entryPointOutputDir); - // Process the entry point file. - if (_dryRun) - { - Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldCopyFile, file, targetFile); - Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldConvertFile, targetFile); - } - else + // Handle deletion of source files if requested. + bool shouldDelete = _deleteSource || TryAskForDeleteSource(); + if (shouldDelete) { - VirtualProjectBuildingCommand.RemoveDirectivesFromFile(builder.EntryPointSourceFile, targetFile); - } + // Delete the entry point file + DeleteFile(file); - // Create project file. - string projectFile = Path.Join(targetDirectory, Path.GetFileNameWithoutExtension(file) + ".csproj"); - if (_dryRun) - { - Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldCreateFile, projectFile); - } - else - { - using var stream = File.Open(projectFile, FileMode.Create, FileAccess.Write); - using var writer = new StreamWriter(stream, Encoding.UTF8); - VirtualProjectBuilder.WriteProjectFile( - writer, - UpdateDirectives(evaluatedDirectives), - isVirtualProject: false, - userSecretsId: DetermineUserSecretsId(), - defaultProperties: GetDefaultProperties()); + // Delete all included items (e.g., via #:include directives and default items) + foreach (var item in includeItems) + { + DeleteFile(item.FullPath); + } + + // Delete converted referenced files and their included items + foreach (var refFile in convertedRefFiles) + { + DeleteFile(refFile); + } + + foreach (var item in refIncludeItems) + { + DeleteFile(item.FullPath); + } } - // Copy or move over included items. - foreach (var item in includeItems) + return 0; + + (VirtualProjectBuilder builder, ProjectInstance projectInstance, ImmutableArray evaluatedDirectives) + ConvertFile(string sourceFile, string outputDirectory, bool isEntryPointFile) { - string targetItemFullPath = Path.Combine(targetDirectory, item.RelativePath); + var sourceDirectory = Path.GetDirectoryName(sourceFile)!; - // Ignore already-copied files. - if (File.Exists(targetItemFullPath)) + VirtualProjectBuilder fileBuilder; + ProjectInstance fileProjectInstance; + ImmutableArray fileDirectives; + + if (isEntryPointFile) + { + fileBuilder = builder; + fileProjectInstance = projectInstance; + fileDirectives = evaluatedDirectives; + } + else { - continue; + fileBuilder = new VirtualProjectBuilder(sourceFile, VirtualProjectBuildingCommand.TargetFramework); + + fileBuilder.CreateProjectInstance( + projectCollection, + VirtualProjectBuildingCommand.ThrowingReporter, + out fileProjectInstance, + projectRootElement: out _, + out fileDirectives, + validateAllDirectives: !_force); } - string targetItemDirectory = Path.GetDirectoryName(targetItemFullPath)!; - CreateDirectory(targetItemDirectory); + CreateDirectory(outputDirectory); - if (item.ItemType == "Compile") + // Copy the .cs file with directives removed. + var targetFile = Path.Join(outputDirectory, Path.GetFileName(sourceFile)); + if (_dryRun) { - if (_dryRun) - { - Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldCopyFile, item.FullPath, targetItemFullPath); - Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldConvertFile, targetItemFullPath); - } - else - { - var sourceFile = SourceFile.Load(item.FullPath); - VirtualProjectBuildingCommand.RemoveDirectivesFromFile(sourceFile, targetItemFullPath); - } + Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldCopyFile, sourceFile, targetFile); + Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldConvertFile, targetFile); } else { - CopyFile(item.FullPath, targetItemFullPath); + VirtualProjectBuildingCommand.RemoveDirectivesFromFile(fileBuilder.EntryPointSourceFile, targetFile); } - } - - // Handle deletion of source files if requested. - bool shouldDelete = _deleteSource || TryAskForDeleteSource(file); - if (shouldDelete) - { - // Delete the entry point file - DeleteFile(file); - // Delete all included items (e.g., via #:include directives and default items) - foreach (var item in includeItems) + // Create project file. + var projectFile = Path.Join(outputDirectory, Path.GetFileNameWithoutExtension(sourceFile) + ".csproj"); + if (_dryRun) { - DeleteFile(item.FullPath); + Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldCreateFile, projectFile); + } + else + { + using var stream = File.Open(projectFile, FileMode.Create, FileAccess.Write); + using var writer = new StreamWriter(stream, Encoding.UTF8); + VirtualProjectBuilder.WriteProjectFile( + writer, + UpdateDirectives(fileDirectives, sourceDirectory, outputDirectory), + isVirtualProject: false, + userSecretsId: isEntryPointFile ? DetermineUserSecretsId(fileProjectInstance) : null, + defaultProperties: GetDefaultProperties(fileProjectInstance)); } - } - return 0; + return (fileBuilder, fileProjectInstance, fileDirectives); + } void CreateDirectory(string path) { @@ -183,14 +214,125 @@ void DeleteFile(string path) } } - IEnumerable<(string ItemType, string FullPath, string RelativePath)> FindIncludedItems() + void CopyIncludedItems(List<(string ItemType, string FullPath, string RelativePath)> items, string outputDirectory) { - string entryPointFileDirectory = PathUtilities.EnsureTrailingSlash(Path.GetDirectoryName(file)!); + foreach (var item in items) + { + string targetItemFullPath = Path.Combine(outputDirectory, item.RelativePath); + + // Ignore already-copied files. + if (File.Exists(targetItemFullPath)) + { + continue; + } + + string targetItemDirectory = Path.GetDirectoryName(targetItemFullPath)!; + CreateDirectory(targetItemDirectory); + + if (item.ItemType == "Compile") + { + if (_dryRun) + { + Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldCopyFile, item.FullPath, targetItemFullPath); + Reporter.Output.WriteLine(CliCommandStrings.ProjectConvertWouldConvertFile, targetItemFullPath); + } + else + { + var sourceFile = SourceFile.Load(item.FullPath); + VirtualProjectBuildingCommand.RemoveDirectivesFromFile(sourceFile, targetItemFullPath); + } + } + else + { + CopyFile(item.FullPath, targetItemFullPath); + } + } + } + + void ConvertReferencedFiles(ImmutableArray directives, string sourceDirectory) + { + foreach (var directive in directives) + { + if (directive is not CSharpDirective.Ref refDirective) + { + continue; + } + + var refPath = refDirective.ResolvedPath ?? Path.GetFullPath(Path.Combine(sourceDirectory, refDirective.Name.Replace('\\', '/'))); + + if (!convertedRefFiles.Add(refPath)) + { + continue; + } + + var refName = Path.GetFileNameWithoutExtension(refPath); + var refDir = Path.GetDirectoryName(refPath)!; + var refTargetDirectory = Path.Combine(targetDirectory, refName); + + var (refBuilder, refProjectInstance, refEvaluatedDirectives) = ConvertFile(refPath, refTargetDirectory, isEntryPointFile: false); + + // Copy included items (e.g., default Content items) for the referenced file. + var items = FindIncludedItems(refBuilder, refProjectInstance, refPath).ToList(); + CopyIncludedItems(items, refTargetDirectory); + refIncludeItems.AddRange(items); + + // Recursively convert referenced files in the referenced file. + ConvertReferencedFiles(refEvaluatedDirectives, refDir); + } + } + + void ValidateRefTargetDirectories(ImmutableArray directives, string sourceDirectory, HashSet visited, HashSet usedFolderNames) + { + foreach (var directive in directives) + { + if (directive is not CSharpDirective.Ref refDirective) + { + continue; + } + + var refPath = refDirective.ResolvedPath ?? Path.GetFullPath(Path.Combine(sourceDirectory, refDirective.Name.Replace('\\', '/'))); + + if (!visited.Add(refPath)) + { + continue; + } + + var refName = Path.GetFileNameWithoutExtension(refPath); + var refDir = Path.GetDirectoryName(refPath)!; + var refTargetDirectory = Path.Combine(targetDirectory, refName); + + if (!usedFolderNames.Add(refName)) + { + throw new GracefulException(CliCommandStrings.ProjectConvertDuplicateRefFolderName, refTargetDirectory); + } + + if (Directory.Exists(refTargetDirectory)) + { + throw new GracefulException(CliCommandStrings.DirectoryAlreadyExists, refTargetDirectory); + } + + // Recursively validate transitive refs. + var refBuilder = new VirtualProjectBuilder(refPath, VirtualProjectBuildingCommand.TargetFramework); + refBuilder.CreateProjectInstance( + projectCollection, + VirtualProjectBuildingCommand.ThrowingReporter, + project: out _, + projectRootElement: out _, + out var refDirectives, + validateAllDirectives: !_force); + ValidateRefTargetDirectories(refDirectives, refDir, visited, usedFolderNames); + } + } + + IEnumerable<(string ItemType, string FullPath, string RelativePath)> FindIncludedItems( + VirtualProjectBuilder fileBuilder, ProjectInstance fileProjectInstance, string sourceFile) + { + string sourceFileDirectory = PathUtilities.EnsureTrailingSlash(Path.GetDirectoryName(sourceFile)!); // Include only items we know are files. - var mapping = builder.GetItemMapping(projectInstance, VirtualProjectBuildingCommand.ThrowingReporter); + var mapping = fileBuilder.GetItemMapping(fileProjectInstance, VirtualProjectBuildingCommand.ThrowingReporter); - var items = mapping.SelectMany(e => projectInstance.GetItems(e.ItemType)); + var items = mapping.SelectMany(e => fileProjectInstance.GetItems(e.ItemType)); var topLevelFileNames = new HashSet(StringComparer.OrdinalIgnoreCase); @@ -203,7 +345,7 @@ void DeleteFile(string path) continue; } - string itemFullPath = Path.GetFullPath(path: item.GetMetadataValue("FullPath"), basePath: entryPointFileDirectory); + string itemFullPath = Path.GetFullPath(path: item.GetMetadataValue("FullPath"), basePath: sourceFileDirectory); // Exclude items that do not exist. if (!File.Exists(itemFullPath)) @@ -211,7 +353,7 @@ void DeleteFile(string path) continue; } - string itemRelativePath = Path.GetRelativePath(relativeTo: entryPointFileDirectory, path: itemFullPath); + string itemRelativePath = Path.GetRelativePath(relativeTo: sourceFileDirectory, path: itemFullPath); // Files outside the source directory should be copied into the target directory at the top level. // Possibly with a number suffix to avoid conflicts. @@ -241,16 +383,17 @@ void DeleteFile(string path) } } - string? DetermineUserSecretsId() + string? DetermineUserSecretsId(ProjectInstance projectInstance) { var implicitValue = projectInstance.GetPropertyValue("_ImplicitFileBasedProgramUserSecretsId"); var actualValue = projectInstance.GetPropertyValue("UserSecretsId"); return implicitValue == actualValue ? actualValue : null; } - ImmutableArray UpdateDirectives(ImmutableArray directives) + ImmutableArray UpdateDirectives(ImmutableArray directives, string? sourceDirectory = null, string? outputDirectory = null) { - var sourceDirectory = Path.GetDirectoryName(file)!; + sourceDirectory ??= Path.GetDirectoryName(file)!; + outputDirectory ??= targetDirectory; var result = ImmutableArray.CreateBuilder(directives.Length); @@ -282,7 +425,7 @@ ImmutableArray UpdateDirectives(ImmutableArray // The `OriginalName` is absolute if there are no `$(..)` vars at the start. if (!Path.IsPathFullyQualified(project.OriginalName)) { - project = project.WithName(Path.GetRelativePath(relativeTo: targetDirectory, path: project.Name), CSharpDirective.Project.NameKind.Final); + project = project.WithName(Path.GetRelativePath(relativeTo: outputDirectory, path: project.Name), CSharpDirective.Project.NameKind.Final); result.Add(project); continue; } @@ -296,18 +439,36 @@ ImmutableArray UpdateDirectives(ImmutableArray project = project.WithName(Path.Join(project.OriginalName, projectFileName), CSharpDirective.Project.NameKind.Final); } - project = project.WithName(Path.GetRelativePath(relativeTo: targetDirectory, path: Path.Combine(sourceDirectory, project.Name)), CSharpDirective.Project.NameKind.Final); + project = project.WithName(Path.GetRelativePath(relativeTo: outputDirectory, path: Path.Combine(sourceDirectory, project.Name)), CSharpDirective.Project.NameKind.Final); result.Add(project); continue; } + // Convert #:ref directives to #:project directives pointing to the referenced file's + // expected converted project location (i.e., subfolder of the output directory named after the .cs file). + if (directive is CSharpDirective.Ref refDirective) + { + var refPath = refDirective.ResolvedPath ?? Path.GetFullPath(Path.Combine(sourceDirectory, refDirective.Name.Replace('\\', '/'))); + var refName = Path.GetFileNameWithoutExtension(refPath); + + // The referenced file's converted project is expected at: //.csproj + var convertedProjectPath = Path.Combine(targetDirectory, refName, refName + ".csproj"); + var relativePath = Path.GetRelativePath(relativeTo: outputDirectory, path: convertedProjectPath); + + result.Add(new CSharpDirective.Project(refDirective.Info, relativePath) + { + OriginalName = refDirective.OriginalName, + }); + continue; + } + result.Add(directive); } return result.DrainToImmutable(); } - IEnumerable<(string name, string value)> GetDefaultProperties() + IEnumerable<(string name, string value)> GetDefaultProperties(ProjectInstance projectInstance) { foreach (var (name, defaultValue) in VirtualProjectBuilder.GetDefaultProperties(VirtualProjectBuildingCommand.TargetFramework)) { @@ -375,7 +536,7 @@ private string DetermineOutputDirectory(string file) return targetDirectory; } - private bool TryAskForDeleteSource(string sourceFile) + private bool TryAskForDeleteSource() { if (!_interactive) { diff --git a/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs b/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs index 0d8ea09da7ac..f3a9ef6eacab 100644 --- a/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs +++ b/src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs @@ -118,6 +118,13 @@ internal sealed class VirtualProjectBuildingCommand : CommandBase public VirtualProjectBuilder Builder { get; } public MSBuildArgs MSBuildArgs { get; } + /// + /// Keeps strong references to s created for #:ref directives, + /// preventing their s from being garbage collected + /// (same reason as VirtualProjectBuilder._projectRootElement). + /// + private readonly List _referencedBuilders = []; + public ImmutableArray Directives { get @@ -526,6 +533,12 @@ bool CanSaveCache(ProjectInstance projectInstance) return false; } + if (EvaluatedDirectives.Any(static d => d is CSharpDirective.Ref)) + { + Reporter.Verbose.WriteLine("Not saving cache because there is a ref directive."); + return false; + } + if (EvaluatedDirectives.Any(static d => d is CSharpDirective.IncludeOrExclude { Kind: CSharpDirective.IncludeOrExcludeKind.Include } includeDirective && includeDirective.Name.AsSpan().ContainsAny('*', '?'))) @@ -756,9 +769,9 @@ public bool DetermineFinalCanReuseAuxiliaryFiles() /// private CacheInfo? ComputeCacheEntry() { - if (Directives.Any(static d => d is CSharpDirective.Project)) + if (Directives.Any(static d => d is CSharpDirective.Project or CSharpDirective.Ref)) { - Reporter.Verbose.WriteLine("Skipping computing cache because there are project directives."); + Reporter.Verbose.WriteLine("Skipping computing cache because there are project or ref directives."); return null; } @@ -1177,9 +1190,68 @@ public ProjectInstance CreateProjectInstance(ProjectCollection projectCollection EvaluatedDirectives = evaluatedDirectives; + // Create virtual ProjectRootElements for all #:ref directives so MSBuild can resolve them. + CreateReferencedVirtualProjects(projectCollection, evaluatedDirectives); + return project; } + /// + /// Recursively creates virtual s for all #:ref directives + /// in the given (and transitively in referenced files). + /// The s are registered in the 's + /// ProjectRootElementCache so MSBuild can resolve <ProjectReference> items to them. + /// + private void CreateReferencedVirtualProjects( + ProjectCollection projectCollection, + ImmutableArray directives) + { + var processedFiles = new HashSet(StringComparer.OrdinalIgnoreCase) { Builder.EntryPointFileFullPath }; + CreateReferencedVirtualProjectsCore(projectCollection, directives, processedFiles, _referencedBuilders); + + static void CreateReferencedVirtualProjectsCore( + ProjectCollection projectCollection, + ImmutableArray directives, + HashSet processedFiles, + List referencedBuilders) + { + foreach (var refDirective in directives.OfType()) + { + // ResolvedPath is always set when using ThrowingReporter (EnsureResolvedPath throws on error). + Debug.Assert(refDirective.ResolvedPath is not null); + + if (refDirective.ResolvedPath is not { } resolvedPath) + { + continue; + } + + if (!processedFiles.Add(resolvedPath)) + { + // Already processed or cycle detected. + continue; + } + + var refBuilder = new VirtualProjectBuilder( + resolvedPath, + TargetFramework); + + refBuilder.CreateProjectInstance( + projectCollection, + ThrowingReporter, + project: out _, + projectRootElement: out _, + out var refEvaluatedDirectives); + + // Keep a strong reference to prevent GC from collecting the ProjectRootElement + // after MSBuild's ProjectRootElementCache demotes it to a weak reference. + referencedBuilders.Add(refBuilder); + + // Recursively create virtual projects for any #:ref in the referenced file. + CreateReferencedVirtualProjectsCore(projectCollection, refEvaluatedDirectives, processedFiles, referencedBuilders); + } + } + } + /// /// Creates a temporary subdirectory for file-based apps. /// Use to obtain the path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf index 5b25a0b4082e..2f5d8f197eba 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf @@ -1256,6 +1256,11 @@ Nástroj {1} (verze {2}) se úspěšně nainstaloval. Do souboru manifestu {3} s Odstraněný zdrojový soubor: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Zkušební spuštění: odebere direktivy na úrovni souboru ze souboru: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf index 6013df11d21e..67d8a75d1641 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf @@ -1256,6 +1256,11 @@ Das Tool "{1}" (Version {2}) wurde erfolgreich installiert. Der Eintrag wird der Quelldatei gelöscht: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Probelauf. Anweisungen auf Dateiebene würden aus Datei entfernt: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf index 808fabcec6f5..a7784fbe6057 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf @@ -1256,6 +1256,11 @@ La herramienta "{1}" (versión "{2}") se instaló correctamente. Se ha agregado Archivo de origen eliminado: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Simulación: se eliminarían las directivas a nivel de archivo del archivo {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf index 7298d1c4f990..173b8a464603 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf @@ -1256,6 +1256,11 @@ L'outil '{1}' (version '{2}') a été correctement installé. L'entrée est ajou Fichier source supprimé : {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Test à blanc : supprimerait les directives de niveau fichier du fichier : {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf index 7ff173c7450f..a4ecc79c41ba 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf @@ -1256,6 +1256,11 @@ Lo strumento '{1}' versione '{2}' è stato installato. La voce è stata aggiunta File di origine eliminato: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Esecuzione di prova: rimuoverebbe le direttive a livello di file dal file: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index 9af952478d44..857e8e4e459a 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 削除されたソース ファイル: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} ドライ ラン: ファイルからファイル レベルのディレクティブを削除します: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf index f5a085361b43..da738b37cbe7 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 원본 파일을 삭제함: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} 시험 실행: 파일에서 파일 수준 지시문을 제거합니다. {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf index 68ff0ba7942d..da4ba95c1ea4 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf @@ -1256,6 +1256,11 @@ Narzędzie „{1}” (wersja „{2}”) zostało pomyślnie zainstalowane. Wpis Usunięto plik źródłowy: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Przebieg próbny: spowoduje usunięcie dyrektyw na poziomie pliku z pliku: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf index 3cee39fa42fa..426840b2d695 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf @@ -1256,6 +1256,11 @@ A ferramenta '{1}' (versão '{2}') foi instalada com êxito. A entrada foi adici Arquivo de origem excluído: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Execução de teste: diretivas de nível de arquivo a serem removidas do arquivo: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index 4c2f8b799955..47a36ac13072 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Исходный файл удален: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Пробный прогон: будут удалены директивы на уровне файла из файла: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf index f2cbb5075f24..a702754d4ca1 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Kaynak dosya silindi: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Deneme çalıştırması: dosya düzeyindeki yönergeleri şu dosyadan kaldırıyor: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf index c851f5d272b1..97f4b9fe46cf 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 已删除的源文件: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} 试运行: 将从文件 {0} 中移除文件级指令 diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf index a70f1ca045af..c3c7ed0d05c9 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 已刪除來源檔案: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} 試執行: 將從檔案移除檔案層級指示詞: {0} diff --git a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs index c8fb09c95f28..78ffdbcbf176 100644 --- a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs +++ b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs @@ -199,7 +199,7 @@ private ImmutableArray EvaluateDirectives( ImmutableArray directives, ErrorReporter reportError) { - if (!directives.Any(static d => d is CSharpDirective.Project or CSharpDirective.IncludeOrExclude)) + if (!directives.Any(static d => d is CSharpDirective.Project or CSharpDirective.IncludeOrExclude or CSharpDirective.Ref)) { return directives; } @@ -219,6 +219,13 @@ private ImmutableArray EvaluateDirectives( builder.Add(projectDirective); break; + case CSharpDirective.Ref refDirective: + refDirective = refDirective.WithName(project.ExpandString(refDirective.Name), CSharpDirective.Ref.NameKind.Expanded); + refDirective = refDirective.EnsureResolvedPath(reportError); + + builder.Add(refDirective); + break; + case CSharpDirective.IncludeOrExclude includeOrExcludeDirective: var expandedPath = project.ExpandString(includeOrExcludeDirective.Name); var fullPath = Path.GetFullPath(path: expandedPath, basePath: Path.GetDirectoryName(includeOrExcludeDirective.Info.SourceFile.Path)!); @@ -431,12 +438,18 @@ private void CheckDirectives( ImmutableArray directives, ErrorReporter reportError) { + bool? refEnabled = null; bool? includeEnabled = null; bool? excludeEnabled = null; bool? transitiveEnabled = null; foreach (var directive in directives) { + if (directive is CSharpDirective.Ref) + { + CheckFlagEnabled(ref refEnabled, CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, directive); + } + if (directive is CSharpDirective.IncludeOrExclude includeOrExcludeDirective) { if (includeOrExcludeDirective.Kind == CSharpDirective.IncludeOrExcludeKind.Include) @@ -489,6 +502,7 @@ internal static void WriteProjectFile( var propertyDirectives = directives.OfType(); var packageDirectives = directives.OfType(); var projectDirectives = directives.OfType(); + var refDirectives = directives.OfType(); var includeOrExcludeDirectives = directives.OfType(); const string defaultSdkName = "Microsoft.NET.Sdk"; @@ -736,7 +750,7 @@ internal static void WriteProjectFile( """); } - if (projectDirectives.Any()) + if (projectDirectives.Any() || refDirectives.Any()) { writer.WriteLine(""" @@ -751,6 +765,19 @@ internal static void WriteProjectFile( processedDirectives++; } + foreach (var refDirective in refDirectives) + { + if (refDirective.ResolvedPath is not null) + { + var virtualProjectPath = GetVirtualProjectPath(refDirective.ResolvedPath); + writer.WriteLine($""" + + """); + } + + processedDirectives++; + } + writer.WriteLine(""" diff --git a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs index 3bb43deb767c..c0e03300da4e 100644 --- a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs +++ b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs @@ -203,6 +203,458 @@ public static void M() """); } + [Fact] + public void RefDirective() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet(string name) => $"Hello, {name}!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + Console.WriteLine(MyLib.Greeter.Greet("World")); + """); + + var expectedOutput = "Hello, World!"; + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + var outputDirFullPath = Path.Join(testInstance.Path, "Project"); + new DotnetCommand(Log, "project", "convert", "app.cs", "-o", outputDirFullPath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // #:ref lib.cs should become a ProjectReference to ../lib/lib.csproj + File.ReadAllText(Path.Join(outputDirFullPath, "app", "app.csproj")) + .Should().Contain($""" + + """); + + // The referenced library should have been converted too. + var libProjectDir = Path.Join(outputDirFullPath, "lib"); + File.Exists(Path.Join(libProjectDir, "lib.csproj")).Should().BeTrue(); + File.Exists(Path.Join(libProjectDir, "lib.cs")).Should().BeTrue(); + File.ReadAllText(Path.Join(libProjectDir, "lib.csproj")) + .Should().Contain("Library"); + + // The converted project should build and produce the same output. + new DotnetCommand(Log, "run") + .WithWorkingDirectory(Path.Join(outputDirFullPath, "app")) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + } + + [Fact] + public void RefDirective_Transitive_Convert() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib2.cs"), """ + #:property OutputType=Library + namespace Lib2; + public static class Helper + { + public static string Get() => "from lib2"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib1.cs"), """ + #:property OutputType=Library + #:ref lib2.cs + namespace Lib1; + public static class Facade + { + public static string Get() => $"from lib1 and {Lib2.Helper.Get()}"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib1.cs + Console.WriteLine(Lib1.Facade.Get()); + """); + + var expectedOutput = "from lib1 and from lib2"; + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + var outputDirFullPath = Path.Join(testInstance.Path, "Project"); + new DotnetCommand(Log, "project", "convert", "app.cs", "-o", outputDirFullPath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // All three projects should exist. + File.Exists(Path.Join(outputDirFullPath, "app", "app.csproj")).Should().BeTrue(); + File.Exists(Path.Join(outputDirFullPath, "lib1", "lib1.csproj")).Should().BeTrue(); + File.Exists(Path.Join(outputDirFullPath, "lib2", "lib2.csproj")).Should().BeTrue(); + + // lib1.csproj should reference lib2. + File.ReadAllText(Path.Join(outputDirFullPath, "lib1", "lib1.csproj")) + .Should().Contain($""" + + """); + + // The converted project should build and produce the same output. + new DotnetCommand(Log, "run") + .WithWorkingDirectory(Path.Join(outputDirFullPath, "app")) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + } + + [Fact] + public void RefDirective_DuplicateFolderName() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + Directory.CreateDirectory(Path.Join(testInstance.Path, "a")); + File.WriteAllText(Path.Join(testInstance.Path, "a", "lib.cs"), """ + #:property OutputType=Library + namespace A; + public static class Lib { public static string Get() => "a"; } + """); + + Directory.CreateDirectory(Path.Join(testInstance.Path, "b")); + File.WriteAllText(Path.Join(testInstance.Path, "b", "lib.cs"), """ + #:property OutputType=Library + namespace B; + public static class Lib { public static string Get() => "b"; } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref a/lib.cs + #:ref b/lib.cs + Console.WriteLine(A.Lib.Get() + B.Lib.Get()); + """); + + var outputDirFullPath = Path.Join(testInstance.Path, "Project"); + var duplicateTargetDirectory = Path.Join(outputDirFullPath, "lib"); + new DotnetCommand(Log, "project", "convert", "app.cs", "-o", outputDirFullPath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format(CliCommandStrings.ProjectConvertDuplicateRefFolderName, duplicateTargetDirectory)); + + // Nothing should have been converted. + Directory.Exists(outputDirFullPath).Should().BeFalse(); + + new DirectoryInfo(testInstance.Path) + .EnumerateFileSystemInfos().Select(d => d.Name).Order() + .Should().BeEquivalentTo(["a", "app.cs", "b", "Directory.Build.props"]); + } + + [Fact] + public void RefDirective_DuplicateFolderName_Transitive() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + // a/lib.cs is referenced by mid.cs + Directory.CreateDirectory(Path.Join(testInstance.Path, "a")); + File.WriteAllText(Path.Join(testInstance.Path, "a", "lib.cs"), """ + #:property OutputType=Library + namespace A; + public static class Lib { public static string Get() => "a"; } + """); + + // mid.cs references a/lib.cs + File.WriteAllText(Path.Join(testInstance.Path, "mid.cs"), """ + #:property OutputType=Library + #:ref a/lib.cs + namespace Mid; + public static class Mid { public static string Get() => A.Lib.Get(); } + """); + + // b/lib.cs would conflict with a/lib.cs (both "lib") + Directory.CreateDirectory(Path.Join(testInstance.Path, "b")); + File.WriteAllText(Path.Join(testInstance.Path, "b", "lib.cs"), """ + #:property OutputType=Library + namespace B; + public static class Lib { public static string Get() => "b"; } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref mid.cs + #:ref b/lib.cs + Console.WriteLine(Mid.Mid.Get() + B.Lib.Get()); + """); + + var outputDirFullPath = Path.Join(testInstance.Path, "Project"); + var duplicateTargetDirectory = Path.Join(outputDirFullPath, "lib"); + new DotnetCommand(Log, "project", "convert", "app.cs", "-o", outputDirFullPath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format(CliCommandStrings.ProjectConvertDuplicateRefFolderName, duplicateTargetDirectory)); + + // Nothing should have been converted. + Directory.Exists(outputDirFullPath).Should().BeFalse(); + } + + [Fact] + public void RefDirective_DuplicateFolderName_ViaInclude() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + true + true + + + """); + + // a/lib.cs is referenced by the app directly + Directory.CreateDirectory(Path.Join(testInstance.Path, "a")); + File.WriteAllText(Path.Join(testInstance.Path, "a", "lib.cs"), """ + #:property OutputType=Library + namespace A; + public static class Lib { public static string Get() => "a"; } + """); + + // b/lib.cs would conflict (same name "lib") - referenced via #:include-d file + Directory.CreateDirectory(Path.Join(testInstance.Path, "b")); + File.WriteAllText(Path.Join(testInstance.Path, "b", "lib.cs"), """ + #:property OutputType=Library + namespace B; + public static class Lib { public static string Get() => "b"; } + """); + + // extra.cs is included and references b/lib.cs + File.WriteAllText(Path.Join(testInstance.Path, "extra.cs"), """ + #:ref b/lib.cs + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref a/lib.cs + #:include extra.cs + Console.WriteLine(A.Lib.Get() + B.Lib.Get()); + """); + + var outputDirFullPath = Path.Join(testInstance.Path, "Project"); + var duplicateTargetDirectory = Path.Join(outputDirFullPath, "lib"); + new DotnetCommand(Log, "project", "convert", "app.cs", "-o", outputDirFullPath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format(CliCommandStrings.ProjectConvertDuplicateRefFolderName, duplicateTargetDirectory)); + + // Nothing should have been converted. + Directory.Exists(outputDirFullPath).Should().BeFalse(); + } + + /// + /// Verifies that default items (e.g., appsettings.json) in a #:ref'd file's directory + /// are copied to the converted project output directory. + /// + [Fact] + public void RefDirective_IncludedItemsCopied() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + var libDir = Path.Join(testInstance.Path, "lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "mylib.cs"), """ + #:property OutputType=Library + #:property EnableDefaultNoneItems=true + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + // A non-code file next to the library that should be picked up as a default item. + File.WriteAllText(Path.Join(libDir, "data.json"), """{ "key": "value" }"""); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib/mylib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + var outputDirFullPath = Path.Join(testInstance.Path, "Project"); + new DotnetCommand(Log, "project", "convert", "app.cs", "-o", outputDirFullPath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // The library's included item (data.json) should be copied to the ref output directory. + var libOutputDir = Path.Join(outputDirFullPath, "mylib"); + File.Exists(Path.Join(libOutputDir, "mylib.cs")).Should().BeTrue(); + File.Exists(Path.Join(libOutputDir, "mylib.csproj")).Should().BeTrue(); + File.Exists(Path.Join(libOutputDir, "data.json")).Should().BeTrue(); + } + + /// + /// Verifies that --delete-source also deletes included items of #:ref'd files. + /// + [Fact] + public void RefDirective_IncludedItemsDeleted() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + var libDir = Path.Join(testInstance.Path, "lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "mylib.cs"), """ + #:property OutputType=Library + #:property EnableDefaultNoneItems=true + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + File.WriteAllText(Path.Join(libDir, "config.json"), """{ "setting": true }"""); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib/mylib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + var outputDirFullPath = Path.Join(testInstance.Path, "Project"); + new DotnetCommand(Log, "project", "convert", "app.cs", "-o", outputDirFullPath, "--delete-source") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // Source files should be deleted. + File.Exists(Path.Join(testInstance.Path, "app.cs")).Should().BeFalse(); + File.Exists(Path.Join(libDir, "mylib.cs")).Should().BeFalse(); + File.Exists(Path.Join(libDir, "config.json")).Should().BeFalse(); + + // Converted files should exist. + var libOutputDir = Path.Join(outputDirFullPath, "mylib"); + File.Exists(Path.Join(libOutputDir, "mylib.cs")).Should().BeTrue(); + File.Exists(Path.Join(libOutputDir, "mylib.csproj")).Should().BeTrue(); + File.Exists(Path.Join(libOutputDir, "config.json")).Should().BeTrue(); + } + + /// + /// Converting one app that #:refs a library does not affect other apps that also reference the same library. + /// + [Fact] + public void RefDirective_ConvertScope() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app1.cs"), """ + #:ref lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app2.cs"), """ + #:ref lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + var unrelatedDir = Path.Join(testInstance.Path, "unrelated"); + Directory.CreateDirectory(unrelatedDir); + File.WriteAllText(Path.Join(unrelatedDir, "app3.cs"), """ + #:ref ../lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + var outputDirFullPath = Path.Join(testInstance.Path, "Project"); + new DotnetCommand(Log, "project", "convert", "app1.cs", "-o", outputDirFullPath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // app1 should be converted. + File.Exists(Path.Join(outputDirFullPath, "app1", "app1.csproj")).Should().BeTrue(); + File.Exists(Path.Join(outputDirFullPath, "lib", "lib.csproj")).Should().BeTrue(); + + // app2 and app3 should be unaffected (still exist as .cs files with their directives intact). + File.ReadAllText(Path.Join(testInstance.Path, "app2.cs")).Should().Contain("#:ref lib.cs"); + File.ReadAllText(Path.Join(unrelatedDir, "app3.cs")).Should().Contain("#:ref ../lib.cs"); + } + [Fact] public void ProjectReference_FullPath_WithVars() { diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index baa1adcd74e7..44356531c095 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -147,6 +147,24 @@ internal static string DirectiveError(string path, int line, string messageForma return $"{path}({line}): {FileBasedProgramsResources.DirectiveError}: {string.Format(messageFormat, args)}"; } + private static void EnableRefDirective(TestDirectory testInstance) + { + var propsPath = Path.Join(testInstance.Path, "Directory.Build.props"); + var propsContent = File.Exists(propsPath) ? File.ReadAllText(propsPath) : null; + if (propsContent is not null && propsContent.Contains(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective)) + { + return; + } + + File.WriteAllText(propsPath, $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + } + /// /// dotnet run file.cs succeeds without a project file. /// @@ -588,6 +606,61 @@ public class LibClass .And.HaveStdErrContaining(errorParts[1]); } + /// + /// dotnet run - with #:ref uses $(MSBuildStartupDirectory) to resolve paths. + /// Relative paths don't work from stdin since the file is in an isolated temp directory. + /// Analogous to . + /// + [Fact] + public void ReadFromStdin_RefDirective() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libDir = Path.Join(testInstance.Path, "lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "mylib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello from lib!"; + } + """); + + var appDir = Path.Join(testInstance.Path, "app"); + Directory.CreateDirectory(appDir); + + new DotnetCommand(Log, "run", "-") + .WithWorkingDirectory(appDir) + .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") + .WithStandardInput(""" + #:ref $(MSBuildStartupDirectory)/../lib/mylib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from lib!"); + + // Relative paths are resolved from the isolated temp directory, hence they don't work. + + var errorParts = DirectiveError("app.cs", 1, FileBasedProgramsResources.InvalidRefDirective, + string.Format(FileBasedProgramsResources.CouldNotFindRefFile, "{}")).Split("{}"); + errorParts.Should().HaveCount(2); + + new DotnetCommand(Log, "run", "-") + .WithWorkingDirectory(appDir) + .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") + .WithStandardInput(""" + #:ref ../lib/mylib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(errorParts[0]) + .And.HaveStdErrContaining(errorParts[1]); + } + [Fact] public void ReadFromStdin_NoBuild() { @@ -3113,132 +3186,820 @@ public class LibClass new DotnetCommand(Log, "run", "App/Program.cs") .WithWorkingDirectory(testInstance.Path) .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); + .Should().Pass() + .And.HaveStdOut(expectedOutput); + } + + [Theory] + [InlineData(null)] + [InlineData("app")] + public void ProjectReference_Errors(string? subdir) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var relativeFilePath = Path.Join(subdir, "Program.cs"); + var filePath = Path.Join(testInstance.Path, relativeFilePath); + Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); + File.WriteAllText(filePath, """ + #:project wrong.csproj + """); + + // Project file does not exist. + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "wrong.csproj")))); + + File.WriteAllText(filePath, """ + #:project dir/ + """); + + // Project directory does not exist. + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); + + Directory.CreateDirectory(Path.Join(testInstance.Path, subdir, "dir")); + + // Directory exists but has no project file. + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.CouldNotFindAnyProjectInDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); + + File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj1.csproj"), ""); + File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj2.csproj"), ""); + + // Directory exists but has multiple project files. + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.MoreThanOneProjectInDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); + + // Malformed MSBuild variable syntax. + File.WriteAllText(filePath, """ + #:project $(Test + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "$(Test")))); + } + + [Theory] + [InlineData(null)] + [InlineData("app")] + public void ProjectReference_Duplicate(string? subdir) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var relativeFilePath = Path.Join(subdir, "Program.cs"); + var filePath = Path.Join(testInstance.Path, relativeFilePath); + Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); + Directory.CreateDirectory(Path.Join(testInstance.Path, subdir, "dir")); + File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj1.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + + + """); + + File.WriteAllText(filePath, """ + #:project dir/ + #:project dir/ + Console.WriteLine("Hello"); + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 2, FileBasedProgramsResources.DuplicateDirective, "#:project dir/")); + + File.WriteAllText(filePath, """ + #:project dir/ + #:project dir/proj1.csproj + Console.WriteLine("Hello"); + """); + + // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate project reference + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello"); + + File.WriteAllText(filePath, """ + #:project dir/ + #:project $(MSBuildProjectDirectory)/dir/ + Console.WriteLine("Hello"); + """); + + // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate project reference + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello"); + } + + [Fact] + public void RefDirective() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet(string name) => $"Hello, {name}!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + Console.WriteLine(MyLib.Greeter.Greet("World")); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, World!"); + } + + [Fact] + public void RefDirective_Subdirectory() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + var libDir = Path.Join(testInstance.Path, "lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "mylib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet(string name) => $"Hello, {name}!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib/mylib.cs + Console.WriteLine(MyLib.Greeter.Greet("World")); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, World!"); + } + + /// + /// Analogous to but for #:ref. + /// + [Theory] + [InlineData(null)] + [InlineData("app")] + public void RefDirective_Errors(string? subdir) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + var relativeFilePath = Path.Join(subdir, "Program.cs"); + var filePath = Path.Join(testInstance.Path, relativeFilePath); + Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); + + // Missing name. + File.WriteAllText(filePath, """ + #:ref + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.MissingDirectiveName, "ref")); + + // File does not exist. + File.WriteAllText(filePath, """ + #:ref nonexistent.cs + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidRefDirective, + string.Format(FileBasedProgramsResources.CouldNotFindRefFile, Path.Join(testInstance.Path, subdir, "nonexistent.cs")))); + } + + /// + /// Verifies that #:ref produces a metadata (assembly) reference, + /// meaning internal members are not accessible unless InternalsVisibleTo is used. + /// + [Fact] + public void RefDirective_InternalsNotAccessible() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class PublicClass + { + public static string PublicMethod() => "public"; + internal static string InternalMethod() => "internal"; + } + internal static class InternalClass + { + public static string Method() => "internal class"; + } + """); + + // Accessing internal member should fail. + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + Console.WriteLine(MyLib.PublicClass.InternalMethod()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error CS"); + + // Accessing public member should succeed. + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + Console.WriteLine(MyLib.PublicClass.PublicMethod()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("public"); + } + + /// + /// Verifies transitive #:ref references work: app.cs → lib1.cs → lib2.cs. + /// + [Fact] + public void RefDirective_Transitive() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib2.cs"), """ + #:property OutputType=Library + namespace Lib2; + public static class Base + { + public static string Value() => "from lib2"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib1.cs"), """ + #:property OutputType=Library + #:ref lib2.cs + namespace Lib1; + public static class Middle + { + public static string Value() => $"from lib1 and {Lib2.Base.Value()}"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib1.cs + Console.WriteLine(Lib1.Middle.Value()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("from lib1 and from lib2"); + } + + /// + /// #:ref with various path formats (forward slashes, backslashes, MSBuild properties, parent dirs). + /// Analogous to . + /// + [Theory] + [InlineData("../Lib/lib.cs")] + [InlineData(@"..\Lib\lib.cs")] + [InlineData("$(MSBuildProjectDirectory)/../$(LibDirName)/lib.cs")] + [InlineData(@"$(MSBuildProjectDirectory)\..\Lib\lib.cs")] + public void RefDirective_PathFormats(string arg) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + var libDir = Path.Join(testInstance.Path, "Lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet(string name) => $"Hello, {name}!"; + } + """); + + var appDir = Path.Join(testInstance.Path, "App"); + Directory.CreateDirectory(appDir); + + File.WriteAllText(Path.Join(appDir, "app.cs"), $""" + #:ref {arg} + #:property LibDirName=Lib + Console.WriteLine(MyLib.Greeter.Greet("World")); + """); + + var expectedOutput = "Hello, World!"; + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(appDir) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + // Running from a different working directory shouldn't affect handling of the relative paths. + new DotnetCommand(Log, "run", "App/app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + } + + /// + /// #:ref duplicate detection. + /// Analogous to . + /// + [Theory] + [InlineData(null)] + [InlineData("app")] + public void RefDirective_Duplicate(string? subdir) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + var relativeFilePath = Path.Join(subdir, "Program.cs"); + var filePath = Path.Join(testInstance.Path, relativeFilePath); + Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); + + File.WriteAllText(Path.Join(testInstance.Path, subdir, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + File.WriteAllText(filePath, """ + #:ref lib.cs + #:ref lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 2, FileBasedProgramsResources.DuplicateDirective, "#:ref lib.cs")); + + File.WriteAllText(filePath, """ + #:ref lib.cs + #:ref ./lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate ref + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello!"); + + File.WriteAllText(filePath, """ + #:ref lib.cs + #:ref $(MSBuildProjectDirectory)/lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate ref + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello!"); + } + + /// + /// #:ref is an experimental feature that must be opted into. + /// Analogous to . + /// + [Fact] + public void RefDirective_FeatureFlag() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libPath = Path.Join(testInstance.Path, "lib.cs"); + File.WriteAllText(libPath, """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, """ + #:ref lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr($""" + {DirectiveError(programPath, 1, Resources.ExperimentalFeatureDisabled, CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective)} + + {CliCommandStrings.RunCommandException} + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello!"); + } + + /// + /// Combining #:ref and #:include in the same file-based app. + /// + [Fact] + public void RefDirective_WithInclude() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective}>true + + + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #!/usr/bin/env dotnet + #:property OutputType=Library + #:include LibHelper.cs + #:include LibFormatter.cs + namespace MyLib; + public static class Greeter + { + public static string Greet(string name) => LibFormatter.Format(LibHelper.Prefix, name); + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "LibHelper.cs"), """ + namespace MyLib; + public static class LibHelper + { + public static string Prefix => "Hello"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "LibFormatter.cs"), """ + namespace MyLib; + public static class LibFormatter + { + public static string Format(string prefix, string name) => $"{prefix}, {name}!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), """ + static class Util + { + public static string GetName() => "World"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #!/usr/bin/env dotnet + #:ref lib.cs + #:include Util.cs + Console.WriteLine(MyLib.Greeter.Greet(Util.GetName())); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, World!"); + } + + /// + /// A #:ref library can target a different framework (e.g., netstandard2.0) + /// than the referencing app (net10.0). + /// + [Fact] + public void RefDirective_DifferentTargetFramework() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + #:property TargetFramework=netstandard2.0 + #:property LangVersion=latest + #:property ImplicitUsings=disable + #:property PublishAot=false + namespace MyLib; + public static class Greeter + { + #if NETSTANDARD2_0 + public static string Greet() => "Hello from netstandard2.0!"; + #else + public static string Greet() => "Hello from other!"; + #endif + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + #if NET10_0_OR_GREATER + Console.WriteLine("App is net10.0+: " + MyLib.Greeter.Greet()); + #else + Console.WriteLine("App is older: " + MyLib.Greeter.Greet()); + #endif + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("App is net10.0+: Hello from netstandard2.0!"); + } + + /// + /// #:ref *.cs does not expand globs — it looks for a literal file named *.cs. + /// + [Fact] + public void RefDirective_Glob() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + var filePath = Path.Join(testInstance.Path, "app.cs"); + File.WriteAllText(filePath, """ + #:ref *.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidRefDirective, + string.Format(FileBasedProgramsResources.CouldNotFindRefFile, Path.Join(testInstance.Path, "*.cs")))); } - [Theory] - [InlineData(null)] - [InlineData("app")] - public void ProjectReference_Errors(string? subdir) + /// + /// Verifies that cyclic #:ref references (lib1 → lib2 → lib1) do not cause an infinite loop. + /// + [Fact] + public void RefDirective_Cycle() { var testInstance = _testAssetsManager.CreateTestDirectory(); - var relativeFilePath = Path.Join(subdir, "Program.cs"); - var filePath = Path.Join(testInstance.Path, relativeFilePath); - Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); - File.WriteAllText(filePath, """ - #:project wrong.csproj + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib1.cs"), """ + #:property OutputType=Library + #:ref lib2.cs + namespace Lib1; + public static class C1 { public static string Get() => "lib1"; } """); - // Project file does not exist. - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "wrong.csproj")))); + File.WriteAllText(Path.Join(testInstance.Path, "lib2.cs"), """ + #:property OutputType=Library + #:ref lib1.cs + namespace Lib2; + public static class C2 { public static string Get() => "lib2"; } + """); - File.WriteAllText(filePath, """ - #:project dir/ + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib1.cs + Console.WriteLine(Lib1.C1.Get()); """); - // Project directory does not exist. - new DotnetCommand(Log, "run", relativeFilePath) + // Should not hang. The cycle is broken by processedFiles deduplication. + // error NU1108: Cycle detected. + // error NU1108: lib1 -> lib2 -> lib1. + new DotnetCommand(Log, "run", "app.cs") .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); + .And.HaveStdOutContaining("error NU1108"); + } - Directory.CreateDirectory(Path.Join(testInstance.Path, subdir, "dir")); + /// + /// Two #:include'd files each have #:ref to the same library. + /// The deduplication via processedFiles should ensure the library is only processed once. + /// + [Fact] + public void RefDirective_DuplicateRefFromIncludedFiles() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); - // Directory exists but has no project file. - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.CouldNotFindAnyProjectInDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective}>true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true + + + """); - File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj1.csproj"), ""); - File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj2.csproj"), ""); + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); - // Directory exists but has multiple project files. - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.MoreThanOneProjectInDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); + File.WriteAllText(Path.Join(testInstance.Path, "helper1.cs"), """ + #:ref lib.cs + static class Helper1 + { + public static string Get() => MyLib.Greeter.Greet(); + } + """); - // Malformed MSBuild variable syntax. - File.WriteAllText(filePath, """ - #:project $(Test + File.WriteAllText(Path.Join(testInstance.Path, "helper2.cs"), """ + #:ref lib.cs + static class Helper2 + { + public static string Get() => MyLib.Greeter.Greet(); + } """); - new DotnetCommand(Log, "run", relativeFilePath) + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #!/usr/bin/env dotnet + #:include helper1.cs + #:include helper2.cs + Console.WriteLine(Helper1.Get() + " " + Helper2.Get()); + """); + + new DotnetCommand(Log, "run", "app.cs") .WithWorkingDirectory(testInstance.Path) .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "$(Test")))); + .Should().Pass() + .And.HaveStdOut("Hello! Hello!"); } - [Theory] - [InlineData(null)] - [InlineData("app")] - public void ProjectReference_Duplicate(string? subdir) + /// + /// Two #:include'd files in different directories each have #:ref to the same library + /// using different relative paths. Deduplication via processedFiles uses the resolved (absolute) path, + /// so the library is only processed once. + /// + [Fact] + public void RefDirective_DuplicateRefFromIncludedFiles_Subdirectories() { var testInstance = _testAssetsManager.CreateTestDirectory(); - var relativeFilePath = Path.Join(subdir, "Program.cs"); - var filePath = Path.Join(testInstance.Path, relativeFilePath); - Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); - Directory.CreateDirectory(Path.Join(testInstance.Path, subdir, "dir")); - File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj1.csproj"), $""" - + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + - {ToolsetInfo.CurrentTargetFramework} + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective}>true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true """); - File.WriteAllText(filePath, """ - #:project dir/ - #:project dir/ - Console.WriteLine("Hello"); + // lib.cs is in the root directory. + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } """); - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 2, FileBasedProgramsResources.DuplicateDirective, "#:project dir/")); + // helper1.cs is in sub1/, refers to lib.cs via ../lib.cs. + var sub1 = Path.Join(testInstance.Path, "sub1"); + Directory.CreateDirectory(sub1); + File.WriteAllText(Path.Join(sub1, "helper1.cs"), """ + #:ref ../lib.cs + static class Helper1 + { + public static string Get() => MyLib.Greeter.Greet(); + } + """); - File.WriteAllText(filePath, """ - #:project dir/ - #:project dir/proj1.csproj - Console.WriteLine("Hello"); + // helper2.cs is in sub2/nested/, refers to lib.cs via ../../lib.cs (different relative path, same resolved path). + var sub2 = Path.Join(testInstance.Path, "sub2", "nested"); + Directory.CreateDirectory(sub2); + File.WriteAllText(Path.Join(sub2, "helper2.cs"), """ + #:ref ../../lib.cs + static class Helper2 + { + public static string Get() => MyLib.Greeter.Greet(); + } """); - // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate project reference - new DotnetCommand(Log, "run", relativeFilePath) + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #!/usr/bin/env dotnet + #:include sub1/helper1.cs + #:include sub2/nested/helper2.cs + Console.WriteLine(Helper1.Get() + " " + Helper2.Get()); + """); + + new DotnetCommand(Log, "run", "app.cs") .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Pass() - .And.HaveStdOut("Hello"); + .And.HaveStdOut("Hello! Hello!"); + } - File.WriteAllText(filePath, """ - #:project dir/ - #:project $(MSBuildProjectDirectory)/dir/ - Console.WriteLine("Hello"); + /// + /// Both #:include and #:ref pointing at the same file. + /// The file ends up both compiled into the current assembly and referenced as a separate assembly. + /// This is expected to produce a compilation error (duplicate type definitions). + /// + [Fact] + public void RefDirective_IncludeAndRefSameFile() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective}>true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true + + """); - // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate project reference - new DotnetCommand(Log, "run", relativeFilePath) + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + #:include lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + // The #:include brings in lib.cs's #:property OutputType=Library, making the app a library. + // error CS8805: Program using top-level statements must be an executable. + new DotnetCommand(Log, "run", "app.cs") .WithWorkingDirectory(testInstance.Path) .Execute() - .Should().Pass() - .And.HaveStdOut("Hello"); + .Should().Fail() + .And.HaveStdOutContaining("error CS8805"); } [Theory, CombinatorialData] @@ -4883,6 +5644,50 @@ public class LibClass Build(testInstance, BuildLevel.All, expectedOutput: "v1 Hello from Lib v2", programFileName: programFileName); } + /// + /// optimization currently does not support #:ref references and hence is disabled if those are present. + /// Analogous to . + /// + [Fact] + public void UpToDate_RefDirectives() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + var libPath = Path.Join(testInstance.Path, "lib.cs"); + var libCode = """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "v1"; + } + """; + File.WriteAllText(libPath, libCode); + + var programCode = """ + #:ref lib.cs + Console.WriteLine("Hello " + MyLib.Greeter.Greet()); + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, programCode); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello v1"); + + // We cannot detect changes in referenced files, so we always rebuild. + Build(testInstance, BuildLevel.All, expectedOutput: "Hello v1"); + + libCode = libCode.Replace("v1", "v2"); + File.WriteAllText(libPath, libCode); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello v2"); + } + /// /// optimization considers default items. /// Also tests optimization. @@ -5590,6 +6395,52 @@ public class LibClass Build(testInstance, BuildLevel.All, expectedOutput: "v2 Hello from Lib v2", programFileName: programFileName); } + /// + /// See . + /// This optimization currently does not support #:ref references and hence is disabled if those are present. + /// Analogous to . + /// + [Fact] + public void CscOnly_AfterMSBuild_RefDirectives() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + var libPath = Path.Join(testInstance.Path, "lib.cs"); + var libCode = """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "v1"; + } + """; + File.WriteAllText(libPath, libCode); + + var programCode = """ + #:ref lib.cs + Console.WriteLine("Hello " + MyLib.Greeter.Greet()); + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, programCode); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello v1"); + + programCode = programCode.Replace("Hello", "Hi"); + File.WriteAllText(programPath, programCode); + + libCode = libCode.Replace("v1", "v2"); + File.WriteAllText(libPath, libCode); + + // Cannot use CSC because we cannot detect updates in the referenced file. + Build(testInstance, BuildLevel.All, expectedOutput: "Hi v2"); + } + /// /// See . /// If users have more complex build customizations, they can opt out of the optimization. @@ -6532,4 +7383,59 @@ public void VirtualProject_SurvivesGCDuringRestore() .Should().Pass() .And.HaveStdOut("Hello from virtual project"); } + + /// + /// Same as but for #:ref referenced projects. + /// The referenced project's must also survive GC. + /// + [Fact] + public void VirtualProject_SurvivesGCDuringRestore_RefDirective() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello from ref"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:ref Lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + // Directory.Build.targets that forces GC during restore, + // after SDK imports have already evicted the virtual PRE from the strong cache. + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ + + + + + + + + <_ForceGCTask /> + + + """); + + new DotnetCommand(Log, "run", "--no-cache", "Program.cs") + // A cache size of 1 ensures the virtual PRE is evicted from the strong cache + // as soon as any SDK .targets/.props file is loaded during evaluation. + .WithEnvironmentVariable("MSBUILDPROJECTROOTELEMENTCACHESIZE", "1") + .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from ref"); + } } From c6d77a25fbf4a5e9feaca4ed8c5ab825fc062933 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Wed, 15 Apr 2026 11:36:11 +0200 Subject: [PATCH 149/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2951665 --- src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf | 5 +++++ src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf | 5 +++++ 13 files changed, 65 insertions(+) diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf index 5b25a0b4082e..2f5d8f197eba 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf @@ -1256,6 +1256,11 @@ Nástroj {1} (verze {2}) se úspěšně nainstaloval. Do souboru manifestu {3} s Odstraněný zdrojový soubor: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Zkušební spuštění: odebere direktivy na úrovni souboru ze souboru: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf index 6013df11d21e..67d8a75d1641 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf @@ -1256,6 +1256,11 @@ Das Tool "{1}" (Version {2}) wurde erfolgreich installiert. Der Eintrag wird der Quelldatei gelöscht: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Probelauf. Anweisungen auf Dateiebene würden aus Datei entfernt: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf index 808fabcec6f5..a7784fbe6057 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf @@ -1256,6 +1256,11 @@ La herramienta "{1}" (versión "{2}") se instaló correctamente. Se ha agregado Archivo de origen eliminado: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Simulación: se eliminarían las directivas a nivel de archivo del archivo {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf index 7298d1c4f990..173b8a464603 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf @@ -1256,6 +1256,11 @@ L'outil '{1}' (version '{2}') a été correctement installé. L'entrée est ajou Fichier source supprimé : {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Test à blanc : supprimerait les directives de niveau fichier du fichier : {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf index 7ff173c7450f..a4ecc79c41ba 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf @@ -1256,6 +1256,11 @@ Lo strumento '{1}' versione '{2}' è stato installato. La voce è stata aggiunta File di origine eliminato: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Esecuzione di prova: rimuoverebbe le direttive a livello di file dal file: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index 9af952478d44..857e8e4e459a 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 削除されたソース ファイル: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} ドライ ラン: ファイルからファイル レベルのディレクティブを削除します: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf index f5a085361b43..da738b37cbe7 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 원본 파일을 삭제함: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} 시험 실행: 파일에서 파일 수준 지시문을 제거합니다. {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf index 68ff0ba7942d..da4ba95c1ea4 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf @@ -1256,6 +1256,11 @@ Narzędzie „{1}” (wersja „{2}”) zostało pomyślnie zainstalowane. Wpis Usunięto plik źródłowy: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Przebieg próbny: spowoduje usunięcie dyrektyw na poziomie pliku z pliku: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf index 3cee39fa42fa..426840b2d695 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf @@ -1256,6 +1256,11 @@ A ferramenta '{1}' (versão '{2}') foi instalada com êxito. A entrada foi adici Arquivo de origem excluído: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Execução de teste: diretivas de nível de arquivo a serem removidas do arquivo: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index 4c2f8b799955..47a36ac13072 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Исходный файл удален: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Пробный прогон: будут удалены директивы на уровне файла из файла: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf index f2cbb5075f24..a702754d4ca1 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Kaynak dosya silindi: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} Deneme çalıştırması: dosya düzeyindeki yönergeleri şu dosyadan kaldırıyor: {0} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf index c851f5d272b1..97f4b9fe46cf 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 已删除的源文件: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} 试运行: 将从文件 {0} 中移除文件级指令 diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf index a70f1ca045af..c3c7ed0d05c9 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf @@ -1256,6 +1256,11 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man 已刪除來源檔案: {0} {0} is the source file path. + + Multiple referenced files would be converted into the same directory: '{0}' + Multiple referenced files would be converted into the same directory: '{0}' + {0} is the target directory path. + Dry run: would remove file-level directives from file: {0} 試執行: 將從檔案移除檔案層級指示詞: {0} From 2dfefb1a34113553157de47533b058b32dd26116 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Wed, 15 Apr 2026 11:38:58 +0200 Subject: [PATCH 150/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2951665 --- .../xlf/FileBasedProgramsResources.cs.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.de.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.es.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.fr.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.it.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.ja.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.ko.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.pl.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.pt-BR.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.ru.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.tr.xlf | 10 ++++++++++ 11 files changed, 110 insertions(+) diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf index fccd6ec81449..c7b527bc9754 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf @@ -17,6 +17,11 @@ Nenašel se projekt ani adresář {0}. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error chyba @@ -57,6 +62,11 @@ Direktiva #:project je neplatná: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Chybí název pro: {0}. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf index acfc69549e69..ae85b7a2a9fb 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf @@ -17,6 +17,11 @@ Das Projekt oder Verzeichnis "{0}" wurde nicht gefunden. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error Fehler @@ -57,6 +62,11 @@ Die Anweisung „#:p roject“ ist ungültig: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Fehlender Name der Anweisung „{0}“. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf index 7fcfcf9a443e..99af05fd0a22 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf @@ -17,6 +17,11 @@ No se encuentra el proyecto o directorio "{0}". + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error error @@ -57,6 +62,11 @@ La directiva "#:project" no es válida: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Falta el nombre de "{0}". diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf index 88c34c93ba8a..90add5915dd1 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf @@ -17,6 +17,11 @@ Projet ou répertoire '{0}' introuvable. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error erreur @@ -57,6 +62,11 @@ La directive « #:project » n’est pas valide : {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Nom manquant pour « {0} ». diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf index 655d5b367356..47de1ef37010 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf @@ -17,6 +17,11 @@ Non sono stati trovati progetti o directory `{0}`. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error errore @@ -57,6 +62,11 @@ La direttiva '#:project' non è valida: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Manca il nome di '{0}'. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf index 2d2cc195c23a..573c9be2ff5c 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf @@ -17,6 +17,11 @@ プロジェクトまたはディレクトリ `{0}` が見つかりませんでした。 + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error エラー @@ -57,6 +62,11 @@ '#:p roject' ディレクティブが無効です: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. '{0}' の名前がありません。 diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf index 7082b47f9aa8..b466d59e7a63 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf @@ -17,6 +17,11 @@ 프로젝트 또는 디렉터리 {0}을(를) 찾을 수 없습니다. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error 오류 @@ -57,6 +62,11 @@ '#:p roject' 지시문이 잘못되었습니다. {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. '{0}' 이름이 없습니다. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf index 4cd99b2c63c3..eaf6b0b78253 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf @@ -17,6 +17,11 @@ Nie można odnaleźć projektu ani katalogu „{0}”. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error błąd @@ -57,6 +62,11 @@ Dyrektywa „#:project” jest nieprawidłowa: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Brak nazwy „{0}”. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf index a5ef266abb7e..72cc2e9f3706 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf @@ -17,6 +17,11 @@ Não foi possível encontrar o projeto ou diretório ‘{0}’. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error erro @@ -57,6 +62,11 @@ A diretiva '#:project' é inválida:{0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Nome de '{0}' ausente. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf index 3405fe15916b..5d580c932efe 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf @@ -17,6 +17,11 @@ Не удалось найти проект или каталог "{0}". + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error ошибка @@ -57,6 +62,11 @@ Недопустимая директива "#:project": {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. Отсутствует имя "{0}". diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf index 40ee3f703b98..e64081b711aa 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf @@ -17,6 +17,11 @@ `{0}` projesi veya dizini bulunamadı. + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error hata @@ -57,6 +62,11 @@ ‘#:project’ yönergesi geçersizdir: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. '{0}' adı eksik. From c674bd57cc9c73f009f03fd729a7a6b31f88928d Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Wed, 15 Apr 2026 11:40:20 +0200 Subject: [PATCH 151/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2951665 --- .../xlf/FileBasedProgramsResources.zh-Hans.xlf | 10 ++++++++++ .../xlf/FileBasedProgramsResources.zh-Hant.xlf | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf index b5c92edfd759..bbcefb9f1d7f 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf @@ -17,6 +17,11 @@ 找不到项目或目录“{0}”。 + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error 错误 @@ -57,6 +62,11 @@ '#:project' 指令无效: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. 缺少 '{0}' 的名称。 diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf index d65f38fe59f2..ecfe1971bf1c 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf @@ -17,6 +17,11 @@ 找不到專案或目錄 `{0}`。 + + Could not find file '{0}'. + Could not find file '{0}'. + {0} is the file path. + error 錯誤 @@ -57,6 +62,11 @@ '#:project' 指示詞無效: {0} {0} is the inner error message. + + The '#:ref' directive is invalid: {0} + The '#:ref' directive is invalid: {0} + {Locked="#:ref"}{0} is the inner error message. + Missing name of '{0}'. 缺少 '{0}' 的名稱。 From 5e98323b619a8618744e76c47847908f5aadd755 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 17:58:52 +0000 Subject: [PATCH 152/230] Reset files to release/10.0.3xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 1 - eng/Version.Details.props | 274 ++++++++++--------- eng/Version.Details.xml | 551 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 425 insertions(+), 407 deletions(-) diff --git a/NuGet.config b/NuGet.config index 612e59b10559..f3f728c95515 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,6 @@ - diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 74e42fd4114f..40b8f31a30ed 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,145 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4-servicing.26119.110 - 10.0.0-preview.26208.102 - 10.0.4 - 10.0.4 - 18.3.3 - 18.3.3-servicing-26208-102 - 7.3.0-rc.20902 - 10.0.202 - 5.3.0-2.26208.102 - 5.3.0-2.26208.102 - 5.3.0-2.26208.102 - 5.3.0-2.26208.102 - 5.3.0-2.26208.102 - 5.3.0-2.26208.102 - 5.3.0-2.26208.102 - 5.3.0-2.26208.102 - 10.0.0-preview.26208.102 - 5.3.0-2.26208.102 - 5.3.0-2.26208.102 - 2.0.0-preview.1.26119.110 - 2.2.4 - 10.0.0-beta.26208.102 - 10.0.0-beta.26208.102 - 10.0.0-beta.26208.102 - 10.0.0-beta.26208.102 - 10.0.0-beta.26208.102 - 10.0.0-beta.26208.102 - 10.0.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.0-beta.26208.102 - 10.0.0-beta.26208.102 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 15.2.202-servicing.26208.102 - 10.0.4 - 5.3.0-2.26208.102 - 5.3.0-2.26208.102 - 10.0.4-servicing.26119.110 - 10.0.4 - 10.0.4 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-preview.26203.106 + 10.0.5 + 10.0.5 + 18.6.0-preview-26203-106 + 18.6.0-preview-26203-106 + 7.6.0-rc.20406 + 10.0.300-alpha.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 10.0.0-preview.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 2.0.0-preview.1.26153.111 + 2.2.5 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5-servicing.26153.111 + 10.0.0-beta.26203.106 + 10.0.0-beta.26203.106 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 15.2.300-servicing.26203.106 + 10.0.5 + 5.6.0-2.26203.106 + 5.6.0-2.26203.106 + 10.0.5-servicing.26153.111 + 10.0.5 + 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26208.102 - 10.0.4-servicing.26119.110 - 18.3.0-release-26208-102 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26208.102 - 10.0.202 - 10.0.202-servicing.26208.102 - 10.0.202 - 10.0.202 - 10.0.202-servicing.26208.102 - 18.3.0-release-26208-102 - 18.3.0-release-26208-102 - 3.2.4 - 10.0.4 - 10.0.4-servicing.26119.110 - 10.0.4 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 7.3.0-rc.20902 - 10.0.4 - 2.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 - 10.0.4 + 10.0.0-preview.26203.106 + 10.0.5-servicing.26153.111 + 18.3.0-release-26203-106 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-alpha.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 10.0.300-preview.26203.106 + 18.3.0-release-26203-106 + 18.3.0-release-26203-106 + 3.2.5 + 10.0.5 + 10.0.5-servicing.26153.111 + 10.0.5 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 7.6.0-rc.20406 + 10.0.5 + 2.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 + 10.0.5 - 2.3.0-preview.26202.5 - 4.3.0-preview.26202.5 + 2.1.0-preview.25571.1 + 4.1.0-preview.25571.1 @@ -190,6 +193,7 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion) $(MicrosoftDeploymentDotNetReleasesPackageVersion) $(MicrosoftDiaSymReaderPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) @@ -201,9 +205,11 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetWebItemTemplates100PackageVersion) $(MicrosoftDotNetWebProjectTemplates100PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) $(MicrosoftExtensionsDependencyModelPackageVersion) $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index ae26dac1d072..d144b971620b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 @@ -68,170 +68,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + + + https://github.com/dotnet/dotnet + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 + + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://github.com/dotnet/dotnet - ca08b17aa41cb6c2cf159f3bb7925210147a9510 + f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/microsoft/testfx - cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://github.com/microsoft/testfx - cc183c7df9aa41b4b27a1cc9d7d6f707ea51f4e3 + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 80d3e14f5e08b4888f464e3cd0d0b2445b63ec46 + a612c2a1056fe3265387ae3ff7c94eba1505caf9 diff --git a/global.json b/global.json index 80afb86eeaec..8fafeae1ec8a 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.201", + "dotnet": "10.0.105", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26208.102", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26208.102", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.106", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.106", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 1e0490028f914c4ae77201392054e480579d0729 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 18:01:46 +0000 Subject: [PATCH 153/230] [release/10.0.1xx] Source code updates from dotnet/dotnet (#53795) [release/10.0.1xx] Source code updates from dotnet/dotnet - Merge branch 'release/10.0.1xx' into darc-release/10.0.1xx-231cc119-a9c8-4e14-95c8-85966c01da9b - Disable C++/CLI tests and skip failing test pending toolset fixes - Disable C++/CLI tests pending v143 toolset fix on VS 2026 Helix (https://github.com/dotnet/sdk/issues/53789) - Disable SourceLinkTests.Cpp pending v143 toolset fix - Skip test failure (https://github.com/dotnet/sdk/issues/53796) Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/68566150-7c0c-4ab1-8d9a-a770a2450fdc Co-authored-by: MiYanni <17788297+MiYanni@users.noreply.github.com> --- NuGet.config | 2 +- eng/Version.Details.props | 262 ++++----- eng/Version.Details.xml | 528 +++++++++--------- eng/Versions.props | 2 +- eng/common/core-templates/job/job.yml | 5 +- .../job/publish-build-assets.yml | 14 +- eng/common/core-templates/jobs/jobs.yml | 5 + .../core-templates/post-build/post-build.yml | 105 +++- .../post-build/setup-maestro-vars.yml | 5 +- .../steps/component-governance.yml | 16 - .../core-templates/steps/generate-sbom.yml | 60 +- .../core-templates/steps/publish-logs.yml | 9 +- .../core-templates/steps/source-build.yml | 2 +- eng/common/generate-sbom-prep.ps1 | 29 - eng/common/generate-sbom-prep.sh | 39 -- eng/common/template-guidance.md | 2 - eng/common/templates-official/job/job.yml | 64 ++- .../steps/component-governance.yml | 7 - .../steps/publish-pipeline-artifacts.yml | 4 +- eng/common/templates/job/job.yml | 57 +- .../templates/steps/component-governance.yml | 7 - global.json | 4 +- ...t.CodeAnalysis.NetAnalyzers.Package.csproj | 17 +- .../Microsoft.CodeAnalysis.NetAnalyzers.sarif | 6 +- .../Program.cs | 5 +- 25 files changed, 593 insertions(+), 663 deletions(-) delete mode 100644 eng/common/core-templates/steps/component-governance.yml delete mode 100644 eng/common/generate-sbom-prep.ps1 delete mode 100755 eng/common/generate-sbom-prep.sh delete mode 100644 eng/common/templates-official/steps/component-governance.yml delete mode 100644 eng/common/templates/steps/component-governance.yml diff --git a/NuGet.config b/NuGet.config index e226baf9b0b6..c05664ac0302 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,7 @@ - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 866781fea35d..3ff07cce2b30 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,139 +8,139 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-preview.26203.109 - 10.0.6 - 10.0.6 + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.0-preview.26210.105 + 10.0.7 + 10.0.7 18.0.11 - 18.0.11-servicing-26203-109 - 7.0.2-rc.20409 - 10.0.106 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.0-preview.26203.109 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 2.0.0-preview.1.26203.109 - 2.2.6 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6-servicing.26203.109 - 10.0.0-beta.26203.109 - 10.0.0-beta.26203.109 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 14.0.106-servicing.26203.109 - 10.0.6 - 5.0.0-2.26203.109 - 5.0.0-2.26203.109 - 10.0.6-servicing.26203.109 - 10.0.6 - 10.0.6 + 18.0.11-servicing-26210-105 + 7.0.2-rc.21105 + 10.0.107 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 10.0.0-preview.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 2.0.0-preview.1.26210.105 + 2.2.7 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.7 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 14.0.107-servicing.26210.105 + 10.0.7 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7 10.0.0-preview.7.25377.103 - 10.0.0-preview.26203.109 - 10.0.6-servicing.26203.109 - 18.0.2-release-26203-109 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106-servicing.26203.109 - 10.0.106 - 10.0.106 - 10.0.106-servicing.26203.109 - 18.0.2-release-26203-109 - 18.0.2-release-26203-109 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26203.109 - 10.0.6 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 7.0.2-rc.20409 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26210.105 + 10.0.7-servicing.26210.105 + 18.0.2-release-26210-105 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107-servicing.26210.105 + 10.0.107 + 10.0.107-servicing.26210.105 + 10.0.107 + 10.0.107 + 10.0.107-servicing.26210.105 + 18.0.2-release-26210-105 + 18.0.2-release-26210-105 + 3.2.7 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 10.0.7 + 2.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 2.3.0-preview.26203.3 4.3.0-preview.26203.3 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 455271a30f10..80c60a7b27a9 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 https://github.com/microsoft/testfx @@ -569,9 +569,9 @@ https://github.com/microsoft/testfx 1ddd2f1a558e9c79b5327c5ccc0e9e89df39d4da - + https://github.com/dotnet/dotnet - 6165bd7ac3499cb712ca489f2ce44bb665174a1a + d14d02dd9f70268be43db2ae722433f7d4461fb8 diff --git a/eng/Versions.props b/eng/Versions.props index 3a967994c49a..4ce39fbd1a25 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -7,7 +7,7 @@ 10 0 1 - 6 + 7 $([System.String]::Copy('$(VersionSDKMinorPatch)').PadLeft(2, '0')) @@ -89,7 +96,13 @@ <_GenerateDocumentationAndConfigFilesPath>%(_GenerateDocumentationAndConfigFilesPath.Identity) + + + - \ No newline at end of file + diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif index 754fb0b4eda4..8f15c9fb62a1 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif @@ -5,7 +5,7 @@ { "tool": { "name": "Microsoft.CodeAnalysis.CSharp.NetAnalyzers", - "version": "10.0.106", + "version": "${AnalyzerVersion}", "language": "en-US" }, "rules": { @@ -708,7 +708,7 @@ { "tool": { "name": "Microsoft.CodeAnalysis.NetAnalyzers", - "version": "10.0.106", + "version": "${AnalyzerVersion}", "language": "en-US" }, "rules": { @@ -6503,7 +6503,7 @@ { "tool": { "name": "Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers", - "version": "10.0.106", + "version": "${AnalyzerVersion}", "language": "en-US" }, "rules": { diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/tools/GenerateDocumentationAndConfigFiles/Program.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/tools/GenerateDocumentationAndConfigFiles/Program.cs index ff7104f3fd0a..e631e83ae5b9 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/tools/GenerateDocumentationAndConfigFiles/Program.cs +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/tools/GenerateDocumentationAndConfigFiles/Program.cs @@ -32,6 +32,7 @@ public static async Task Main(string[] args) { const int expectedArguments = 23; const string validateOnlyPrefix = "-validateOnly:"; + const string analyzerVersionTemplate = "${AnalyzerVersion}"; if (args.Length != expectedArguments) { @@ -450,7 +451,9 @@ void createAnalyzerSarifFile() if (!string.IsNullOrWhiteSpace(analyzerVersion)) { - writer.Write("version", analyzerVersion); + // Keep the checked-in SARIF stable across SDK version updates. + // The build resolves this placeholder into the intermediate output that gets packed. + writer.Write("version", analyzerVersionTemplate); } writer.Write("language", culture.Name); From 5963f1fde5765a238fccc7854b69e5983d5a5250 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 18:05:19 +0000 Subject: [PATCH 154/230] [release/10.0.3xx] Source code updates from dotnet/dotnet (#53759) [release/10.0.3xx] Source code updates from dotnet/dotnet - Merge branch 'release/10.0.3xx' into darc-release/10.0.3xx-4b23931f-fea0-4216-abd2-098084c035f8 - Disable C++/CLI and compilation context tests pending toolset fixes - Disable C++/CLI tests pending v143 toolset fix on VS 2026 Helix (https://github.com/dotnet/sdk/issues/53789) - Disable SourceLinkTests.Cpp pending v143 toolset fix (https://github.com/dotnet/sdk/issues/53789) - Skip net46 InlineData in GivenThatWeWantToPreserveCompilationContext (https://github.com/dotnet/sdk/issues/53796) Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/62e0b341-f057-4e31-b5b5-665d79e4d545 Co-authored-by: MiYanni <17788297+MiYanni@users.noreply.github.com> --- eng/Version.Details.props | 124 ++++----- eng/Version.Details.xml | 250 +++++++++--------- eng/common/core-templates/job/job.yml | 5 +- .../job/publish-build-assets.yml | 14 +- eng/common/core-templates/jobs/jobs.yml | 5 + .../core-templates/post-build/post-build.yml | 105 +++++--- .../post-build/setup-maestro-vars.yml | 5 +- .../steps/component-governance.yml | 16 -- .../core-templates/steps/generate-sbom.yml | 60 +---- .../core-templates/steps/publish-logs.yml | 9 +- .../core-templates/steps/source-build.yml | 2 +- eng/common/generate-sbom-prep.ps1 | 29 -- eng/common/generate-sbom-prep.sh | 39 --- eng/common/template-guidance.md | 2 - eng/common/templates-official/job/job.yml | 64 ++--- .../steps/component-governance.yml | 7 - .../steps/publish-pipeline-artifacts.yml | 4 +- eng/common/templates/job/job.yml | 57 ++-- .../templates/steps/component-governance.yml | 7 - global.json | 4 +- .../GivenThatWeWantToBuildACppCliProject.cs | 16 +- ...ToBuildACppCliProjectWithTransitiveDeps.cs | 6 +- .../SourceLinkTests.cs | 2 +- .../GivenThatWeWantToPackACppCliProject.cs | 2 +- ...nThatWeWantToPreserveCompilationContext.cs | 3 +- .../GivenThatWeWantToPublishACppCliProject.cs | 2 +- 26 files changed, 377 insertions(+), 462 deletions(-) delete mode 100644 eng/common/core-templates/steps/component-governance.yml delete mode 100644 eng/common/generate-sbom-prep.ps1 delete mode 100755 eng/common/generate-sbom-prep.sh delete mode 100644 eng/common/templates-official/steps/component-governance.yml delete mode 100644 eng/common/templates/steps/component-governance.yml diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 40b8f31a30ed..e1f9a4b1bb84 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26203.106 + 10.0.0-preview.26210.101 10.0.5 10.0.5 - 18.6.0-preview-26203-106 - 18.6.0-preview-26203-106 - 7.6.0-rc.20406 - 10.0.300-alpha.26203.106 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 - 10.0.0-preview.26203.106 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 + 18.6.0-preview-26210-101 + 18.6.0-preview-26210-101 + 7.6.0-rc.21101 + 10.0.300-alpha.26210.101 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 + 10.0.0-preview.26210.101 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26203.106 - 10.0.0-beta.26203.106 - 10.0.0-beta.26203.106 - 10.0.0-beta.26203.106 - 10.0.0-beta.26203.106 - 10.0.0-beta.26203.106 + 10.0.0-beta.26210.101 + 10.0.0-beta.26210.101 + 10.0.0-beta.26210.101 + 10.0.0-beta.26210.101 + 10.0.0-beta.26210.101 + 10.0.0-beta.26210.101 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26203.106 - 10.0.0-beta.26203.106 + 10.0.0-beta.26210.101 + 10.0.0-beta.26210.101 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26203.106 + 15.2.300-servicing.26210.101 10.0.5 - 5.6.0-2.26203.106 - 5.6.0-2.26203.106 + 5.6.0-2.26210.101 + 5.6.0-2.26210.101 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26203.106 + 10.0.0-preview.26210.101 10.0.5-servicing.26153.111 - 18.3.0-release-26203-106 + 18.3.0-release-26210-101 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26203.106 - 10.0.300-alpha.26203.106 - 10.0.300-alpha.26203.106 - 10.0.300-alpha.26203.106 - 10.0.300-alpha.26203.106 - 10.0.300-preview.26203.106 - 10.0.300-preview.26203.106 - 10.0.300-preview.26203.106 - 10.0.300-preview.26203.106 - 10.0.300-preview.26203.106 - 10.0.300-preview.26203.106 - 10.0.300-preview.26203.106 - 10.0.300-preview.26203.106 - 10.0.300-preview.26203.106 - 18.3.0-release-26203-106 - 18.3.0-release-26203-106 + 10.0.300-alpha.26210.101 + 10.0.300-alpha.26210.101 + 10.0.300-alpha.26210.101 + 10.0.300-alpha.26210.101 + 10.0.300-alpha.26210.101 + 10.0.300-preview.26210.101 + 10.0.300-preview.26210.101 + 10.0.300-preview.26210.101 + 10.0.300-preview.26210.101 + 10.0.300-preview.26210.101 + 10.0.300-preview.26210.101 + 10.0.300-preview.26210.101 + 10.0.300-preview.26210.101 + 10.0.300-preview.26210.101 + 18.3.0-release-26210-101 + 18.3.0-release-26210-101 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 - 7.6.0-rc.20406 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 + 7.6.0-rc.21101 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index d144b971620b..ede76b7c9f9b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 - + https://github.com/dotnet/dotnet - f53e3a87c05e7d5ba77e7327dd453dc5fef64b7f + 70c50b3477e27fe499dafca4406902b502467d89 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index 5ce518406198..eaed6d87e653 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -24,12 +24,12 @@ parameters: enablePublishBuildArtifacts: false enablePublishBuildAssets: false enablePublishTestResults: false + enablePublishing: false enableBuildRetry: false mergeTestResults: false testRunTitle: '' testResultsFormat: '' name: '' - componentGovernanceSteps: [] preSteps: [] artifactPublishSteps: [] runAsPublic: false @@ -146,9 +146,6 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} - - ${{ each step in parameters.componentGovernanceSteps }}: - - ${{ step }} - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - template: /eng/common/core-templates/steps/cleanup-microbuild.yml parameters: diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index 9afcb8ae1590..06f2eed0323d 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -172,17 +172,18 @@ jobs: targetPath: '$(Build.ArtifactStagingDirectory)/MergedManifest.xml' artifactName: AssetManifests displayName: 'Publish Merged Manifest' - retryCountOnTaskFailure: 10 # for any logs being locked - sbomEnabled: false # we don't need SBOM for logs + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # just metadata for publishing - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish ReleaseConfigs Artifact - pathToPublish: '$(Build.StagingDirectory)/ReleaseConfigs' - publishLocation: Container + targetPath: '$(Build.StagingDirectory)/ReleaseConfigs' artifactName: ReleaseConfigs + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # just metadata for publishing - ${{ if or(eq(parameters.publishAssetsImmediately, 'true'), eq(parameters.isAssetlessBuild, 'true')) }}: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -218,4 +219,5 @@ jobs: - template: /eng/common/core-templates/steps/publish-logs.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - JobLabel: 'Publish_Artifacts_Logs' + StageLabel: 'BuildAssetRegistry' + JobLabel: 'Publish_Artifacts_Logs' diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index 01ada7476651..cc8cce452786 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -43,6 +43,10 @@ parameters: artifacts: {} is1ESPipeline: '' + + # Publishing version w/default. + publishingVersion: 3 + repositoryAlias: self officialBuildId: '' @@ -102,6 +106,7 @@ jobs: parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} continueOnError: ${{ parameters.continueOnError }} + publishingVersion: ${{ parameters.publishingVersion }} dependsOn: - ${{ if ne(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.publishBuildAssetsDependsOn }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index 2df4acb76859..905a6315e2d5 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -9,6 +9,7 @@ parameters: default: 3 values: - 3 + - 4 - name: BARBuildId displayName: BAR Build Id @@ -140,16 +141,30 @@ stages: PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(AzDOProjectName) - pipeline: $(AzDOPipelineId) - buildId: $(AzDOBuildId) - artifactName: PackageArtifacts - checkDownloadedFiles: true + - ${{ if ne(parameters.publishingInfraVersion, 4) }}: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: PackageArtifacts + checkDownloadedFiles: true + - ${{ if eq(parameters.publishingInfraVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Pipeline Artifacts (V4) + inputs: + itemPattern: '*/packages/**/*.nupkg' + targetPath: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + - task: CopyFiles@2 + displayName: Flatten packages to PackageArtifacts + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + Contents: '**/*.nupkg' + TargetFolder: '$(Build.ArtifactStagingDirectory)/PackageArtifacts' + flattenFolders: true - task: PowerShell@2 displayName: Validate @@ -183,16 +198,30 @@ stages: PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(AzDOProjectName) - pipeline: $(AzDOPipelineId) - buildId: $(AzDOBuildId) - artifactName: PackageArtifacts - checkDownloadedFiles: true + - ${{ if ne(parameters.publishingInfraVersion, 4) }}: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: PackageArtifacts + checkDownloadedFiles: true + - ${{ if eq(parameters.publishingInfraVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Pipeline Artifacts (V4) + inputs: + itemPattern: '*/packages/**/*.nupkg' + targetPath: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + - task: CopyFiles@2 + displayName: Flatten packages to PackageArtifacts + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + Contents: '**/*.nupkg' + TargetFolder: '$(Build.ArtifactStagingDirectory)/PackageArtifacts' + flattenFolders: true # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -244,16 +273,30 @@ stages: PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(AzDOProjectName) - pipeline: $(AzDOPipelineId) - buildId: $(AzDOBuildId) - artifactName: BlobArtifacts - checkDownloadedFiles: true + - ${{ if ne(parameters.publishingInfraVersion, 4) }}: + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: BlobArtifacts + checkDownloadedFiles: true + - ${{ if eq(parameters.publishingInfraVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Pipeline Artifacts (V4) + inputs: + itemPattern: '*/assets/**' + targetPath: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + - task: CopyFiles@2 + displayName: Flatten assets to BlobArtifacts + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + Contents: '**/*' + TargetFolder: '$(Build.ArtifactStagingDirectory)/BlobArtifacts' + flattenFolders: true - task: PowerShell@2 displayName: Validate @@ -328,7 +371,7 @@ stages: scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 arguments: > -BuildId $(BARBuildId) - -PublishingInfraVersion ${{ parameters.publishingInfraVersion }} + -PublishingInfraVersion 3 -AzdoToken '$(System.AccessToken)' -WaitPublishingFinish true -RequireDefaultChannels ${{ parameters.requireDefaultChannels }} diff --git a/eng/common/core-templates/post-build/setup-maestro-vars.yml b/eng/common/core-templates/post-build/setup-maestro-vars.yml index a7abd58c4bb6..6dfa99ec5e37 100644 --- a/eng/common/core-templates/post-build/setup-maestro-vars.yml +++ b/eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -8,12 +8,11 @@ steps: - 'Illegal entry point, is1ESPipeline is not defined. Repository yaml should not directly reference templates in core-templates folder.': error - ${{ if eq(coalesce(parameters.PromoteToChannelIds, 0), 0) }}: - - task: DownloadBuildArtifacts@0 + - task: DownloadPipelineArtifact@2 displayName: Download Release Configs inputs: - buildType: current artifactName: ReleaseConfigs - checkDownloadedFiles: true + targetPath: '$(Build.StagingDirectory)/ReleaseConfigs' - task: AzureCLI@2 name: setReleaseVars diff --git a/eng/common/core-templates/steps/component-governance.yml b/eng/common/core-templates/steps/component-governance.yml deleted file mode 100644 index cf0649aa9565..000000000000 --- a/eng/common/core-templates/steps/component-governance.yml +++ /dev/null @@ -1,16 +0,0 @@ -parameters: - disableComponentGovernance: false - componentGovernanceIgnoreDirectories: '' - is1ESPipeline: false - displayName: 'Component Detection' - -steps: -- ${{ if eq(parameters.disableComponentGovernance, 'true') }}: - - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true" - displayName: Set skipComponentGovernanceDetection variable -- ${{ if ne(parameters.disableComponentGovernance, 'true') }}: - - task: ComponentGovernanceComponentDetection@0 - continueOnError: true - displayName: ${{ parameters.displayName }} - inputs: - ignoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml index c05f65027979..aad0a8aeda33 100644 --- a/eng/common/core-templates/steps/generate-sbom.yml +++ b/eng/common/core-templates/steps/generate-sbom.yml @@ -1,54 +1,14 @@ -# BuildDropPath - The root folder of the drop directory for which the manifest file will be generated. -# PackageName - The name of the package this SBOM represents. -# PackageVersion - The version of the package this SBOM represents. -# ManifestDirPath - The path of the directory where the generated manifest files will be placed -# IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. - parameters: - PackageVersion: 10.0.0 - BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' - PackageName: '.NET' - ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom - IgnoreDirectories: '' - sbomContinueOnError: true - is1ESPipeline: false - # disable publishArtifacts if some other step is publishing the artifacts (like job.yml). - publishArtifacts: true + PackageVersion: unused + BuildDropPath: unused + PackageName: unused + ManifestDirPath: unused + IgnoreDirectories: unused + sbomContinueOnError: unused + is1ESPipeline: unused + publishArtifacts: unused steps: -- task: PowerShell@2 - displayName: Prep for SBOM generation in (Non-linux) - condition: or(eq(variables['Agent.Os'], 'Windows_NT'), eq(variables['Agent.Os'], 'Darwin')) - inputs: - filePath: ./eng/common/generate-sbom-prep.ps1 - arguments: ${{parameters.manifestDirPath}} - -# Chmodding is a workaround for https://github.com/dotnet/arcade/issues/8461 - script: | - chmod +x ./eng/common/generate-sbom-prep.sh - ./eng/common/generate-sbom-prep.sh ${{parameters.manifestDirPath}} - displayName: Prep for SBOM generation in (Linux) - condition: eq(variables['Agent.Os'], 'Linux') - continueOnError: ${{ parameters.sbomContinueOnError }} - -- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'Generate SBOM manifest' - continueOnError: ${{ parameters.sbomContinueOnError }} - inputs: - PackageName: ${{ parameters.packageName }} - BuildDropPath: ${{ parameters.buildDropPath }} - PackageVersion: ${{ parameters.packageVersion }} - ManifestDirPath: ${{ parameters.manifestDirPath }}/$(ARTIFACT_NAME) - ${{ if ne(parameters.IgnoreDirectories, '') }}: - AdditionalComponentDetectorArgs: '--IgnoreDirectories ${{ parameters.IgnoreDirectories }}' - -- ${{ if eq(parameters.publishArtifacts, 'true')}}: - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} - args: - displayName: Publish SBOM manifest - continueOnError: ${{parameters.sbomContinueOnError}} - targetPath: '${{ parameters.manifestDirPath }}' - artifactName: $(ARTIFACT_NAME) - + echo "##vso[task.logissue type=warning]Including generate-sbom.yml is deprecated, SBOM generation is handled 1ES PT now. Remove this include." + displayName: Issue generate-sbom.yml deprecation warning diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index a9ea99ba6aaa..4eed0312b807 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -50,13 +50,14 @@ steps: TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' condition: always() -- template: /eng/common/core-templates/steps/publish-build-artifacts.yml +- template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish Logs - pathToPublish: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' - publishLocation: Container - artifactName: PostBuildLogs + targetPath: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' + artifactName: PostBuildLogs_${{ parameters.StageLabel }}_${{ parameters.JobLabel }}_Attempt$(System.JobAttempt) continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # logs are non-production artifacts diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml index b9c86c18ae42..09ae5cd73ae3 100644 --- a/eng/common/core-templates/steps/source-build.yml +++ b/eng/common/core-templates/steps/source-build.yml @@ -62,4 +62,4 @@ steps: artifactName: BuildLogs_SourceBuild_${{ parameters.platform.name }}_Attempt$(System.JobAttempt) continueOnError: true condition: succeededOrFailed() - sbomEnabled: false # we don't need SBOM for logs + isProduction: false # logs are non-production artifacts diff --git a/eng/common/generate-sbom-prep.ps1 b/eng/common/generate-sbom-prep.ps1 deleted file mode 100644 index a0c7d792a76f..000000000000 --- a/eng/common/generate-sbom-prep.ps1 +++ /dev/null @@ -1,29 +0,0 @@ -Param( - [Parameter(Mandatory=$true)][string] $ManifestDirPath # Manifest directory where sbom will be placed -) - -. $PSScriptRoot\pipeline-logging-functions.ps1 - -# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly -# with their own overwriting ours. So we create it as a sub directory of the requested manifest path. -$ArtifactName = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM" -$SafeArtifactName = $ArtifactName -replace '["/:<>\\|?@*"() ]', '_' -$SbomGenerationDir = Join-Path $ManifestDirPath $SafeArtifactName - -Write-Host "Artifact name before : $ArtifactName" -Write-Host "Artifact name after : $SafeArtifactName" - -Write-Host "Creating dir $ManifestDirPath" - -# create directory for sbom manifest to be placed -if (!(Test-Path -path $SbomGenerationDir)) -{ - New-Item -ItemType Directory -path $SbomGenerationDir - Write-Host "Successfully created directory $SbomGenerationDir" -} -else{ - Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder." -} - -Write-Host "Updating artifact name" -Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$SafeArtifactName" diff --git a/eng/common/generate-sbom-prep.sh b/eng/common/generate-sbom-prep.sh deleted file mode 100755 index b8ecca72bbf5..000000000000 --- a/eng/common/generate-sbom-prep.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash - -source="${BASH_SOURCE[0]}" - -# resolve $SOURCE until the file is no longer a symlink -while [[ -h $source ]]; do - scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" - source="$(readlink "$source")" - - # if $source was a relative symlink, we need to resolve it relative to the path where the - # symlink file was located - [[ $source != /* ]] && source="$scriptroot/$source" -done -scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -. $scriptroot/pipeline-logging-functions.sh - - -# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts. -artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM" -safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}" -manifest_dir=$1 - -# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly -# with their own overwriting ours. So we create it as a sub directory of the requested manifest path. -sbom_generation_dir="$manifest_dir/$safe_artifact_name" - -if [ ! -d "$sbom_generation_dir" ] ; then - mkdir -p "$sbom_generation_dir" - echo "Sbom directory created." $sbom_generation_dir -else - Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder." -fi - -echo "Artifact name before : "$artifact_name -echo "Artifact name after : "$safe_artifact_name -export ARTIFACT_NAME=$safe_artifact_name -echo "##vso[task.setvariable variable=ARTIFACT_NAME]$safe_artifact_name" - -exit 0 diff --git a/eng/common/template-guidance.md b/eng/common/template-guidance.md index 4bf4cf41bd7c..e2b07a865f10 100644 --- a/eng/common/template-guidance.md +++ b/eng/common/template-guidance.md @@ -82,7 +82,6 @@ eng\common\ publish-build-artifacts.yml (logic) publish-pipeline-artifacts.yml (logic) component-governance.yml (shim) - generate-sbom.yml (shim) publish-logs.yml (shim) retain-build.yml (shim) send-to-helix.yml (shim) @@ -107,7 +106,6 @@ eng\common\ setup-maestro-vars.yml (logic) steps\ component-governance.yml (logic) - generate-sbom.yml (logic) publish-build-artifacts.yml (redirect) publish-logs.yml (logic) publish-pipeline-artifacts.yml (redirect) diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml index 92a0664f5647..d68e9fbc2656 100644 --- a/eng/common/templates-official/job/job.yml +++ b/eng/common/templates-official/job/job.yml @@ -1,24 +1,15 @@ parameters: -# Sbom related params - enableSbom: true runAsPublic: false - PackageVersion: 9.0.0 - BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' +# Sbom related params, unused now and can eventually be removed + enableSbom: unused + PackageVersion: unused + BuildDropPath: unused jobs: - template: /eng/common/core-templates/job/job.yml parameters: is1ESPipeline: true - componentGovernanceSteps: - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.enableSbom, 'true')) }}: - - template: /eng/common/templates/steps/generate-sbom.yml - parameters: - PackageVersion: ${{ parameters.packageVersion }} - BuildDropPath: ${{ parameters.buildDropPath }} - ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom - publishArtifacts: false - # publish artifacts # for 1ES managed templates, use the templateContext.output to handle multiple outputs. templateContext: @@ -26,12 +17,19 @@ jobs: outputs: - ${{ if ne(parameters.artifacts.publish, '') }}: - ${{ if and(ne(parameters.artifacts.publish.artifacts, 'false'), ne(parameters.artifacts.publish.artifacts, '')) }}: - - output: buildArtifacts + - output: pipelineArtifact displayName: Publish pipeline artifacts - PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' - ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} - condition: always() - retryCountOnTaskFailure: 10 # for any logs being locked + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' + artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} + condition: succeeded() + retryCountOnTaskFailure: 10 # for any files being locked + continueOnError: true + - output: pipelineArtifact + displayName: Publish pipeline artifacts + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' + artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }}_Attempt$(System.JobAttempt) + condition: not(succeeded()) + retryCountOnTaskFailure: 10 # for any files being locked continueOnError: true - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - output: pipelineArtifact @@ -40,18 +38,18 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() - retryCountOnTaskFailure: 10 # for any logs being locked - sbomEnabled: false # we don't need SBOM for logs + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # logs are non-production artifacts - ${{ if eq(parameters.enablePublishBuildArtifacts, true) }}: - - output: buildArtifacts + - output: pipelineArtifact displayName: Publish Logs - PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' - publishLocation: Container - ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' + artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() - sbomEnabled: false # we don't need SBOM for logs + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # logs are non-production artifacts - ${{ if eq(parameters.enableBuildRetry, 'true') }}: - output: pipelineArtifact @@ -59,14 +57,20 @@ jobs: artifactName: 'BuildConfiguration' displayName: 'Publish build retry configuration' continueOnError: true - sbomEnabled: false # we don't need SBOM for BuildConfiguration + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # BuildConfiguration is a non-production artifact - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.enableSbom, 'true')) }}: + # V4 publishing: automatically publish staged artifacts as a pipeline artifact. + # The artifact name matches the SDK's FutureArtifactName ($(System.PhaseName)_Artifacts), + # which is encoded in the asset manifest for downstream publishing to discover. + # Jobs can opt in by setting enablePublishing: true. + - ${{ if and(eq(parameters.publishingVersion, 4), eq(parameters.enablePublishing, 'true')) }}: - output: pipelineArtifact - displayName: Publish SBOM manifest + displayName: 'Publish V4 pipeline artifacts' + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' + artifactName: '$(System.PhaseName)_Artifacts' continueOnError: true - targetPath: $(Build.ArtifactStagingDirectory)/sbom - artifactName: $(ARTIFACT_NAME) + retryCountOnTaskFailure: 10 # for any files being locked # add any outputs provided via root yaml - ${{ if ne(parameters.templateContext.outputs, '') }}: diff --git a/eng/common/templates-official/steps/component-governance.yml b/eng/common/templates-official/steps/component-governance.yml deleted file mode 100644 index 30bb3985ca2b..000000000000 --- a/eng/common/templates-official/steps/component-governance.yml +++ /dev/null @@ -1,7 +0,0 @@ -steps: -- template: /eng/common/core-templates/steps/component-governance.yml - parameters: - is1ESPipeline: true - - ${{ each parameter in parameters }}: - ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates-official/steps/publish-pipeline-artifacts.yml b/eng/common/templates-official/steps/publish-pipeline-artifacts.yml index 172f9f0fdc97..9e5981365e56 100644 --- a/eng/common/templates-official/steps/publish-pipeline-artifacts.yml +++ b/eng/common/templates-official/steps/publish-pipeline-artifacts.yml @@ -24,5 +24,7 @@ steps: artifactName: ${{ parameters.args.artifactName }} ${{ if parameters.args.properties }}: properties: ${{ parameters.args.properties }} - ${{ if parameters.args.sbomEnabled }}: + ${{ if ne(parameters.args.sbomEnabled, '') }}: sbomEnabled: ${{ parameters.args.sbomEnabled }} + ${{ if ne(parameters.args.isProduction, '') }}: + isProduction: ${{ parameters.args.isProduction }} diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 238fa0818f7b..5e261f34db42 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -1,12 +1,12 @@ parameters: enablePublishBuildArtifacts: false - disableComponentGovernance: '' - componentGovernanceIgnoreDirectories: '' -# Sbom related params - enableSbom: true runAsPublic: false - PackageVersion: 9.0.0 - BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' +# CG related params, unused now and can eventually be removed + disableComponentGovernance: unused +# Sbom related params, unused now and can eventually be removed + enableSbom: unused + PackageVersion: unused + BuildDropPath: unused jobs: - template: /eng/common/core-templates/job/job.yml @@ -21,32 +21,34 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} - componentGovernanceSteps: - - template: /eng/common/templates/steps/component-governance.yml - parameters: - ${{ if eq(parameters.disableComponentGovernance, '') }}: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.runAsPublic, 'false'), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/dotnet/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/microsoft/'), eq(variables['Build.SourceBranch'], 'refs/heads/main'))) }}: - disableComponentGovernance: false - ${{ else }}: - disableComponentGovernance: true - ${{ else }}: - disableComponentGovernance: ${{ parameters.disableComponentGovernance }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} + # we don't run CG in public + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true" + displayName: Set skipComponentGovernanceDetection variable artifactPublishSteps: - ${{ if ne(parameters.artifacts.publish, '') }}: - ${{ if and(ne(parameters.artifacts.publish.artifacts, 'false'), ne(parameters.artifacts.publish.artifacts, '')) }}: - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: false args: displayName: Publish pipeline artifacts - pathToPublish: '$(Build.ArtifactStagingDirectory)/artifacts' - publishLocation: Container + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} continueOnError: true - condition: always() - retryCountOnTaskFailure: 10 # for any logs being locked + condition: succeeded() + retryCountOnTaskFailure: 10 # for any files being locked + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + parameters: + is1ESPipeline: false + args: + displayName: Publish pipeline artifacts + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' + artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }}_Attempt$(System.JobAttempt) + continueOnError: true + condition: not(succeeded()) + retryCountOnTaskFailure: 10 # for any files being locked - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: @@ -57,20 +59,19 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() - retryCountOnTaskFailure: 10 # for any logs being locked - sbomEnabled: false # we don't need SBOM for logs + retryCountOnTaskFailure: 10 # for any files being locked - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: false args: displayName: Publish Logs - pathToPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' - publishLocation: Container + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any files being locked - ${{ if eq(parameters.enableBuildRetry, 'true') }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml @@ -81,4 +82,4 @@ jobs: artifactName: 'BuildConfiguration' displayName: 'Publish build retry configuration' continueOnError: true - sbomEnabled: false # we don't need SBOM for BuildConfiguration + retryCountOnTaskFailure: 10 # for any files being locked diff --git a/eng/common/templates/steps/component-governance.yml b/eng/common/templates/steps/component-governance.yml deleted file mode 100644 index c12a5f8d21d7..000000000000 --- a/eng/common/templates/steps/component-governance.yml +++ /dev/null @@ -1,7 +0,0 @@ -steps: -- template: /eng/common/core-templates/steps/component-governance.yml - parameters: - is1ESPipeline: false - - ${{ each parameter in parameters }}: - ${{ parameter.key }}: ${{ parameter.value }} diff --git a/global.json b/global.json index 8fafeae1ec8a..71798bf9d09f 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26203.106", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26203.106", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26210.101", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26210.101", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs index 83ff1a3553d6..3a2915cc928f 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs @@ -13,7 +13,7 @@ public GivenThatWeWantToBuildACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_builds_and_runs() { var testAsset = _testAssetsManager @@ -49,7 +49,7 @@ public void It_builds_and_runs() .HaveStdOutContaining("Hello, World!"); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_builds_and_runs_with_package_reference() { var targetFramework = ToolsetInfo.CurrentTargetFramework + "-windows"; @@ -84,7 +84,7 @@ public void It_builds_and_runs_with_package_reference() } } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void Given_no_restore_It_builds_cpp_project() { var testAsset = _testAssetsManager @@ -98,7 +98,7 @@ public void Given_no_restore_It_builds_cpp_project() .Pass(); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void Given_Wpf_framework_reference_It_builds_cpp_project() { var testAsset = _testAssetsManager @@ -111,7 +111,7 @@ public void Given_Wpf_framework_reference_It_builds_cpp_project() .Pass(); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_fails_with_error_message_on_EnableComHosting() { var testAsset = _testAssetsManager @@ -139,7 +139,7 @@ public void It_fails_with_error_message_on_EnableComHosting() .HaveStdOutContaining(Strings.NoSupportCppEnableComHosting); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_fails_with_error_message_on_fullframework() { var testAsset = _testAssetsManager @@ -156,7 +156,7 @@ public void It_fails_with_error_message_on_fullframework() .HaveStdOutContaining(Strings.NETFrameworkWithoutUsingNETSdkDefaults); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_fails_with_error_message_on_tfm_lower_than_3_1() { var testAsset = _testAssetsManager @@ -173,7 +173,7 @@ public void It_fails_with_error_message_on_tfm_lower_than_3_1() .HaveStdOutContaining(Strings.CppRequiresTFMVersion31); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void When_run_with_selfcontained_It_fails_with_error_message() { var testAsset = _testAssetsManager diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs index 4808f781d25a..9bac9adf9619 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs @@ -12,7 +12,7 @@ public GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps(ITestOutputHelper private readonly Lazy _buildAsset; - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_can_generate_correct_depsJson_file() { TestAsset testAsset = _buildAsset.Value; @@ -23,7 +23,7 @@ public void It_can_generate_correct_depsJson_file() depsJsonContent.Should().Contain("NETCoreCppCliTestC.dll", "should contain transitive reference"); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_can_generate_all_runtimeconfig_files_to_output_folder() { TestAsset testAsset = _buildAsset.Value; @@ -35,7 +35,7 @@ public void It_can_generate_all_runtimeconfig_files_to_output_folder() }); } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_can_generate_all_depsjson_files_to_output_folder() { TestAsset testAsset = _buildAsset.Value; diff --git a/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs b/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs index 5fa880ec9812..544e18dbe2dd 100644 --- a/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs +++ b/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs @@ -290,7 +290,7 @@ public void SuppressImplicitGitSourceLink_ExplicitPackage(bool multitarget) } } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void Cpp() { var testAsset = _testAssetsManager diff --git a/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs b/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs index 28a9660ac8fb..10a8bdaaadc1 100644 --- a/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs +++ b/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs @@ -11,7 +11,7 @@ public GivenThatWeWantToPackACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void It_cannot_pack_the_cppcliproject() { var testAsset = _testAssetsManager diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs index 1b4b5eaabcab..18dece1d353a 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs @@ -14,7 +14,8 @@ public GivenThatWeWantToPreserveCompilationContext(ITestOutputHelper log) : base } [Theory] - [InlineData("net46", "netstandard1.3", false)] + // Skip = "https://github.com/dotnet/sdk/issues/53796" + //[InlineData("net46", "netstandard1.3", false)] [InlineData("netcoreapp2.0", "netstandard2.0", false)] [InlineData("netcoreapp2.0", "netstandard2.0", true)] [InlineData("netcoreapp3.0", "netstandard2.0", false)] diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs index 8a1408ba0e61..67d48f9712ef 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs @@ -11,7 +11,7 @@ public GivenThatWeWantToPublishACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact] + [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] public void When_referenced_by_csharp_project_it_publishes_and_runs() { var testAsset = _testAssetsManager From 9d3eff0c413c04f123e7a77a51b508c68cb1ac89 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 21:32:17 +0000 Subject: [PATCH 155/230] Reset files to release/10.0.1xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 59 +- eng/Version.Details.props | 290 +++++ eng/Version.Details.xml | 1081 ++++++++--------- eng/common/CIBuild.cmd | 2 +- eng/common/SetupNugetSources.ps1 | 90 +- eng/common/SetupNugetSources.sh | 192 +-- eng/common/build.ps1 | 11 +- eng/common/build.sh | 33 +- eng/common/cibuild.sh | 2 +- eng/common/core-templates/job/job.yml | 53 +- eng/common/core-templates/job/onelocbuild.yml | 39 +- .../job/publish-build-assets.yml | 93 +- .../core-templates/job/source-build.yml | 15 +- .../job/source-index-stage1.yml | 47 +- .../core-templates/jobs/codeql-build.yml | 1 - eng/common/core-templates/jobs/jobs.yml | 20 +- .../core-templates/jobs/source-build.yml | 23 +- .../core-templates/post-build/post-build.yml | 147 ++- .../post-build/setup-maestro-vars.yml | 5 +- .../steps/cleanup-microbuild.yml | 28 + .../core-templates/steps/generate-sbom.yml | 60 +- .../steps/get-delegation-sas.yml | 11 +- .../steps/install-microbuild.yml | 110 ++ .../core-templates/steps/publish-logs.yml | 17 +- .../core-templates/steps/source-build.yml | 90 +- .../steps/source-index-stage1-publish.yml | 35 + eng/common/cross/arm64/tizen/tizen.patch | 2 +- eng/common/cross/build-android-rootfs.sh | 49 +- eng/common/cross/build-rootfs.sh | 237 ++-- eng/common/cross/install-debs.py | 334 +++++ eng/common/cross/tizen-build-rootfs.sh | 0 eng/common/cross/tizen-fetch.sh | 9 +- eng/common/cross/toolchain.cmake | 82 +- eng/common/darc-init.sh | 2 +- eng/common/dotnet.cmd | 7 + eng/common/dotnet.ps1 | 11 + eng/common/dotnet.sh | 26 + eng/common/generate-locproject.ps1 | 49 +- eng/common/native/install-dependencies.sh | 62 + eng/common/post-build/publish-using-darc.ps1 | 9 +- eng/common/post-build/redact-logs.ps1 | 5 +- eng/common/sdk-task.ps1 | 14 +- eng/common/sdk-task.sh | 121 ++ eng/common/sdl/packages.config | 2 +- eng/common/template-guidance.md | 2 - eng/common/templates-official/job/job.yml | 62 +- .../steps/publish-build-artifacts.yml | 7 +- .../steps/publish-pipeline-artifacts.yml | 4 +- .../steps/source-index-stage1-publish.yml | 7 + .../variables/pool-providers.yml | 2 +- eng/common/templates/job/job.yml | 57 +- .../steps/publish-build-artifacts.yml | 8 +- .../steps/source-index-stage1-publish.yml | 7 + eng/common/templates/steps/vmr-sync.yml | 186 +++ .../templates/variables/pool-providers.yml | 2 +- eng/common/templates/vmr-build-pr.yml | 43 + eng/common/tools.ps1 | 71 +- eng/common/tools.sh | 81 +- eng/common/vmr-sync.ps1 | 164 +++ eng/common/vmr-sync.sh | 227 ++++ global.json | 21 +- 61 files changed, 3104 insertions(+), 1422 deletions(-) create mode 100644 eng/Version.Details.props mode change 100644 => 100755 eng/common/SetupNugetSources.sh create mode 100644 eng/common/core-templates/steps/cleanup-microbuild.yml create mode 100644 eng/common/core-templates/steps/install-microbuild.yml create mode 100644 eng/common/core-templates/steps/source-index-stage1-publish.yml create mode 100755 eng/common/cross/install-debs.py mode change 100644 => 100755 eng/common/cross/tizen-build-rootfs.sh mode change 100644 => 100755 eng/common/cross/tizen-fetch.sh create mode 100644 eng/common/dotnet.cmd create mode 100644 eng/common/dotnet.ps1 create mode 100755 eng/common/dotnet.sh create mode 100755 eng/common/native/install-dependencies.sh create mode 100755 eng/common/sdk-task.sh create mode 100644 eng/common/templates-official/steps/source-index-stage1-publish.yml create mode 100644 eng/common/templates/steps/source-index-stage1-publish.yml create mode 100644 eng/common/templates/steps/vmr-sync.yml create mode 100644 eng/common/templates/vmr-build-pr.yml create mode 100755 eng/common/vmr-sync.ps1 create mode 100755 eng/common/vmr-sync.sh diff --git a/NuGet.config b/NuGet.config index 0d7b35bf6ded..c05664ac0302 100644 --- a/NuGet.config +++ b/NuGet.config @@ -3,48 +3,15 @@ - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - @@ -55,6 +22,8 @@ + + @@ -64,22 +33,14 @@ + + + - - - - - - - - - - - diff --git a/eng/Version.Details.props b/eng/Version.Details.props new file mode 100644 index 000000000000..3ff07cce2b30 --- /dev/null +++ b/eng/Version.Details.props @@ -0,0 +1,290 @@ + + + + + 2.1.0 + + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.0-preview.26210.105 + 10.0.7 + 10.0.7 + 18.0.11 + 18.0.11-servicing-26210-105 + 7.0.2-rc.21105 + 10.0.107 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 10.0.0-preview.26210.105 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 2.0.0-preview.1.26210.105 + 2.2.7 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.7 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7-servicing.26210.105 + 10.0.0-beta.26210.105 + 10.0.0-beta.26210.105 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 14.0.107-servicing.26210.105 + 10.0.7 + 5.0.0-2.26210.105 + 5.0.0-2.26210.105 + 10.0.7-servicing.26210.105 + 10.0.7 + 10.0.7 + 10.0.0-preview.7.25377.103 + 10.0.0-preview.26210.105 + 10.0.7-servicing.26210.105 + 18.0.2-release-26210-105 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107 + 10.0.107-servicing.26210.105 + 10.0.107 + 10.0.107-servicing.26210.105 + 10.0.107 + 10.0.107 + 10.0.107-servicing.26210.105 + 18.0.2-release-26210-105 + 18.0.2-release-26210-105 + 3.2.7 + 10.0.7 + 10.0.7-servicing.26210.105 + 10.0.7 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 7.0.2-rc.21105 + 10.0.7 + 2.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + 10.0.7 + + 2.3.0-preview.26203.3 + 4.3.0-preview.26203.3 + + + + + $(NETStandardLibraryRefPackageVersion) + + $(dotnetdevcertsPackageVersion) + $(dotnetuserjwtsPackageVersion) + $(dotnetusersecretsPackageVersion) + $(MicrosoftAspNetCoreAnalyzersPackageVersion) + $(MicrosoftAspNetCoreAppRefPackageVersion) + $(MicrosoftAspNetCoreAppRefInternalPackageVersion) + $(MicrosoftAspNetCoreAuthenticationFacebookPackageVersion) + $(MicrosoftAspNetCoreAuthenticationGooglePackageVersion) + $(MicrosoftAspNetCoreAuthenticationMicrosoftAccountPackageVersion) + $(MicrosoftAspNetCoreAuthorizationPackageVersion) + $(MicrosoftAspNetCoreComponentsPackageVersion) + $(MicrosoftAspNetCoreComponentsAnalyzersPackageVersion) + $(MicrosoftAspNetCoreComponentsFormsPackageVersion) + $(MicrosoftAspNetCoreComponentsSdkAnalyzersPackageVersion) + $(MicrosoftAspNetCoreComponentsWebPackageVersion) + $(MicrosoftAspNetCoreComponentsWebAssemblyPackageVersion) + $(MicrosoftAspNetCoreComponentsWebAssemblyServerPackageVersion) + $(MicrosoftAspNetCoreComponentsWebViewPackageVersion) + $(MicrosoftAspNetCoreDeveloperCertificatesXPlatPackageVersion) + $(MicrosoftAspNetCoreMetadataPackageVersion) + $(MicrosoftAspNetCoreMvcAnalyzersPackageVersion) + $(MicrosoftAspNetCoreMvcApiAnalyzersPackageVersion) + $(MicrosoftAspNetCoreMvcRazorExtensionsToolingInternalPackageVersion) + $(MicrosoftAspNetCoreTestHostPackageVersion) + $(MicrosoftBclAsyncInterfacesPackageVersion) + $(MicrosoftBuildPackageVersion) + $(MicrosoftBuildLocalizationPackageVersion) + $(MicrosoftBuildNuGetSdkResolverPackageVersion) + $(MicrosoftBuildTasksGitPackageVersion) + $(MicrosoftCodeAnalysisPackageVersion) + $(MicrosoftCodeAnalysisBuildClientPackageVersion) + $(MicrosoftCodeAnalysisCSharpPackageVersion) + $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) + $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) + $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) + $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftDeploymentDotNetReleasesPackageVersion) + $(MicrosoftDiaSymReaderPackageVersion) + $(MicrosoftDotNetArcadeSdkPackageVersion) + $(MicrosoftDotNetBuildTasksInstallersPackageVersion) + $(MicrosoftDotNetBuildTasksTemplatingPackageVersion) + $(MicrosoftDotNetBuildTasksWorkloadsPackageVersion) + $(MicrosoftDotNetHelixSdkPackageVersion) + $(MicrosoftDotNetSignToolPackageVersion) + $(MicrosoftDotNetWebItemTemplates100PackageVersion) + $(MicrosoftDotNetWebProjectTemplates100PackageVersion) + $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) + $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) + $(MicrosoftDotNetXliffTasksPackageVersion) + $(MicrosoftDotNetXUnitExtensionsPackageVersion) + $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyModelPackageVersion) + $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) + $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) + $(MicrosoftExtensionsFileSystemGlobbingPackageVersion) + $(MicrosoftExtensionsLoggingPackageVersion) + $(MicrosoftExtensionsLoggingAbstractionsPackageVersion) + $(MicrosoftExtensionsLoggingConsolePackageVersion) + $(MicrosoftExtensionsObjectPoolPackageVersion) + $(MicrosoftFSharpCompilerPackageVersion) + $(MicrosoftJSInteropPackageVersion) + $(MicrosoftNetCompilersToolsetPackageVersion) + $(MicrosoftNetCompilersToolsetFrameworkPackageVersion) + $(MicrosoftNETHostModelPackageVersion) + $(MicrosoftNETILLinkTasksPackageVersion) + $(MicrosoftNETRuntimeEmscripten3156Cachewinx64PackageVersion) + $(MicrosoftNETRuntimeEmscriptenSdkInternalPackageVersion) + $(MicrosoftNETSdkRazorSourceGeneratorsTransportPackageVersion) + $(MicrosoftNETSdkWindowsDesktopPackageVersion) + $(MicrosoftNETTestSdkPackageVersion) + $(MicrosoftNETCoreAppRefPackageVersion) + $(MicrosoftNETCorePlatformsPackageVersion) + $(MicrosoftSourceLinkAzureReposGitPackageVersion) + $(MicrosoftSourceLinkBitbucketGitPackageVersion) + $(MicrosoftSourceLinkCommonPackageVersion) + $(MicrosoftSourceLinkGitHubPackageVersion) + $(MicrosoftSourceLinkGitLabPackageVersion) + $(MicrosoftTemplateEngineAbstractionsPackageVersion) + $(MicrosoftTemplateEngineAuthoringTemplateVerifierPackageVersion) + $(MicrosoftTemplateEngineEdgePackageVersion) + $(MicrosoftTemplateEngineMocksPackageVersion) + $(MicrosoftTemplateEngineOrchestratorRunnableProjectsPackageVersion) + $(MicrosoftTemplateEngineTestHelperPackageVersion) + $(MicrosoftTemplateEngineUtilsPackageVersion) + $(MicrosoftTemplateSearchCommonPackageVersion) + $(MicrosoftTemplateSearchTemplateDiscoveryPackageVersion) + $(MicrosoftTestPlatformBuildPackageVersion) + $(MicrosoftTestPlatformCLIPackageVersion) + $(MicrosoftWebXdtPackageVersion) + $(MicrosoftWin32SystemEventsPackageVersion) + $(MicrosoftWindowsDesktopAppInternalPackageVersion) + $(MicrosoftWindowsDesktopAppRefPackageVersion) + $(NuGetBuildTasksPackageVersion) + $(NuGetBuildTasksConsolePackageVersion) + $(NuGetBuildTasksPackPackageVersion) + $(NuGetCommandLineXPlatPackageVersion) + $(NuGetCommandsPackageVersion) + $(NuGetCommonPackageVersion) + $(NuGetConfigurationPackageVersion) + $(NuGetCredentialsPackageVersion) + $(NuGetDependencyResolverCorePackageVersion) + $(NuGetFrameworksPackageVersion) + $(NuGetLibraryModelPackageVersion) + $(NuGetLocalizationPackageVersion) + $(NuGetPackagingPackageVersion) + $(NuGetProjectModelPackageVersion) + $(NuGetProtocolPackageVersion) + $(NuGetVersioningPackageVersion) + $(SystemCodeDomPackageVersion) + $(SystemCommandLinePackageVersion) + $(SystemComponentModelCompositionPackageVersion) + $(SystemCompositionAttributedModelPackageVersion) + $(SystemCompositionConventionPackageVersion) + $(SystemCompositionHostingPackageVersion) + $(SystemCompositionRuntimePackageVersion) + $(SystemCompositionTypedPartsPackageVersion) + $(SystemConfigurationConfigurationManagerPackageVersion) + $(SystemDiagnosticsDiagnosticSourcePackageVersion) + $(SystemFormatsAsn1PackageVersion) + $(SystemIOHashingPackageVersion) + $(SystemReflectionMetadataLoadContextPackageVersion) + $(SystemResourcesExtensionsPackageVersion) + $(SystemSecurityCryptographyPkcsPackageVersion) + $(SystemSecurityCryptographyProtectedDataPackageVersion) + $(SystemSecurityCryptographyXmlPackageVersion) + $(SystemSecurityPermissionsPackageVersion) + $(SystemServiceProcessServiceControllerPackageVersion) + $(SystemTextEncodingCodePagesPackageVersion) + $(SystemTextJsonPackageVersion) + $(SystemWindowsExtensionsPackageVersion) + + $(MicrosoftTestingPlatformPackageVersion) + $(MSTestPackageVersion) + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 701b540b2370..80c60a7b27a9 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,634 +1,577 @@ + - - https://github.com/dotnet/templating - 4d37977dc94f810e840dd0333fa786123189f995 - - - https://github.com/dotnet/templating - 4d37977dc94f810e840dd0333fa786123189f995 - - - - https://github.com/dotnet/templating - b73682307aa0128c5edbec94c2e6a070d13ae6bb - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - - https://github.com/dotnet/emsdk - 918f4eac9e7d238562abcc364ec417be11b108f0 - - - - https://github.com/dotnet/emsdk - 918f4eac9e7d238562abcc364ec417be11b108f0 - - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - - https://github.com/dotnet/msbuild - 2a0eb78b31025538b6e749ecd80dfabfcfa43a42 - - - - https://github.com/dotnet/fsharp - 14987c804f33917bf15f4c25e0cd16ecd01807f4 - - - - https://github.com/dotnet/fsharp - 14987c804f33917bf15f4c25e0cd16ecd01807f4 - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 - - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + 6a953e76162f3f079405f80e28664fa51b136740 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/devdiv/DevDiv/_git/NuGet-NuGet.Client-Trusted - 13eeb32d62833984c9367f8f4e22a120ebc03b47 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 - - - - https://github.com/microsoft/vstest - 51441adcd6c424ae7315d66ce7e96baf34d70369 - + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 46c3072d4539c2323f276f6282a7574feaa6a2a5 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 46c3072d4539c2323f276f6282a7574feaa6a2a5 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 46c3072d4539c2323f276f6282a7574feaa6a2a5 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-windowsdesktop - 46c3072d4539c2323f276f6282a7574feaa6a2a5 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - a01db3af68be8bfc869550b0be7cfc5881e4c685 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - - https://github.com/dotnet/razor - 41f3afd466695ac2460260431537fe4d779ff446 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-winforms - fe627979c58f8a0b591850cfebb46adb9002c69b - - - https://dev.azure.com/dnceng/internal/_git/dotnet-wpf - a01db3af68be8bfc869550b0be7cfc5881e4c685 - - - https://github.com/dotnet/xdt - 63ae81154c50a1cf9287cc47d8351d55b4289e6d - - - - https://github.com/dotnet/xdt - 63ae81154c50a1cf9287cc47d8351d55b4289e6d - - - - https://github.com/dotnet/roslyn-analyzers - 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 - - - https://github.com/dotnet/roslyn - 450493a9b4ec6337bced0120e97cb76f4ed783db - - - - https://github.com/dotnet/roslyn-analyzers - 04fb1b300056f8ef08045c4aed1bbb0a876ea9b8 - - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - - https://github.com/dotnet/symreader - 0710a7892d89999956e8808c28e9dd0512bd53f3 - - - - https://github.com/dotnet/command-line-api - 803d8598f98fb4efd94604b32627ee9407f246db - - - - - https://github.com/dotnet/source-build-externals - 71dbdccd13f28cfd1a35649263b55ebbeab26ee7 - - - - - https://github.com/dotnet/source-build-reference-packages - 6092b62b7f35fddbd6bf31e19b2ab64bbe2443ae - - - - https://github.com/dotnet/deployment-tools - b2d5c0c5841de4bc036ef4c84b5db3532504e5f3 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - - https://github.com/dotnet/sourcelink - 657ade4711e607cc4759e89e0943aa1ca8aadc63 - - - - - https://github.com/dotnet/deployment-tools - b2d5c0c5841de4bc036ef4c84b5db3532504e5f3 - - - - - https://github.com/dotnet/symreader - 0710a7892d89999956e8808c28e9dd0512bd53f3 - + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore - 324a351f7f1ae6c17b6a8661903e2a7921a7d75c + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 - - https://github.com/dotnet/arcade - e1240639569fad610705b52713d6d6b19f8fe433 - - - https://github.com/dotnet/arcade - e1240639569fad610705b52713d6d6b19f8fe433 - - - https://github.com/dotnet/arcade - e1240639569fad610705b52713d6d6b19f8fe433 - - - https://github.com/dotnet/arcade - e1240639569fad610705b52713d6d6b19f8fe433 - - - https://github.com/dotnet/arcade - e1240639569fad610705b52713d6d6b19f8fe433 - - - https://github.com/dotnet/arcade - e1240639569fad610705b52713d6d6b19f8fe433 - - - - https://github.com/dotnet/arcade - e1240639569fad610705b52713d6d6b19f8fe433 - - - - https://dev.azure.com/dnceng/internal/_git/dotnet-runtime - 4250c8399aa851d2d6a95efbdcc5c4c12311e024 - - - https://github.com/dotnet/arcade-services - e156e649f28395d9d0ee1e848225a689b59e0fd3 - - - https://github.com/dotnet/arcade-services - e156e649f28395d9d0ee1e848225a689b59e0fd3 - - - https://github.com/dotnet/scenario-tests - 0f750c53b3052a593c6daacc0d60eb8c0d2d9cf1 - - - - https://github.com/dotnet/scenario-tests - 0f750c53b3052a593c6daacc0d60eb8c0d2d9cf1 - - - - - https://github.com/dotnet/aspire - 5fa9337a84a52e9bd185d04d156eccbdcf592f74 - - - - https://github.com/dotnet/aspire - 5fa9337a84a52e9bd185d04d156eccbdcf592f74 - - - - https://github.com/dotnet/runtime - e77011b31a3e5c47d931248a64b47f9b2d47853d + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 + + + https://github.com/microsoft/testfx + 1ddd2f1a558e9c79b5327c5ccc0e9e89df39d4da + + + https://github.com/microsoft/testfx + 1ddd2f1a558e9c79b5327c5ccc0e9e89df39d4da + + + https://github.com/dotnet/dotnet + d14d02dd9f70268be43db2ae722433f7d4461fb8 diff --git a/eng/common/CIBuild.cmd b/eng/common/CIBuild.cmd index 56c2f25ac22f..ac1f72bf94e0 100644 --- a/eng/common/CIBuild.cmd +++ b/eng/common/CIBuild.cmd @@ -1,2 +1,2 @@ @echo off -powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" \ No newline at end of file +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 792b60b49d42..65ed3a8adef0 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -1,13 +1,14 @@ # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # # See example call for this script below. # # - task: PowerShell@2 -# displayName: Setup Private Feeds Credentials +# displayName: Setup internal Feeds Credentials # condition: eq(variables['Agent.OS'], 'Windows_NT') # inputs: # filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 @@ -34,19 +35,28 @@ Set-StrictMode -Version 2.0 . $PSScriptRoot\tools.ps1 +# Adds or enables the package source with the given name +function AddOrEnablePackageSource($sources, $disabledPackageSources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { + if ($disabledPackageSources -eq $null -or -not (EnableInternalPackageSource -DisabledPackageSources $disabledPackageSources -Creds $creds -PackageSourceName $SourceName)) { + AddPackageSource -Sources $sources -SourceName $SourceName -SourceEndPoint $SourceEndPoint -Creds $creds -Username $userName -pwd $Password + } +} + # Add source entry to PackageSources function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']") if ($packageSource -eq $null) { + Write-Host "Adding package source $SourceName" + $packageSource = $doc.CreateElement("add") $packageSource.SetAttribute("key", $SourceName) $packageSource.SetAttribute("value", $SourceEndPoint) $sources.AppendChild($packageSource) | Out-Null } else { - Write-Host "Package source $SourceName already present." + Write-Host "Package source $SourceName already present and enabled." } AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd @@ -59,6 +69,8 @@ function AddCredential($creds, $source, $username, $pwd) { return; } + Write-Host "Inserting credential for feed: " $source + # Looks for credential configuration for the given SourceName. Create it if none is found. $sourceElement = $creds.SelectSingleNode($Source) if ($sourceElement -eq $null) @@ -91,24 +103,27 @@ function AddCredential($creds, $source, $username, $pwd) { $passwordElement.SetAttribute("value", $pwd) } -function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) { - $maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]") - - Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds." - - ForEach ($PackageSource in $maestroPrivateSources) { - Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key - AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd +# Enable all darc-int package sources. +function EnableMaestroInternalPackageSources($DisabledPackageSources, $Creds) { + $maestroInternalSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") + ForEach ($DisabledPackageSource in $maestroInternalSources) { + EnableInternalPackageSource -DisabledPackageSources $DisabledPackageSources -Creds $Creds -PackageSourceName $DisabledPackageSource.key } } -function EnablePrivatePackageSources($DisabledPackageSources) { - $maestroPrivateSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") - ForEach ($DisabledPackageSource in $maestroPrivateSources) { - Write-Host "`tEnsuring private source '$($DisabledPackageSource.key)' is enabled by deleting it from disabledPackageSource" +# Enables an internal package source by name, if found. Returns true if the package source was found and enabled, false otherwise. +function EnableInternalPackageSource($DisabledPackageSources, $Creds, $PackageSourceName) { + $DisabledPackageSource = $DisabledPackageSources.SelectSingleNode("add[@key='$PackageSourceName']") + if ($DisabledPackageSource) { + Write-Host "Enabling internal source '$($DisabledPackageSource.key)'." + # Due to https://github.com/NuGet/Home/issues/10291, we must actually remove the disabled entries $DisabledPackageSources.RemoveChild($DisabledPackageSource) + + AddCredential -Creds $creds -Source $DisabledPackageSource.Key -Username $userName -pwd $Password + return $true } + return $false } if (!(Test-Path $ConfigFile -PathType Leaf)) { @@ -121,15 +136,17 @@ $doc = New-Object System.Xml.XmlDocument $filename = (Get-Item $ConfigFile).FullName $doc.Load($filename) -# Get reference to or create one if none exist already +# Get reference to - fail if none exist $sources = $doc.DocumentElement.SelectSingleNode("packageSources") if ($sources -eq $null) { - $sources = $doc.CreateElement("packageSources") - $doc.DocumentElement.AppendChild($sources) | Out-Null + Write-PipelineTelemetryError -Category 'Build' -Message "Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 } $creds = $null +$feedSuffix = "v3/index.json" if ($Password) { + $feedSuffix = "v2" # Looks for a node. Create it if none is found. $creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials") if ($creds -eq $null) { @@ -138,34 +155,35 @@ if ($Password) { } } +$userName = "dn-bot" + # Check for disabledPackageSources; we'll enable any darc-int ones we find there $disabledSources = $doc.DocumentElement.SelectSingleNode("disabledPackageSources") if ($disabledSources -ne $null) { Write-Host "Checking for any darc-int disabled package sources in the disabledPackageSources node" - EnablePrivatePackageSources -DisabledPackageSources $disabledSources + EnableMaestroInternalPackageSources -DisabledPackageSources $disabledSources -Creds $creds } - -$userName = "dn-bot" - -# Insert credential nodes for Maestro's private feeds -InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password - -# 3.1 uses a different feed url format so it's handled differently here -$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") -if ($dotnet31Source -ne $null) { - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password -} - -$dotnetVersions = @('5','6','7','8','9') +$dotnetVersions = @('5','6','7','8','9','10') foreach ($dotnetVersion in $dotnetVersions) { $feedPrefix = "dotnet" + $dotnetVersion; $dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']") if ($dotnetSource -ne $null) { - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password } } +# Check for dotnet-eng and add dotnet-eng-internal if present +$dotnetEngSource = $sources.SelectSingleNode("add[@key='dotnet-eng']") +if ($dotnetEngSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-eng-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + +# Check for dotnet-tools and add dotnet-tools-internal if present +$dotnetToolsSource = $sources.SelectSingleNode("add[@key='dotnet-tools']") +if ($dotnetToolsSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-tools-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + $doc.Save($filename) diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh old mode 100644 new mode 100755 index facb415ca6ff..b2163abbe71b --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # @@ -52,81 +53,139 @@ if [[ `uname -s` == "Darwin" ]]; then TB='' fi -# Ensure there is a ... section. -grep -i "" $ConfigFile -if [ "$?" != "0" ]; then - echo "Adding ... section." - ConfigNodeHeader="" - PackageSourcesTemplate="${TB}${NL}${TB}" +# Enables an internal package source by name, if found. Returns 0 if found and enabled, 1 if not found. +EnableInternalPackageSource() { + local PackageSourceName="$1" + + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return 1 # No disabled sources section + fi + + # Check if this source name is disabled + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Enabling internal source '$PackageSourceName'." + # Remove the disabled entry (including any surrounding comments or whitespace on the same line) + sed -i.bak "//d" "$ConfigFile" + + # Add the source name to PackageSources for credential handling + PackageSources+=("$PackageSourceName") + return 0 # Found and enabled + fi + + return 1 # Not found in disabled sources +} + +# Add source entry to PackageSources +AddPackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Check if source already exists + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Package source $SourceName already present and enabled." + PackageSources+=("$SourceName") + return + fi + + echo "Adding package source $SourceName" + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" "$ConfigFile" + PackageSources+=("$SourceName") +} + +# Adds or enables the package source with the given name +AddOrEnablePackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Try to enable if disabled, if not found then add new source + EnableInternalPackageSource "$SourceName" + if [ "$?" != "0" ]; then + AddPackageSource "$SourceName" "$SourceEndPoint" + fi +} - sed -i.bak "s|$ConfigNodeHeader|$ConfigNodeHeader${NL}$PackageSourcesTemplate|" $ConfigFile -fi +# Enable all darc-int package sources +EnableMaestroInternalPackageSources() { + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return # No disabled sources section + fi + + # Find all darc-int disabled sources + local DisabledDarcIntSources=() + DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' "$ConfigFile" | tr -d '"') + + for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do + if [[ $DisabledSourceName == darc-int* ]]; then + EnableInternalPackageSource "$DisabledSourceName" + fi + done +} -# Ensure there is a ... section. -grep -i "" $ConfigFile +# Ensure there is a ... section. +grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding ... section." - - PackageSourcesNodeFooter="" - PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile + Write-PipelineTelemetryError -Category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 fi PackageSources=() -# Ensure dotnet3.1-internal and dotnet3.1-internal-transport are in the packageSources if the public dotnet3.1 feeds are present -grep -i "... section. + grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + echo "Adding ... section." - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=('dotnet3.1-internal') - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal-transport to the packageSources." PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile fi - PackageSources+=('dotnet3.1-internal-transport') fi -DotNetVersions=('5' '6' '7' '8' '9') +# Check for disabledPackageSources; we'll enable any darc-int ones we find there +grep -i "" $ConfigFile > /dev/null +if [ "$?" == "0" ]; then + echo "Checking for any darc-int disabled package sources in the disabledPackageSources node" + EnableMaestroInternalPackageSources +fi + +DotNetVersions=('5' '6' '7' '8' '9' '10') for DotNetVersion in ${DotNetVersions[@]} ; do FeedPrefix="dotnet${DotNetVersion}"; - grep -i " /dev/null if [ "$?" == "0" ]; then - grep -i "" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal") - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding $FeedPrefix-internal-transport to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal-transport") + AddOrEnablePackageSource "$FeedPrefix-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal/nuget/$FeedSuffix" + AddOrEnablePackageSource "$FeedPrefix-internal-transport" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal-transport/nuget/$FeedSuffix" fi done +# Check for dotnet-eng and add dotnet-eng-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-eng-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$FeedSuffix" +fi + +# Check for dotnet-tools and add dotnet-tools-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-tools-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$FeedSuffix" +fi + # I want things split line by line PrevIFS=$IFS IFS=$'\n' @@ -139,29 +198,12 @@ if [ "$CredToken" ]; then # Check if there is no existing credential for this FeedName grep -i "<$FeedName>" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding credentials for $FeedName." + echo " Inserting credential for feed: $FeedName" PackageSourceCredentialsNodeFooter="" - NewCredential="${TB}${TB}<$FeedName>${NL}${NL}${NL}" + NewCredential="${TB}${TB}<$FeedName>${NL}${TB}${NL}${TB}${TB}${NL}${TB}${TB}" sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" $ConfigFile fi done fi - -# Re-enable any entries in disabledPackageSources where the feed name contains darc-int -grep -i "" $ConfigFile -if [ "$?" == "0" ]; then - DisabledDarcIntSources=() - echo "Re-enabling any disabled \"darc-int\" package sources in $ConfigFile" - DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' $ConfigFile | tr -d '"') - for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do - if [[ $DisabledSourceName == darc-int* ]] - then - OldDisableValue="" - NewDisableValue="" - sed -i.bak "s|$OldDisableValue|$NewDisableValue|" $ConfigFile - echo "Neutralized disablePackageSources entry for '$DisabledSourceName'" - fi - done -fi diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 438f9920c43e..8cfee107e7a3 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -7,6 +7,7 @@ Param( [string] $msbuildEngine = $null, [bool] $warnAsError = $true, [bool] $nodeReuse = $true, + [switch] $buildCheck = $false, [switch][Alias('r')]$restore, [switch] $deployDeps, [switch][Alias('b')]$build, @@ -20,6 +21,7 @@ Param( [switch] $publish, [switch] $clean, [switch][Alias('pb')]$productBuild, + [switch]$fromVMR, [switch][Alias('bl')]$binaryLog, [switch][Alias('nobl')]$excludeCIBinarylog, [switch] $ci, @@ -71,6 +73,9 @@ function Print-Usage() { Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio" Write-Host " -nativeToolsOnMachine Sets the native tools on machine environment variable (indicating that the script should use native tools on machine)" + Write-Host " -nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" + Write-Host " -buildCheck Sets /check msbuild parameter" + Write-Host " -fromVMR Set when building from within the VMR" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." @@ -97,6 +102,7 @@ function Build { $bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'Build.binlog') } else { '' } $platformArg = if ($platform) { "/p:Platform=$platform" } else { '' } + $check = if ($buildCheck) { '/check' } else { '' } if ($projects) { # Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons. @@ -113,6 +119,7 @@ function Build { MSBuild $toolsetBuildProj ` $bl ` $platformArg ` + $check ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` /p:Restore=$restore ` @@ -122,11 +129,13 @@ function Build { /p:Deploy=$deploy ` /p:Test=$test ` /p:Pack=$pack ` - /p:DotNetBuildRepo=$productBuild ` + /p:DotNetBuild=$productBuild ` + /p:DotNetBuildFromVMR=$fromVMR ` /p:IntegrationTest=$integrationTest ` /p:PerformanceTest=$performanceTest ` /p:Sign=$sign ` /p:Publish=$publish ` + /p:RestoreStaticGraphEnableBinaryLogger=$binaryLog ` @properties } diff --git a/eng/common/build.sh b/eng/common/build.sh index ac1ee8620cd2..9767bb411a4f 100755 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -42,6 +42,8 @@ usage() echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" + echo " --buildCheck Sets /check msbuild parameter" + echo " --fromVMR Set when building from within the VMR" echo "" echo "Command line arguments not listed above are passed thru to msbuild." echo "Arguments can also be passed in with a single hyphen." @@ -63,6 +65,7 @@ restore=false build=false source_build=false product_build=false +from_vmr=false rebuild=false test=false integration_test=false @@ -76,6 +79,7 @@ clean=false warn_as_error=true node_reuse=true +build_check=false binary_log=false exclude_ci_binary_log=false pipelines_log=false @@ -87,7 +91,7 @@ verbosity='minimal' runtime_source_feed='' runtime_source_feed_key='' -properties='' +properties=() while [[ $# > 0 ]]; do opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in @@ -127,19 +131,22 @@ while [[ $# > 0 ]]; do -pack) pack=true ;; - -sourcebuild|-sb) + -sourcebuild|-source-build|-sb) build=true source_build=true product_build=true restore=true pack=true ;; - -productBuild|-pb) + -productbuild|-product-build|-pb) build=true product_build=true restore=true pack=true ;; + -fromvmr|-from-vmr) + from_vmr=true + ;; -test|-t) test=true ;; @@ -173,6 +180,9 @@ while [[ $# > 0 ]]; do node_reuse=$2 shift ;; + -buildcheck) + build_check=true + ;; -runtimesourcefeed) runtime_source_feed=$2 shift @@ -182,7 +192,7 @@ while [[ $# > 0 ]]; do shift ;; *) - properties="$properties $1" + properties+=("$1") ;; esac @@ -216,7 +226,7 @@ function Build { InitializeCustomToolset if [[ ! -z "$projects" ]]; then - properties="$properties /p:Projects=$projects" + properties+=("/p:Projects=$projects") fi local bl="" @@ -224,15 +234,21 @@ function Build { bl="/bl:\"$log_dir/Build.binlog\"" fi + local check="" + if [[ "$build_check" == true ]]; then + check="/check" + fi + MSBuild $_InitializeToolset \ $bl \ + $check \ /p:Configuration=$configuration \ /p:RepoRoot="$repo_root" \ /p:Restore=$restore \ /p:Build=$build \ - /p:DotNetBuildRepo=$product_build \ - /p:ArcadeBuildFromSource=$source_build \ + /p:DotNetBuild=$product_build \ /p:DotNetBuildSourceOnly=$source_build \ + /p:DotNetBuildFromVMR=$from_vmr \ /p:Rebuild=$rebuild \ /p:Test=$test \ /p:Pack=$pack \ @@ -240,7 +256,8 @@ function Build { /p:PerformanceTest=$performance_test \ /p:Sign=$sign \ /p:Publish=$publish \ - $properties + /p:RestoreStaticGraphEnableBinaryLogger=$binary_log \ + ${properties[@]+"${properties[@]}"} ExitWithExitCode 0 } diff --git a/eng/common/cibuild.sh b/eng/common/cibuild.sh index 1a02c0dec8fd..66e3b0ac61c3 100755 --- a/eng/common/cibuild.sh +++ b/eng/common/cibuild.sh @@ -13,4 +13,4 @@ while [[ -h $source ]]; do done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ \ No newline at end of file +. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index 8da43d3b5837..eaed6d87e653 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -19,17 +19,17 @@ parameters: # publishing defaults artifacts: '' enableMicrobuild: false + enableMicrobuildForMacAndLinux: false microbuildUseESRP: true enablePublishBuildArtifacts: false enablePublishBuildAssets: false enablePublishTestResults: false - enablePublishUsingPipelines: false + enablePublishing: false enableBuildRetry: false mergeTestResults: false testRunTitle: '' testResultsFormat: '' name: '' - componentGovernanceSteps: [] preSteps: [] artifactPublishSteps: [] runAsPublic: false @@ -74,9 +74,6 @@ jobs: - ${{ if ne(parameters.enableTelemetry, 'false') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE value: '$(Build.Repository.Uri)' - - ${{ if eq(parameters.enableRichCodeNavigation, 'true') }}: - - name: EnableRichCodeNavigation - value: 'true' # Retry signature validation up to three times, waiting 2 seconds between attempts. # See https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028#retry-untrusted-root-failures - name: NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY @@ -128,23 +125,12 @@ jobs: - ${{ preStep }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin - inputs: - signType: $(_SignType) - zipSources: false - feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json - ${{ if eq(parameters.microbuildUseESRP, true) }}: - ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: - ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea - ${{ else }}: - ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca - env: - TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: '$(Agent.TempDirectory)' + - template: /eng/common/core-templates/steps/install-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} + microbuildUseESRP: ${{ parameters.microbuildUseESRP }} continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) - ${{ if and(eq(parameters.runAsPublic, 'false'), eq(variables['System.TeamProject'], 'internal')) }}: - task: NuGetAuthenticate@1 @@ -160,27 +146,12 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} - - ${{ if eq(parameters.enableRichCodeNavigation, true) }}: - - task: RichCodeNavIndexer@0 - displayName: RichCodeNav Upload - inputs: - languages: ${{ coalesce(parameters.richCodeNavigationLanguage, 'csharp') }} - environment: ${{ coalesce(parameters.richCodeNavigationEnvironment, 'internal') }} - richNavLogOutputDirectory: $(System.DefaultWorkingDirectory)/artifacts/bin - uploadRichNavArtifacts: ${{ coalesce(parameters.richCodeNavigationUploadArtifacts, false) }} - continueOnError: true - - - ${{ each step in parameters.componentGovernanceSteps }}: - - ${{ step }} - - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: MicroBuildCleanup@1 - displayName: Execute Microbuild cleanup tasks - condition: and(always(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: /eng/common/core-templates/steps/cleanup-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} continueOnError: ${{ parameters.continueOnError }} - env: - TeamName: $(_TeamName) # Publish test results - ${{ if or(and(eq(parameters.enablePublishTestResults, 'true'), eq(parameters.testResultsFormat, '')), eq(parameters.testResultsFormat, 'xunit')) }}: diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index edefa789d360..eefed3b667a4 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -4,7 +4,7 @@ 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) @@ -27,7 +27,7 @@ parameters: is1ESPipeline: '' jobs: - job: OneLocBuild${{ parameters.JobNameSuffix }} - + dependsOn: ${{ parameters.dependsOn }} displayName: OneLocBuild${{ parameters.JobNameSuffix }} @@ -52,13 +52,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows steps: @@ -86,8 +86,7 @@ jobs: isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }} ${{ if eq(parameters.CreatePr, true) }}: isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} - ${{ if eq(parameters.RepoType, 'gitHub') }}: - isShouldReusePrSelected: ${{ parameters.ReusePr }} + isShouldReusePrSelected: ${{ parameters.ReusePr }} packageSourceAuth: patAuth patVariable: ${{ parameters.CeapexPat }} ${{ if eq(parameters.RepoType, 'gitHub') }}: @@ -100,22 +99,20 @@ jobs: mirrorBranch: ${{ parameters.MirrorBranch }} condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} - args: - displayName: Publish Localization Files - pathToPublish: '$(Build.ArtifactStagingDirectory)/loc' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} + # Copy the locProject.json to the root of the Loc directory, then publish a pipeline artifact + - task: CopyFiles@2 + displayName: Copy LocProject.json + inputs: + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/Localize/' + Contents: 'LocProject.json' + TargetFolder: '$(Build.ArtifactStagingDirectory)/loc' + condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: - displayName: Publish LocProject.json - pathToPublish: '$(System.DefaultWorkingDirectory)/eng/Localize/' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} \ No newline at end of file + targetPath: '$(Build.ArtifactStagingDirectory)/loc' + artifactName: 'Loc' + displayName: 'Publish Localization Files' + condition: ${{ parameters.condition }} diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index 3cb20fb5041f..06f2eed0323d 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -20,9 +20,6 @@ parameters: # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing - publishUsingPipelines: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing publishAssetsImmediately: false @@ -32,6 +29,15 @@ parameters: is1ESPipeline: '' + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + + # Optional, publishing version + publishingVersion: 3 + + # Optional: A minimatch pattern for the asset manifests to publish to BAR + assetManifestsPattern: '*/manifests/**/*.xml' + repositoryAlias: self officialBuildId: '' @@ -68,13 +74,13 @@ jobs: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ if ne(variables['System.TeamProject'], 'DevDiv') }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -84,18 +90,44 @@ jobs: - checkout: ${{ parameters.repositoryAlias }} fetchDepth: 3 clean: true - - - task: DownloadBuildArtifacts@0 - displayName: Download artifact - inputs: - artifactName: AssetManifests - downloadPath: '$(Build.StagingDirectory)/Download' - checkDownloadedFiles: true - condition: ${{ parameters.condition }} - continueOnError: ${{ parameters.continueOnError }} + + - ${{ if eq(parameters.isAssetlessBuild, 'false') }}: + - ${{ if eq(parameters.publishingVersion, 3) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Asset Manifests + inputs: + artifactName: AssetManifests + targetPath: '$(Build.StagingDirectory)/AssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - ${{ if eq(parameters.publishingVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download V4 asset manifests + inputs: + itemPattern: '*/manifests/**/*.xml' + targetPath: '$(Build.StagingDirectory)/AllAssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - task: CopyFiles@2 + displayName: Copy V4 asset manifests to AssetManifests + inputs: + SourceFolder: '$(Build.StagingDirectory)/AllAssetManifests' + Contents: ${{ parameters.assetManifestsPattern }} + TargetFolder: '$(Build.StagingDirectory)/AssetManifests' + flattenFolders: true + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} - task: NuGetAuthenticate@1 + # Populate internal runtime variables. + - template: /eng/common/templates/steps/enable-internal-sources.yml + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + + - template: /eng/common/templates/steps/enable-internal-runtimes.yml + - task: AzureCLI@2 displayName: Publish Build Assets inputs: @@ -104,10 +136,13 @@ jobs: scriptLocation: scriptPath scriptPath: $(System.DefaultWorkingDirectory)/eng/common/sdk-task.ps1 arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet - /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' + /p:ManifestsPath='$(Build.StagingDirectory)/AssetManifests' + /p:IsAssetlessBuild=${{ parameters.isAssetlessBuild }} /p:MaestroApiEndpoint=https://maestro.dot.net - /p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }} /p:OfficialBuildId=$(OfficialBuildId) + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' + condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} @@ -129,16 +164,28 @@ jobs: Copy-Item -Path $symbolExclusionfile -Destination "$(Build.StagingDirectory)/ReleaseConfigs" } - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - ${{ if eq(parameters.publishingVersion, 4) }}: + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + parameters: + is1ESPipeline: ${{ parameters.is1ESPipeline }} + args: + targetPath: '$(Build.ArtifactStagingDirectory)/MergedManifest.xml' + artifactName: AssetManifests + displayName: 'Publish Merged Manifest' + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # just metadata for publishing + + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish ReleaseConfigs Artifact - pathToPublish: '$(Build.StagingDirectory)/ReleaseConfigs' - publishLocation: Container + targetPath: '$(Build.StagingDirectory)/ReleaseConfigs' artifactName: ReleaseConfigs + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # just metadata for publishing - - ${{ if eq(parameters.publishAssetsImmediately, 'true') }}: + - ${{ if or(eq(parameters.publishAssetsImmediately, 'true'), eq(parameters.isAssetlessBuild, 'true')) }}: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: BARBuildId: ${{ parameters.BARBuildId }} @@ -164,9 +211,13 @@ jobs: -WaitPublishingFinish true -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - template: /eng/common/core-templates/steps/publish-logs.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - JobLabel: 'Publish_Artifacts_Logs' + StageLabel: 'BuildAssetRegistry' + JobLabel: 'Publish_Artifacts_Logs' diff --git a/eng/common/core-templates/job/source-build.yml b/eng/common/core-templates/job/source-build.yml index d943748ac10e..1997c2ae00d7 100644 --- a/eng/common/core-templates/job/source-build.yml +++ b/eng/common/core-templates/job/source-build.yml @@ -12,9 +12,10 @@ parameters: # The name of the job. This is included in the job ID. # targetRID: '' # The name of the target RID to use, instead of the one auto-detected by Arcade. - # nonPortable: false + # portableBuild: false # Enables non-portable mode. This means a more specific RID (e.g. fedora.32-x64 rather than - # linux-x64), and compiling against distro-provided packages rather than portable ones. + # linux-x64), and compiling against distro-provided packages rather than portable ones. The + # default is portable mode. # skipPublishValidation: false # Disables publishing validation. By default, a check is performed to ensure no packages are # published by source-build. @@ -33,9 +34,6 @@ parameters: # container and pool. platform: {} - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: '' # If set to true and running on a non-public project, @@ -62,7 +60,7 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] - demands: ImageOverride -equals build.ubuntu.2004.amd64 + demands: ImageOverride -equals build.azurelinux.3.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] image: build.azurelinux.3.amd64 @@ -71,10 +69,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore-Svc-Public' ), False, 'NetCore-Public')] - demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open + demands: ImageOverride -equals build.azurelinux.3.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $[replace(replace(eq(contains(coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranch'], 'refs/heads/main'), 'release'), 'true'), True, 'NetCore1ESPool-Svc-Internal'), False, 'NetCore1ESPool-Internal')] - demands: ImageOverride -equals Build.Ubuntu.2204.Amd64 + demands: ImageOverride -equals build.azurelinux.3.amd64 ${{ if ne(parameters.platform.pool, '') }}: pool: ${{ parameters.platform.pool }} @@ -96,4 +94,3 @@ jobs: parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} platform: ${{ parameters.platform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} diff --git a/eng/common/core-templates/job/source-index-stage1.yml b/eng/common/core-templates/job/source-index-stage1.yml index ddf8c2e00d80..76baf5c27258 100644 --- a/eng/common/core-templates/job/source-index-stage1.yml +++ b/eng/common/core-templates/job/source-index-stage1.yml @@ -1,8 +1,5 @@ parameters: runAsPublic: false - sourceIndexUploadPackageVersion: 2.0.0-20250425.2 - sourceIndexProcessBinlogPackageVersion: 1.0.1-20250425.2 - sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" preSteps: [] binlogPath: artifacts/log/Debug/Build.binlog @@ -16,12 +13,6 @@ jobs: dependsOn: ${{ parameters.dependsOn }} condition: ${{ parameters.condition }} variables: - - name: SourceIndexUploadPackageVersion - value: ${{ parameters.sourceIndexUploadPackageVersion }} - - name: SourceIndexProcessBinlogPackageVersion - value: ${{ parameters.sourceIndexProcessBinlogPackageVersion }} - - name: SourceIndexPackageSource - value: ${{ parameters.sourceIndexPackageSource }} - name: BinlogPath value: ${{ parameters.binlogPath }} - template: /eng/common/core-templates/variables/pool-providers.yml @@ -34,12 +25,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - image: 1es-windows-2022-open - os: windows + image: windows.vs2026preview.scout.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 - os: windows + image: windows.vs2026preview.scout.amd64 steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -47,35 +36,9 @@ jobs: - ${{ each preStep in parameters.preSteps }}: - ${{ preStep }} - - - task: UseDotNet@2 - displayName: Use .NET 8 SDK - inputs: - packageType: sdk - version: 8.0.x - installationPath: $(Agent.TempDirectory)/dotnet - workingDirectory: $(Agent.TempDirectory) - - - script: | - $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(sourceIndexProcessBinlogPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(sourceIndexUploadPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - displayName: Download Tools - # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. - workingDirectory: $(Agent.TempDirectory) - - script: ${{ parameters.sourceIndexBuildCommand }} displayName: Build Repository - - script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i $(BinlogPath) -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output - displayName: Process Binlog into indexable sln - - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: AzureCLI@2 - displayName: Log in to Azure and upload stage1 artifacts to source index - inputs: - azureSubscription: 'SourceDotNet Stage1 Publish' - addSpnToEnvironment: true - scriptType: 'ps' - scriptLocation: 'inlineScript' - inlineScript: | - $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 + - template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + binLogPath: ${{ parameters.binLogPath }} diff --git a/eng/common/core-templates/jobs/codeql-build.yml b/eng/common/core-templates/jobs/codeql-build.yml index 4571a7864df6..dbc14ac580a2 100644 --- a/eng/common/core-templates/jobs/codeql-build.yml +++ b/eng/common/core-templates/jobs/codeql-build.yml @@ -15,7 +15,6 @@ jobs: enablePublishBuildArtifacts: false enablePublishTestResults: false enablePublishBuildAssets: false - enablePublishUsingPipelines: false enableTelemetry: true variables: diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index bf33cdc2cc77..cc8cce452786 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -5,9 +5,6 @@ parameters: # Optional: Include PublishBuildArtifacts task enablePublishBuildArtifacts: false - # Optional: Enable publishing using release pipelines - enablePublishUsingPipelines: false - # Optional: Enable running the source-build jobs to build repo from source enableSourceBuild: false @@ -30,6 +27,9 @@ parameters: # Optional: Publish the assets as soon as the publish to BAR stage is complete, rather doing so in a separate stage. publishAssetsImmediately: false + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + # Optional: If using publishAssetsImmediately and additional parameters are needed, can be used to send along additional parameters (normally sent to post-build.yml) artifactsPublishingAdditionalParameters: '' signingValidationAdditionalParameters: '' @@ -43,6 +43,10 @@ parameters: artifacts: {} is1ESPipeline: '' + + # Publishing version w/default. + publishingVersion: 3 + repositoryAlias: self officialBuildId: '' @@ -85,7 +89,6 @@ jobs: - template: /eng/common/core-templates/jobs/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - allCompletedJobId: Source_Build_Complete ${{ each parameter in parameters.sourceBuildParameters }}: ${{ parameter.key }}: ${{ parameter.value }} @@ -98,11 +101,12 @@ jobs: ${{ parameter.key }}: ${{ parameter.value }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: + - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, ''), eq(parameters.isAssetlessBuild, true)) }}: - template: ../job/publish-build-assets.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} continueOnError: ${{ parameters.continueOnError }} + publishingVersion: ${{ parameters.publishingVersion }} dependsOn: - ${{ if ne(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.publishBuildAssetsDependsOn }}: @@ -110,12 +114,10 @@ jobs: - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.jobs }}: - ${{ job.job }} - - ${{ if eq(parameters.enableSourceBuild, true) }}: - - Source_Build_Complete runAsPublic: ${{ parameters.runAsPublic }} - publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} - publishAssetsImmediately: ${{ parameters.publishAssetsImmediately }} + publishAssetsImmediately: ${{ or(parameters.publishAssetsImmediately, parameters.isAssetlessBuild) }} + isAssetlessBuild: ${{ parameters.isAssetlessBuild }} enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }} diff --git a/eng/common/core-templates/jobs/source-build.yml b/eng/common/core-templates/jobs/source-build.yml index 0b408a67bd51..d92860cba208 100644 --- a/eng/common/core-templates/jobs/source-build.yml +++ b/eng/common/core-templates/jobs/source-build.yml @@ -2,28 +2,19 @@ parameters: # This template adds arcade-powered source-build to CI. A job is created for each platform, as # well as an optional server job that completes when all platform jobs complete. - # The name of the "join" job for all source-build platforms. If set to empty string, the job is - # not included. Existing repo pipelines can use this job depend on all source-build jobs - # completing without maintaining a separate list of every single job ID: just depend on this one - # server job. By default, not included. Recommended name if used: 'Source_Build_Complete'. - allCompletedJobId: '' - # See /eng/common/core-templates/job/source-build.yml jobNamePrefix: 'Source_Build' # This is the default platform provided by Arcade, intended for use by a managed-only repo. defaultManagedPlatform: name: 'Managed' - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9' + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-10-amd64' # Defines the platforms on which to run build jobs. One job is created for each platform, and the # object in this array is sent to the job template as 'platform'. If no platforms are specified, # one job runs on 'defaultManagedPlatform'. platforms: [] - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: '' # If set to true and running on a non-public project, @@ -34,23 +25,12 @@ parameters: jobs: -- ${{ if ne(parameters.allCompletedJobId, '') }}: - - job: ${{ parameters.allCompletedJobId }} - displayName: Source-Build Complete - pool: server - dependsOn: - - ${{ each platform in parameters.platforms }}: - - ${{ parameters.jobNamePrefix }}_${{ platform.name }} - - ${{ if eq(length(parameters.platforms), 0) }}: - - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }} - - ${{ each platform in parameters.platforms }}: - template: /eng/common/core-templates/job/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ platform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} enableInternalSources: ${{ parameters.enableInternalSources }} - ${{ if eq(length(parameters.platforms), 0) }}: @@ -59,5 +39,4 @@ jobs: is1ESPipeline: ${{ parameters.is1ESPipeline }} jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ parameters.defaultManagedPlatform }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} enableInternalSources: ${{ parameters.enableInternalSources }} diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index 864427d9694a..905a6315e2d5 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -9,6 +9,7 @@ parameters: default: 3 values: - 3 + - 4 - name: BARBuildId displayName: BAR Build Id @@ -60,6 +61,11 @@ parameters: artifactNames: '' downloadArtifacts: true + - name: isAssetlessBuild + type: boolean + displayName: Is Assetless Build + default: false + # These parameters let the user customize the call to sdk-task.ps1 for publishing # symbols & general artifacts as well as for signing validation - name: symbolPublishingAdditionalParameters @@ -115,18 +121,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: windows.vs2022.amd64 + image: windows.vs2026preview.scout.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -135,16 +141,30 @@ stages: PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(AzDOProjectName) - pipeline: $(AzDOPipelineId) - buildId: $(AzDOBuildId) - artifactName: PackageArtifacts - checkDownloadedFiles: true + - ${{ if ne(parameters.publishingInfraVersion, 4) }}: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: PackageArtifacts + checkDownloadedFiles: true + - ${{ if eq(parameters.publishingInfraVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Pipeline Artifacts (V4) + inputs: + itemPattern: '*/packages/**/*.nupkg' + targetPath: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + - task: CopyFiles@2 + displayName: Flatten packages to PackageArtifacts + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + Contents: '**/*.nupkg' + TargetFolder: '$(Build.ArtifactStagingDirectory)/PackageArtifacts' + flattenFolders: true - task: PowerShell@2 displayName: Validate @@ -159,18 +179,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -178,19 +198,30 @@ stages: PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(AzDOProjectName) - pipeline: $(AzDOPipelineId) - buildId: $(AzDOBuildId) - artifactName: PackageArtifacts - checkDownloadedFiles: true - itemPattern: | - ** - !**/Microsoft.SourceBuild.Intermediate.*.nupkg + - ${{ if ne(parameters.publishingInfraVersion, 4) }}: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: PackageArtifacts + checkDownloadedFiles: true + - ${{ if eq(parameters.publishingInfraVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Pipeline Artifacts (V4) + inputs: + itemPattern: '*/packages/**/*.nupkg' + targetPath: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + - task: CopyFiles@2 + displayName: Flatten packages to PackageArtifacts + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + Contents: '**/*.nupkg' + TargetFolder: '$(Build.ArtifactStagingDirectory)/PackageArtifacts' + flattenFolders: true # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -223,18 +254,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026preview.scout.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -242,16 +273,30 @@ stages: PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(AzDOProjectName) - pipeline: $(AzDOPipelineId) - buildId: $(AzDOBuildId) - artifactName: BlobArtifacts - checkDownloadedFiles: true + - ${{ if ne(parameters.publishingInfraVersion, 4) }}: + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: BlobArtifacts + checkDownloadedFiles: true + - ${{ if eq(parameters.publishingInfraVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Pipeline Artifacts (V4) + inputs: + itemPattern: '*/assets/**' + targetPath: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + - task: CopyFiles@2 + displayName: Flatten assets to BlobArtifacts + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' + Contents: '**/*' + TargetFolder: '$(Build.ArtifactStagingDirectory)/BlobArtifacts' + flattenFolders: true - task: PowerShell@2 displayName: Validate @@ -284,18 +329,18 @@ stages: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: name: AzurePipelines-EO - image: 1ESPT-Windows2022 + image: 1ESPT-Windows2025 demands: Cmd os: windows # If it's not devdiv, it's dnceng ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal - image: windows.vs2022.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: NetCore1ESPool-Publishing-Internal - demands: ImageOverride -equals windows.vs2022.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: @@ -305,6 +350,13 @@ stages: - task: NuGetAuthenticate@1 + # Populate internal runtime variables. + - template: /eng/common/templates/steps/enable-internal-sources.yml + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + + - template: /eng/common/templates/steps/enable-internal-runtimes.yml + # Darc is targeting 8.0, so make sure it's installed - task: UseDotNet@2 inputs: @@ -319,9 +371,12 @@ stages: scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 arguments: > -BuildId $(BARBuildId) - -PublishingInfraVersion ${{ parameters.publishingInfraVersion }} + -PublishingInfraVersion 3 -AzdoToken '$(System.AccessToken)' -WaitPublishingFinish true -RequireDefaultChannels ${{ parameters.requireDefaultChannels }} -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' diff --git a/eng/common/core-templates/post-build/setup-maestro-vars.yml b/eng/common/core-templates/post-build/setup-maestro-vars.yml index a7abd58c4bb6..6dfa99ec5e37 100644 --- a/eng/common/core-templates/post-build/setup-maestro-vars.yml +++ b/eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -8,12 +8,11 @@ steps: - 'Illegal entry point, is1ESPipeline is not defined. Repository yaml should not directly reference templates in core-templates folder.': error - ${{ if eq(coalesce(parameters.PromoteToChannelIds, 0), 0) }}: - - task: DownloadBuildArtifacts@0 + - task: DownloadPipelineArtifact@2 displayName: Download Release Configs inputs: - buildType: current artifactName: ReleaseConfigs - checkDownloadedFiles: true + targetPath: '$(Build.StagingDirectory)/ReleaseConfigs' - task: AzureCLI@2 name: setReleaseVars diff --git a/eng/common/core-templates/steps/cleanup-microbuild.yml b/eng/common/core-templates/steps/cleanup-microbuild.yml new file mode 100644 index 000000000000..c0fdcd3379d7 --- /dev/null +++ b/eng/common/core-templates/steps/cleanup-microbuild.yml @@ -0,0 +1,28 @@ +parameters: + # Enable cleanup tasks for MicroBuild + enableMicrobuild: false + # Enable cleanup tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - task: MicroBuildCleanup@1 + displayName: Execute Microbuild cleanup tasks + condition: and( + always(), + or( + and( + eq(variables['Agent.Os'], 'Windows_NT'), + in(variables['_SignType'], 'real', 'test') + ), + and( + ${{ eq(parameters.enableMicrobuildForMacAndLinux, true) }}, + ne(variables['Agent.Os'], 'Windows_NT'), + eq(variables['_SignType'], 'real') + ) + )) + continueOnError: ${{ parameters.continueOnError }} + env: + TeamName: $(_TeamName) diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml index 7f5b84c4cb82..aad0a8aeda33 100644 --- a/eng/common/core-templates/steps/generate-sbom.yml +++ b/eng/common/core-templates/steps/generate-sbom.yml @@ -1,54 +1,14 @@ -# BuildDropPath - The root folder of the drop directory for which the manifest file will be generated. -# PackageName - The name of the package this SBOM represents. -# PackageVersion - The version of the package this SBOM represents. -# ManifestDirPath - The path of the directory where the generated manifest files will be placed -# IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. - parameters: - PackageVersion: 9.0.0 - BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' - PackageName: '.NET' - ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom - IgnoreDirectories: '' - sbomContinueOnError: true - is1ESPipeline: false - # disable publishArtifacts if some other step is publishing the artifacts (like job.yml). - publishArtifacts: true + PackageVersion: unused + BuildDropPath: unused + PackageName: unused + ManifestDirPath: unused + IgnoreDirectories: unused + sbomContinueOnError: unused + is1ESPipeline: unused + publishArtifacts: unused steps: -- task: PowerShell@2 - displayName: Prep for SBOM generation in (Non-linux) - condition: or(eq(variables['Agent.Os'], 'Windows_NT'), eq(variables['Agent.Os'], 'Darwin')) - inputs: - filePath: ./eng/common/generate-sbom-prep.ps1 - arguments: ${{parameters.manifestDirPath}} - -# Chmodding is a workaround for https://github.com/dotnet/arcade/issues/8461 - script: | - chmod +x ./eng/common/generate-sbom-prep.sh - ./eng/common/generate-sbom-prep.sh ${{parameters.manifestDirPath}} - displayName: Prep for SBOM generation in (Linux) - condition: eq(variables['Agent.Os'], 'Linux') - continueOnError: ${{ parameters.sbomContinueOnError }} - -- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'Generate SBOM manifest' - continueOnError: ${{ parameters.sbomContinueOnError }} - inputs: - PackageName: ${{ parameters.packageName }} - BuildDropPath: ${{ parameters.buildDropPath }} - PackageVersion: ${{ parameters.packageVersion }} - ManifestDirPath: ${{ parameters.manifestDirPath }}/$(ARTIFACT_NAME) - ${{ if ne(parameters.IgnoreDirectories, '') }}: - AdditionalComponentDetectorArgs: '--IgnoreDirectories ${{ parameters.IgnoreDirectories }}' - -- ${{ if eq(parameters.publishArtifacts, 'true')}}: - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} - args: - displayName: Publish SBOM manifest - continueOnError: ${{parameters.sbomContinueOnError}} - targetPath: '${{ parameters.manifestDirPath }}' - artifactName: $(ARTIFACT_NAME) - + echo "##vso[task.logissue type=warning]Including generate-sbom.yml is deprecated, SBOM generation is handled 1ES PT now. Remove this include." + displayName: Issue generate-sbom.yml deprecation warning diff --git a/eng/common/core-templates/steps/get-delegation-sas.yml b/eng/common/core-templates/steps/get-delegation-sas.yml index 9db5617ea7de..d2901470a7f0 100644 --- a/eng/common/core-templates/steps/get-delegation-sas.yml +++ b/eng/common/core-templates/steps/get-delegation-sas.yml @@ -31,16 +31,7 @@ steps: # Calculate the expiration of the SAS token and convert to UTC $expiry = (Get-Date).AddHours(${{ parameters.expiryInHours }}).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") - # Temporarily work around a helix issue where SAS tokens with / in them will cause incorrect downloads - # of correlation payloads. https://github.com/dotnet/dnceng/issues/3484 - $sas = "" - do { - $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv - if ($LASTEXITCODE -ne 0) { - Write-Error "Failed to generate SAS token." - exit 1 - } - } while($sas.IndexOf('/') -ne -1) + $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv if ($LASTEXITCODE -ne 0) { Write-Error "Failed to generate SAS token." diff --git a/eng/common/core-templates/steps/install-microbuild.yml b/eng/common/core-templates/steps/install-microbuild.yml new file mode 100644 index 000000000000..553fce66b940 --- /dev/null +++ b/eng/common/core-templates/steps/install-microbuild.yml @@ -0,0 +1,110 @@ +parameters: + # Enable install tasks for MicroBuild + enableMicrobuild: false + # Enable install tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + # Determines whether the ESRP service connection information should be passed to the signing plugin. + # This overlaps with _SignType to some degree. We only need the service connection for real signing. + # It's important that the service connection not be passed to the MicroBuildSigningPlugin task in this place. + # Doing so will cause the service connection to be authorized for the pipeline, which isn't allowed and won't work for non-prod. + # Unfortunately, _SignType can't be used to exclude the use of the service connection in non-real sign scenarios. The + # variable is not available in template expression. _SignType has a very large proliferation across .NET, so replacing it is tough. + microbuildUseESRP: true + # Microbuild installation directory + microBuildOutputFolder: $(Agent.TempDirectory)/MicroBuild + + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, 'true') }}: + # Needed to download the MicroBuild plugin nupkgs on Mac and Linux when nuget.exe is unavailable + - task: UseDotNet@2 + displayName: Install .NET 8.0 SDK for MicroBuild Plugin + inputs: + packageType: sdk + version: 8.0.x + installationPath: ${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + set -euo pipefail + + # UseDotNet@2 prepends the dotnet executable path to the PATH variable, so we can call dotnet directly + version=$(dotnet --version) + cat << 'EOF' > ${{ parameters.microBuildOutputFolder }}/global.json + { + "sdk": { + "version": "$version", + "paths": [ + "${{ parameters.microBuildOutputFolder }}/.dotnet-microbuild" + ], + "errorMessage": "The .NET SDK version $version is required to install the MicroBuild signing plugin." + } + } + EOF + displayName: 'Add global.json to MicroBuild Installation path' + workingDirectory: ${{ parameters.microBuildOutputFolder }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + REM Check if ESRP is disabled while SignType is real + if /I "${{ parameters.microbuildUseESRP }}"=="false" if /I "$(_SignType)"=="real" ( + echo Error: ESRP must be enabled when SignType is real. + exit /b 1 + ) + displayName: 'Validate ESRP usage (Windows)' + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT')) + - script: | + # Check if ESRP is disabled while SignType is real + if [ "${{ parameters.microbuildUseESRP }}" = "false" ] && [ "$(_SignType)" = "real" ]; then + echo "Error: ESRP must be enabled when SignType is real." + exit 1 + fi + displayName: 'Validate ESRP usage (Non-Windows)' + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + # Two different MB install steps. This is due to not being able to use the agent OS during + # YAML expansion, and Windows vs. Linux/Mac uses different service connections. However, + # we can avoid including the MB install step if not enabled at all. This avoids a bunch of + # extra pipeline authorizations, since most pipelines do not sign on non-Windows. + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea + ${{ else }}: + ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) + + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, true) }}: + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (non-Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + workingDirectory: ${{ parameters.microBuildOutputFolder }} + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: beb8cb23-b303-4c95-ab26-9e44bc958d39 + ${{ else }}: + ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index 0623ac6e1123..4eed0312b807 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -26,15 +26,18 @@ steps: # If the file exists - sensitive data for redaction will be sourced from it # (single entry per line, lines starting with '# ' are considered comments and skipped) arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs' - -BinlogToolVersion ${{parameters.BinlogToolVersion}} + -BinlogToolVersion '${{parameters.BinlogToolVersion}}' -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' + -runtimeSourceFeed https://ci.dot.net/internal + -runtimeSourceFeedKey '$(dotnetbuilds-internal-container-read-token-base64)' '$(publishing-dnceng-devdiv-code-r-build-re)' - '$(MaestroAccessToken)' '$(dn-bot-all-orgs-artifact-feeds-rw)' '$(akams-client-id)' '$(microsoft-symbol-server-pat)' '$(symweb-symbol-server-pat)' + '$(dnceng-symbol-server-pat)' '$(dn-bot-all-orgs-build-rw-code-rw)' + '$(System.AccessToken)' ${{parameters.CustomSensitiveDataList}} continueOnError: true condition: always() @@ -45,14 +48,16 @@ steps: SourceFolder: '$(System.DefaultWorkingDirectory)/PostBuildLogs' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' + condition: always() -- template: /eng/common/core-templates/steps/publish-build-artifacts.yml +- template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish Logs - pathToPublish: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' - publishLocation: Container - artifactName: PostBuildLogs + targetPath: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' + artifactName: PostBuildLogs_${{ parameters.StageLabel }}_${{ parameters.JobLabel }}_Attempt$(System.JobAttempt) continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # logs are non-production artifacts diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml index 7846584d2a77..09ae5cd73ae3 100644 --- a/eng/common/core-templates/steps/source-build.yml +++ b/eng/common/core-templates/steps/source-build.yml @@ -11,10 +11,6 @@ parameters: # for details. The entire object is described in the 'job' template for simplicity, even though # the usage of the properties on this object is split between the 'job' and 'steps' templates. platform: {} - - # Optional list of directories to ignore for component governance scans. - componentGovernanceIgnoreDirectories: [] - is1ESPipeline: false steps: @@ -23,25 +19,12 @@ steps: set -x df -h - # If file changes are detected, set CopyWipIntoInnerSourceBuildRepo to copy the WIP changes into the inner source build repo. - internalRestoreArgs= - if ! git diff --quiet; then - internalRestoreArgs='/p:CopyWipIntoInnerSourceBuildRepo=true' - # The 'Copy WIP' feature of source build uses git stash to apply changes from the original repo. - # This only works if there is a username/email configured, which won't be the case in most CI runs. - git config --get user.email - if [ $? -ne 0 ]; then - git config user.email dn-bot@microsoft.com - git config user.name dn-bot - fi - fi - # If building on the internal project, the internal storage variable may be available (usually only if needed) # In that case, add variables to allow the download of internal runtimes if the specified versions are not found # in the default public locations. internalRuntimeDownloadArgs= if [ '$(dotnetbuilds-internal-container-read-token-base64)' != '$''(dotnetbuilds-internal-container-read-token-base64)' ]; then - internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey $(dotnetbuilds-internal-container-read-token-base64)' + internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey '$(dotnetbuilds-internal-container-read-token-base64)'' fi buildConfig=Release @@ -50,88 +33,33 @@ steps: buildConfig='$(_BuildConfig)' fi - officialBuildArgs= - if [ '${{ and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}' = 'True' ]; then - officialBuildArgs='/p:DotNetPublishUsingPipelines=true /p:OfficialBuildId=$(BUILD.BUILDNUMBER)' - fi - targetRidArgs= if [ '${{ parameters.platform.targetRID }}' != '' ]; then targetRidArgs='/p:TargetRid=${{ parameters.platform.targetRID }}' fi - runtimeOsArgs= - if [ '${{ parameters.platform.runtimeOS }}' != '' ]; then - runtimeOsArgs='/p:RuntimeOS=${{ parameters.platform.runtimeOS }}' - fi - - baseOsArgs= - if [ '${{ parameters.platform.baseOS }}' != '' ]; then - baseOsArgs='/p:BaseOS=${{ parameters.platform.baseOS }}' - fi - - publishArgs= - if [ '${{ parameters.platform.skipPublishValidation }}' != 'true' ]; then - publishArgs='--publish' - fi - - assetManifestFileName=SourceBuild_RidSpecific.xml - if [ '${{ parameters.platform.name }}' != '' ]; then - assetManifestFileName=SourceBuild_${{ parameters.platform.name }}.xml + portableBuildArgs= + if [ '${{ parameters.platform.portableBuild }}' != '' ]; then + portableBuildArgs='/p:PortableBuild=${{ parameters.platform.portableBuild }}' fi ${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \ --configuration $buildConfig \ - --restore --build --pack $publishArgs -bl \ + --restore --build --pack -bl \ + --source-build \ ${{ parameters.platform.buildArguments }} \ - $officialBuildArgs \ $internalRuntimeDownloadArgs \ - $internalRestoreArgs \ $targetRidArgs \ - $runtimeOsArgs \ - $baseOsArgs \ - /p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \ - /p:ArcadeBuildFromSource=true \ - /p:DotNetBuildSourceOnly=true \ - /p:DotNetBuildRepo=true \ - /p:AssetManifestFileName=$assetManifestFileName + $portableBuildArgs \ displayName: Build -# Upload build logs for diagnosis. -- task: CopyFiles@2 - displayName: Prepare BuildLogs staging directory - inputs: - SourceFolder: '$(System.DefaultWorkingDirectory)' - Contents: | - **/*.log - **/*.binlog - artifacts/sb/prebuilt-report/** - TargetFolder: '$(Build.StagingDirectory)/BuildLogs' - CleanTargetFolder: true - continueOnError: true - condition: succeededOrFailed() - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish BuildLogs - targetPath: '$(Build.StagingDirectory)/BuildLogs' + targetPath: artifacts/log/${{ coalesce(variables._BuildConfig, 'Release') }} artifactName: BuildLogs_SourceBuild_${{ parameters.platform.name }}_Attempt$(System.JobAttempt) continueOnError: true condition: succeededOrFailed() - sbomEnabled: false # we don't need SBOM for logs - -# Manually inject component detection so that we can ignore the source build upstream cache, which contains -# a nupkg cache of input packages (a local feed). -# This path must match the upstream cache path in property 'CurrentRepoSourceBuiltNupkgCacheDir' -# in src\Microsoft.DotNet.Arcade.Sdk\tools\SourceBuild\SourceBuildArcade.targets -- template: /eng/common/core-templates/steps/component-governance.yml - parameters: - displayName: Component Detection (Exclude upstream cache) - is1ESPipeline: ${{ parameters.is1ESPipeline }} - ${{ if eq(length(parameters.componentGovernanceIgnoreDirectories), 0) }}: - componentGovernanceIgnoreDirectories: '$(System.DefaultWorkingDirectory)/artifacts/sb/src/artifacts/obj/source-built-upstream-cache' - ${{ else }}: - componentGovernanceIgnoreDirectories: ${{ join(',', parameters.componentGovernanceIgnoreDirectories) }} - disableComponentGovernance: ${{ eq(variables['System.TeamProject'], 'public') }} + isProduction: false # logs are non-production artifacts diff --git a/eng/common/core-templates/steps/source-index-stage1-publish.yml b/eng/common/core-templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..e9a694afa58e --- /dev/null +++ b/eng/common/core-templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,35 @@ +parameters: + sourceIndexUploadPackageVersion: 2.0.0-20250818.1 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20250818.1 + sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json + binlogPath: artifacts/log/Debug/Build.binlog + +steps: +- task: UseDotNet@2 + displayName: "Source Index: Use .NET 9 SDK" + inputs: + packageType: sdk + version: 9.0.x + installationPath: $(Agent.TempDirectory)/dotnet + workingDirectory: $(Agent.TempDirectory) + +- script: | + $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version ${{parameters.sourceIndexProcessBinlogPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version ${{parameters.sourceIndexUploadPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + displayName: "Source Index: Download netsourceindex Tools" + # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. + workingDirectory: $(Agent.TempDirectory) + +- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i ${{parameters.BinlogPath}} -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output + displayName: "Source Index: Process Binlog into indexable sln" + +- ${{ if and(ne(parameters.runAsPublic, 'true'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: AzureCLI@2 + displayName: "Source Index: Upload Source Index stage1 artifacts to Azure" + inputs: + azureSubscription: 'SourceDotNet Stage1 Publish' + addSpnToEnvironment: true + scriptType: 'ps' + scriptLocation: 'inlineScript' + inlineScript: | + $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 diff --git a/eng/common/cross/arm64/tizen/tizen.patch b/eng/common/cross/arm64/tizen/tizen.patch index af7c8be05906..2cebc547382e 100644 --- a/eng/common/cross/arm64/tizen/tizen.patch +++ b/eng/common/cross/arm64/tizen/tizen.patch @@ -5,5 +5,5 @@ diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-littleaarch64) --GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib/ld-linux-aarch64.so.1 ) ) +-GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-aarch64.so.1 ) ) +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-aarch64.so.1 ) ) diff --git a/eng/common/cross/build-android-rootfs.sh b/eng/common/cross/build-android-rootfs.sh index 7e9ba2b75ed3..fbd8d80848a6 100755 --- a/eng/common/cross/build-android-rootfs.sh +++ b/eng/common/cross/build-android-rootfs.sh @@ -6,10 +6,11 @@ usage() { echo "Creates a toolchain and sysroot used for cross-compiling for Android." echo - echo "Usage: $0 [BuildArch] [ApiLevel]" + echo "Usage: $0 [BuildArch] [ApiLevel] [--ndk NDKVersion]" echo echo "BuildArch is the target architecture of Android. Currently only arm64 is supported." echo "ApiLevel is the target Android API level. API levels usually match to Android releases. See https://source.android.com/source/build-numbers.html" + echo "NDKVersion is the version of Android NDK. The default is r21. See https://developer.android.com/ndk/downloads/revision_history" echo echo "By default, the toolchain and sysroot will be generated in cross/android-rootfs/toolchain/[BuildArch]. You can change this behavior" echo "by setting the TOOLCHAIN_DIR environment variable" @@ -25,10 +26,15 @@ __BuildArch=arm64 __AndroidArch=aarch64 __AndroidToolchain=aarch64-linux-android -for i in "$@" - do - lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" - case $lowerI in +while :; do + if [[ "$#" -le 0 ]]; then + break + fi + + i=$1 + + lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" + case $lowerI in -?|-h|--help) usage exit 1 @@ -43,6 +49,10 @@ for i in "$@" __AndroidArch=arm __AndroidToolchain=arm-linux-androideabi ;; + --ndk) + shift + __NDK_Version=$1 + ;; *[0-9]) __ApiLevel=$i ;; @@ -50,8 +60,17 @@ for i in "$@" __UnprocessedBuildArgs="$__UnprocessedBuildArgs $i" ;; esac + shift done +if [[ "$__NDK_Version" == "r21" ]] || [[ "$__NDK_Version" == "r22" ]]; then + __NDK_File_Arch_Spec=-x86_64 + __SysRoot=sysroot +else + __NDK_File_Arch_Spec= + __SysRoot=toolchains/llvm/prebuilt/linux-x86_64/sysroot +fi + # Obtain the location of the bash script to figure out where the root of the repo is. __ScriptBaseDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" @@ -78,6 +97,7 @@ fi echo "Target API level: $__ApiLevel" echo "Target architecture: $__BuildArch" +echo "NDK version: $__NDK_Version" echo "NDK location: $__NDK_Dir" echo "Target Toolchain location: $__ToolchainDir" @@ -85,8 +105,8 @@ echo "Target Toolchain location: $__ToolchainDir" if [ ! -d $__NDK_Dir ]; then echo Downloading the NDK into $__NDK_Dir mkdir -p $__NDK_Dir - wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux-x86_64.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip - unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip -d $__CrossDir + wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux$__NDK_File_Arch_Spec.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux.zip + unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux.zip -d $__CrossDir fi if [ ! -d $__lldb_Dir ]; then @@ -116,16 +136,11 @@ for path in $(wget -qO- https://packages.termux.dev/termux-main-21/dists/stable/ fi done -cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/sysroot/usr/" +cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/$__SysRoot/usr/" # Generate platform file for build.sh script to assign to __DistroRid echo "Generating platform file..." -echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/sysroot/android_platform - -echo "Now to build coreclr, libraries and installers; run:" -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory coreclr -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory libraries -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory installer +echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/$__SysRoot/android_platform + +echo "Now to build coreclr, libraries and host; run:" +echo ROOTFS_DIR=$(realpath $__ToolchainDir/$__SysRoot) ./build.sh clr+libs+host --cross --arch $__BuildArch diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 4b5e8d7166bd..8abfb71f7275 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -5,7 +5,7 @@ set -e usage() { echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir ]" - echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86" + echo "BuildArch can be: arm(default), arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64, x86" echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine" echo " for alpine can be specified with version: alpineX.YY or alpineedge" echo " for FreeBSD can be: freebsd13, freebsd14" @@ -15,6 +15,7 @@ usage() echo "llvmx[.y] - optional, LLVM version for LLVM related packages." echo "--skipunmount - optional, will skip the unmount of rootfs folder." echo "--skipsigcheck - optional, will skip package signature checks (allowing untrusted packages)." + echo "--skipemulation - optional, will skip qemu and debootstrap requirement when building environment for debian based systems." echo "--use-mirror - optional, use mirror URL to fetch resources, when available." echo "--jobs N - optional, restrict to N jobs." exit 1 @@ -52,28 +53,27 @@ __UbuntuPackages+=" symlinks" __UbuntuPackages+=" libicu-dev" __UbuntuPackages+=" liblttng-ust-dev" __UbuntuPackages+=" libunwind8-dev" -__UbuntuPackages+=" libnuma-dev" __AlpinePackages+=" gettext-dev" __AlpinePackages+=" icu-dev" __AlpinePackages+=" libunwind-dev" __AlpinePackages+=" lttng-ust-dev" __AlpinePackages+=" compiler-rt" -__AlpinePackages+=" numactl-dev" # runtime libraries' dependencies __UbuntuPackages+=" libcurl4-openssl-dev" __UbuntuPackages+=" libkrb5-dev" __UbuntuPackages+=" libssl-dev" __UbuntuPackages+=" zlib1g-dev" +__UbuntuPackages+=" libbrotli-dev" __AlpinePackages+=" curl-dev" __AlpinePackages+=" krb5-dev" __AlpinePackages+=" openssl-dev" __AlpinePackages+=" zlib-dev" -__FreeBSDBase="13.3-RELEASE" -__FreeBSDPkg="1.17.0" +__FreeBSDBase="13.4-RELEASE" +__FreeBSDPkg="1.21.3" __FreeBSDABI="13" __FreeBSDPackages="libunwind" __FreeBSDPackages+=" icu" @@ -91,18 +91,18 @@ __HaikuPackages="gcc_syslibs" __HaikuPackages+=" gcc_syslibs_devel" __HaikuPackages+=" gmp" __HaikuPackages+=" gmp_devel" -__HaikuPackages+=" icu66" -__HaikuPackages+=" icu66_devel" +__HaikuPackages+=" icu[0-9]+" +__HaikuPackages+=" icu[0-9]*_devel" __HaikuPackages+=" krb5" __HaikuPackages+=" krb5_devel" __HaikuPackages+=" libiconv" __HaikuPackages+=" libiconv_devel" -__HaikuPackages+=" llvm12_libunwind" -__HaikuPackages+=" llvm12_libunwind_devel" +__HaikuPackages+=" llvm[0-9]*_libunwind" +__HaikuPackages+=" llvm[0-9]*_libunwind_devel" __HaikuPackages+=" mpfr" __HaikuPackages+=" mpfr_devel" -__HaikuPackages+=" openssl" -__HaikuPackages+=" openssl_devel" +__HaikuPackages+=" openssl3" +__HaikuPackages+=" openssl3_devel" __HaikuPackages+=" zlib" __HaikuPackages+=" zlib_devel" @@ -128,10 +128,12 @@ __AlpineKeys=' 616adfeb:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0BFD1D4lIxQcsqEpQzU\npNCYM3aP1V/fxxVdT4DWvSI53JHTwHQamKdMWtEXetWVbP5zSROniYKFXd/xrD9X\n0jiGHey3lEtylXRIPxe5s+wXoCmNLcJVnvTcDtwx/ne2NLHxp76lyc25At+6RgE6\nADjLVuoD7M4IFDkAsd8UQ8zM0Dww9SylIk/wgV3ZkifecvgUQRagrNUdUjR56EBZ\nraQrev4hhzOgwelT0kXCu3snbUuNY/lU53CoTzfBJ5UfEJ5pMw1ij6X0r5S9IVsy\nKLWH1hiO0NzU2c8ViUYCly4Fe9xMTFc6u2dy/dxf6FwERfGzETQxqZvSfrRX+GLj\n/QZAXiPg5178hT/m0Y3z5IGenIC/80Z9NCi+byF1WuJlzKjDcF/TU72zk0+PNM/H\nKuppf3JT4DyjiVzNC5YoWJT2QRMS9KLP5iKCSThwVceEEg5HfhQBRT9M6KIcFLSs\nmFjx9kNEEmc1E8hl5IR3+3Ry8G5/bTIIruz14jgeY9u5jhL8Vyyvo41jgt9sLHR1\n/J1TxKfkgksYev7PoX6/ZzJ1ksWKZY5NFoDXTNYUgzFUTOoEaOg3BAQKadb3Qbbq\nXIrxmPBdgrn9QI7NCgfnAY3Tb4EEjs3ON/BNyEhUENcXOH6I1NbcuBQ7g9P73kE4\nVORdoc8MdJ5eoKBpO8Ww8HECAwEAAQ== 616ae350:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyduVzi1mWm+lYo2Tqt/0\nXkCIWrDNP1QBMVPrE0/ZlU2bCGSoo2Z9FHQKz/mTyMRlhNqTfhJ5qU3U9XlyGOPJ\npiM+b91g26pnpXJ2Q2kOypSgOMOPA4cQ42PkHBEqhuzssfj9t7x47ppS94bboh46\nxLSDRff/NAbtwTpvhStV3URYkxFG++cKGGa5MPXBrxIp+iZf9GnuxVdST5PGiVGP\nODL/b69sPJQNbJHVquqUTOh5Ry8uuD2WZuXfKf7/C0jC/ie9m2+0CttNu9tMciGM\nEyKG1/Xhk5iIWO43m4SrrT2WkFlcZ1z2JSf9Pjm4C2+HovYpihwwdM/OdP8Xmsnr\nDzVB4YvQiW+IHBjStHVuyiZWc+JsgEPJzisNY0Wyc/kNyNtqVKpX6dRhMLanLmy+\nf53cCSI05KPQAcGj6tdL+D60uKDkt+FsDa0BTAobZ31OsFVid0vCXtsbplNhW1IF\nHwsGXBTVcfXg44RLyL8Lk/2dQxDHNHzAUslJXzPxaHBLmt++2COa2EI1iWlvtznk\nOk9WP8SOAIj+xdqoiHcC4j72BOVVgiITIJNHrbppZCq6qPR+fgXmXa+sDcGh30m6\n9Wpbr28kLMSHiENCWTdsFij+NQTd5S47H7XTROHnalYDuF1RpS+DpQidT5tUimaT\nJZDr++FjKrnnijbyNF8b98UCAwEAAQ== 616db30d:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnpUpyWDWjlUk3smlWeA0\nlIMW+oJ38t92CRLHH3IqRhyECBRW0d0aRGtq7TY8PmxjjvBZrxTNDpJT6KUk4LRm\na6A6IuAI7QnNK8SJqM0DLzlpygd7GJf8ZL9SoHSH+gFsYF67Cpooz/YDqWrlN7Vw\ntO00s0B+eXy+PCXYU7VSfuWFGK8TGEv6HfGMALLjhqMManyvfp8hz3ubN1rK3c8C\nUS/ilRh1qckdbtPvoDPhSbTDmfU1g/EfRSIEXBrIMLg9ka/XB9PvWRrekrppnQzP\nhP9YE3x/wbFc5QqQWiRCYyQl/rgIMOXvIxhkfe8H5n1Et4VAorkpEAXdsfN8KSVv\nLSMazVlLp9GYq5SUpqYX3KnxdWBgN7BJoZ4sltsTpHQ/34SXWfu3UmyUveWj7wp0\nx9hwsPirVI00EEea9AbP7NM2rAyu6ukcm4m6ATd2DZJIViq2es6m60AE6SMCmrQF\nwmk4H/kdQgeAELVfGOm2VyJ3z69fQuywz7xu27S6zTKi05Qlnohxol4wVb6OB7qG\nLPRtK9ObgzRo/OPumyXqlzAi/Yvyd1ZQk8labZps3e16bQp8+pVPiumWioMFJDWV\nGZjCmyMSU8V6MB6njbgLHoyg2LCukCAeSjbPGGGYhnKLm1AKSoJh3IpZuqcKCk5C\n8CM1S15HxV78s9dFntEqIokCAwEAAQ== +66ba20fe:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtfB12w4ZgqsXWZDfUAV/\n6Y4aHUKIu3q4SXrNZ7CXF9nXoAVYrS7NAxJdAodsY3vPCN0g5O8DFXR+390LdOuQ\n+HsGKCc1k5tX5ZXld37EZNTNSbR0k+NKhd9h6X3u6wqPOx7SIKxwAQR8qeeFq4pP\nrt9GAGlxtuYgzIIcKJPwE0dZlcBCg+GnptCUZXp/38BP1eYC+xTXSL6Muq1etYfg\nodXdb7Yl+2h1IHuOwo5rjgY5kpY7GcAs8AjGk3lDD/av60OTYccknH0NCVSmPoXK\nvrxDBOn0LQRNBLcAfnTKgHrzy0Q5h4TNkkyTgxkoQw5ObDk9nnabTxql732yy9BY\ns+hM9+dSFO1HKeVXreYSA2n1ndF18YAvAumzgyqzB7I4pMHXq1kC/8bONMJxwSkS\nYm6CoXKyavp7RqGMyeVpRC7tV+blkrrUml0BwNkxE+XnwDRB3xDV6hqgWe0XrifD\nYTfvd9ScZQP83ip0r4IKlq4GMv/R5shcCRJSkSZ6QSGshH40JYSoiwJf5FHbj9ND\n7do0UAqebWo4yNx63j/wb2ULorW3AClv0BCFSdPsIrCStiGdpgJDBR2P2NZOCob3\nG9uMj+wJD6JJg2nWqNJxkANXX37Qf8plgzssrhrgOvB0fjjS7GYhfkfmZTJ0wPOw\nA8+KzFseBh4UFGgue78KwgkCAwEAAQ== ' __Keyring= __KeyringFile="/usr/share/keyrings/ubuntu-archive-keyring.gpg" __SkipSigCheck=0 +__SkipEmulation=0 __UseMirror=0 __UnprocessedBuildArgs= @@ -162,9 +164,13 @@ while :; do armel) __BuildArch=armel __UbuntuArch=armel - __UbuntuRepo="http://ftp.debian.org/debian/" - __CodeName=jessie + __UbuntuRepo="http://archive.debian.org/debian/" + __CodeName=buster __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __LLDB_Package="liblldb-6.0-dev" + __UbuntuPackages="${__UbuntuPackages// libomp-dev/}" + __UbuntuPackages="${__UbuntuPackages// libomp5/}" + __UbuntuSuites= ;; armv6) __BuildArch=armv6 @@ -180,6 +186,18 @@ while :; do __Keyring="--keyring $__KeyringFile" fi ;; + loongarch64) + __BuildArch=loongarch64 + __AlpineArch=loongarch64 + __QEMUArch=loongarch64 + __UbuntuArch=loong64 + __UbuntuSuites=unreleased + __LLDB_Package="liblldb-19-dev" + + if [[ "$__CodeName" == "sid" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; riscv64) __BuildArch=riscv64 __AlpineArch=riscv64 @@ -264,44 +282,21 @@ while :; do ;; xenial) # Ubuntu 16.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=xenial - fi - ;; - zesty) # Ubuntu 17.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=zesty - fi + __CodeName=xenial ;; bionic) # Ubuntu 18.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=bionic - fi + __CodeName=bionic ;; focal) # Ubuntu 20.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=focal - fi + __CodeName=focal ;; jammy) # Ubuntu 22.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=jammy - fi + __CodeName=jammy ;; noble) # Ubuntu 24.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=noble - fi - if [[ -n "$__LLDB_Package" ]]; then - __LLDB_Package="liblldb-18-dev" - fi - ;; - jessie) # Debian 8 - __CodeName=jessie - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __CodeName=noble + if [[ -z "$__LLDB_Package" ]]; then + __LLDB_Package="liblldb-19-dev" fi ;; stretch) # Debian 9 @@ -319,7 +314,7 @@ while :; do __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __UbuntuRepo="http://archive.debian.org/debian/" fi ;; bullseye) # Debian 11 @@ -340,10 +335,28 @@ while :; do ;; sid) # Debian sid __CodeName=sid - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __UbuntuSuites= - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + # Debian-Ports architectures need different values + case "$__UbuntuArch" in + amd64|arm64|armel|armhf|i386|mips64el|ppc64el|riscv64|s390x) + __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.debian.org/debian/" + fi + ;; + *) + __KeyringFile="/usr/share/keyrings/debian-ports-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; + esac + + if [[ -e "$__KeyringFile" ]]; then + __Keyring="--keyring $__KeyringFile" fi ;; tizen) @@ -370,7 +383,7 @@ while :; do ;; freebsd14) __CodeName=freebsd - __FreeBSDBase="14.0-RELEASE" + __FreeBSDBase="14.2-RELEASE" __FreeBSDABI="14" __SkipUnmount=1 ;; @@ -388,6 +401,9 @@ while :; do --skipsigcheck) __SkipSigCheck=1 ;; + --skipemulation) + __SkipEmulation=1 + ;; --rootfsdir|-rootfsdir) shift __RootfsDir="$1" @@ -420,16 +436,15 @@ case "$__AlpineVersion" in elif [[ "$__AlpineArch" == "x86" ]]; then __AlpineVersion=3.17 # minimum version that supports lldb-dev __AlpinePackages+=" llvm15-libs" - elif [[ "$__AlpineArch" == "riscv64" ]]; then + elif [[ "$__AlpineArch" == "riscv64" || "$__AlpineArch" == "loongarch64" ]]; then + __AlpineVersion=3.21 # minimum version that supports lldb-dev + __AlpinePackages+=" llvm19-libs" + elif [[ -n "$__AlpineMajorVersion" ]]; then + # use whichever alpine version is provided and select the latest toolchain libs __AlpineLlvmLibsLookup=1 - __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive) else __AlpineVersion=3.13 # 3.13 to maximize compatibility __AlpinePackages+=" llvm10-libs" - - if [[ "$__AlpineArch" == "armv7" ]]; then - __AlpinePackages="${__AlpinePackages//numactl-dev/}" - fi fi esac @@ -439,15 +454,6 @@ if [[ "$__AlpineVersion" =~ 3\.1[345] ]]; then __AlpinePackages="${__AlpinePackages/compiler-rt/compiler-rt-static}" fi -if [[ "$__BuildArch" == "armel" ]]; then - __LLDB_Package="lldb-3.5-dev" -fi - -if [[ "$__CodeName" == "xenial" && "$__UbuntuArch" == "armhf" ]]; then - # libnuma-dev is not available on armhf for xenial - __UbuntuPackages="${__UbuntuPackages//libnuma-dev/}" -fi - __UbuntuPackages+=" ${__LLDB_Package:-}" if [[ -z "$__UbuntuRepo" ]]; then @@ -496,7 +502,7 @@ if [[ "$__CodeName" == "alpine" ]]; then arch="$(uname -m)" ensureDownloadTool - + if [[ "$__hasWget" == 1 ]]; then wget -P "$__ApkToolsDir" "https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v$__ApkToolsVersion/$arch/apk.static" else @@ -512,11 +518,6 @@ if [[ "$__CodeName" == "alpine" ]]; then echo "$__ApkToolsSHA512SUM $__ApkToolsDir/apk.static" | sha512sum -c chmod +x "$__ApkToolsDir/apk.static" - if [[ -f "/usr/bin/qemu-$__QEMUArch-static" ]]; then - mkdir -p "$__RootfsDir"/usr/bin - cp -v "/usr/bin/qemu-$__QEMUArch-static" "$__RootfsDir/usr/bin" - fi - if [[ "$__AlpineVersion" == "edge" ]]; then version=edge else @@ -536,6 +537,10 @@ if [[ "$__CodeName" == "alpine" ]]; then __ApkSignatureArg="--keys-dir $__ApkKeysDir" fi + if [[ "$__SkipEmulation" == "1" ]]; then + __NoEmulationArg="--no-scripts" + fi + # initialize DB # shellcheck disable=SC2086 "$__ApkToolsDir/apk.static" \ @@ -557,7 +562,7 @@ if [[ "$__CodeName" == "alpine" ]]; then "$__ApkToolsDir/apk.static" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \ - -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" \ + -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" $__NoEmulationArg \ add $__AlpinePackages rm -r "$__ApkToolsDir" @@ -573,7 +578,7 @@ elif [[ "$__CodeName" == "freebsd" ]]; then curl -SL "https://download.freebsd.org/ftp/releases/${__FreeBSDArch}/${__FreeBSDMachineArch}/${__FreeBSDBase}/base.txz" | tar -C "$__RootfsDir" -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version fi echo "ABI = \"FreeBSD:${__FreeBSDABI}:${__FreeBSDMachineArch}\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > "${__RootfsDir}"/usr/local/etc/pkg.conf - echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf + echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf mkdir -p "$__RootfsDir"/tmp # get and build package manager if [[ "$__hasWget" == 1 ]]; then @@ -681,7 +686,7 @@ elif [[ "$__CodeName" == "haiku" ]]; then ensureDownloadTool - echo "Downloading Haiku package tool" + echo "Downloading Haiku package tools" git clone https://github.com/haiku/haiku-toolchains-ubuntu --depth 1 "$__RootfsDir/tmp/script" if [[ "$__hasWget" == 1 ]]; then wget -O "$__RootfsDir/tmp/download/hosttools.zip" "$("$__RootfsDir/tmp/script/fetch.sh" --hosttools)" @@ -691,34 +696,42 @@ elif [[ "$__CodeName" == "haiku" ]]; then unzip -o "$__RootfsDir/tmp/download/hosttools.zip" -d "$__RootfsDir/tmp/bin" - DepotBaseUrl="https://depot.haiku-os.org/__api/v2/pkg/get-pkg" - HpkgBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuPortsBaseUrl="https://eu.hpkg.haiku-os.org/haikuports/master/$__HaikuArch/current" + + echo "Downloading HaikuPorts package repository index..." + if [[ "$__hasWget" == 1 ]]; then + wget -P "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + else + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + fi - # Download Haiku packages echo "Downloading Haiku packages" read -ra array <<<"$__HaikuPackages" for package in "${array[@]}"; do echo "Downloading $package..." - # API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60 - # The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598 + hpkgFilename="$(LD_LIBRARY_PATH="$__RootfsDir/tmp/bin" "$__RootfsDir/tmp/bin/package_repo" list -f "$__RootfsDir/tmp/download/repo" | + grep -E "${package}-" | sort -V | tail -n 1 | xargs)" + if [ -z "$hpkgFilename" ]; then + >&2 echo "ERROR: package $package missing." + exit 1 + fi + echo "Resolved filename: $hpkgFilename..." + hpkgDownloadUrl="$HaikuPortsBaseUrl/packages/$hpkgFilename" if [[ "$__hasWget" == 1 ]]; then - hpkgDownloadUrl="$(wget -qO- --post-data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" wget -P "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" else - hpkgDownloadUrl="$(curl -sSL -XPOST --data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" fi done for package in haiku haiku_devel; do echo "Downloading $package..." if [[ "$__hasWget" == 1 ]]; then - hpkgVersion="$(wget -qO- "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - wget -P "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(wget -qO- "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + wget -P "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" else - hpkgVersion="$(curl -sSL "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(curl -sSL "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" fi done @@ -744,25 +757,67 @@ elif [[ "$__CodeName" == "haiku" ]]; then popd rm -rf "$__RootfsDir/tmp" elif [[ -n "$__CodeName" ]]; then + __Suites="$__CodeName $(for suite in $__UbuntuSuites; do echo -n "$__CodeName-$suite "; done)" + + if [[ "$__SkipEmulation" == "1" ]]; then + if [[ -z "$AR" ]]; then + if command -v ar &>/dev/null; then + AR="$(command -v ar)" + elif command -v llvm-ar &>/dev/null; then + AR="$(command -v llvm-ar)" + else + echo "Unable to find ar or llvm-ar on PATH, add them to PATH or set AR environment variable pointing to the available AR tool" + exit 1 + fi + fi + + PYTHON=${PYTHON_EXECUTABLE:-python3} + + # shellcheck disable=SC2086,SC2046 + echo running "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + + # shellcheck disable=SC2086,SC2046 + "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + exit 0 + fi + + __UpdateOptions= if [[ "$__SkipSigCheck" == "0" ]]; then __Keyring="$__Keyring --force-check-gpg" + else + __Keyring= + __UpdateOptions="--allow-unauthenticated --allow-insecure-repositories" fi # shellcheck disable=SC2086 echo running debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" - debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" + # shellcheck disable=SC2086 + if ! debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo"; then + echo "debootstrap failed! dumping debootstrap.log" + cat "$__RootfsDir/debootstrap/debootstrap.log" + exit 1 + fi + + rm -rf "$__RootfsDir"/etc/apt/*.{sources,list} "$__RootfsDir"/etc/apt/sources.list.d mkdir -p "$__RootfsDir/etc/apt/sources.list.d/" + + # shellcheck disable=SC2086 cat > "$__RootfsDir/etc/apt/sources.list.d/$__CodeName.sources" < token2) - (token1 < token2) + else: + return -1 if isinstance(token1, str) else 1 + + return len(tokens1) - len(tokens2) + +def compare_debian_versions(version1, version2): + """Compare two Debian package versions.""" + epoch1, upstream1, revision1 = parse_debian_version(version1) + epoch2, upstream2, revision2 = parse_debian_version(version2) + + if epoch1 != epoch2: + return epoch1 - epoch2 + + result = compare_upstream_version(upstream1, upstream2) + if result != 0: + return result + + return compare_upstream_version(revision1, revision2) + +def resolve_dependencies(packages, aliases, desired_packages): + """Recursively resolves dependencies for the desired packages.""" + resolved = [] + to_process = deque(desired_packages) + + while to_process: + current = to_process.popleft() + resolved_package = current if current in packages else aliases.get(current, [None])[0] + + if not resolved_package: + print(f"Error: Package '{current}' was not found in the available packages.") + sys.exit(1) + + if resolved_package not in resolved: + resolved.append(resolved_package) + + deps = packages.get(resolved_package, {}).get("Depends", "") + if deps: + deps = [dep.split(' ')[0] for dep in deps.split(', ') if dep] + for dep in deps: + if dep not in resolved and dep not in to_process and dep in packages: + to_process.append(dep) + + return resolved + +def parse_package_index(content): + """Parses the Packages.gz file and returns package information.""" + packages = {} + aliases = {} + entries = re.split(r'\n\n+', content) + + for entry in entries: + fields = dict(re.findall(r'^(\S+): (.+)$', entry, re.MULTILINE)) + if "Package" in fields: + package_name = fields["Package"] + version = fields.get("Version") + filename = fields.get("Filename") + depends = fields.get("Depends") + provides = fields.get("Provides", None) + + # Only update if package_name is not in packages or if the new version is higher + if package_name not in packages or compare_debian_versions(version, packages[package_name]["Version"]) > 0: + packages[package_name] = { + "Version": version, + "Filename": filename, + "Depends": depends + } + + # Update aliases if package provides any alternatives + if provides: + provides_list = [x.strip() for x in provides.split(",")] + for alias in provides_list: + # Strip version specifiers + alias_name = re.sub(r'\s*\(=.*\)', '', alias) + if alias_name not in aliases: + aliases[alias_name] = [] + if package_name not in aliases[alias_name]: + aliases[alias_name].append(package_name) + + return packages, aliases + +def install_packages(mirror, packages_info, aliases, tmp_dir, extract_dir, ar_tool, desired_packages): + """Downloads .deb files and extracts them.""" + resolved_packages = resolve_dependencies(packages_info, aliases, desired_packages) + print(f"Resolved packages (including dependencies): {resolved_packages}") + + packages_to_download = {} + + for pkg in resolved_packages: + if pkg in packages_info: + packages_to_download[pkg] = packages_info[pkg] + + if pkg in aliases: + for alias in aliases[pkg]: + if alias in packages_info: + packages_to_download[alias] = packages_info[alias] + + asyncio.run(download_deb_files_parallel(mirror, packages_to_download, tmp_dir)) + + package_to_deb_file_map = {} + for pkg in resolved_packages: + pkg_info = packages_info.get(pkg) + if pkg_info: + deb_filename = pkg_info.get("Filename") + if deb_filename: + deb_file_path = os.path.join(tmp_dir, os.path.basename(deb_filename)) + package_to_deb_file_map[pkg] = deb_file_path + + for pkg in reversed(resolved_packages): + deb_file = package_to_deb_file_map.get(pkg) + if deb_file and os.path.exists(deb_file): + extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool) + + print("All done!") + +def extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool): + """Extract .deb file contents""" + + os.makedirs(extract_dir, exist_ok=True) + + with tempfile.TemporaryDirectory(dir=tmp_dir) as tmp_subdir: + result = subprocess.run(f"{ar_tool} t {os.path.abspath(deb_file)}", cwd=tmp_subdir, check=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + tar_filename = None + for line in result.stdout.decode().splitlines(): + if line.startswith("data.tar"): + tar_filename = line.strip() + break + + if not tar_filename: + raise FileNotFoundError(f"Could not find 'data.tar.*' in {deb_file}.") + + tar_file_path = os.path.join(tmp_subdir, tar_filename) + print(f"Extracting {tar_filename} from {deb_file}..") + + subprocess.run(f"{ar_tool} p {os.path.abspath(deb_file)} {tar_filename} > {tar_file_path}", check=True, shell=True) + + file_extension = os.path.splitext(tar_file_path)[1].lower() + + if file_extension == ".xz": + mode = "r:xz" + elif file_extension == ".gz": + mode = "r:gz" + elif file_extension == ".zst": + # zstd is not supported by standard library yet + decompressed_tar_path = tar_file_path.replace(".zst", "") + with open(tar_file_path, "rb") as zst_file, open(decompressed_tar_path, "wb") as decompressed_file: + dctx = zstandard.ZstdDecompressor() + dctx.copy_stream(zst_file, decompressed_file) + + tar_file_path = decompressed_tar_path + mode = "r" + else: + raise ValueError(f"Unsupported compression format: {file_extension}") + + with tarfile.open(tar_file_path, mode) as tar: + tar.extractall(path=extract_dir, filter='fully_trusted') + +def finalize_setup(rootfsdir): + lib_dir = os.path.join(rootfsdir, 'lib') + usr_lib_dir = os.path.join(rootfsdir, 'usr', 'lib') + + if os.path.exists(lib_dir): + if os.path.islink(lib_dir): + os.remove(lib_dir) + else: + os.makedirs(usr_lib_dir, exist_ok=True) + + for item in os.listdir(lib_dir): + src = os.path.join(lib_dir, item) + dest = os.path.join(usr_lib_dir, item) + + if os.path.isdir(src): + shutil.copytree(src, dest, dirs_exist_ok=True) + else: + shutil.copy2(src, dest) + + shutil.rmtree(lib_dir) + + os.symlink(usr_lib_dir, lib_dir) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Generate rootfs for .NET runtime on Debian-like OS") + parser.add_argument("--distro", required=False, help="Distro name (e.g., debian, ubuntu, etc.)") + parser.add_argument("--arch", required=True, help="Architecture (e.g., amd64, loong64, etc.)") + parser.add_argument("--rootfsdir", required=True, help="Destination directory.") + parser.add_argument('--suite', required=True, action='append', help='Specify one or more repository suites to collect index data.') + parser.add_argument("--mirror", required=False, help="Mirror (e.g., http://ftp.debian.org/debian-ports etc.)") + parser.add_argument("--artool", required=False, default="ar", help="ar tool to extract debs (e.g., ar, llvm-ar etc.)") + parser.add_argument("packages", nargs="+", help="List of package names to be installed.") + + args = parser.parse_args() + + if args.mirror is None: + if args.distro == "ubuntu": + args.mirror = "http://archive.ubuntu.com/ubuntu" if args.arch in ["amd64", "i386"] else "http://ports.ubuntu.com/ubuntu-ports" + elif args.distro == "debian": + args.mirror = "http://ftp.debian.org/debian-ports" + else: + raise Exception("Unsupported distro") + + DESIRED_PACKAGES = args.packages + [ # base packages + "dpkg", + "busybox", + "libc-bin", + "base-files", + "base-passwd", + "debianutils" + ] + + print(f"Creating rootfs. rootfsdir: {args.rootfsdir}, distro: {args.distro}, arch: {args.arch}, suites: {args.suite}, mirror: {args.mirror}") + + package_index_content = asyncio.run(download_package_index_parallel(args.mirror, args.arch, args.suite)) + + packages_info, aliases = parse_package_index(package_index_content) + + with tempfile.TemporaryDirectory() as tmp_dir: + install_packages(args.mirror, packages_info, aliases, tmp_dir, args.rootfsdir, args.artool, DESIRED_PACKAGES) + + finalize_setup(args.rootfsdir) diff --git a/eng/common/cross/tizen-build-rootfs.sh b/eng/common/cross/tizen-build-rootfs.sh old mode 100644 new mode 100755 diff --git a/eng/common/cross/tizen-fetch.sh b/eng/common/cross/tizen-fetch.sh old mode 100644 new mode 100755 index 28936ceef3a7..37c3a61f1de8 --- a/eng/common/cross/tizen-fetch.sh +++ b/eng/common/cross/tizen-fetch.sh @@ -156,13 +156,8 @@ fetch_tizen_pkgs() done } -if [ "$TIZEN_ARCH" == "riscv64" ]; then - BASE="Tizen-Base-RISCV" - UNIFIED="Tizen-Unified-RISCV" -else - BASE="Tizen-Base" - UNIFIED="Tizen-Unified" -fi +BASE="Tizen-Base" +UNIFIED="Tizen-Unified" Inform "Initialize ${TIZEN_ARCH} base" fetch_tizen_pkgs_init standard $BASE diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake index 9a7ecfbd42c5..0ff85cf0367e 100644 --- a/eng/common/cross/toolchain.cmake +++ b/eng/common/cross/toolchain.cmake @@ -67,6 +67,13 @@ elseif(TARGET_ARCH_NAME STREQUAL "armv6") else() set(TOOLCHAIN "arm-linux-gnueabihf") endif() +elseif(TARGET_ARCH_NAME STREQUAL "loongarch64") + set(CMAKE_SYSTEM_PROCESSOR "loongarch64") + if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/loongarch64-alpine-linux-musl) + set(TOOLCHAIN "loongarch64-alpine-linux-musl") + else() + set(TOOLCHAIN "loongarch64-linux-gnu") + endif() elseif(TARGET_ARCH_NAME STREQUAL "ppc64le") set(CMAKE_SYSTEM_PROCESSOR ppc64le) if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/powerpc64le-alpine-linux-musl) @@ -118,7 +125,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86") set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu") endif() else() - message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, ppc64le, riscv64, s390x, x64 and x86 are supported!") + message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64 and x86 are supported!") endif() if(DEFINED ENV{TOOLCHAIN}) @@ -148,6 +155,25 @@ if(TIZEN) include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++/${TIZEN_TOOLCHAIN}) endif() +function(locate_toolchain_exec exec var) + set(TOOLSET_PREFIX ${TOOLCHAIN}-) + string(TOUPPER ${exec} EXEC_UPPERCASE) + if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") + set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) + return() + endif() + + find_program(EXEC_LOCATION_${exec} + NAMES + "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" + "${TOOLSET_PREFIX}${exec}") + + if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") + message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") + endif() + set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) +endfunction() + if(ANDROID) if(TARGET_ARCH_NAME STREQUAL "arm") set(ANDROID_ABI armeabi-v7a) @@ -178,66 +204,24 @@ elseif(FREEBSD) set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=lld") elseif(ILLUMOS) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") + set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") include_directories(SYSTEM ${CROSS_ROOTFS}/include) - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") - locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") elseif(HAIKU) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") set(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};${CROSS_ROOTFS}/cross-tools-x86_64/bin") - - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") - # let CMake set up the correct search paths include(Platform/Haiku) else() @@ -307,7 +291,7 @@ endif() # Specify compile options -if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) +if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|loongarch64|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN}) diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index 36dbd45e1ce8..e889f439b8dc 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -68,7 +68,7 @@ function InstallDarcCli { fi fi - local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" + local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" echo "Installing Darc CLI version $darcVersion..." echo "You may need to restart your command shell if this is the first dotnet tool you have installed." diff --git a/eng/common/dotnet.cmd b/eng/common/dotnet.cmd new file mode 100644 index 000000000000..527fa4bb38fb --- /dev/null +++ b/eng/common/dotnet.cmd @@ -0,0 +1,7 @@ +@echo off + +:: This script is used to install the .NET SDK. +:: It will also invoke the SDK with any provided arguments. + +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0dotnet.ps1""" %*" +exit /b %ErrorLevel% diff --git a/eng/common/dotnet.ps1 b/eng/common/dotnet.ps1 new file mode 100644 index 000000000000..45e5676c9ebd --- /dev/null +++ b/eng/common/dotnet.ps1 @@ -0,0 +1,11 @@ +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +. $PSScriptRoot\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true + +# Invoke acquired SDK with args if they are provided +if ($args.count -gt 0) { + $env:DOTNET_NOLOGO=1 + & "$dotnetRoot\dotnet.exe" $args +} diff --git a/eng/common/dotnet.sh b/eng/common/dotnet.sh new file mode 100755 index 000000000000..2ef68235675f --- /dev/null +++ b/eng/common/dotnet.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +source="${BASH_SOURCE[0]}" +# resolve $SOURCE until the file is no longer a symlink +while [[ -h $source ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +source $scriptroot/tools.sh +InitializeDotNetCli true # install + +# Invoke acquired SDK with args if they are provided +if [[ $# > 0 ]]; then + __dotnetDir=${_InitializeDotNetCli} + dotnetPath=${__dotnetDir}/dotnet + ${dotnetPath} "$@" +fi diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1 index 524aaa57f2b7..fa1cdc2b3007 100644 --- a/eng/common/generate-locproject.ps1 +++ b/eng/common/generate-locproject.ps1 @@ -33,15 +33,27 @@ $jsonTemplateFiles | ForEach-Object { $jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern +$wxlFilesV3 = @() +$wxlFilesV5 = @() $wxlFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\.+\.wxl" -And -Not( $_.Directory.Name -Match "\d{4}" ) } # localized files live in four digit lang ID directories; this excludes them if (-not $wxlFiles) { $wxlEnFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\1033\\.+\.wxl" } # pick up en files (1033 = en) specifically so we can copy them to use as the neutral xlf files if ($wxlEnFiles) { - $wxlFiles = @() - $wxlEnFiles | ForEach-Object { - $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" - $wxlFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru - } + $wxlFiles = @() + $wxlEnFiles | ForEach-Object { + $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" + $content = Get-Content $_.FullName -Raw + + # Split files on schema to select different parser settings in the generated project. + if ($content -like "*http://wixtoolset.org/schemas/v4/wxl*") + { + $wxlFilesV5 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + elseif ($content -like "*http://schemas.microsoft.com/wix/2006/localization*") + { + $wxlFilesV3 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + } } } @@ -114,7 +126,32 @@ $locJson = @{ CloneLanguageSet = "WiX_CloneLanguages" LssFiles = @( "wxl_loc.lss" ) LocItems = @( - $wxlFiles | ForEach-Object { + $wxlFilesV3 | ForEach-Object { + $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" + $continue = $true + foreach ($exclusion in $exclusions.Exclusions) { + if ($_.FullName.Contains($exclusion)) { + $continue = $false + } + } + $sourceFile = ($_.FullName | Resolve-Path -Relative) + if ($continue) + { + return @{ + SourceFile = $sourceFile + CopyOption = "LangIDOnPath" + OutputPath = $outputPath + } + } + } + ) + }, + @{ + LanguageSet = $LanguageSet + CloneLanguageSet = "WiX_CloneLanguages" + LssFiles = @( "P210WxlSchemaV4.lss" ) + LocItems = @( + $wxlFilesV5 | ForEach-Object { $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" $continue = $true foreach ($exclusion in $exclusions.Exclusions) { diff --git a/eng/common/native/install-dependencies.sh b/eng/common/native/install-dependencies.sh new file mode 100755 index 000000000000..477a44f335be --- /dev/null +++ b/eng/common/native/install-dependencies.sh @@ -0,0 +1,62 @@ +#!/bin/sh + +set -e + +# This is a simple script primarily used for CI to install necessary dependencies +# +# Usage: +# +# ./install-dependencies.sh + +os="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + +if [ -z "$os" ]; then + . "$(dirname "$0")"/init-os-and-arch.sh +fi + +case "$os" in + linux) + if [ -e /etc/os-release ]; then + . /etc/os-release + fi + + if [ "$ID" = "debian" ] || [ "$ID_LIKE" = "debian" ]; then + apt update + + apt install -y build-essential gettext locales cmake llvm clang lld lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev \ + libssl-dev libkrb5-dev pigz cpio + + localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 + elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ] || [ "$ID" = "azurelinux" ]; then + pkg_mgr="$(command -v tdnf 2>/dev/null || command -v dnf)" + $pkg_mgr install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio + elif [ "$ID" = "alpine" ]; then + apk add build-base cmake bash curl clang llvm-dev lld lldb krb5-dev lttng-ust-dev icu-dev openssl-dev pigz cpio + else + echo "Unsupported distro. distro: $ID" + exit 1 + fi + ;; + + osx|maccatalyst|ios|iossimulator|tvos|tvossimulator) + echo "Installed xcode version: $(xcode-select -p)" + + export HOMEBREW_NO_INSTALL_CLEANUP=1 + export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 + # Skip brew update for now, see https://github.com/actions/setup-python/issues/577 + # brew update --preinstall + brew bundle --no-upgrade --file=- < Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." + Write-Host " -excludeCIBinaryLog When running on CI, allow no binary log (short: -nobl)" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." } @@ -34,10 +39,11 @@ function Print-Usage() { function Build([string]$target) { $logSuffix = if ($target -eq 'Execute') { '' } else { ".$target" } $log = Join-Path $LogDir "$task$logSuffix.binlog" + $binaryLogArg = if ($binaryLog) { "/bl:$log" } else { "" } $outputPath = Join-Path $ToolsetDir "$task\" MSBuild $taskProject ` - /bl:$log ` + $binaryLogArg ` /t:$target ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` @@ -64,7 +70,7 @@ try { $GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty } if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) { - $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.12.0" -MemberType NoteProperty + $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "18.0.0" -MemberType NoteProperty } if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") { $xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true diff --git a/eng/common/sdk-task.sh b/eng/common/sdk-task.sh new file mode 100755 index 000000000000..3270f83fa9a7 --- /dev/null +++ b/eng/common/sdk-task.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash + +show_usage() { + echo "Common settings:" + echo " --task Name of Arcade task (name of a project in SdkTasks directory of the Arcade SDK package)" + echo " --restore Restore dependencies" + echo " --verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]" + echo " --help Print help and exit" + echo "" + + echo "Advanced settings:" + echo " --excludeCIBinarylog Don't output binary log (short: -nobl)" + echo " --noWarnAsError Do not warn as error" + echo "" + echo "Command line arguments not listed above are passed thru to msbuild." +} + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +Build() { + local target=$1 + local log_suffix="" + [[ "$target" != "Execute" ]] && log_suffix=".$target" + local log="$log_dir/$task$log_suffix.binlog" + local binaryLogArg="" + [[ $binary_log == true ]] && binaryLogArg="/bl:$log" + local output_path="$toolset_dir/$task/" + + MSBuild "$taskProject" \ + $binaryLogArg \ + /t:"$target" \ + /p:Configuration="$configuration" \ + /p:RepoRoot="$repo_root" \ + /p:BaseIntermediateOutputPath="$output_path" \ + /v:"$verbosity" \ + $properties +} + +binary_log=true +configuration="Debug" +verbosity="minimal" +exclude_ci_binary_log=false +restore=false +help=false +properties='' +warnAsError=true + +while (($# > 0)); do + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + case $lowerI in + --task) + task=$2 + shift 2 + ;; + --restore) + restore=true + shift 1 + ;; + --verbosity) + verbosity=$2 + shift 2 + ;; + --excludecibinarylog|--nobl) + binary_log=false + exclude_ci_binary_log=true + shift 1 + ;; + --noWarnAsError) + warnAsError=false + shift 1 + ;; + --help) + help=true + shift 1 + ;; + *) + properties="$properties $1" + shift 1 + ;; + esac +done + +ci=true + +if $help; then + show_usage + exit 0 +fi + +. "$scriptroot/tools.sh" +InitializeToolset + +if [[ -z "$task" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'MissingTask' -Message "Missing required parameter '-task '" + ExitWithExitCode 1 +fi + +taskProject=$(GetSdkTaskProject "$task") +if [[ ! -e "$taskProject" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'UnknownTask' -Message "Unknown task: $task" + ExitWithExitCode 1 +fi + +if $restore; then + Build "Restore" +fi + +Build "Execute" + + +ExitWithExitCode 0 diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config index 4585cfd6bba1..e5f543ea68c2 100644 --- a/eng/common/sdl/packages.config +++ b/eng/common/sdl/packages.config @@ -1,4 +1,4 @@ - + diff --git a/eng/common/template-guidance.md b/eng/common/template-guidance.md index 4bf4cf41bd7c..e2b07a865f10 100644 --- a/eng/common/template-guidance.md +++ b/eng/common/template-guidance.md @@ -82,7 +82,6 @@ eng\common\ publish-build-artifacts.yml (logic) publish-pipeline-artifacts.yml (logic) component-governance.yml (shim) - generate-sbom.yml (shim) publish-logs.yml (shim) retain-build.yml (shim) send-to-helix.yml (shim) @@ -107,7 +106,6 @@ eng\common\ setup-maestro-vars.yml (logic) steps\ component-governance.yml (logic) - generate-sbom.yml (logic) publish-build-artifacts.yml (redirect) publish-logs.yml (logic) publish-pipeline-artifacts.yml (redirect) diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml index 81ea7a261f2d..d68e9fbc2656 100644 --- a/eng/common/templates-official/job/job.yml +++ b/eng/common/templates-official/job/job.yml @@ -1,24 +1,15 @@ parameters: -# Sbom related params - enableSbom: true runAsPublic: false - PackageVersion: 9.0.0 - BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' +# Sbom related params, unused now and can eventually be removed + enableSbom: unused + PackageVersion: unused + BuildDropPath: unused jobs: - template: /eng/common/core-templates/job/job.yml parameters: is1ESPipeline: true - componentGovernanceSteps: - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.enableSbom, 'true')) }}: - - template: /eng/common/templates/steps/generate-sbom.yml - parameters: - PackageVersion: ${{ parameters.packageVersion }} - BuildDropPath: ${{ parameters.buildDropPath }} - ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom - publishArtifacts: false - # publish artifacts # for 1ES managed templates, use the templateContext.output to handle multiple outputs. templateContext: @@ -26,11 +17,19 @@ jobs: outputs: - ${{ if ne(parameters.artifacts.publish, '') }}: - ${{ if and(ne(parameters.artifacts.publish.artifacts, 'false'), ne(parameters.artifacts.publish.artifacts, '')) }}: - - output: buildArtifacts + - output: pipelineArtifact displayName: Publish pipeline artifacts - PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' - ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} - condition: always() + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' + artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} + condition: succeeded() + retryCountOnTaskFailure: 10 # for any files being locked + continueOnError: true + - output: pipelineArtifact + displayName: Publish pipeline artifacts + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' + artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }}_Attempt$(System.JobAttempt) + condition: not(succeeded()) + retryCountOnTaskFailure: 10 # for any files being locked continueOnError: true - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - output: pipelineArtifact @@ -39,17 +38,18 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() - sbomEnabled: false # we don't need SBOM for logs + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # logs are non-production artifacts - ${{ if eq(parameters.enablePublishBuildArtifacts, true) }}: - - output: buildArtifacts + - output: pipelineArtifact displayName: Publish Logs - PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' - publishLocation: Container - ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' + artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() - sbomEnabled: false # we don't need SBOM for logs + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # logs are non-production artifacts - ${{ if eq(parameters.enableBuildRetry, 'true') }}: - output: pipelineArtifact @@ -57,14 +57,20 @@ jobs: artifactName: 'BuildConfiguration' displayName: 'Publish build retry configuration' continueOnError: true - sbomEnabled: false # we don't need SBOM for BuildConfiguration + retryCountOnTaskFailure: 10 # for any files being locked + isProduction: false # BuildConfiguration is a non-production artifact - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.enableSbom, 'true')) }}: + # V4 publishing: automatically publish staged artifacts as a pipeline artifact. + # The artifact name matches the SDK's FutureArtifactName ($(System.PhaseName)_Artifacts), + # which is encoded in the asset manifest for downstream publishing to discover. + # Jobs can opt in by setting enablePublishing: true. + - ${{ if and(eq(parameters.publishingVersion, 4), eq(parameters.enablePublishing, 'true')) }}: - output: pipelineArtifact - displayName: Publish SBOM manifest + displayName: 'Publish V4 pipeline artifacts' + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' + artifactName: '$(System.PhaseName)_Artifacts' continueOnError: true - targetPath: $(Build.ArtifactStagingDirectory)/sbom - artifactName: $(ARTIFACT_NAME) + retryCountOnTaskFailure: 10 # for any files being locked # add any outputs provided via root yaml - ${{ if ne(parameters.templateContext.outputs, '') }}: diff --git a/eng/common/templates-official/steps/publish-build-artifacts.yml b/eng/common/templates-official/steps/publish-build-artifacts.yml index 100a3fc98493..fcf6637b2ebc 100644 --- a/eng/common/templates-official/steps/publish-build-artifacts.yml +++ b/eng/common/templates-official/steps/publish-build-artifacts.yml @@ -24,6 +24,10 @@ parameters: - name: is1ESPipeline type: boolean default: true + +- name: retryCountOnTaskFailure + type: string + default: 10 steps: - ${{ if ne(parameters.is1ESPipeline, true) }}: @@ -38,4 +42,5 @@ steps: PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: ArtifactName: ${{ parameters.artifactName }} - + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates-official/steps/publish-pipeline-artifacts.yml b/eng/common/templates-official/steps/publish-pipeline-artifacts.yml index 172f9f0fdc97..9e5981365e56 100644 --- a/eng/common/templates-official/steps/publish-pipeline-artifacts.yml +++ b/eng/common/templates-official/steps/publish-pipeline-artifacts.yml @@ -24,5 +24,7 @@ steps: artifactName: ${{ parameters.args.artifactName }} ${{ if parameters.args.properties }}: properties: ${{ parameters.args.properties }} - ${{ if parameters.args.sbomEnabled }}: + ${{ if ne(parameters.args.sbomEnabled, '') }}: sbomEnabled: ${{ parameters.args.sbomEnabled }} + ${{ if ne(parameters.args.isProduction, '') }}: + isProduction: ${{ parameters.args.isProduction }} diff --git a/eng/common/templates-official/steps/source-index-stage1-publish.yml b/eng/common/templates-official/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..9b8b80942b5c --- /dev/null +++ b/eng/common/templates-official/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: true + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates-official/variables/pool-providers.yml b/eng/common/templates-official/variables/pool-providers.yml index 1f308b24efc4..2cc3ae305d5a 100644 --- a/eng/common/templates-official/variables/pool-providers.yml +++ b/eng/common/templates-official/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# image: 1es-windows-2022 +# image: windows.vs2026.amd64 variables: # Coalesce the target and source branches so we know when a PR targets a release branch diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 5bdd3dd85fd2..5e261f34db42 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -1,12 +1,12 @@ parameters: enablePublishBuildArtifacts: false - disableComponentGovernance: '' - componentGovernanceIgnoreDirectories: '' -# Sbom related params - enableSbom: true runAsPublic: false - PackageVersion: 9.0.0 - BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' +# CG related params, unused now and can eventually be removed + disableComponentGovernance: unused +# Sbom related params, unused now and can eventually be removed + enableSbom: unused + PackageVersion: unused + BuildDropPath: unused jobs: - template: /eng/common/core-templates/job/job.yml @@ -21,31 +21,34 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} - componentGovernanceSteps: - - template: /eng/common/templates/steps/component-governance.yml - parameters: - ${{ if eq(parameters.disableComponentGovernance, '') }}: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.runAsPublic, 'false'), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/dotnet/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/microsoft/'), eq(variables['Build.SourceBranch'], 'refs/heads/main'))) }}: - disableComponentGovernance: false - ${{ else }}: - disableComponentGovernance: true - ${{ else }}: - disableComponentGovernance: ${{ parameters.disableComponentGovernance }} - componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} + # we don't run CG in public + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true" + displayName: Set skipComponentGovernanceDetection variable artifactPublishSteps: - ${{ if ne(parameters.artifacts.publish, '') }}: - ${{ if and(ne(parameters.artifacts.publish.artifacts, 'false'), ne(parameters.artifacts.publish.artifacts, '')) }}: - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: false args: displayName: Publish pipeline artifacts - pathToPublish: '$(Build.ArtifactStagingDirectory)/artifacts' - publishLocation: Container + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} continueOnError: true - condition: always() + condition: succeeded() + retryCountOnTaskFailure: 10 # for any files being locked + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + parameters: + is1ESPipeline: false + args: + displayName: Publish pipeline artifacts + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' + artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }}_Attempt$(System.JobAttempt) + continueOnError: true + condition: not(succeeded()) + retryCountOnTaskFailure: 10 # for any files being locked - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: @@ -56,19 +59,19 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() - sbomEnabled: false # we don't need SBOM for logs + retryCountOnTaskFailure: 10 # for any files being locked - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: false args: displayName: Publish Logs - pathToPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' - publishLocation: Container - artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + targetPath: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' + artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any files being locked - ${{ if eq(parameters.enableBuildRetry, 'true') }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml @@ -79,4 +82,4 @@ jobs: artifactName: 'BuildConfiguration' displayName: 'Publish build retry configuration' continueOnError: true - sbomEnabled: false # we don't need SBOM for BuildConfiguration + retryCountOnTaskFailure: 10 # for any files being locked diff --git a/eng/common/templates/steps/publish-build-artifacts.yml b/eng/common/templates/steps/publish-build-artifacts.yml index 6428a98dfef6..605e602e94d1 100644 --- a/eng/common/templates/steps/publish-build-artifacts.yml +++ b/eng/common/templates/steps/publish-build-artifacts.yml @@ -25,6 +25,10 @@ parameters: type: string default: 'Container' +- name: retryCountOnTaskFailure + type: string + default: 10 + steps: - ${{ if eq(parameters.is1ESPipeline, true) }}: - 'eng/common/templates cannot be referenced from a 1ES managed template': error @@ -37,4 +41,6 @@ steps: PublishLocation: ${{ parameters.publishLocation }} PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: - ArtifactName: ${{ parameters.artifactName }} \ No newline at end of file + ArtifactName: ${{ parameters.artifactName }} + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates/steps/source-index-stage1-publish.yml b/eng/common/templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..182cec33a7bb --- /dev/null +++ b/eng/common/templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: false + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates/steps/vmr-sync.yml b/eng/common/templates/steps/vmr-sync.yml new file mode 100644 index 000000000000..eb619c502683 --- /dev/null +++ b/eng/common/templates/steps/vmr-sync.yml @@ -0,0 +1,186 @@ +### These steps synchronize new code from product repositories into the VMR (https://github.com/dotnet/dotnet). +### They initialize the darc CLI and pull the new updates. +### Changes are applied locally onto the already cloned VMR (located in $vmrPath). + +parameters: +- name: targetRef + displayName: Target revision in dotnet/ to synchronize + type: string + default: $(Build.SourceVersion) + +- name: vmrPath + displayName: Path where the dotnet/dotnet is checked out to + type: string + default: $(Agent.BuildDirectory)/vmr + +- name: additionalSyncs + displayName: Optional list of package names whose repo's source will also be synchronized in the local VMR, e.g. NuGet.Protocol + type: object + default: [] + +steps: +- checkout: vmr + displayName: Clone dotnet/dotnet + path: vmr + clean: true + +- checkout: self + displayName: Clone $(Build.Repository.Name) + path: repo + fetchDepth: 0 + +# This step is needed so that when we get a detached HEAD / shallow clone, +# we still pull the commit into the temporary repo clone to use it during the sync. +# Also unshallow the clone so that forwardflow command would work. +- script: | + git branch repo-head + git rev-parse HEAD + displayName: Label PR commit + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global user.name "dotnet-maestro[bot]" + git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com" + displayName: Set git author to dotnet-maestro[bot] + workingDirectory: ${{ parameters.vmrPath }} + +- script: | + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync repo into VMR (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global diff.astextplain.textconv echo + git config --system core.longpaths true + displayName: Configure Windows git (longpaths, astextplain) + condition: eq(variables['Agent.OS'], 'Windows_NT') + +- powershell: | + ./eng/common/vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync repo into VMR (Windows) + condition: eq(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - task: CopyFiles@2 + displayName: Collect failed patches + condition: failed() + inputs: + SourceFolder: '$(Agent.TempDirectory)' + Contents: '*.patch' + TargetFolder: '$(Build.ArtifactStagingDirectory)/FailedPatches' + + - publish: '$(Build.ArtifactStagingDirectory)/FailedPatches' + artifact: $(System.JobDisplayName)_FailedPatches + displayName: Upload failed patches + condition: failed() + +- ${{ each assetName in parameters.additionalSyncs }}: + # The vmr-sync script ends up staging files in the local VMR so we have to commit those + - script: + git commit --allow-empty -am "Forward-flow $(Build.Repository.Name)" + displayName: Commit local VMR changes + workingDirectory: ${{ parameters.vmrPath }} + + - script: | + set -ex + + echo "Searching for details of asset ${{ assetName }}..." + + # Use darc to get dependencies information + dependencies=$(./.dotnet/dotnet darc get-dependencies --name '${{ assetName }}' --ci) + + # Extract repository URL and commit hash + repository=$(echo "$dependencies" | grep 'Repo:' | sed 's/Repo:[[:space:]]*//' | head -1) + + if [ -z "$repository" ]; then + echo "##vso[task.logissue type=error]Asset ${{ assetName }} not found in the dependency list" + exit 1 + fi + + commit=$(echo "$dependencies" | grep 'Commit:' | sed 's/Commit:[[:space:]]*//' | head -1) + + echo "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync ${{ assetName }} into (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + + - powershell: | + $ErrorActionPreference = 'Stop' + + Write-Host "Searching for details of asset ${{ assetName }}..." + + $dependencies = .\.dotnet\dotnet darc get-dependencies --name '${{ assetName }}' --ci + + $repository = $dependencies | Select-String -Pattern 'Repo:\s+([^\s]+)' | Select-Object -First 1 + $repository -match 'Repo:\s+([^\s]+)' | Out-Null + $repository = $matches[1] + + if ($repository -eq $null) { + Write-Error "Asset ${{ assetName }} not found in the dependency list" + exit 1 + } + + $commit = $dependencies | Select-String -Pattern 'Commit:\s+([^\s]+)' | Select-Object -First 1 + $commit -match 'Commit:\s+([^\s]+)' | Out-Null + $commit = $matches[1] + + Write-Host "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + .\eng\common\vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync ${{ assetName }} into (Windows) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo diff --git a/eng/common/templates/variables/pool-providers.yml b/eng/common/templates/variables/pool-providers.yml index 18693ea120d5..587770f0add4 100644 --- a/eng/common/templates/variables/pool-providers.yml +++ b/eng/common/templates/variables/pool-providers.yml @@ -23,7 +23,7 @@ # # pool: # name: $(DncEngInternalBuildPool) -# demands: ImageOverride -equals windows.vs2022.amd64 +# demands: ImageOverride -equals windows.vs2026.amd64 variables: - ${{ if eq(variables['System.TeamProject'], 'internal') }}: - template: /eng/common/templates-official/variables/pool-providers.yml diff --git a/eng/common/templates/vmr-build-pr.yml b/eng/common/templates/vmr-build-pr.yml new file mode 100644 index 000000000000..2f3694fa1323 --- /dev/null +++ b/eng/common/templates/vmr-build-pr.yml @@ -0,0 +1,43 @@ +# This pipeline is used for running the VMR verification of the PR changes in repo-level PRs. +# +# It will run a full set of verification jobs defined in: +# https://github.com/dotnet/dotnet/blob/10060d128e3f470e77265f8490f5e4f72dae738e/eng/pipelines/templates/stages/vmr-build.yml#L27-L38 +# +# For repos that do not need to run the full set, you would do the following: +# +# 1. Copy this YML file to a repo-specific location, i.e. outside of eng/common. +# +# 2. Add `verifications` parameter to VMR template reference +# +# Examples: +# - For source-build stage 1 verification, add the following: +# verifications: [ "source-build-stage1" ] +# +# - For Windows only verifications, add the following: +# verifications: [ "unified-build-windows-x64", "unified-build-windows-x86" ] + +trigger: none +pr: none + +variables: +- template: /eng/common/templates/variables/pool-providers.yml@self + +- name: skipComponentGovernanceDetection # we run CG on internal builds only + value: true + +- name: Codeql.Enabled # we run CodeQL on internal builds only + value: false + +resources: + repositories: + - repository: vmr + type: github + name: dotnet/dotnet + endpoint: dotnet + ref: refs/heads/main # Set to whatever VMR branch the PR build should insert into + +stages: +- template: /eng/pipelines/templates/stages/vmr-build.yml@vmr + parameters: + isBuiltFromVmr: false + scope: lite diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index a06513a59407..977a2d4b1039 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -65,10 +65,8 @@ $ErrorActionPreference = 'Stop' # Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed [string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null } -# True if the build is a product build -[bool]$productBuild = if (Test-Path variable:productBuild) { $productBuild } else { $false } - -[String[]]$properties = if (Test-Path variable:properties) { $properties } else { @() } +# True when the build is running within the VMR. +[bool]$fromVMR = if (Test-Path variable:fromVMR) { $fromVMR } else { $false } function Create-Directory ([string[]] $path) { New-Item -Path $path -Force -ItemType 'Directory' | Out-Null @@ -259,7 +257,20 @@ function Retry($downloadBlock, $maxRetries = 5) { function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' + $shouldDownload = $false + if (!(Test-Path $installScript)) { + $shouldDownload = $true + } else { + # Check if the script is older than 30 days + $fileAge = (Get-Date) - (Get-Item $installScript).LastWriteTime + if ($fileAge.Days -gt 30) { + Write-Host "Existing install script is too old, re-downloading..." + $shouldDownload = $true + } + } + + if ($shouldDownload) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit $uri = "https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1" @@ -383,8 +394,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # If the version of msbuild is going to be xcopied, # use this version. Version matches a package here: - # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/17.12.0 - $defaultXCopyMSBuildVersion = '17.12.0' + # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/18.0.0 + $defaultXCopyMSBuildVersion = '18.0.0' if (!$vsRequirements) { if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') { @@ -533,7 +544,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') { $vswhereVersion = $GlobalJson.tools.vswhere } else { - $vswhereVersion = '2.5.2' + # keep this in sync with the VSWhereVersion in DefaultVersions.props + $vswhereVersion = '3.1.7' } $vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion" @@ -541,7 +553,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir - Write-Host 'Downloading vswhere' + Write-Host "Downloading vswhere $vswhereVersion" + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Retry({ Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -UseBasicParsing -OutFile $vswhereExe }) @@ -611,14 +624,7 @@ function InitializeBuildTool() { } $dotnetPath = Join-Path $dotnetRoot (GetExecutableFileName 'dotnet') - # Use override if it exists - commonly set by source-build - if ($null -eq $env:_OverrideArcadeInitializeBuildToolFramework) { - $initializeBuildToolFramework="net9.0" - } else { - $initializeBuildToolFramework=$env:_OverrideArcadeInitializeBuildToolFramework - } - - $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = $initializeBuildToolFramework } + $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'net' } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore @@ -627,7 +633,7 @@ function InitializeBuildTool() { ExitWithExitCode 1 } - $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472"; ExcludePrereleaseVS = $excludePrereleaseVS } + $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "netframework"; ExcludePrereleaseVS = $excludePrereleaseVS } } else { Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 @@ -660,7 +666,6 @@ function GetNuGetPackageCachePath() { $env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages\' } else { $env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages\' - $env:RESTORENOHTTPCACHE = $true } } @@ -782,26 +787,13 @@ function MSBuild() { $toolsetBuildProject = InitializeToolset $basePath = Split-Path -parent $toolsetBuildProject - $possiblePaths = @( - # new scripts need to work with old packages, so we need to look for the old names/versions - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.Arcade.Sdk.dll')) - ) - $selectedPath = $null - foreach ($path in $possiblePaths) { - if (Test-Path $path -PathType Leaf) { - $selectedPath = $path - break - } - } + $selectedPath = Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll') + if (-not $selectedPath) { - Write-PipelineTelemetryError -Category 'Build' -Message 'Unable to find arcade sdk logger assembly.' + Write-PipelineTelemetryError -Category 'Build' -Message "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 } + $args += "/logger:$selectedPath" } @@ -832,6 +824,11 @@ function MSBuild-Core() { $cmdArgs = "$($buildTool.Command) /m /nologo /clp:Summary /v:$verbosity /nr:$nodeReuse /p:ContinuousIntegrationBuild=$ci" + # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable + if ($env:MSBUILD_MT_ENABLED -eq "1") { + $cmdArgs += ' -mt' + } + if ($warnAsError) { $cmdArgs += ' /warnaserror /p:TreatWarningsAsErrors=true' } @@ -864,8 +861,8 @@ function MSBuild-Core() { } # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$productBuild -and -not($properties -like "*DotNetBuildRepo=true*")) { + # Skip this when the build is a child of the VMR build. + if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$fromVMR) { Write-PipelineSetResult -Result "Failed" -Message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 01b09b65796c..1b296f646c23 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -5,6 +5,9 @@ # CI mode - set to true on CI server for PR validation build or official build. ci=${ci:-false} +# Build mode +source_build=${source_build:-false} + # Set to true to use the pipelines logger which will enable Azure logging output. # https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md # This flag is meant as a temporary opt-opt for the feature while validate it across @@ -58,7 +61,8 @@ use_installed_dotnet_cli=${use_installed_dotnet_cli:-true} dotnetInstallScriptVersion=${dotnetInstallScriptVersion:-'v1'} # True to use global NuGet cache instead of restoring packages to repository-local directory. -if [[ "$ci" == true ]]; then +# Keep in sync with NuGetPackageroot in Arcade SDK's RepositoryLayout.props. +if [[ "$ci" == true || "$source_build" == true ]]; then use_global_nuget_cache=${use_global_nuget_cache:-false} else use_global_nuget_cache=${use_global_nuget_cache:-true} @@ -68,8 +72,8 @@ fi runtime_source_feed=${runtime_source_feed:-''} runtime_source_feed_key=${runtime_source_feed_key:-''} -# True if the build is a product build -product_build=${product_build:-false} +# True when the build is running within the VMR. +from_vmr=${from_vmr:-false} # Resolve any symlinks in the given path. function ResolvePath { @@ -296,8 +300,29 @@ function GetDotNetInstallScript { local root=$1 local install_script="$root/dotnet-install.sh" local install_script_url="https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh" + local timestamp_file="$root/.dotnet-install.timestamp" + local should_download=false if [[ ! -a "$install_script" ]]; then + should_download=true + elif [[ -f "$timestamp_file" ]]; then + # Check if the script is older than 30 days using timestamp file + local download_time=$(cat "$timestamp_file" 2>/dev/null || echo "0") + local current_time=$(date +%s) + local age_seconds=$((current_time - download_time)) + + # 30 days = 30 * 24 * 60 * 60 = 2592000 seconds + if [[ $age_seconds -gt 2592000 ]]; then + echo "Existing install script is too old, re-downloading..." + should_download=true + fi + else + # No timestamp file exists, assume script is old and re-download + echo "No timestamp found for existing install script, re-downloading..." + should_download=true + fi + + if [[ "$should_download" == true ]]; then mkdir -p "$root" echo "Downloading '$install_script_url'" @@ -324,6 +349,9 @@ function GetDotNetInstallScript { ExitWithExitCode $exit_code } fi + + # Create timestamp file to track download time in seconds from epoch + date +%s > "$timestamp_file" fi # return value _GetDotNetInstallScript="$install_script" @@ -339,22 +367,14 @@ function InitializeBuildTool { # return values _InitializeBuildTool="$_InitializeDotNetCli/dotnet" _InitializeBuildToolCommand="msbuild" - # use override if it exists - commonly set by source-build - if [[ "${_OverrideArcadeInitializeBuildToolFramework:-x}" == "x" ]]; then - _InitializeBuildToolFramework="net9.0" - else - _InitializeBuildToolFramework="${_OverrideArcadeInitializeBuildToolFramework}" - fi } -# Set RestoreNoHttpCache as a workaround for https://github.com/NuGet/Home/issues/3116 function GetNuGetPackageCachePath { if [[ -z ${NUGET_PACKAGES:-} ]]; then if [[ "$use_global_nuget_cache" == true ]]; then export NUGET_PACKAGES="$HOME/.nuget/packages/" else export NUGET_PACKAGES="$repo_root/.packages/" - export RESTORENOHTTPCACHE=true fi fi @@ -451,25 +471,13 @@ function MSBuild { fi local toolset_dir="${_InitializeToolset%/*}" - # new scripts need to work with old packages, so we need to look for the old names/versions - local selectedPath= - local possiblePaths=() - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - for path in "${possiblePaths[@]}"; do - if [[ -f $path ]]; then - selectedPath=$path - break - fi - done + local selectedPath="$toolset_dir/net/Microsoft.DotNet.ArcadeLogging.dll" + if [[ -z "$selectedPath" ]]; then - Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly." + Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 fi + args+=( "-logger:$selectedPath" ) fi @@ -506,8 +514,8 @@ function MSBuild-Core { echo "Build failed with exit code $exit_code. Check errors above." # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$product_build" != true && "$properties" != *"DotNetBuildRepo=true"* ]]; then + # Skip this when the build is a child of the VMR build. + if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$from_vmr" != true ]]; then Write-PipelineSetResult -result "Failed" -message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error @@ -518,7 +526,13 @@ function MSBuild-Core { } } - RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" + # Add -mt flag for MSBuild multithreaded mode if enabled via environment variable + local mt_switch="" + if [[ "${MSBUILD_MT_ENABLED:-}" == "1" ]]; then + mt_switch="-mt" + fi + + RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch $mt_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" } function GetDarc { @@ -530,6 +544,13 @@ function GetDarc { fi "$eng_root/common/darc-init.sh" --toolpath "$darc_path" $version + darc_tool="$darc_path/darc" +} + +# Returns a full path to an Arcade SDK task project file. +function GetSdkTaskProject { + taskName=$1 + echo "$(dirname $_InitializeToolset)/SdkTasks/$taskName.proj" } ResolvePath "${BASH_SOURCE[0]}" diff --git a/eng/common/vmr-sync.ps1 b/eng/common/vmr-sync.ps1 new file mode 100755 index 000000000000..b37992d91cf0 --- /dev/null +++ b/eng/common/vmr-sync.ps1 @@ -0,0 +1,164 @@ +<# +.SYNOPSIS + +This script is used for synchronizing the current repository into a local VMR. +It pulls the current repository's code into the specified VMR directory for local testing or +Source-Build validation. + +.DESCRIPTION + +The tooling used for synchronization will clone the VMR repository into a temporary folder if +it does not already exist. These clones can be reused in future synchronizations, so it is +recommended to dedicate a folder for this to speed up re-runs. + +.EXAMPLE + Synchronize current repository into a local VMR: + ./vmr-sync.ps1 -vmrDir "$HOME/repos/dotnet" -tmpDir "$HOME/repos/tmp" + +.PARAMETER tmpDir +Required. Path to the temporary folder where repositories will be cloned + +.PARAMETER vmrBranch +Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch + +.PARAMETER azdevPat +Optional. Azure DevOps PAT to use for cloning private repositories. + +.PARAMETER vmrDir +Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +.PARAMETER debugOutput +Optional. Enables debug logging in the darc vmr command. + +.PARAMETER ci +Optional. Denotes that the script is running in a CI environment. +#> +param ( + [Parameter(Mandatory=$true, HelpMessage="Path to the temporary folder where repositories will be cloned")] + [string][Alias('t', 'tmp')]$tmpDir, + [string][Alias('b', 'branch')]$vmrBranch, + [string]$remote, + [string]$azdevPat, + [string][Alias('v', 'vmr')]$vmrDir, + [switch]$ci, + [switch]$debugOutput +) + +function Fail { + Write-Host "> $($args[0])" -ForegroundColor 'Red' +} + +function Highlight { + Write-Host "> $($args[0])" -ForegroundColor 'Cyan' +} + +$verbosity = 'verbose' +if ($debugOutput) { + $verbosity = 'debug' +} +# Validation + +if (-not $tmpDir) { + Fail "Missing -tmpDir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +} + +# Sanitize the input + +if (-not $vmrDir) { + $vmrDir = Join-Path $tmpDir 'dotnet' +} + +if (-not (Test-Path -Path $tmpDir -PathType Container)) { + New-Item -ItemType Directory -Path $tmpDir | Out-Null +} + +# Prepare the VMR + +if (-not (Test-Path -Path $vmrDir -PathType Container)) { + Highlight "Cloning 'dotnet/dotnet' into $vmrDir.." + git clone https://github.com/dotnet/dotnet $vmrDir + + if ($vmrBranch) { + git -C $vmrDir switch -c $vmrBranch + } +} +else { + if ((git -C $vmrDir diff --quiet) -eq $false) { + Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes" + exit 1 + } + + if ($vmrBranch) { + Highlight "Preparing $vmrDir" + git -C $vmrDir checkout $vmrBranch + git -C $vmrDir pull + } +} + +Set-StrictMode -Version Latest + +# Prepare darc + +Highlight 'Installing .NET, preparing the tooling..' +. .\eng\common\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true +$env:DOTNET_ROOT = $dotnetRoot +$darc = Get-Darc + +Highlight "Starting the synchronization of VMR.." + +# Synchronize the VMR +$versionDetailsPath = Resolve-Path (Join-Path $PSScriptRoot '..\Version.Details.xml') | Select-Object -ExpandProperty Path +[xml]$versionDetails = Get-Content -Path $versionDetailsPath +$repoName = $versionDetails.SelectSingleNode('//Source').Mapping +if (-not $repoName) { + Fail "Failed to resolve repo mapping from $versionDetailsPath" + exit 1 +} + +$darcArgs = ( + "vmr", "forwardflow", + "--tmp", $tmpDir, + "--$verbosity", + $vmrDir +) + +if ($ci) { + $darcArgs += ("--ci") +} + +if ($azdevPat) { + $darcArgs += ("--azdev-pat", $azdevPat) +} + +& "$darc" $darcArgs + +if ($LASTEXITCODE -eq 0) { + Highlight "Synchronization succeeded" +} +else { + Highlight "Failed to flow code into the local VMR. Falling back to resetting the VMR to match repo contents..." + git -C $vmrDir reset --hard + + $resetArgs = ( + "vmr", "reset", + "${repoName}:HEAD", + "--vmr", $vmrDir, + "--tmp", $tmpDir, + "--additional-remotes", "${repoName}:${repoRoot}" + ) + + & "$darc" $resetArgs + + if ($LASTEXITCODE -eq 0) { + Highlight "Successfully reset the VMR using 'darc vmr reset'" + } + else { + Fail "Synchronization of repo to VMR failed!" + Fail "'$vmrDir' is left in its last state (re-run of this script will reset it)." + Fail "Please inspect the logs which contain path to the failing patch file (use -debugOutput to get all the details)." + Fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script." + exit 1 + } +} diff --git a/eng/common/vmr-sync.sh b/eng/common/vmr-sync.sh new file mode 100755 index 000000000000..198caec59bd4 --- /dev/null +++ b/eng/common/vmr-sync.sh @@ -0,0 +1,227 @@ +#!/bin/bash + +### This script is used for synchronizing the current repository into a local VMR. +### It pulls the current repository's code into the specified VMR directory for local testing or +### Source-Build validation. +### +### The tooling used for synchronization will clone the VMR repository into a temporary folder if +### it does not already exist. These clones can be reused in future synchronizations, so it is +### recommended to dedicate a folder for this to speed up re-runs. +### +### USAGE: +### Synchronize current repository into a local VMR: +### ./vmr-sync.sh --tmp "$HOME/repos/tmp" "$HOME/repos/dotnet" +### +### Options: +### -t, --tmp, --tmp-dir PATH +### Required. Path to the temporary folder where repositories will be cloned +### +### -b, --branch, --vmr-branch BRANCH_NAME +### Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch +### +### --debug +### Optional. Turns on the most verbose logging for the VMR tooling +### +### --remote name:URI +### Optional. Additional remote to use during the synchronization +### This can be used to synchronize to a commit from a fork of the repository +### Example: 'runtime:https://github.com/yourfork/runtime' +### +### --azdev-pat +### Optional. Azure DevOps PAT to use for cloning private repositories. +### +### -v, --vmr, --vmr-dir PATH +### Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +function print_help () { + sed -n '/^### /,/^$/p' "$source" | cut -b 5- +} + +COLOR_RED=$(tput setaf 1 2>/dev/null || true) +COLOR_CYAN=$(tput setaf 6 2>/dev/null || true) +COLOR_CLEAR=$(tput sgr0 2>/dev/null || true) +COLOR_RESET=uniquesearchablestring +FAILURE_PREFIX='> ' + +function fail () { + echo "${COLOR_RED}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_RED}}${COLOR_CLEAR}" >&2 +} + +function highlight () { + echo "${COLOR_CYAN}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_CYAN}}${COLOR_CLEAR}" +} + +tmp_dir='' +vmr_dir='' +vmr_branch='' +additional_remotes='' +verbosity=verbose +azdev_pat='' +ci=false + +while [[ $# -gt 0 ]]; do + opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + case "$opt" in + -t|--tmp|--tmp-dir) + tmp_dir=$2 + shift + ;; + -v|--vmr|--vmr-dir) + vmr_dir=$2 + shift + ;; + -b|--branch|--vmr-branch) + vmr_branch=$2 + shift + ;; + --remote) + additional_remotes="$additional_remotes $2" + shift + ;; + --azdev-pat) + azdev_pat=$2 + shift + ;; + --ci) + ci=true + ;; + -d|--debug) + verbosity=debug + ;; + -h|--help) + print_help + exit 0 + ;; + *) + fail "Invalid argument: $1" + print_help + exit 1 + ;; + esac + + shift +done + +# Validation + +if [[ -z "$tmp_dir" ]]; then + fail "Missing --tmp-dir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +fi + +# Sanitize the input + +if [[ -z "$vmr_dir" ]]; then + vmr_dir="$tmp_dir/dotnet" +fi + +if [[ ! -d "$tmp_dir" ]]; then + mkdir -p "$tmp_dir" +fi + +if [[ "$verbosity" == "debug" ]]; then + set -x +fi + +# Prepare the VMR + +if [[ ! -d "$vmr_dir" ]]; then + highlight "Cloning 'dotnet/dotnet' into $vmr_dir.." + git clone https://github.com/dotnet/dotnet "$vmr_dir" + + if [[ -n "$vmr_branch" ]]; then + git -C "$vmr_dir" switch -c "$vmr_branch" + fi +else + if ! git -C "$vmr_dir" diff --quiet; then + fail "There are changes in the working tree of $vmr_dir. Please commit or stash your changes" + exit 1 + fi + + if [[ -n "$vmr_branch" ]]; then + highlight "Preparing $vmr_dir" + git -C "$vmr_dir" checkout "$vmr_branch" + git -C "$vmr_dir" pull + fi +fi + +set -e + +# Prepare darc + +highlight 'Installing .NET, preparing the tooling..' +source "./eng/common/tools.sh" +InitializeDotNetCli true +GetDarc +dotnetDir=$( cd ./.dotnet/; pwd -P ) +dotnet=$dotnetDir/dotnet + +highlight "Starting the synchronization of VMR.." +set +e + +if [[ -n "$additional_remotes" ]]; then + additional_remotes="--additional-remotes $additional_remotes" +fi + +if [[ -n "$azdev_pat" ]]; then + azdev_pat="--azdev-pat $azdev_pat" +fi + +ci_arg='' +if [[ "$ci" == "true" ]]; then + ci_arg="--ci" +fi + +# Synchronize the VMR + +version_details_path=$(cd "$scriptroot/.."; pwd -P)/Version.Details.xml +repo_name=$(grep -m 1 ' Date: Wed, 15 Apr 2026 23:34:12 +0000 Subject: [PATCH 156/230] Update dependencies from build 310584 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26210.101 -> 10.0.0-preview.26215.116) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26210-101 -> 18.6.0-preview-26215-116) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.21101 -> 7.6.0-rc.21616) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26210.101 -> 10.0.300-alpha.26215.116) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26210.101 -> 5.6.0-2.26215.116) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26210.101 -> 10.0.0-beta.26215.116) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26210.101 -> 15.2.300-servicing.26215.116) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26210-101 -> 18.3.0-release-26215-116) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26210.101 -> 10.0.300-preview.26215.116) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index e1f9a4b1bb84..e40ba20ff7b5 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-preview.26210.101 + 10.0.0-preview.26215.116 10.0.5 10.0.5 - 18.6.0-preview-26210-101 - 18.6.0-preview-26210-101 - 7.6.0-rc.21101 - 10.0.300-alpha.26210.101 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 - 10.0.0-preview.26210.101 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 + 18.6.0-preview-26215-116 + 18.6.0-preview-26215-116 + 7.6.0-rc.21616 + 10.0.300-alpha.26215.116 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 + 10.0.0-preview.26215.116 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 2.0.0-preview.1.26153.111 2.2.5 - 10.0.0-beta.26210.101 - 10.0.0-beta.26210.101 - 10.0.0-beta.26210.101 - 10.0.0-beta.26210.101 - 10.0.0-beta.26210.101 - 10.0.0-beta.26210.101 + 10.0.0-beta.26215.116 + 10.0.0-beta.26215.116 + 10.0.0-beta.26215.116 + 10.0.0-beta.26215.116 + 10.0.0-beta.26215.116 + 10.0.0-beta.26215.116 10.0.5 10.0.5 10.0.5-servicing.26153.111 10.0.5-servicing.26153.111 - 10.0.0-beta.26210.101 - 10.0.0-beta.26210.101 + 10.0.0-beta.26215.116 + 10.0.0-beta.26215.116 10.0.5 10.0.5 10.0.5 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.5 10.0.5 10.0.5 - 15.2.300-servicing.26210.101 + 15.2.300-servicing.26215.116 10.0.5 - 5.6.0-2.26210.101 - 5.6.0-2.26210.101 + 5.6.0-2.26215.116 + 5.6.0-2.26215.116 10.0.5-servicing.26153.111 10.0.5 10.0.5 10.0.0-preview.7.25377.103 - 10.0.0-preview.26210.101 + 10.0.0-preview.26215.116 10.0.5-servicing.26153.111 - 18.3.0-release-26210-101 + 18.3.0-release-26215-116 10.0.5 10.0.5-servicing.26153.111 - 10.0.300-alpha.26210.101 - 10.0.300-alpha.26210.101 - 10.0.300-alpha.26210.101 - 10.0.300-alpha.26210.101 - 10.0.300-alpha.26210.101 - 10.0.300-preview.26210.101 - 10.0.300-preview.26210.101 - 10.0.300-preview.26210.101 - 10.0.300-preview.26210.101 - 10.0.300-preview.26210.101 - 10.0.300-preview.26210.101 - 10.0.300-preview.26210.101 - 10.0.300-preview.26210.101 - 10.0.300-preview.26210.101 - 18.3.0-release-26210-101 - 18.3.0-release-26210-101 + 10.0.300-alpha.26215.116 + 10.0.300-alpha.26215.116 + 10.0.300-alpha.26215.116 + 10.0.300-alpha.26215.116 + 10.0.300-alpha.26215.116 + 10.0.300-preview.26215.116 + 10.0.300-preview.26215.116 + 10.0.300-preview.26215.116 + 10.0.300-preview.26215.116 + 10.0.300-preview.26215.116 + 10.0.300-preview.26215.116 + 10.0.300-preview.26215.116 + 10.0.300-preview.26215.116 + 10.0.300-preview.26215.116 + 18.3.0-release-26215-116 + 18.3.0-release-26215-116 3.2.5 10.0.5 10.0.5-servicing.26153.111 10.0.5 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 - 7.6.0-rc.21101 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 + 7.6.0-rc.21616 10.0.5 2.0.5 10.0.5 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index ede76b7c9f9b..9c4d7c649227 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet a612c2a1056fe3265387ae3ff7c94eba1505caf9 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 - + https://github.com/dotnet/dotnet - 70c50b3477e27fe499dafca4406902b502467d89 + fe40c4e7b110cf7220a726d71541340399598771 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 71798bf9d09f..9c974e314106 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26210.101", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26210.101", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26215.116", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26215.116", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 344e433085b1c7cad49be2e2ceacccc218c35f71 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 6 Apr 2026 21:57:36 +0000 Subject: [PATCH 157/230] Fix duplicate flags being stripped when rollForward is true in tool runner Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/9a375444-f64b-4627-acbb-baf257cc890b Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> --- .../CommandResolution/MuxerCommandSpecMaker.cs | 2 +- .../Tool/Run/ToolRunCommandTests.cs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Cli/dotnet/CommandFactory/CommandResolution/MuxerCommandSpecMaker.cs b/src/Cli/dotnet/CommandFactory/CommandResolution/MuxerCommandSpecMaker.cs index 63a3ecae1d5b..57b2db2ba6e0 100644 --- a/src/Cli/dotnet/CommandFactory/CommandResolution/MuxerCommandSpecMaker.cs +++ b/src/Cli/dotnet/CommandFactory/CommandResolution/MuxerCommandSpecMaker.cs @@ -38,7 +38,7 @@ internal static CommandSpec CreatePackageCommandSpecUsingMuxer( { if (rollForwardArgument.Any()) { - arguments.AddRange(commandArguments.Except(rollForwardArgument)); + arguments.AddRange(commandArguments.Where(arg => !arg.Equals("--allow-roll-forward", StringComparison.OrdinalIgnoreCase))); } else { diff --git a/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs b/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs index f122a680dc71..bf8b5136ac70 100644 --- a/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs +++ b/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs @@ -43,6 +43,24 @@ public void WhenRunWithRollForwardOptionItShouldIncludeRollForwardInNativeHost() result.Args.Should().ContainAll("--roll-forward", "Major", fakeExecutable.Value); } + [Fact] + public void WhenRunWithRollForwardOptionItShouldPreserveDuplicateArgumentsForwardedToTool() + { + (FilePath fakeExecutable, LocalToolsCommandResolver localToolsCommandResolver) = DefaultSetup("a"); + IEnumerable testForwardArgument = ["--var", "a", "--var", "b"]; + + var result = localToolsCommandResolver.ResolveStrict(new CommandResolverArguments() + { + CommandName = "dotnet-a", + CommandArguments = testForwardArgument + }, allowRollForward: true); + + result.Should().NotBeNull(); + result.Args.Should().ContainAll("--roll-forward", "Major", fakeExecutable.Value, "--var", "a", "--var", "b"); + // Verify both occurrences of --var are present (not deduplicated) + result.Args!.Split(' ').Count(arg => arg == "--var").Should().Be(2); + } + [Fact] public void WhenRunWithoutRollForwardOptionItShouldNotIncludeRollForwardInNativeHost() { From de2ab88d45eafc3be52976c5b639971044ece6ec Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 6 Apr 2026 21:59:03 +0000 Subject: [PATCH 158/230] Improve test assertion to use substring check instead of string splitting Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/9a375444-f64b-4627-acbb-baf257cc890b Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> --- .../CommandTests/Tool/Run/ToolRunCommandTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs b/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs index bf8b5136ac70..c5626c757b99 100644 --- a/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs +++ b/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs @@ -56,9 +56,9 @@ public void WhenRunWithRollForwardOptionItShouldPreserveDuplicateArgumentsForwar }, allowRollForward: true); result.Should().NotBeNull(); - result.Args.Should().ContainAll("--roll-forward", "Major", fakeExecutable.Value, "--var", "a", "--var", "b"); - // Verify both occurrences of --var are present (not deduplicated) - result.Args!.Split(' ').Count(arg => arg == "--var").Should().Be(2); + result.Args.Should().ContainAll("--roll-forward", "Major", fakeExecutable.Value); + // Verify both occurrences of --var are present (not deduplicated by Except) + result.Args.Should().Contain("--var a --var b"); } [Fact] From dd2b76a7e009ec5267df41e30fc7a5037c82a779 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Fri, 10 Apr 2026 16:56:16 -0700 Subject: [PATCH 159/230] Update test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs b/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs index c5626c757b99..1616c16f9aae 100644 --- a/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs +++ b/test/dotnet.Tests/CommandTests/Tool/Run/ToolRunCommandTests.cs @@ -57,7 +57,7 @@ public void WhenRunWithRollForwardOptionItShouldPreserveDuplicateArgumentsForwar result.Should().NotBeNull(); result.Args.Should().ContainAll("--roll-forward", "Major", fakeExecutable.Value); - // Verify both occurrences of --var are present (not deduplicated by Except) + // Verify duplicate forwarded arguments are preserved in order. result.Args.Should().Contain("--var a --var b"); } From 263b3975dc1c5275c7dc3ee538bd70a4289bd594 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 16 Apr 2026 03:27:19 +0000 Subject: [PATCH 160/230] [release/10.0.3xx] Enhance fish shell completions with static+dynamic hybrid generation (#53779) Co-authored-by: Stuart Lang Co-authored-by: Claude Opus 4.6 --- .../shells/FishShellProvider.cs | 391 +++++++++++++++++- .../FishShellProviderTests.cs | 137 ++++++ .../VerifyConfiguration.cs | 1 + ...ests.BoundedMultiValueOption.verified.fish | 67 +++ ...DynamicCompletionsGeneration.verified.fish | 52 +++ ...iderTests.GenericCompletions.verified.fish | 20 + ...viderTests.MixedArityOptions.verified.fish | 87 ++++ ...s.NestedSubcommandCompletion.verified.fish | 34 ++ ...Tests.SimpleOptionCompletion.verified.fish | 50 +++ ...iderTests.StaticOptionValues.verified.fish | 55 +++ ...mmandAndOptionInTopLevelList.verified.fish | 54 +++ ...ts.UnboundedMultiValueOption.verified.fish | 68 +++ 12 files changed, 1009 insertions(+), 7 deletions(-) create mode 100644 test/System.CommandLine.StaticCompletions.Tests/FishShellProviderTests.cs create mode 100644 test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.BoundedMultiValueOption.verified.fish create mode 100644 test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.DynamicCompletionsGeneration.verified.fish create mode 100644 test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.GenericCompletions.verified.fish create mode 100644 test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.MixedArityOptions.verified.fish create mode 100644 test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.NestedSubcommandCompletion.verified.fish create mode 100644 test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.SimpleOptionCompletion.verified.fish create mode 100644 test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.StaticOptionValues.verified.fish create mode 100644 test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.SubcommandAndOptionInTopLevelList.verified.fish create mode 100644 test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.UnboundedMultiValueOption.verified.fish diff --git a/src/System.CommandLine.StaticCompletions/shells/FishShellProvider.cs b/src/System.CommandLine.StaticCompletions/shells/FishShellProvider.cs index b9555424d493..27b4fc71fa34 100644 --- a/src/System.CommandLine.StaticCompletions/shells/FishShellProvider.cs +++ b/src/System.CommandLine.StaticCompletions/shells/FishShellProvider.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.CodeDom.Compiler; +using System.CommandLine.Completions; using System.CommandLine.StaticCompletions.Resources; namespace System.CommandLine.StaticCompletions.Shells; @@ -16,13 +18,388 @@ public class FishShellProvider : IShellProvider // override the ToString method to return the argument name so that CLI help is cleaner for 'default' values public override string ToString() => ArgumentName; - private static readonly string _dynamicCompletionScript = - """ - # fish parameter completion for the dotnet CLI - # add the following to your config.fish to enable completions + public string GenerateCompletions(Command command) + { + var safeName = command.Name.MakeSafeFunctionName(); - complete -f -c dotnet -a "(dotnet complete (commandline -cp))" - """; + using var textWriter = new StringWriter { NewLine = "\n" }; + using var writer = new IndentedTextWriter(textWriter); - public string GenerateCompletions(System.CommandLine.Command command) => _dynamicCompletionScript; + writer.WriteLine($"# fish completions for {command.Name}"); + writer.WriteLine(); + + // Collect all commands in a flat list and assign numeric state IDs + var states = new List<(int id, Command cmd)>(); + CollectStates(command, states); + var stateIdByCommand = states.ToDictionary(s => s.cmd, s => s.id); + + // Write the main completion function + writer.WriteLine($"function _{safeName}"); + writer.Indent++; + + WriteTokenization(writer); + writer.WriteLine(); + WriteStateWalker(writer, states, stateIdByCommand); + writer.WriteLine(); + WriteOptionValueCompletions(writer, states); + WriteStateCompletions(writer, states); + + writer.Indent--; + writer.WriteLine("end"); + writer.WriteLine(); + + writer.WriteLine($"complete -c {command.Name} -f -a '(_{safeName})'"); + + writer.Flush(); + return textWriter.ToString(); + } + + /// + /// Recursively collect all visible commands into a flat list with numeric state IDs. + /// State 0 is the root command. + /// + private static void CollectStates(Command cmd, List<(int id, Command cmd)> states) + { + states.Add((states.Count, cmd)); + foreach (var sub in cmd.Subcommands.Where(c => !c.Hidden)) + { + CollectStates(sub, states); + } + } + + /// + /// Write the command line tokenization logic. + /// Uses fish's commandline builtin to get completed tokens up to the cursor. + /// + private static void WriteTokenization(IndentedTextWriter writer) + { + // -opc: tokenize, cut at cursor, only completed tokens (excludes current partial word) + writer.WriteLine("set -l tokens (commandline -opc)"); + } + + // Options with MaximumNumberOfValues at or above this threshold are treated as unbounded + // (i.e. consume tokens until an option-like token is encountered). + // System.CommandLine uses 100_000 as its internal sentinel for ZeroOrMore/OneOrMore. + private const int UnboundedArityThreshold = 100_000; + + /// + /// Generate the state machine that walks completed tokens to determine which subcommand context we're in. + /// For each state, we check if the current word matches a known subcommand (transitioning to that subcommand's state) + /// or a value-taking option (skipping tokens for the option's value(s), respecting the option's arity). + /// + private static void WriteStateWalker(IndentedTextWriter writer, List<(int id, Command cmd)> states, Dictionary stateIdByCommand) + { + writer.WriteLine("set -l state 0"); + writer.WriteLine("set -l i 2"); // start after the command name (fish arrays are 1-based) + writer.WriteLine("while test $i -le (count $tokens)"); + writer.Indent++; + writer.WriteLine("set -l word $tokens[$i]"); + + writer.WriteLine("switch $state"); + writer.Indent++; + + foreach (var (stateId, cmd) in states) + { + var visibleSubs = cmd.Subcommands.Where(c => !c.Hidden).ToArray(); + var valueOptions = cmd.HierarchicalOptions() + .Where(o => !o.Hidden && !o.IsFlag()) + .ToArray(); + + // Skip states that have no transitions to emit + if (visibleSubs.Length == 0 && valueOptions.Length == 0) + continue; + + writer.WriteLine($"case {stateId}"); + writer.Indent++; + writer.WriteLine("switch $word"); + writer.Indent++; + + // Subcommand transitions + foreach (var sub in visibleSubs) + { + var subStateId = stateIdByCommand[sub]; + var names = string.Join(" ", sub.Names()); + writer.WriteLine($"case {names}"); + writer.Indent++; + writer.WriteLine($"set state {subStateId}"); + writer.Indent--; + } + + // Single-value options (arity exactly 1): skip the next token + var singleValueNames = valueOptions + .Where(o => o.Arity.MaximumNumberOfValues == 1) + .SelectMany(o => o.Names()) + .ToArray(); + if (singleValueNames.Length > 0) + { + writer.WriteLine($"case {string.Join(" ", singleValueNames)}"); + writer.Indent++; + writer.WriteLine("set i (math $i + 1)"); + writer.Indent--; + } + + // Multi-value options (arity > 1): skip up to N tokens, stopping at option-like tokens. + // Group by arity so options with the same max can share a case branch. + var multiValueByArity = valueOptions + .Where(o => o.Arity.MaximumNumberOfValues > 1) + .GroupBy(o => o.Arity.MaximumNumberOfValues); + foreach (var group in multiValueByArity) + { + var names = string.Join(" ", group.SelectMany(o => o.Names())); + writer.WriteLine($"case {names}"); + writer.Indent++; + WriteMultiValueSkipLoop(writer, group.Key); + writer.Indent--; + } + + writer.Indent--; + writer.WriteLine("end"); + writer.Indent--; + } + + writer.Indent--; + writer.WriteLine("end"); + + writer.WriteLine("set i (math $i + 1)"); + writer.Indent--; + writer.WriteLine("end"); + } + + /// + /// Emit a fish loop that skips value tokens after a multi-value option. + /// Stops when it has consumed maxValues tokens, or encounters a token starting with '-', + /// whichever comes first. For unbounded arities, only the '-' check applies. + /// + private static void WriteMultiValueSkipLoop(IndentedTextWriter writer, int maxValues) + { + bool isBounded = maxValues < UnboundedArityThreshold; + + if (isBounded) + { + writer.WriteLine($"set -l skip_max {maxValues}"); + writer.WriteLine("set -l skipped 0"); + writer.WriteLine("while test $skipped -lt $skip_max -a (math $i + 1) -le (count $tokens)"); + } + else + { + writer.WriteLine("while test (math $i + 1) -le (count $tokens)"); + } + + writer.Indent++; + writer.WriteLine("set -l next $tokens[(math $i + 1)]"); + writer.WriteLine("if string match -q -- '-*' $next"); + writer.Indent++; + writer.WriteLine("break"); + writer.Indent--; + writer.WriteLine("end"); + writer.WriteLine("set i (math $i + 1)"); + if (isBounded) + { + writer.WriteLine("set skipped (math $skipped + 1)"); + } + writer.Indent--; + writer.WriteLine("end"); + } + + /// + /// Generate option value completions. + /// Scans backward through completed tokens to find the nearest option, then checks whether + /// we're still within that option's arity. This correctly handles both single-value and + /// multi-value options (e.g. --sources foo bar with arity 3 still offers completions + /// for the third value). + /// + private static void WriteOptionValueCompletions(IndentedTextWriter writer, List<(int id, Command cmd)> states) + { + var hasAnyValueOptions = states.Any(s => + s.cmd.HierarchicalOptions().Any(o => !o.Hidden && !o.IsFlag())); + + if (!hasAnyValueOptions) return; + + // Scan backward through tokens to find the nearest option (token starting with -) + writer.WriteLine("set -l opt_index 0"); + writer.WriteLine("if test (count $tokens) -ge 2"); + writer.Indent++; + writer.WriteLine("for j in (seq (count $tokens) -1 2)"); + writer.Indent++; + writer.WriteLine("if string match -q -- '-*' $tokens[$j]"); + writer.Indent++; + writer.WriteLine("set opt_index $j"); + writer.WriteLine("break"); + writer.Indent--; + writer.WriteLine("end"); + writer.Indent--; + writer.WriteLine("end"); + writer.Indent--; + writer.WriteLine("end"); + writer.WriteLine(); + + writer.WriteLine("if test $opt_index -gt 0"); + writer.Indent++; + writer.WriteLine("set -l opt $tokens[$opt_index]"); + // values_after = number of non-option tokens between the option and the cursor + writer.WriteLine("set -l values_after (math (count $tokens) - $opt_index)"); + writer.WriteLine("switch $state"); + writer.Indent++; + + foreach (var (stateId, cmd) in states) + { + var valueOptions = cmd.HierarchicalOptions() + .Where(o => !o.Hidden && !o.IsFlag()) + .ToArray(); + + if (valueOptions.Length == 0) + continue; + + writer.WriteLine($"case {stateId}"); + writer.Indent++; + writer.WriteLine("switch $opt"); + writer.Indent++; + + foreach (var option in valueOptions) + { + var names = string.Join(" ", option.Names()); + var maxValues = option.Arity.MaximumNumberOfValues; + bool isBounded = maxValues < UnboundedArityThreshold; + + writer.WriteLine($"case {names}"); + writer.Indent++; + + // For bounded options, check that we haven't exceeded the arity. + // For unbounded options, always offer completions (any number of values is valid). + if (isBounded) + { + writer.WriteLine($"if test $values_after -lt {maxValues}"); + writer.Indent++; + } + + if (option.IsDynamic) + { + writer.WriteLine(GenerateDynamicCall()); + } + else + { + var completions = option.GetCompletions(CompletionContext.Empty).ToArray(); + foreach (var c in completions) + { + WriteCompletionCandidate(writer, c); + } + } + writer.WriteLine("return"); + + if (isBounded) + { + writer.Indent--; + writer.WriteLine("end"); + } + + writer.Indent--; + } + + writer.Indent--; + writer.WriteLine("end"); + writer.Indent--; + } + + writer.Indent--; + writer.WriteLine("end"); + writer.Indent--; + writer.WriteLine("end"); + writer.WriteLine(); + } + + /// + /// Generate the main completion output for each state. + /// Emits subcommands, options, and positional argument completions for the current context. + /// + private static void WriteStateCompletions(IndentedTextWriter writer, List<(int id, Command cmd)> states) + { + writer.WriteLine("switch $state"); + writer.Indent++; + + foreach (var (stateId, cmd) in states) + { + writer.WriteLine($"case {stateId}"); + writer.Indent++; + + // Subcommand completions + foreach (var sub in cmd.Subcommands.Where(c => !c.Hidden)) + { + WriteCandidate(writer, sub.Name, SanitizeDescription(sub.Description)); + } + + // Option completions - emit all aliases so both -h and --help are completable + foreach (var option in cmd.HierarchicalOptions().Where(o => !o.Hidden)) + { + var desc = SanitizeDescription(option.Description); + foreach (var name in option.Names()) + { + WriteCandidate(writer, name, desc); + } + } + + // Positional argument completions + foreach (var arg in cmd.Arguments.Where(a => !a.Hidden)) + { + if (arg.IsDynamic) + { + writer.WriteLine(GenerateDynamicCall()); + } + else + { + var completions = arg.GetCompletions(CompletionContext.Empty).ToArray(); + foreach (var c in completions) + { + WriteCompletionCandidate(writer, c); + } + } + } + + writer.Indent--; + } + + writer.Indent--; + writer.WriteLine("end"); + } + + /// + /// Write a single completion candidate line with an optional description. + /// Fish uses tab-separated format: candidate\tdescription + /// + private static void WriteCompletionCandidate(IndentedTextWriter writer, CompletionItem completion) + { + var label = completion.InsertText ?? completion.Label; + var desc = completion.Documentation ?? completion.Detail; + WriteCandidate(writer, label, desc); + } + + private static void WriteCandidate(IndentedTextWriter writer, string label, string? description) + { + if (!string.IsNullOrEmpty(description)) + writer.WriteLine($"printf '%s\\t%s\\n' {FishEscape(label)} {FishEscape(description)}"); + else + writer.WriteLine($"printf '%s\\n' {FishEscape(label)}"); + } + + /// + /// Generate a dynamic completion call that invokes the binary's 'complete' subcommand. + /// Uses the actual command from the command line ($tokens[1]) so it works regardless of how the binary was invoked. + /// + /// TODO: this is currently bound to the .NET CLI's 'complete' command pattern - this should be definable/injectable per-host instead. + internal static string GenerateDynamicCall() + { + return "command $tokens[1] complete --position (commandline -C) (commandline -cp) 2>/dev/null"; + } + + /// + /// Escape a string for use in a fish single-quoted string. + /// Fish single-quoted strings support \' and \\ as escape sequences. + /// + internal static string FishEscape(string? s) + { + if (string.IsNullOrEmpty(s)) return "''"; + return "'" + s.Replace("\\", "\\\\").Replace("'", "\\'") + "'"; + } + + private static string SanitizeDescription(string? s) => + s?.Replace("\r\n", " ").Replace('\n', ' ').Replace('\r', ' ').Replace('\t', ' ') ?? ""; } diff --git a/test/System.CommandLine.StaticCompletions.Tests/FishShellProviderTests.cs b/test/System.CommandLine.StaticCompletions.Tests/FishShellProviderTests.cs new file mode 100644 index 000000000000..c8f385a5013b --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/FishShellProviderTests.cs @@ -0,0 +1,137 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#nullable disable + +namespace System.CommandLine.StaticCompletions.Tests; + +using System.CommandLine.StaticCompletions.Shells; + +public class FishShellProviderTests(ITestOutputHelper log) +{ + private IShellProvider provider = new FishShellProvider(); + + [Fact] + public async Task GenericCompletions() + { + await provider.Verify(new("mycommand"), log); + } + + [Fact] + public async Task SimpleOptionCompletion() + { + await provider.Verify(new("mycommand") { + new Option("--name") + }, log); + } + + [Fact] + public async Task SubcommandAndOptionInTopLevelList() + { + await provider.Verify(new("mycommand") { + new Option("--name"), + new Command("subcommand") + }, log); + } + + [Fact] + public async Task NestedSubcommandCompletion() + { + await provider.Verify(new("mycommand") { + new Command("subcommand") { + new Command("nested") + } + }, log); + } + + [Fact] + public async Task DynamicCompletionsGeneration() + { + var dynamicOption = new Option("--dynamic") + { + IsDynamic = true + }; + var dynamicArg = new Argument("values") + { + IsDynamic = true + }; + Command command = new Command("mycommand") + { + dynamicOption, + dynamicArg + }; + await provider.Verify(command, log); + } + + [Fact] + public async Task StaticOptionValues() + { + var staticOption = new Option("--verbosity"); + staticOption.AcceptOnlyFromAmong("quiet", "minimal", "normal", "detailed", "diagnostic"); + Command command = new Command("mycommand") + { + staticOption + }; + await provider.Verify(command, log); + } + + [Fact] + public async Task BoundedMultiValueOption() + { + var multiOption = new Option("--sources") + { + Arity = new ArgumentArity(1, 3) + }; + multiOption.AcceptOnlyFromAmong("src1", "src2", "src3", "src4"); + Command command = new Command("mycommand") + { + multiOption, + new Command("subcommand") + }; + await provider.Verify(command, log); + } + + [Fact] + public async Task UnboundedMultiValueOption() + { + var unboundedOption = new Option("--items") + { + Arity = ArgumentArity.ZeroOrMore + }; + unboundedOption.AcceptOnlyFromAmong("a", "b", "c"); + Command command = new Command("mycommand") + { + unboundedOption, + new Option("--name"), + new Command("subcommand") + }; + await provider.Verify(command, log); + } + + [Fact] + public async Task MixedArityOptions() + { + var singleOption = new Option("--config"); + singleOption.AcceptOnlyFromAmong("debug", "release"); + + var multiOption = new Option("--framework", "-f") + { + Arity = new ArgumentArity(1, 3) + }; + multiOption.AcceptOnlyFromAmong("net8.0", "net9.0", "net10.0"); + + var unboundedOption = new Option("--sources") + { + Arity = ArgumentArity.OneOrMore + }; + + Command command = new Command("mycommand") + { + singleOption, + multiOption, + unboundedOption, + new Command("build") + }; + await provider.Verify(command, log); + } +} diff --git a/test/System.CommandLine.StaticCompletions.Tests/VerifyConfiguration.cs b/test/System.CommandLine.StaticCompletions.Tests/VerifyConfiguration.cs index 4eeca67880c1..71dd56b1d276 100644 --- a/test/System.CommandLine.StaticCompletions.Tests/VerifyConfiguration.cs +++ b/test/System.CommandLine.StaticCompletions.Tests/VerifyConfiguration.cs @@ -25,5 +25,6 @@ public static void Initialize() EmptyFiles.FileExtensions.AddTextExtension("ps1"); EmptyFiles.FileExtensions.AddTextExtension("nu"); + EmptyFiles.FileExtensions.AddTextExtension("fish"); } } diff --git a/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.BoundedMultiValueOption.verified.fish b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.BoundedMultiValueOption.verified.fish new file mode 100644 index 000000000000..b33eebee909a --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.BoundedMultiValueOption.verified.fish @@ -0,0 +1,67 @@ +# fish completions for mycommand + +function _mycommand + set -l tokens (commandline -opc) + + set -l state 0 + set -l i 2 + while test $i -le (count $tokens) + set -l word $tokens[$i] + switch $state + case 0 + switch $word + case subcommand + set state 1 + case --sources + set -l skip_max 3 + set -l skipped 0 + while test $skipped -lt $skip_max -a (math $i + 1) -le (count $tokens) + set -l next $tokens[(math $i + 1)] + if string match -q -- '-*' $next + break + end + set i (math $i + 1) + set skipped (math $skipped + 1) + end + end + end + set i (math $i + 1) + end + + set -l opt_index 0 + if test (count $tokens) -ge 2 + for j in (seq (count $tokens) -1 2) + if string match -q -- '-*' $tokens[$j] + set opt_index $j + break + end + end + end + + if test $opt_index -gt 0 + set -l opt $tokens[$opt_index] + set -l values_after (math (count $tokens) - $opt_index) + switch $state + case 0 + switch $opt + case --sources + if test $values_after -lt 3 + printf '%s\n' 'src1' + printf '%s\n' 'src2' + printf '%s\n' 'src3' + printf '%s\n' 'src4' + return + end + end + end + end + + switch $state + case 0 + printf '%s\n' 'subcommand' + printf '%s\n' '--sources' + case 1 + end +end + +complete -c mycommand -f -a '(_mycommand)' diff --git a/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.DynamicCompletionsGeneration.verified.fish b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.DynamicCompletionsGeneration.verified.fish new file mode 100644 index 000000000000..f7f353523b26 --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.DynamicCompletionsGeneration.verified.fish @@ -0,0 +1,52 @@ +# fish completions for mycommand + +function _mycommand + set -l tokens (commandline -opc) + + set -l state 0 + set -l i 2 + while test $i -le (count $tokens) + set -l word $tokens[$i] + switch $state + case 0 + switch $word + case --dynamic + set i (math $i + 1) + end + end + set i (math $i + 1) + end + + set -l opt_index 0 + if test (count $tokens) -ge 2 + for j in (seq (count $tokens) -1 2) + if string match -q -- '-*' $tokens[$j] + set opt_index $j + break + end + end + end + + if test $opt_index -gt 0 + set -l opt $tokens[$opt_index] + set -l values_after (math (count $tokens) - $opt_index) + switch $state + case 0 + switch $opt + case --dynamic + if test $values_after -lt 1 + command $tokens[1] complete --position (commandline -C) (commandline -cp) 2>/dev/null + return + end + end + end + end + + switch $state + case 0 + printf '%s\n' '--dynamic' + command $tokens[1] complete --position (commandline -C) (commandline -cp) 2>/dev/null + end +end + +complete -c mycommand -f -a '(_mycommand)' diff --git a/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.GenericCompletions.verified.fish b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.GenericCompletions.verified.fish new file mode 100644 index 000000000000..c86386e997c8 --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.GenericCompletions.verified.fish @@ -0,0 +1,20 @@ +# fish completions for mycommand + +function _mycommand + set -l tokens (commandline -opc) + + set -l state 0 + set -l i 2 + while test $i -le (count $tokens) + set -l word $tokens[$i] + switch $state + end + set i (math $i + 1) + end + + switch $state + case 0 + end +end + +complete -c mycommand -f -a '(_mycommand)' diff --git a/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.MixedArityOptions.verified.fish b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.MixedArityOptions.verified.fish new file mode 100644 index 000000000000..a5728a17ce22 --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.MixedArityOptions.verified.fish @@ -0,0 +1,87 @@ +# fish completions for mycommand + +function _mycommand + set -l tokens (commandline -opc) + + set -l state 0 + set -l i 2 + while test $i -le (count $tokens) + set -l word $tokens[$i] + switch $state + case 0 + switch $word + case build + set state 1 + case --config + set i (math $i + 1) + case --framework -f + set -l skip_max 3 + set -l skipped 0 + while test $skipped -lt $skip_max -a (math $i + 1) -le (count $tokens) + set -l next $tokens[(math $i + 1)] + if string match -q -- '-*' $next + break + end + set i (math $i + 1) + set skipped (math $skipped + 1) + end + case --sources + while test (math $i + 1) -le (count $tokens) + set -l next $tokens[(math $i + 1)] + if string match -q -- '-*' $next + break + end + set i (math $i + 1) + end + end + end + set i (math $i + 1) + end + + set -l opt_index 0 + if test (count $tokens) -ge 2 + for j in (seq (count $tokens) -1 2) + if string match -q -- '-*' $tokens[$j] + set opt_index $j + break + end + end + end + + if test $opt_index -gt 0 + set -l opt $tokens[$opt_index] + set -l values_after (math (count $tokens) - $opt_index) + switch $state + case 0 + switch $opt + case --config + if test $values_after -lt 1 + printf '%s\n' 'debug' + printf '%s\n' 'release' + return + end + case --framework -f + if test $values_after -lt 3 + printf '%s\n' 'net10.0' + printf '%s\n' 'net8.0' + printf '%s\n' 'net9.0' + return + end + case --sources + return + end + end + end + + switch $state + case 0 + printf '%s\n' 'build' + printf '%s\n' '--config' + printf '%s\n' '--framework' + printf '%s\n' '-f' + printf '%s\n' '--sources' + case 1 + end +end + +complete -c mycommand -f -a '(_mycommand)' diff --git a/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.NestedSubcommandCompletion.verified.fish b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.NestedSubcommandCompletion.verified.fish new file mode 100644 index 000000000000..400d43cf29c3 --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.NestedSubcommandCompletion.verified.fish @@ -0,0 +1,34 @@ +# fish completions for mycommand + +function _mycommand + set -l tokens (commandline -opc) + + set -l state 0 + set -l i 2 + while test $i -le (count $tokens) + set -l word $tokens[$i] + switch $state + case 0 + switch $word + case subcommand + set state 1 + end + case 1 + switch $word + case nested + set state 2 + end + end + set i (math $i + 1) + end + + switch $state + case 0 + printf '%s\n' 'subcommand' + case 1 + printf '%s\n' 'nested' + case 2 + end +end + +complete -c mycommand -f -a '(_mycommand)' diff --git a/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.SimpleOptionCompletion.verified.fish b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.SimpleOptionCompletion.verified.fish new file mode 100644 index 000000000000..68d8ab21e67b --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.SimpleOptionCompletion.verified.fish @@ -0,0 +1,50 @@ +# fish completions for mycommand + +function _mycommand + set -l tokens (commandline -opc) + + set -l state 0 + set -l i 2 + while test $i -le (count $tokens) + set -l word $tokens[$i] + switch $state + case 0 + switch $word + case --name + set i (math $i + 1) + end + end + set i (math $i + 1) + end + + set -l opt_index 0 + if test (count $tokens) -ge 2 + for j in (seq (count $tokens) -1 2) + if string match -q -- '-*' $tokens[$j] + set opt_index $j + break + end + end + end + + if test $opt_index -gt 0 + set -l opt $tokens[$opt_index] + set -l values_after (math (count $tokens) - $opt_index) + switch $state + case 0 + switch $opt + case --name + if test $values_after -lt 1 + return + end + end + end + end + + switch $state + case 0 + printf '%s\n' '--name' + end +end + +complete -c mycommand -f -a '(_mycommand)' diff --git a/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.StaticOptionValues.verified.fish b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.StaticOptionValues.verified.fish new file mode 100644 index 000000000000..98a413a4497f --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.StaticOptionValues.verified.fish @@ -0,0 +1,55 @@ +# fish completions for mycommand + +function _mycommand + set -l tokens (commandline -opc) + + set -l state 0 + set -l i 2 + while test $i -le (count $tokens) + set -l word $tokens[$i] + switch $state + case 0 + switch $word + case --verbosity + set i (math $i + 1) + end + end + set i (math $i + 1) + end + + set -l opt_index 0 + if test (count $tokens) -ge 2 + for j in (seq (count $tokens) -1 2) + if string match -q -- '-*' $tokens[$j] + set opt_index $j + break + end + end + end + + if test $opt_index -gt 0 + set -l opt $tokens[$opt_index] + set -l values_after (math (count $tokens) - $opt_index) + switch $state + case 0 + switch $opt + case --verbosity + if test $values_after -lt 1 + printf '%s\n' 'detailed' + printf '%s\n' 'diagnostic' + printf '%s\n' 'minimal' + printf '%s\n' 'normal' + printf '%s\n' 'quiet' + return + end + end + end + end + + switch $state + case 0 + printf '%s\n' '--verbosity' + end +end + +complete -c mycommand -f -a '(_mycommand)' diff --git a/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.SubcommandAndOptionInTopLevelList.verified.fish b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.SubcommandAndOptionInTopLevelList.verified.fish new file mode 100644 index 000000000000..0936b3b28cf8 --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.SubcommandAndOptionInTopLevelList.verified.fish @@ -0,0 +1,54 @@ +# fish completions for mycommand + +function _mycommand + set -l tokens (commandline -opc) + + set -l state 0 + set -l i 2 + while test $i -le (count $tokens) + set -l word $tokens[$i] + switch $state + case 0 + switch $word + case subcommand + set state 1 + case --name + set i (math $i + 1) + end + end + set i (math $i + 1) + end + + set -l opt_index 0 + if test (count $tokens) -ge 2 + for j in (seq (count $tokens) -1 2) + if string match -q -- '-*' $tokens[$j] + set opt_index $j + break + end + end + end + + if test $opt_index -gt 0 + set -l opt $tokens[$opt_index] + set -l values_after (math (count $tokens) - $opt_index) + switch $state + case 0 + switch $opt + case --name + if test $values_after -lt 1 + return + end + end + end + end + + switch $state + case 0 + printf '%s\n' 'subcommand' + printf '%s\n' '--name' + case 1 + end +end + +complete -c mycommand -f -a '(_mycommand)' diff --git a/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.UnboundedMultiValueOption.verified.fish b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.UnboundedMultiValueOption.verified.fish new file mode 100644 index 000000000000..92f17b003bcb --- /dev/null +++ b/test/System.CommandLine.StaticCompletions.Tests/snapshots/fish/FishShellProviderTests.UnboundedMultiValueOption.verified.fish @@ -0,0 +1,68 @@ +# fish completions for mycommand + +function _mycommand + set -l tokens (commandline -opc) + + set -l state 0 + set -l i 2 + while test $i -le (count $tokens) + set -l word $tokens[$i] + switch $state + case 0 + switch $word + case subcommand + set state 1 + case --name + set i (math $i + 1) + case --items + while test (math $i + 1) -le (count $tokens) + set -l next $tokens[(math $i + 1)] + if string match -q -- '-*' $next + break + end + set i (math $i + 1) + end + end + end + set i (math $i + 1) + end + + set -l opt_index 0 + if test (count $tokens) -ge 2 + for j in (seq (count $tokens) -1 2) + if string match -q -- '-*' $tokens[$j] + set opt_index $j + break + end + end + end + + if test $opt_index -gt 0 + set -l opt $tokens[$opt_index] + set -l values_after (math (count $tokens) - $opt_index) + switch $state + case 0 + switch $opt + case --items + printf '%s\n' 'a' + printf '%s\n' 'b' + printf '%s\n' 'c' + return + case --name + if test $values_after -lt 1 + return + end + end + end + end + + switch $state + case 0 + printf '%s\n' 'subcommand' + printf '%s\n' '--items' + printf '%s\n' '--name' + case 1 + end +end + +complete -c mycommand -f -a '(_mycommand)' From 320c853f5f00dec18f1164c504c9cdebe07e8f1e Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 16 Apr 2026 03:28:07 +0000 Subject: [PATCH 161/230] Update dependencies from build 310613 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26215.116 -> 10.0.0-preview.26215.119) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26215-116 -> 18.6.0-preview-26215-119) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.21616 -> 7.6.0-rc.21619) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26215.116 -> 10.0.300-alpha.26215.119) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26215.116 -> 5.6.0-2.26215.119) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26215.116 -> 10.0.0-beta.26215.119) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26215.116 -> 15.2.300-servicing.26215.119) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26215-116 -> 18.3.0-release-26215-119) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26215.116 -> 10.0.300-preview.26215.119) Microsoft.NETCore.App.Ref, System.IO.Hashing, Microsoft.Extensions.DependencyModel, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NET.ILLink.Tasks, System.CodeDom, System.ComponentModel.Composition, System.Formats.Asn1, System.Security.Cryptography.ProtectedData, System.Text.Encoding.CodePages, System.Resources.Extensions, Microsoft.WindowsDesktop.App.Ref, Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.Extensions.FileProviders.Embedded, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components.Web, Microsoft.JSInterop, Microsoft.Extensions.ObjectPool, Microsoft.AspNetCore.TestHost, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.FileSystemGlobbing, System.ServiceProcess.ServiceController, System.Text.Json, Microsoft.Bcl.AsyncInterfaces, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Win32.SystemEvents, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Security.Cryptography.Pkcs, System.Security.Cryptography.Xml, System.Security.Permissions, System.Windows.Extensions, System.Reflection.MetadataLoadContext, Microsoft.Extensions.Configuration.Ini (Version 10.0.5 -> 10.0.6) Microsoft.NETCore.Platforms, Microsoft.NET.HostModel, Microsoft.WindowsDesktop.App.Internal, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.AspNetCore.App.Ref.Internal, dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat (Version 10.0.5-servicing.26153.111 -> 10.0.6-servicing.26176.101) Microsoft.Web.Xdt (Version 3.2.5 -> 3.2.6) System.CommandLine (Version 2.0.5 -> 2.0.6) Microsoft.DiaSymReader (Version 2.2.5 -> 2.2.6) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26153.111 -> 2.0.0-preview.1.26176.101) [[ commit created by automation ]] --- eng/Version.Details.props | 270 +++++++++---------- eng/Version.Details.xml | 542 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 408 insertions(+), 408 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index e40ba20ff7b5..d5b8e36ed307 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,142 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.5-servicing.26153.111 - 10.0.5-servicing.26153.111 - 10.0.5-servicing.26153.111 - 10.0.5-servicing.26153.111 - 10.0.5 - 10.0.5-servicing.26153.111 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5-servicing.26153.111 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5-servicing.26153.111 - 10.0.5 - 10.0.5-servicing.26153.111 - 10.0.5-servicing.26153.111 - 10.0.0-preview.26215.116 - 10.0.5 - 10.0.5 - 18.6.0-preview-26215-116 - 18.6.0-preview-26215-116 - 7.6.0-rc.21616 - 10.0.300-alpha.26215.116 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 10.0.0-preview.26215.116 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 2.0.0-preview.1.26153.111 - 2.2.5 - 10.0.0-beta.26215.116 - 10.0.0-beta.26215.116 - 10.0.0-beta.26215.116 - 10.0.0-beta.26215.116 - 10.0.0-beta.26215.116 - 10.0.0-beta.26215.116 - 10.0.5 - 10.0.5 - 10.0.5-servicing.26153.111 - 10.0.5-servicing.26153.111 - 10.0.0-beta.26215.116 - 10.0.0-beta.26215.116 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 15.2.300-servicing.26215.116 - 10.0.5 - 5.6.0-2.26215.116 - 5.6.0-2.26215.116 - 10.0.5-servicing.26153.111 - 10.0.5 - 10.0.5 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.0-preview.26215.119 + 10.0.6 + 10.0.6 + 18.6.0-preview-26215-119 + 18.6.0-preview-26215-119 + 7.6.0-rc.21619 + 10.0.300-alpha.26215.119 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 10.0.0-preview.26215.119 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 2.0.0-preview.1.26176.101 + 2.2.6 + 10.0.0-beta.26215.119 + 10.0.0-beta.26215.119 + 10.0.0-beta.26215.119 + 10.0.0-beta.26215.119 + 10.0.0-beta.26215.119 + 10.0.0-beta.26215.119 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.0-beta.26215.119 + 10.0.0-beta.26215.119 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 15.2.300-servicing.26215.119 + 10.0.6 + 5.6.0-2.26215.119 + 5.6.0-2.26215.119 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26215.116 - 10.0.5-servicing.26153.111 - 18.3.0-release-26215-116 - 10.0.5 - 10.0.5-servicing.26153.111 - 10.0.300-alpha.26215.116 - 10.0.300-alpha.26215.116 - 10.0.300-alpha.26215.116 - 10.0.300-alpha.26215.116 - 10.0.300-alpha.26215.116 - 10.0.300-preview.26215.116 - 10.0.300-preview.26215.116 - 10.0.300-preview.26215.116 - 10.0.300-preview.26215.116 - 10.0.300-preview.26215.116 - 10.0.300-preview.26215.116 - 10.0.300-preview.26215.116 - 10.0.300-preview.26215.116 - 10.0.300-preview.26215.116 - 18.3.0-release-26215-116 - 18.3.0-release-26215-116 - 3.2.5 - 10.0.5 - 10.0.5-servicing.26153.111 - 10.0.5 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 7.6.0-rc.21616 - 10.0.5 - 2.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 - 10.0.5 + 10.0.0-preview.26215.119 + 10.0.6-servicing.26176.101 + 18.3.0-release-26215-119 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.300-alpha.26215.119 + 10.0.300-alpha.26215.119 + 10.0.300-alpha.26215.119 + 10.0.300-alpha.26215.119 + 10.0.300-alpha.26215.119 + 10.0.300-preview.26215.119 + 10.0.300-preview.26215.119 + 10.0.300-preview.26215.119 + 10.0.300-preview.26215.119 + 10.0.300-preview.26215.119 + 10.0.300-preview.26215.119 + 10.0.300-preview.26215.119 + 10.0.300-preview.26215.119 + 10.0.300-preview.26215.119 + 18.3.0-release-26215-119 + 18.3.0-release-26215-119 + 3.2.6 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 7.6.0-rc.21619 + 10.0.6 + 2.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 2.1.0-preview.25571.1 4.1.0-preview.25571.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9c4d7c649227..be4ddb0cdfcc 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 @@ -68,174 +68,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://github.com/dotnet/dotnet - fe40c4e7b110cf7220a726d71541340399598771 + 5c62320222555757bd9b82f3d38eaf5069f3d883 - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 https://github.com/microsoft/testfx @@ -581,9 +581,9 @@ https://github.com/microsoft/testfx 43e592148ac1c7916908477bdffcf2a345affa6d - + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - a612c2a1056fe3265387ae3ff7c94eba1505caf9 + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 diff --git a/global.json b/global.json index 9c974e314106..f52ea61f9358 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26215.116", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26215.116", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26215.119", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26215.119", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From eecf5857ad9daa76c467039791b6efe3ef902d25 Mon Sep 17 00:00:00 2001 From: Logan Bussell Date: Thu, 16 Apr 2026 00:56:03 -0700 Subject: [PATCH 162/230] Add validation script and nested AGENTS.md to enforce agent skill quality (#53721) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/copilot-instructions.md | 4 +- .github/skills/AGENTS.md | 24 ++++ .github/skills/ValidateSkill.cs | 103 ++++++++++++++++++ .../incremental-test/SKILL.md} | 15 +-- 4 files changed, 137 insertions(+), 9 deletions(-) create mode 100644 .github/skills/AGENTS.md create mode 100755 .github/skills/ValidateSkill.cs rename .github/{copilot/skills/incremental-test.md => skills/incremental-test/SKILL.md} (90%) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 5cb5d96045cd..54b0cbfa788d 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -21,10 +21,10 @@ Testing: - Examples: - `dotnet test test/dotnet.Tests/dotnet.Tests.csproj --filter "Name~ItShowsTheAppropriateMessageToTheUser"` - `dotnet exec artifacts/bin/redist/Debug/dotnet.Tests.dll -method "*ItShowsTheAppropriateMessageToTheUser*"` -- For incremental test runs of `dotnet.Tests` (avoids slow full `build.cmd`), see the skill at `.github/copilot/skills/incremental-test.md`. In short: build only the modified projects, copy their output DLLs into the redist SDK layout, then run the tests. +- For incremental test runs of `dotnet.Tests` (avoids slow full `build.cmd`), use the `incremental-test` skill. - To test CLI command changes: - Build the redist SDK: `./build.sh` from repo root - - Create a dogfood environment: `source eng/dogfood.sh` + - Create a dogfood environment: `source eng/dogfood.sh` - Test commands in the dogfood shell (e.g., `dnx --help`, `dotnet tool install --help`) - The dogfood script sets up PATH and environment to use the newly built SDK diff --git a/.github/skills/AGENTS.md b/.github/skills/AGENTS.md new file mode 100644 index 000000000000..0b022c9eba26 --- /dev/null +++ b/.github/skills/AGENTS.md @@ -0,0 +1,24 @@ +# Agent Skills + +When creating skills, follow: +- Agent skills specification: https://agentskills.io/specification.md +- Best practices: https://agentskills.io/skill-creation/best-practices.md + +## Structure + +``` +.github/skills/skill-name/ +├── SKILL.md # Required: metadata + instructions +├── scripts/ # Optional: executable code +├── references/ # Optional: documentation +├── assets/ # Optional: templates, resources +└── ... # Any additional files or directories +``` + +## Quick Checklist + +- [ ] Run `dotnet .github/skills/ValidateSkill.cs ` to validate format. +- [ ] `description` describes what the skill does and when to use it. Skill body does not include "When to use this skill". +- [ ] Skill does not explain things the agent already knows. Focus on what's specific to the task at hand. +- [ ] Deterministic processes use scripts (for example, to fetch and format data from an API). +- [ ] Scripts use PowerShell or .NET file-based apps, not bash. diff --git a/.github/skills/ValidateSkill.cs b/.github/skills/ValidateSkill.cs new file mode 100755 index 000000000000..12d1e0b51342 --- /dev/null +++ b/.github/skills/ValidateSkill.cs @@ -0,0 +1,103 @@ +#!/usr/bin/env dotnet +#:property ManagePackageVersionsCentrally=false +#:property PublishAot=false +#:package YamlDotNet@16.3.0 + +using YamlDotNet.Serialization; +using System.Text.RegularExpressions; + +if (args.Length == 0) +{ + Console.Error.WriteLine("Usage: dotnet ValidateSkill.cs "); + return 1; +} + +string skillDir = Path.GetFullPath(args[0]); +string skillName = Path.GetFileName(Path.TrimEndingDirectorySeparator(skillDir)); +string skillFile = Path.Combine(skillDir, "SKILL.md"); + +// SKILL.md must exist in the skill directory +if (!File.Exists(skillFile)) +{ + Console.Error.WriteLine($"SKILL.md not found in {skillDir}"); + return 1; +} + +string text = File.ReadAllText(skillFile); + +// SKILL.md must begin with YAML frontmatter delimited by --- +if (!text.StartsWith("---")) +{ + Console.Error.WriteLine("No YAML frontmatter found."); + return 1; +} + +Match frontmatterMatch = Regex.Match( + text, + @"\A---\r?\n(?.*?)(?:\r?\n)---(?:\r?\n|$)", + RegexOptions.Singleline); +if (!frontmatterMatch.Success) +{ + Console.Error.WriteLine("Unterminated YAML frontmatter."); + return 1; +} + +string yaml = frontmatterMatch.Groups["yaml"].Value.Trim(); + +IDeserializer deserializer = new DeserializerBuilder().Build(); +Dictionary frontmatter = deserializer.Deserialize>(yaml); + +// name is required +if (!frontmatter.TryGetValue("name", out object? nameValue) || nameValue is not string frontmatterName) +{ + Console.Error.WriteLine("Frontmatter missing 'name' field."); + return 1; +} + +// name must be 1-64 characters +if (frontmatterName.Length == 0 || frontmatterName.Length > 64) +{ + Console.Error.WriteLine($"Name is {frontmatterName.Length} chars (must be 1-64)."); + return 1; +} + +// name: lowercase alphanumeric and hyphens only, no leading/trailing/consecutive hyphens +if (!Regex.IsMatch(frontmatterName, @"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$") + || frontmatterName.Contains("--")) +{ + Console.Error.WriteLine($"Invalid name '{frontmatterName}'. Must be lowercase letters, numbers, and hyphens only. Must not start/end with a hyphen or contain consecutive hyphens."); + return 1; +} + +// name must match the parent directory name +if (!string.Equals(skillName, frontmatterName, StringComparison.Ordinal)) +{ + Console.Error.WriteLine($"Name mismatch: directory is '{skillName}' but SKILL.md name is '{frontmatterName}'."); + return 1; +} + +// description is required +if (!frontmatter.TryGetValue("description", out object? descValue) || descValue is not string description) +{ + Console.Error.WriteLine("Frontmatter missing 'description' field."); + return 1; +} + +// description must be 1-1024 characters +if (description.Length == 0 || description.Length > 1024) +{ + Console.Error.WriteLine($"Description is {description.Length} chars (must be 1-1024)."); + return 1; +} + +// Keep SKILL.md under 500 lines; move detailed content to references/ or scripts/ +// See "Progressive Disclosure" at https://agentskills.io/specification.md +int lineCount = text.Split('\n').Length; +if (lineCount > 500) +{ + Console.Error.WriteLine($"SKILL.md is {lineCount} lines (max 500). See \"Progressive Disclosure\" at https://agentskills.io/specification.md"); + return 1; +} + +Console.WriteLine($"Skill '{frontmatterName}' is valid."); +return 0; diff --git a/.github/copilot/skills/incremental-test.md b/.github/skills/incremental-test/SKILL.md similarity index 90% rename from .github/copilot/skills/incremental-test.md rename to .github/skills/incremental-test/SKILL.md index 7422b8a28d79..f4d927873152 100644 --- a/.github/copilot/skills/incremental-test.md +++ b/.github/skills/incremental-test/SKILL.md @@ -1,7 +1,12 @@ -# Incremental Test Runner for dotnet.Tests +--- +name: incremental-test +description: >- + Run dotnet.Tests incrementally without a full build.cmd rebuild. Use after + modifying source code in SDK projects to quickly build only changed projects, + deploy their outputs into the redist SDK layout, and run tests against them. +--- -This skill enables fast incremental test runs of `dotnet.Tests` without a full `build.cmd` rebuild. -Use it after making source code changes to quickly build only the modified projects and deploy their outputs into the redist SDK layout so tests can run against them. +# Incremental Test Runner for dotnet.Tests ## Prerequisites @@ -9,10 +14,6 @@ Use it after making source code changes to quickly build only the modified proje - The repo-local `.dotnet` SDK must match the version expected by the test projects. If the runtime or SDK version is out of date (e.g., test build fails with a missing framework error), run `.\restore.cmd` (or `./restore.sh` on macOS/Linux) to download the correct SDK into `.dotnet`. - This workflow uses Windows/PowerShell commands and paths. On macOS/Linux, substitute forward slashes and use `cp` instead of `Copy-Item`. -## When to use - -Use this skill when you need to run `dotnet.Tests` after modifying source code in one or more SDK projects. It avoids the slow full `build.cmd` by only rebuilding the changed projects and copying their output DLLs into the redist layout. - ## Workflow ### Step 1: Identify modified projects From b472b1436a32846a04a26dab555d0964a4b64039 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 16 Apr 2026 18:05:26 +0000 Subject: [PATCH 163/230] Backflow from https://github.com/dotnet/dotnet / 884fcae build 310667 [[ commit created by automation ]] From 8c96828a769265af84ffbaf9f1f6b8d960583e1b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 16 Apr 2026 18:06:06 +0000 Subject: [PATCH 164/230] Update dependencies from build 310667 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.7-servicing.26210.105 -> 10.0.7-servicing.26215.122) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.7 -> 10.0.7) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26210.105 -> 10.0.0-preview.26215.122) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26210-105 -> 18.0.11-servicing-26215-122) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.2-rc.21105 -> 7.0.3-rc.21622) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.107 -> 10.0.107) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26210.105 -> 5.0.0-2.26215.122) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26210.105 -> 2.0.0-preview.1.26215.122) Microsoft.DiaSymReader (Version 2.2.7 -> 2.2.7) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26210.105 -> 10.0.0-beta.26215.122) Microsoft.FSharp.Compiler (Version 14.0.107-servicing.26210.105 -> 14.0.107-servicing.26215.122) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26210-105 -> 18.0.2-release-26215-122) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.107-servicing.26210.105 -> 10.0.107-servicing.26215.122) Microsoft.Web.Xdt (Version 3.2.7 -> 3.2.7) System.CommandLine (Version 2.0.7 -> 2.0.7) [[ commit created by automation ]] --- NuGet.config | 3 +- eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 4 +- 4 files changed, 263 insertions(+), 262 deletions(-) diff --git a/NuGet.config b/NuGet.config index c05664ac0302..bd4e98e54288 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,8 @@ - + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 3ff07cce2b30..5588a39506ec 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.7-servicing.26210.105 - 10.0.7-servicing.26210.105 - 10.0.7-servicing.26210.105 - 10.0.7-servicing.26210.105 + 10.0.7-servicing.26215.122 + 10.0.7-servicing.26215.122 + 10.0.7-servicing.26215.122 + 10.0.7-servicing.26215.122 10.0.7 - 10.0.7-servicing.26210.105 + 10.0.7-servicing.26215.122 10.0.7 10.0.7 10.0.7 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.7 10.0.7 10.0.7 - 10.0.7-servicing.26210.105 + 10.0.7-servicing.26215.122 10.0.7 10.0.7 10.0.7 10.0.7 - 10.0.7-servicing.26210.105 + 10.0.7-servicing.26215.122 10.0.7 - 10.0.7-servicing.26210.105 - 10.0.7-servicing.26210.105 - 10.0.0-preview.26210.105 + 10.0.7-servicing.26215.122 + 10.0.7-servicing.26215.122 + 10.0.0-preview.26215.122 10.0.7 10.0.7 18.0.11 - 18.0.11-servicing-26210-105 - 7.0.2-rc.21105 + 18.0.11-servicing-26215-122 + 7.0.3-rc.21622 10.0.107 - 5.0.0-2.26210.105 - 5.0.0-2.26210.105 - 5.0.0-2.26210.105 - 5.0.0-2.26210.105 - 5.0.0-2.26210.105 - 5.0.0-2.26210.105 - 5.0.0-2.26210.105 - 10.0.0-preview.26210.105 - 5.0.0-2.26210.105 - 5.0.0-2.26210.105 - 2.0.0-preview.1.26210.105 + 5.0.0-2.26215.122 + 5.0.0-2.26215.122 + 5.0.0-2.26215.122 + 5.0.0-2.26215.122 + 5.0.0-2.26215.122 + 5.0.0-2.26215.122 + 5.0.0-2.26215.122 + 10.0.0-preview.26215.122 + 5.0.0-2.26215.122 + 5.0.0-2.26215.122 + 2.0.0-preview.1.26215.122 2.2.7 - 10.0.0-beta.26210.105 - 10.0.0-beta.26210.105 - 10.0.0-beta.26210.105 - 10.0.0-beta.26210.105 - 10.0.0-beta.26210.105 - 10.0.0-beta.26210.105 + 10.0.0-beta.26215.122 + 10.0.0-beta.26215.122 + 10.0.0-beta.26215.122 + 10.0.0-beta.26215.122 + 10.0.0-beta.26215.122 + 10.0.0-beta.26215.122 10.0.7 10.0.7 - 10.0.7-servicing.26210.105 - 10.0.7-servicing.26210.105 - 10.0.0-beta.26210.105 - 10.0.0-beta.26210.105 + 10.0.7-servicing.26215.122 + 10.0.7-servicing.26215.122 + 10.0.0-beta.26215.122 + 10.0.0-beta.26215.122 10.0.7 10.0.7 10.0.7 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.7 10.0.7 10.0.7 - 14.0.107-servicing.26210.105 + 14.0.107-servicing.26215.122 10.0.7 - 5.0.0-2.26210.105 - 5.0.0-2.26210.105 - 10.0.7-servicing.26210.105 + 5.0.0-2.26215.122 + 5.0.0-2.26215.122 + 10.0.7-servicing.26215.122 10.0.7 10.0.7 10.0.0-preview.7.25377.103 - 10.0.0-preview.26210.105 - 10.0.7-servicing.26210.105 - 18.0.2-release-26210-105 + 10.0.0-preview.26215.122 + 10.0.7-servicing.26215.122 + 18.0.2-release-26215-122 10.0.7 - 10.0.7-servicing.26210.105 + 10.0.7-servicing.26215.122 10.0.107 10.0.107 10.0.107 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.107 10.0.107 10.0.107 - 10.0.107-servicing.26210.105 + 10.0.107-servicing.26215.122 10.0.107 - 10.0.107-servicing.26210.105 + 10.0.107-servicing.26215.122 10.0.107 10.0.107 - 10.0.107-servicing.26210.105 - 18.0.2-release-26210-105 - 18.0.2-release-26210-105 + 10.0.107-servicing.26215.122 + 18.0.2-release-26215-122 + 18.0.2-release-26215-122 3.2.7 10.0.7 - 10.0.7-servicing.26210.105 + 10.0.7-servicing.26215.122 10.0.7 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 - 7.0.2-rc.21105 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 + 7.0.3-rc.21622 10.0.7 2.0.7 10.0.7 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 80c60a7b27a9..8b0319c0338c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 - + https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - d14d02dd9f70268be43db2ae722433f7d4461fb8 + 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 diff --git a/global.json b/global.json index db89a0caef6e..1c6e1f06990a 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26210.105", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26210.105", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26215.122", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26215.122", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From df70bb646fc175d2336c529d91cd10c601d00c68 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Thu, 16 Apr 2026 12:40:08 -0700 Subject: [PATCH 165/230] Apply suggestions from code review Co-authored-by: Jeff Handley --- .../add-tactics-template-on-comment.md | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/add-tactics-template-on-comment.md b/.github/workflows/add-tactics-template-on-comment.md index 6baceb623c6c..50cefdae6bed 100644 --- a/.github/workflows/add-tactics-template-on-comment.md +++ b/.github/workflows/add-tactics-template-on-comment.md @@ -4,17 +4,20 @@ permissions: issues: read pull-requests: read -network: - allowed: - - defaults +network: defaults safe-outputs: - update-pull-request: - target: "*" - noop: + update-pull-request: + max: 1 + body: true + title: false + footer: false + target: "triggering" + noop: report-as-issue: false - -on: +if: !github.event.repository.fork + +on: slash_command: name: tactics events: [pull_request_comment] @@ -88,8 +91,8 @@ Follow these steps precisely: #### Step 1: Gather PR context -The `/tactics` command may optionally include an issue number (e.g. `/tactics 12345`). Parse the sanitized trigger context above to extract any issue number provided after the command. - +The `/tactics` command may optionally include an issue number (e.g. `/tactics #12345` or `/tactics 12345`). Parse the sanitized trigger context above to extract any issue number provided after the command. + For PR #`${{ github.event.issue.number }}`, gather the following information: 1. **PR details**: title, description/body, author, target (base) branch From 0bc3282c1a1f78da278c48b6dc948bb798355a50 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Thu, 16 Apr 2026 12:41:55 -0700 Subject: [PATCH 166/230] Clarify the reaction behavior --- .../add-tactics-template-on-comment.md | 293 +++++++++--------- 1 file changed, 148 insertions(+), 145 deletions(-) diff --git a/.github/workflows/add-tactics-template-on-comment.md b/.github/workflows/add-tactics-template-on-comment.md index 50cefdae6bed..0170a3fd6978 100644 --- a/.github/workflows/add-tactics-template-on-comment.md +++ b/.github/workflows/add-tactics-template-on-comment.md @@ -1,12 +1,12 @@ ---- -permissions: - contents: read - issues: read - pull-requests: read - +--- +permissions: + contents: read + issues: read + pull-requests: read + network: defaults - -safe-outputs: + +safe-outputs: update-pull-request: max: 1 body: true @@ -14,145 +14,148 @@ safe-outputs: footer: false target: "triggering" noop: - report-as-issue: false + report-as-issue: false if: !github.event.repository.fork on: - slash_command: - name: tactics - events: [pull_request_comment] - -# ############################################################### -# Override the COPILOT_GITHUB_TOKEN secret usage for the workflow -# with a randomly-selected token from a pool of secrets. -# -# As soon as organization-level billing is offered for Agentic -# Workflows, this stop-gap approach will be removed. -# -# See: /.github/actions/select-copilot-pat/README.md -# ############################################################### - - # Add the pre-activation step of selecting a random PAT from the supplied secrets - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Checkout the select-copilot-pat action folder - with: - persist-credentials: false - sparse-checkout: .github/actions/select-copilot-pat - sparse-checkout-cone-mode: true - fetch-depth: 1 - - - id: select-copilot-pat - name: Select Copilot token from pool - uses: ./.github/actions/select-copilot-pat - env: - SECRET_0: ${{ secrets.COPILOT_PAT_0 }} - SECRET_1: ${{ secrets.COPILOT_PAT_1 }} - SECRET_2: ${{ secrets.COPILOT_PAT_2 }} - SECRET_3: ${{ secrets.COPILOT_PAT_3 }} - SECRET_4: ${{ secrets.COPILOT_PAT_4 }} - SECRET_5: ${{ secrets.COPILOT_PAT_5 }} - SECRET_6: ${{ secrets.COPILOT_PAT_6 }} - SECRET_7: ${{ secrets.COPILOT_PAT_7 }} - SECRET_8: ${{ secrets.COPILOT_PAT_8 }} - SECRET_9: ${{ secrets.COPILOT_PAT_9 }} - -# Add the pre-activation output of the randomly selected PAT -jobs: - pre-activation: - outputs: - copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} - -# Override the COPILOT_GITHUB_TOKEN expression used in the activation job -# Consume the PAT number from the pre-activation step and select the corresponding secret -engine: - id: copilot - env: - # We cannot use line breaks in this expression as it leads to a syntax error in the compiled workflow - # If none of the `COPILOT_PAT_#` secrets were selected, then the default COPILOT_GITHUB_TOKEN is used - COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} ---- - -## Add Tactics Template on Comment - -You are an expert .NET SDK engineer who helps fill in "tactics" for servicing pull requests in the dotnet/sdk repository. A servicing PR targets a stable release branch (e.g. `release/9.0.1xx`) and undergoes extra scrutiny before merging. Your job is to produce accurate, specific, and informative tactics based on the PR context. - -### Trigger Context - -- **Issue/PR number**: `${{ github.event.issue.number }}` -- **Repository**: `${{ github.repository }}` -- **Triggering actor**: `${{ github.actor }}` -- **Run URL**: `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}` -- **Sanitized trigger context**: "${{ steps.sanitized.outputs.text }}" - -### Your Task - -Follow these steps precisely: - -#### Step 1: Gather PR context - + roles: write + slash_command: + name: tactics + events: [pull_request_comment] + reaction: "+1" + status-comment: false + +# ############################################################### +# Override the COPILOT_GITHUB_TOKEN secret usage for the workflow +# with a randomly-selected token from a pool of secrets. +# +# As soon as organization-level billing is offered for Agentic +# Workflows, this stop-gap approach will be removed. +# +# See: /.github/actions/select-copilot-pat/README.md +# ############################################################### + + # Add the pre-activation step of selecting a random PAT from the supplied secrets + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + name: Checkout the select-copilot-pat action folder + with: + persist-credentials: false + sparse-checkout: .github/actions/select-copilot-pat + sparse-checkout-cone-mode: true + fetch-depth: 1 + + - id: select-copilot-pat + name: Select Copilot token from pool + uses: ./.github/actions/select-copilot-pat + env: + SECRET_0: ${{ secrets.COPILOT_PAT_0 }} + SECRET_1: ${{ secrets.COPILOT_PAT_1 }} + SECRET_2: ${{ secrets.COPILOT_PAT_2 }} + SECRET_3: ${{ secrets.COPILOT_PAT_3 }} + SECRET_4: ${{ secrets.COPILOT_PAT_4 }} + SECRET_5: ${{ secrets.COPILOT_PAT_5 }} + SECRET_6: ${{ secrets.COPILOT_PAT_6 }} + SECRET_7: ${{ secrets.COPILOT_PAT_7 }} + SECRET_8: ${{ secrets.COPILOT_PAT_8 }} + SECRET_9: ${{ secrets.COPILOT_PAT_9 }} + +# Add the pre-activation output of the randomly selected PAT +jobs: + pre-activation: + outputs: + copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} + +# Override the COPILOT_GITHUB_TOKEN expression used in the activation job +# Consume the PAT number from the pre-activation step and select the corresponding secret +engine: + id: copilot + env: + # We cannot use line breaks in this expression as it leads to a syntax error in the compiled workflow + # If none of the `COPILOT_PAT_#` secrets were selected, then the default COPILOT_GITHUB_TOKEN is used + COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} +--- + +## Add Tactics Template on Comment + +You are an expert .NET SDK engineer who helps fill in "tactics" for servicing pull requests in the dotnet/sdk repository. A servicing PR targets a stable release branch (e.g. `release/9.0.1xx`) and undergoes extra scrutiny before merging. Your job is to produce accurate, specific, and informative tactics based on the PR context. + +### Trigger Context + +- **Issue/PR number**: `${{ github.event.issue.number }}` +- **Repository**: `${{ github.repository }}` +- **Triggering actor**: `${{ github.actor }}` +- **Run URL**: `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}` +- **Sanitized trigger context**: "${{ steps.sanitized.outputs.text }}" + +### Your Task + +Follow these steps precisely: + +#### Step 1: Gather PR context + The `/tactics` command may optionally include an issue number (e.g. `/tactics #12345` or `/tactics 12345`). Parse the sanitized trigger context above to extract any issue number provided after the command. -For PR #`${{ github.event.issue.number }}`, gather the following information: - -1. **PR details**: title, description/body, author, target (base) branch -2. **Files changed**: list filenames with addition/deletion counts (up to 20 files) -3. **PR comments**: all non-bot issue-level comments (exclude the triggering `/tactics` comment) -4. **Review comments**: all non-bot code-level review comments, including which file they reference -5. **Linked issue**: If the `/tactics` command included an issue number, use that. Otherwise, parse the PR body for keywords like `fixes #N`, `closes #N`, or `resolves #N` to find a linked issue. If found, fetch the issue title and body. - -#### Step 2: Generate tactics - -Based on all the gathered context, produce a tactics analysis following this exact template. Be specific and detailed—avoid vague statements. Do not speculate or invent details not present in the context. If information for a section is genuinely unavailable, say so clearly. - -**Guidelines per section:** - -- **Summary**: 2-4 sentences. State the root cause of the bug or regression being fixed, describe the exact code change made to address it, and explain why this fix is appropriate for a servicing release. -- **Customer Impact**: Describe concretely how customers are affected: the symptom (e.g. build error, runtime crash, incorrect output), the exact SDK version(s) impacted, the frequency/severity (all users vs. specific scenario), and any known workarounds. -- **Regression?**: Was this introduced by a specific PR or SDK version? Answer "Yes, introduced in #N (description)" or "Yes, introduced in vX.Y.Z" if known. If not a regression or unclear, say "No" or "Unknown — not enough information to determine origin". -- **Testing**: List all forms of validation: unit tests added or modified, integration tests, manual repro steps from PR comments, private/lab testing, and CI results. If only CI ran, say so explicitly. -- **Risk**: Rate as Low, Medium, or High. Justify the rating by referencing the scope of the change (e.g. lines changed, components touched), test coverage, and any known edge cases or risks. - -The output format must be exactly: - -``` -### Summary - -[your text] - -### Customer Impact - -[your text] - -### Regression? - -[your text] - -### Testing - -[your text] - -### Risk - -[your text] -``` - -#### Step 3: Apply tactics and report status - -1. Use the `update_pull_request` tool to update the **PR description** by adding (or replacing) a tactics section delimited by `` and `` markers. The section should contain: - ``` - - ## Tactics - - [generated tactics content] - - ``` - If the markers already exist in the body, replace the content between them. Otherwise, append the block at the end. - -2. If a linked issue was found and used as input, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description using context from issue #[issue number]." Include the PR number and a brief snippet of the generated tactics summary. - -3. If no linked issue was found, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description." Include the PR number and a brief snippet of the generated tactics summary. - -### Error Handling - -If any step fails unexpectedly, call the `noop` tool with a markdown summary including "❌ Failed to generate or apply tactics" and the error details. The framework will post the failure status automatically. +For PR #`${{ github.event.issue.number }}`, gather the following information: + +1. **PR details**: title, description/body, author, target (base) branch +2. **Files changed**: list filenames with addition/deletion counts (up to 20 files) +3. **PR comments**: all non-bot issue-level comments (exclude the triggering `/tactics` comment) +4. **Review comments**: all non-bot code-level review comments, including which file they reference +5. **Linked issue**: If the `/tactics` command included an issue number, use that. Otherwise, parse the PR body for keywords like `fixes #N`, `closes #N`, or `resolves #N` to find a linked issue. If found, fetch the issue title and body. + +#### Step 2: Generate tactics + +Based on all the gathered context, produce a tactics analysis following this exact template. Be specific and detailed—avoid vague statements. Do not speculate or invent details not present in the context. If information for a section is genuinely unavailable, say so clearly. + +**Guidelines per section:** + +- **Summary**: 2-4 sentences. State the root cause of the bug or regression being fixed, describe the exact code change made to address it, and explain why this fix is appropriate for a servicing release. +- **Customer Impact**: Describe concretely how customers are affected: the symptom (e.g. build error, runtime crash, incorrect output), the exact SDK version(s) impacted, the frequency/severity (all users vs. specific scenario), and any known workarounds. +- **Regression?**: Was this introduced by a specific PR or SDK version? Answer "Yes, introduced in #N (description)" or "Yes, introduced in vX.Y.Z" if known. If not a regression or unclear, say "No" or "Unknown — not enough information to determine origin". +- **Testing**: List all forms of validation: unit tests added or modified, integration tests, manual repro steps from PR comments, private/lab testing, and CI results. If only CI ran, say so explicitly. +- **Risk**: Rate as Low, Medium, or High. Justify the rating by referencing the scope of the change (e.g. lines changed, components touched), test coverage, and any known edge cases or risks. + +The output format must be exactly: + +``` +### Summary + +[your text] + +### Customer Impact + +[your text] + +### Regression? + +[your text] + +### Testing + +[your text] + +### Risk + +[your text] +``` + +#### Step 3: Apply tactics and report status + +1. Use the `update_pull_request` tool to update the **PR description** by adding (or replacing) a tactics section delimited by `` and `` markers. The section should contain: + ``` + + ## Tactics + + [generated tactics content] + + ``` + If the markers already exist in the body, replace the content between them. Otherwise, append the block at the end. + +2. If a linked issue was found and used as input, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description using context from issue #[issue number]." Include the PR number and a brief snippet of the generated tactics summary. + +3. If no linked issue was found, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description." Include the PR number and a brief snippet of the generated tactics summary. + +### Error Handling + +If any step fails unexpectedly, call the `noop` tool with a markdown summary including "❌ Failed to generate or apply tactics" and the error details. The framework will post the failure status automatically. From 2aa495dd51cf685f06674a59f9c16bde4f353ee7 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 16 Apr 2026 19:58:04 +0000 Subject: [PATCH 167/230] Update dependencies from build 310711 Updated Dependencies: dotnet-dev-certs, dotnet-user-jwts, dotnet-user-secrets, Microsoft.AspNetCore.Analyzers, Microsoft.AspNetCore.App.Ref.Internal, Microsoft.AspNetCore.Components.SdkAnalyzers, Microsoft.AspNetCore.DeveloperCertificates.XPlat, Microsoft.AspNetCore.Mvc.Analyzers, Microsoft.AspNetCore.Mvc.Api.Analyzers, Microsoft.Dotnet.WinForms.ProjectTemplates, Microsoft.DotNet.Wpf.ProjectTemplates, Microsoft.NET.HostModel, Microsoft.NET.Sdk.WindowsDesktop, Microsoft.NETCore.Platforms, Microsoft.WindowsDesktop.App.Internal (Version 10.0.7-servicing.26215.122 -> 10.0.7-servicing.26216.103) Microsoft.AspNetCore.App.Ref, Microsoft.AspNetCore.Authentication.Facebook, Microsoft.AspNetCore.Authentication.Google, Microsoft.AspNetCore.Authentication.MicrosoftAccount, Microsoft.AspNetCore.Authorization, Microsoft.AspNetCore.Components, Microsoft.AspNetCore.Components.Analyzers, Microsoft.AspNetCore.Components.Forms, Microsoft.AspNetCore.Components.Web, Microsoft.AspNetCore.Components.WebAssembly, Microsoft.AspNetCore.Components.WebAssembly.Server, Microsoft.AspNetCore.Components.WebView, Microsoft.AspNetCore.Metadata, Microsoft.AspNetCore.TestHost, Microsoft.Bcl.AsyncInterfaces, Microsoft.DotNet.Web.ItemTemplates.10.0, Microsoft.DotNet.Web.ProjectTemplates.10.0, Microsoft.Extensions.Configuration.Ini, Microsoft.Extensions.DependencyModel, Microsoft.Extensions.FileProviders.Abstractions, Microsoft.Extensions.FileProviders.Embedded, Microsoft.Extensions.FileSystemGlobbing, Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console, Microsoft.Extensions.ObjectPool, Microsoft.JSInterop, Microsoft.NET.ILLink.Tasks, Microsoft.NET.Runtime.Emscripten.3.1.56.Cache.win-x64, Microsoft.NETCore.App.Ref, Microsoft.Win32.SystemEvents, Microsoft.WindowsDesktop.App.Ref, System.CodeDom, System.ComponentModel.Composition, System.Composition.AttributedModel, System.Composition.Convention, System.Composition.Hosting, System.Composition.Runtime, System.Composition.TypedParts, System.Configuration.ConfigurationManager, System.Diagnostics.DiagnosticSource, System.Formats.Asn1, System.IO.Hashing, System.Reflection.MetadataLoadContext, System.Resources.Extensions, System.Security.Cryptography.Pkcs, System.Security.Cryptography.ProtectedData, System.Security.Cryptography.Xml, System.Security.Permissions, System.ServiceProcess.ServiceController, System.Text.Encoding.CodePages, System.Text.Json, System.Windows.Extensions (Version 10.0.7 -> 10.0.7) Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26215.122 -> 10.0.0-preview.26216.103) Microsoft.Build (Version 18.0.11 -> 18.0.11) Microsoft.Build.Localization (Version 18.0.11-servicing-26215-122 -> 18.0.11-servicing-26216-103) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.0.3-rc.21622 -> 7.0.3-rc.21703) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab, Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common (Version 10.0.107 -> 10.0.107) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.0.0-2.26215.122 -> 5.0.0-2.26216.103) Microsoft.Deployment.DotNet.Releases (Version 2.0.0-preview.1.26215.122 -> 2.0.0-preview.1.26216.103) Microsoft.DiaSymReader (Version 2.2.7 -> 2.2.7) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26215.122 -> 10.0.0-beta.26216.103) Microsoft.FSharp.Compiler (Version 14.0.107-servicing.26215.122 -> 14.0.107-servicing.26216.103) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.0.2-release-26215-122 -> 18.0.2-release-26216-103) Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.107-servicing.26215.122 -> 10.0.107-servicing.26216.103) Microsoft.Web.Xdt (Version 3.2.7 -> 3.2.7) System.CommandLine (Version 2.0.7 -> 2.0.7) [[ commit created by automation ]] --- NuGet.config | 3 +- eng/Version.Details.props | 126 ++++++------ eng/Version.Details.xml | 392 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 263 insertions(+), 264 deletions(-) diff --git a/NuGet.config b/NuGet.config index bd4e98e54288..1f47b0c8efce 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,8 +4,7 @@ - - + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 5588a39506ec..60dca63fa742 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,12 +8,12 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.7-servicing.26215.122 - 10.0.7-servicing.26215.122 - 10.0.7-servicing.26215.122 - 10.0.7-servicing.26215.122 + 10.0.7-servicing.26216.103 + 10.0.7-servicing.26216.103 + 10.0.7-servicing.26216.103 + 10.0.7-servicing.26216.103 10.0.7 - 10.0.7-servicing.26215.122 + 10.0.7-servicing.26216.103 10.0.7 10.0.7 10.0.7 @@ -21,46 +21,46 @@ This file should be imported by eng/Versions.props 10.0.7 10.0.7 10.0.7 - 10.0.7-servicing.26215.122 + 10.0.7-servicing.26216.103 10.0.7 10.0.7 10.0.7 10.0.7 - 10.0.7-servicing.26215.122 + 10.0.7-servicing.26216.103 10.0.7 - 10.0.7-servicing.26215.122 - 10.0.7-servicing.26215.122 - 10.0.0-preview.26215.122 + 10.0.7-servicing.26216.103 + 10.0.7-servicing.26216.103 + 10.0.0-preview.26216.103 10.0.7 10.0.7 18.0.11 - 18.0.11-servicing-26215-122 - 7.0.3-rc.21622 + 18.0.11-servicing-26216-103 + 7.0.3-rc.21703 10.0.107 - 5.0.0-2.26215.122 - 5.0.0-2.26215.122 - 5.0.0-2.26215.122 - 5.0.0-2.26215.122 - 5.0.0-2.26215.122 - 5.0.0-2.26215.122 - 5.0.0-2.26215.122 - 10.0.0-preview.26215.122 - 5.0.0-2.26215.122 - 5.0.0-2.26215.122 - 2.0.0-preview.1.26215.122 + 5.0.0-2.26216.103 + 5.0.0-2.26216.103 + 5.0.0-2.26216.103 + 5.0.0-2.26216.103 + 5.0.0-2.26216.103 + 5.0.0-2.26216.103 + 5.0.0-2.26216.103 + 10.0.0-preview.26216.103 + 5.0.0-2.26216.103 + 5.0.0-2.26216.103 + 2.0.0-preview.1.26216.103 2.2.7 - 10.0.0-beta.26215.122 - 10.0.0-beta.26215.122 - 10.0.0-beta.26215.122 - 10.0.0-beta.26215.122 - 10.0.0-beta.26215.122 - 10.0.0-beta.26215.122 + 10.0.0-beta.26216.103 + 10.0.0-beta.26216.103 + 10.0.0-beta.26216.103 + 10.0.0-beta.26216.103 + 10.0.0-beta.26216.103 + 10.0.0-beta.26216.103 10.0.7 10.0.7 - 10.0.7-servicing.26215.122 - 10.0.7-servicing.26215.122 - 10.0.0-beta.26215.122 - 10.0.0-beta.26215.122 + 10.0.7-servicing.26216.103 + 10.0.7-servicing.26216.103 + 10.0.0-beta.26216.103 + 10.0.0-beta.26216.103 10.0.7 10.0.7 10.0.7 @@ -70,19 +70,19 @@ This file should be imported by eng/Versions.props 10.0.7 10.0.7 10.0.7 - 14.0.107-servicing.26215.122 + 14.0.107-servicing.26216.103 10.0.7 - 5.0.0-2.26215.122 - 5.0.0-2.26215.122 - 10.0.7-servicing.26215.122 + 5.0.0-2.26216.103 + 5.0.0-2.26216.103 + 10.0.7-servicing.26216.103 10.0.7 10.0.7 10.0.0-preview.7.25377.103 - 10.0.0-preview.26215.122 - 10.0.7-servicing.26215.122 - 18.0.2-release-26215-122 + 10.0.0-preview.26216.103 + 10.0.7-servicing.26216.103 + 18.0.2-release-26216-103 10.0.7 - 10.0.7-servicing.26215.122 + 10.0.7-servicing.26216.103 10.0.107 10.0.107 10.0.107 @@ -91,34 +91,34 @@ This file should be imported by eng/Versions.props 10.0.107 10.0.107 10.0.107 - 10.0.107-servicing.26215.122 + 10.0.107-servicing.26216.103 10.0.107 - 10.0.107-servicing.26215.122 + 10.0.107-servicing.26216.103 10.0.107 10.0.107 - 10.0.107-servicing.26215.122 - 18.0.2-release-26215-122 - 18.0.2-release-26215-122 + 10.0.107-servicing.26216.103 + 18.0.2-release-26216-103 + 18.0.2-release-26216-103 3.2.7 10.0.7 - 10.0.7-servicing.26215.122 + 10.0.7-servicing.26216.103 10.0.7 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 - 7.0.3-rc.21622 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 + 7.0.3-rc.21703 10.0.7 2.0.7 10.0.7 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 8b0319c0338c..79eb5cef3db1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 @@ -70,168 +70,168 @@ https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 - + https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 https://github.com/microsoft/testfx @@ -571,7 +571,7 @@ https://github.com/dotnet/dotnet - 884fcaedb08b93d224306cea1ad17ffb7f6cd9d3 + bcdf64a8780acee9d4470cbe3ff8f487cc58b137 diff --git a/global.json b/global.json index 1c6e1f06990a..33719b767a81 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "10.0.106", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26215.122", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26215.122", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26216.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26216.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 0a2462a1a0dc5127207b1639a7f3ae3d41422bc2 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Thu, 16 Apr 2026 15:48:04 -0700 Subject: [PATCH 168/230] Add fork exclusion guard and recompile tactics workflow - Add if: !github.event.repository.fork to frontmatter - Change roles: write to roles: all (required by gh-aw v0.68.3) - Change update-pull-request target to use expression for issue_comment context - Recompile lock.yml with gh-aw v0.68.3 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../add-tactics-template-on-comment.lock.yml | 323 +++++++++--------- .../add-tactics-template-on-comment.md | 321 +++++++++-------- 2 files changed, 320 insertions(+), 324 deletions(-) diff --git a/.github/workflows/add-tactics-template-on-comment.lock.yml b/.github/workflows/add-tactics-template-on-comment.lock.yml index ca318859cbbe..66af35ac7e7a 100644 --- a/.github/workflows/add-tactics-template-on-comment.lock.yml +++ b/.github/workflows/add-tactics-template-on-comment.lock.yml @@ -1,5 +1,5 @@ -# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"5662637b183e8ce51773c7516aef2d06b044db0bf4c66dff4e1526db9db81f9a","compiler_version":"v0.67.4","strict":true,"agent_id":"copilot"} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","COPILOT_PAT_0","COPILOT_PAT_1","COPILOT_PAT_2","COPILOT_PAT_3","COPILOT_PAT_4","COPILOT_PAT_5","COPILOT_PAT_6","COPILOT_PAT_7","COPILOT_PAT_8","COPILOT_PAT_9","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"ed597411d8f924073f98dfc5c65a23a2325f34cd","version":"v8"},{"repo":"actions/upload-artifact","sha":"bbbca2ddaa5d8feaa63e36b76fdaad77386f024f","version":"v7"},{"repo":"github/gh-aw-actions/setup","sha":"9d6ae06250fc0ec536a0e5f35de313b35bad7246","version":"v0.67.4"}]} +# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"cad50c3365e8cc66b59cc202409bb738ed901538e5c388e1d826f2583a079b64","compiler_version":"v0.68.3","strict":true,"agent_id":"copilot"} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","COPILOT_PAT_0","COPILOT_PAT_1","COPILOT_PAT_2","COPILOT_PAT_3","COPILOT_PAT_4","COPILOT_PAT_5","COPILOT_PAT_6","COPILOT_PAT_7","COPILOT_PAT_8","COPILOT_PAT_9","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"373c709c69115d41ff229c7e5df9f8788daa9553","version":"v9"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"ba90f2186d7ad780ec640f364005fa24e797b360","version":"v0.68.3"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.20"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.2.19"},{"image":"ghcr.io/github/github-mcp-server:v0.32.0"},{"image":"node:lts-alpine"}]} # ___ _ _ # / _ \ | | (_) # | |_| | __ _ ___ _ __ | |_ _ ___ @@ -14,7 +14,7 @@ # \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \ # \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/ # -# This file was automatically generated by gh-aw (v0.67.4). DO NOT EDIT. +# This file was automatically generated by gh-aw (v0.68.3). DO NOT EDIT. # # To update this file, edit the corresponding .md file and run: # gh aw compile @@ -42,9 +42,17 @@ # Custom actions used: # - actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 # - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 -# - actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 -# - actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 -# - github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 +# - actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 +# - actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 +# - github/gh-aw-actions/setup@ba90f2186d7ad780ec640f364005fa24e797b360 # v0.68.3 +# +# Container images used: +# - ghcr.io/github/gh-aw-firewall/agent:0.25.20 +# - ghcr.io/github/gh-aw-firewall/api-proxy:0.25.20 +# - ghcr.io/github/gh-aw-firewall/squid:0.25.20 +# - ghcr.io/github/gh-aw-mcpg:v0.2.19 +# - ghcr.io/github/github-mcp-server:v0.32.0 +# - node:lts-alpine name: "Add Tactics Template On Comment" "on": @@ -52,11 +60,12 @@ name: "Add Tactics Template On Comment" types: - created - edited + # roles: all # Roles processed as role check in pre-activation job # steps: # Steps injected into pre-activation job # - name: Checkout the select-copilot-pat action folder # uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # with: - # fetch-depth: 1.0 + # fetch-depth: 1 # persist-credentials: false # sparse-checkout: .github/actions/select-copilot-pat # sparse-checkout-cone-mode: true @@ -85,7 +94,7 @@ run-name: "Add Tactics Template On Comment" jobs: activation: needs: pre_activation - if: "needs.pre_activation.outputs.activated == 'true' && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/tactics ') || startsWith(github.event.comment.body, '/tactics\n') || github.event.comment.body == '/tactics') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))" + if: needs.pre_activation.outputs.activated == 'true' && (!github.event.repository.fork) runs-on: ubuntu-slim permissions: actions: read @@ -95,20 +104,20 @@ jobs: pull-requests: write outputs: body: ${{ steps.sanitized.outputs.body }} - comment_id: ${{ steps.add-comment.outputs.comment-id }} - comment_repo: ${{ steps.add-comment.outputs.comment-repo }} - comment_url: ${{ steps.add-comment.outputs.comment-url }} + comment_id: "" + comment_repo: "" lockdown_check_failed: ${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }} model: ${{ steps.generate_aw_info.outputs.model }} secret_verification_result: ${{ steps.validate-secret.outputs.verification_result }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} slash_command: ${{ needs.pre_activation.outputs.matched_command }} + stale_lock_file_failed: ${{ steps.check-lock-file.outputs.stale_lock_file_failed == 'true' }} text: ${{ steps.sanitized.outputs.text }} title: ${{ steps.sanitized.outputs.title }} steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 + uses: github/gh-aw-actions/setup@ba90f2186d7ad780ec640f364005fa24e797b360 # v0.68.3 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -119,37 +128,37 @@ jobs: GH_AW_INFO_ENGINE_ID: "copilot" GH_AW_INFO_ENGINE_NAME: "GitHub Copilot CLI" GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_COPILOT || 'auto' }} - GH_AW_INFO_VERSION: "1.0.20" - GH_AW_INFO_AGENT_VERSION: "1.0.20" - GH_AW_INFO_CLI_VERSION: "v0.67.4" + GH_AW_INFO_VERSION: "1.0.21" + GH_AW_INFO_AGENT_VERSION: "1.0.21" + GH_AW_INFO_CLI_VERSION: "v0.68.3" GH_AW_INFO_WORKFLOW_NAME: "Add Tactics Template On Comment" GH_AW_INFO_EXPERIMENTAL: "false" GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true" GH_AW_INFO_STAGED: "false" GH_AW_INFO_ALLOWED_DOMAINS: '["defaults"]' GH_AW_INFO_FIREWALL_ENABLED: "true" - GH_AW_INFO_AWF_VERSION: "v0.25.18" + GH_AW_INFO_AWF_VERSION: "v0.25.20" GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_COMPILED_STRICT: "true" - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs'); await main(core, context); - - name: Add eyes reaction for immediate feedback + - name: Add +1 reaction for immediate feedback id: react if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: - GH_AW_REACTION: "eyes" + GH_AW_REACTION: "+1" with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/add_reaction.cjs'); await main(); - name: Validate COPILOT_GITHUB_TOKEN secret @@ -167,47 +176,36 @@ jobs: sparse-checkout-cone-mode: true fetch-depth: 1 - name: Check workflow lock file - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + id: check-lock-file + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_WORKFLOW_FILE: "add-tactics-template-on-comment.lock.yml" GH_AW_CONTEXT_WORKFLOW_REF: "${{ github.workflow_ref }}" with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_workflow_timestamp_api.cjs'); await main(); - name: Check compile-agentic version - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: - GH_AW_COMPILED_VERSION: "v0.67.4" + GH_AW_COMPILED_VERSION: "v0.68.3" with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_version_updates.cjs'); await main(); - name: Compute current body text id: sanitized - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/compute_text.cjs'); await main(); - - name: Add comment with workflow run link - id: add-comment - if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/add_workflow_run_comment.cjs'); - await main(); - name: Create prompt with built-in context env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt @@ -226,14 +224,14 @@ jobs: run: | bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh" { - cat << 'GH_AW_PROMPT_b594d25f08b7370b_EOF' + cat << 'GH_AW_PROMPT_ba6fbf6fa63535ca_EOF' - GH_AW_PROMPT_b594d25f08b7370b_EOF + GH_AW_PROMPT_ba6fbf6fa63535ca_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md" cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md" cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md" cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md" - cat << 'GH_AW_PROMPT_b594d25f08b7370b_EOF' + cat << 'GH_AW_PROMPT_ba6fbf6fa63535ca_EOF' Tools: update_pull_request, missing_tool, missing_data, noop @@ -265,18 +263,18 @@ jobs: {{/if}} - GH_AW_PROMPT_b594d25f08b7370b_EOF + GH_AW_PROMPT_ba6fbf6fa63535ca_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md" if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md" fi - cat << 'GH_AW_PROMPT_b594d25f08b7370b_EOF' + cat << 'GH_AW_PROMPT_ba6fbf6fa63535ca_EOF' {{#runtime-import .github/workflows/add-tactics-template-on-comment.md}} - GH_AW_PROMPT_b594d25f08b7370b_EOF + GH_AW_PROMPT_ba6fbf6fa63535ca_EOF } > "$GH_AW_PROMPT" - name: Interpolate variables and render templates - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_GITHUB_ACTOR: ${{ github.actor }} @@ -287,11 +285,11 @@ jobs: with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/interpolate_prompt.cjs'); await main(); - name: Substitute placeholders - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_GITHUB_ACTOR: ${{ github.actor }} @@ -309,7 +307,7 @@ jobs: with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const substitutePlaceholders = require('${{ runner.temp }}/gh-aw/actions/substitute_placeholders.cjs'); @@ -343,7 +341,7 @@ jobs: run: bash "${RUNNER_TEMP}/gh-aw/actions/print_prompt_summary.sh" - name: Upload activation artifact if: success() - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: activation path: | @@ -368,18 +366,21 @@ jobs: GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs GH_AW_WORKFLOW_ID_SANITIZED: addtacticstemplateoncomment outputs: + agentic_engine_timeout: ${{ steps.detect-copilot-errors.outputs.agentic_engine_timeout || 'false' }} checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }} effective_tokens: ${{ steps.parse-mcp-gateway.outputs.effective_tokens }} has_patch: ${{ steps.collect_output.outputs.has_patch }} - inference_access_error: ${{ steps.detect-inference-error.outputs.inference_access_error || 'false' }} + inference_access_error: ${{ steps.detect-copilot-errors.outputs.inference_access_error || 'false' }} + mcp_policy_error: ${{ steps.detect-copilot-errors.outputs.mcp_policy_error || 'false' }} model: ${{ needs.activation.outputs.model }} + model_not_supported_error: ${{ steps.detect-copilot-errors.outputs.model_not_supported_error || 'false' }} output: ${{ steps.collect_output.outputs.output }} output_types: ${{ steps.collect_output.outputs.output_types }} setup-trace-id: ${{ steps.setup.outputs.trace-id }} steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 + uses: github/gh-aw-actions/setup@ba90f2186d7ad780ec640f364005fa24e797b360 # v0.68.3 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -387,9 +388,11 @@ jobs: - name: Set runtime paths id: set-runtime-paths run: | - echo "GH_AW_SAFE_OUTPUTS=${RUNNER_TEMP}/gh-aw/safeoutputs/outputs.jsonl" >> "$GITHUB_OUTPUT" - echo "GH_AW_SAFE_OUTPUTS_CONFIG_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" >> "$GITHUB_OUTPUT" - echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json" >> "$GITHUB_OUTPUT" + { + echo "GH_AW_SAFE_OUTPUTS=${RUNNER_TEMP}/gh-aw/safeoutputs/outputs.jsonl" + echo "GH_AW_SAFE_OUTPUTS_CONFIG_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" + echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json" + } >> "$GITHUB_OUTPUT" - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: @@ -417,25 +420,25 @@ jobs: id: checkout-pr if: | github.event.pull_request || github.event.issue.pull_request - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} with: github-token: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/checkout_pr_branch.cjs'); await main(); - name: Install GitHub Copilot CLI - run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.20 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.21 env: GH_HOST: github.com - name: Install AWF binary - run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.18 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.20 - name: Determine automatic lockdown mode for GitHub MCP Server id: determine-automatic-lockdown - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }} GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }} @@ -444,21 +447,21 @@ jobs: const determineAutomaticLockdown = require('${{ runner.temp }}/gh-aw/actions/determine_automatic_lockdown.cjs'); await determineAutomaticLockdown(github, context, core); - name: Download container images - run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.18 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.18 ghcr.io/github/gh-aw-firewall/squid:0.25.18 ghcr.io/github/gh-aw-mcpg:v0.2.17 ghcr.io/github/github-mcp-server:v0.32.0 node:lts-alpine + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.20 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.20 ghcr.io/github/gh-aw-firewall/squid:0.25.20 ghcr.io/github/gh-aw-mcpg:v0.2.19 ghcr.io/github/github-mcp-server:v0.32.0 node:lts-alpine - name: Write Safe Outputs Config run: | mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs" mkdir -p /tmp/gh-aw/safeoutputs mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs - cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_ff4702b8b93aa57a_EOF' - {"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{},"update_pull_request":{"allow_body":true,"allow_title":true,"max":1,"target":"*"}} - GH_AW_SAFE_OUTPUTS_CONFIG_ff4702b8b93aa57a_EOF + cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_a4a3af2de409479b_EOF' + {"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{},"update_pull_request":{"allow_body":true,"allow_title":false,"footer":false,"max":1,"target":"${{ github.event.issue.number }}"}} + GH_AW_SAFE_OUTPUTS_CONFIG_a4a3af2de409479b_EOF - name: Write Safe Outputs Tools env: GH_AW_TOOLS_META_JSON: | { "description_suffixes": { - "update_pull_request": " CONSTRAINTS: Maximum 1 pull request(s) can be updated. Target: *." + "update_pull_request": " CONSTRAINTS: Maximum 1 pull request(s) can be updated. Target: ${{ github.event.issue.number }}." }, "repo_params": {}, "dynamic_tools": [] @@ -573,11 +576,11 @@ jobs: "customValidation": "requiresOneOf:title,body" } } - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_safe_outputs_tools.cjs'); await main(); - name: Generate Safe Outputs MCP Server Config @@ -645,10 +648,10 @@ jobs: export DEBUG="*" export GH_AW_ENGINE="copilot" - export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.2.17' + export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.2.19' mkdir -p /home/runner/.copilot - cat << GH_AW_MCP_CONFIG_54e8e71f80362629_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh" + cat << GH_AW_MCP_CONFIG_4c919e4f5411e719_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh" { "mcpServers": { "github": { @@ -689,7 +692,7 @@ jobs: "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" } } - GH_AW_MCP_CONFIG_54e8e71f80362629_EOF + GH_AW_MCP_CONFIG_4c919e4f5411e719_EOF - name: Download activation artifact uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: @@ -705,9 +708,10 @@ jobs: run: | set -o pipefail touch /tmp/gh-aw/agent-step-summary.md + (umask 177 && touch /tmp/gh-aw/agent-stdio.log) # shellcheck disable=SC1003 - sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --exclude-env GITHUB_MCP_SERVER_TOKEN --exclude-env MCP_GATEWAY_API_KEY --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.18 --skip-pull --enable-api-proxy \ - -- /bin/bash -c 'node ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --allow-all-tools --allow-all-paths --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log + sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --exclude-env GITHUB_MCP_SERVER_TOKEN --exclude-env MCP_GATEWAY_API_KEY --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.20 --skip-pull --enable-api-proxy \ + -- /bin/bash -c 'node ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-all-tools --allow-all-paths --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log env: COPILOT_AGENT_RUNNER_TYPE: STANDALONE COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} @@ -716,10 +720,9 @@ jobs: GH_AW_PHASE: agent GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} - GH_AW_VERSION: v0.67.4 + GH_AW_VERSION: v0.68.3 GITHUB_API_URL: ${{ github.api_url }} GITHUB_AW: true - GITHUB_COPILOT_INTEGRATION_ID: agentic-workflows GITHUB_HEAD_REF: ${{ github.head_ref }} GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} GITHUB_REF_NAME: ${{ github.ref_name }} @@ -731,11 +734,11 @@ jobs: GIT_COMMITTER_EMAIL: github-actions[bot]@users.noreply.github.com GIT_COMMITTER_NAME: github-actions[bot] XDG_CONFIG_HOME: /home/runner - - name: Detect inference access error - id: detect-inference-error + - name: Detect Copilot errors + id: detect-copilot-errors if: always() continue-on-error: true - run: bash "${RUNNER_TEMP}/gh-aw/actions/detect_inference_access_error.sh" + run: node "${RUNNER_TEMP}/gh-aw/actions/detect_copilot_errors.cjs" - name: Configure Git credentials env: REPO_NAME: ${{ github.repository }} @@ -764,11 +767,11 @@ jobs: bash "${RUNNER_TEMP}/gh-aw/actions/stop_mcp_gateway.sh" "$GATEWAY_PID" - name: Redact secrets in logs if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/redact_secrets.cjs'); await main(); env: @@ -800,7 +803,7 @@ jobs: - name: Ingest agent output id: collect_output if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }} GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" @@ -810,28 +813,28 @@ jobs: with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/collect_ndjson_output.cjs'); await main(); - name: Parse agent logs for step summary if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_AGENT_OUTPUT: /tmp/gh-aw/sandbox/agent/logs/ with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_copilot_log.cjs'); await main(); - name: Parse MCP Gateway logs for step summary if: always() id: parse-mcp-gateway - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_mcp_gateway_log.cjs'); await main(); - name: Print firewall logs @@ -852,11 +855,11 @@ jobs: - name: Parse token usage for step summary if: always() continue-on-error: true - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_token_usage.cjs'); await main(); - name: Write agent output placeholder if missing @@ -868,7 +871,7 @@ jobs: - name: Upload agent artifacts if: always() continue-on-error: true - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: agent path: | @@ -884,14 +887,6 @@ jobs: /tmp/gh-aw/agent_output.json /tmp/gh-aw/aw-*.patch /tmp/gh-aw/aw-*.bundle - if-no-files-found: ignore - - name: Upload firewall audit logs - if: always() - continue-on-error: true - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 - with: - name: firewall-audit-logs - path: | /tmp/gh-aw/sandbox/firewall/logs/ /tmp/gh-aw/sandbox/firewall/audit/ if-no-files-found: ignore @@ -902,7 +897,9 @@ jobs: - agent - detection - safe_outputs - if: always() && (needs.agent.result != 'skipped' || needs.activation.outputs.lockdown_check_failed == 'true') + if: > + always() && (needs.agent.result != 'skipped' || needs.activation.outputs.lockdown_check_failed == 'true' || + needs.activation.outputs.stale_lock_file_failed == 'true') runs-on: ubuntu-slim permissions: contents: read @@ -918,7 +915,7 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 + uses: github/gh-aw-actions/setup@ba90f2186d7ad780ec640f364005fa24e797b360 # v0.68.3 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -937,9 +934,9 @@ jobs: mkdir -p /tmp/gh-aw/ find "/tmp/gh-aw/" -type f -print echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT" - - name: Process No-Op Messages + - name: Process no-op messages id: noop - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_NOOP_MAX: "1" @@ -951,12 +948,28 @@ jobs: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_noop_message.cjs'); await main(); + - name: Log detection run + id: detection_runs + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 + env: + GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} + GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" + GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.outputs.detection_conclusion }} + GH_AW_DETECTION_REASON: ${{ needs.detection.outputs.detection_reason }} + with: + github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_detection_runs.cjs'); + await main(); - name: Record missing tool id: missing_tool - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_MISSING_TOOL_CREATE_ISSUE: "true" @@ -965,12 +978,12 @@ jobs: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/missing_tool.cjs'); await main(); - name: Record incomplete id: report_incomplete - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true" @@ -979,13 +992,13 @@ jobs: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/report_incomplete_handler.cjs'); await main(); - name: Handle agent failure id: handle_agent_failure if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" @@ -996,7 +1009,11 @@ jobs: GH_AW_SECRET_VERIFICATION_RESULT: ${{ needs.activation.outputs.secret_verification_result }} GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }} GH_AW_INFERENCE_ACCESS_ERROR: ${{ needs.agent.outputs.inference_access_error }} + GH_AW_MCP_POLICY_ERROR: ${{ needs.agent.outputs.mcp_policy_error }} + GH_AW_AGENTIC_ENGINE_TIMEOUT: ${{ needs.agent.outputs.agentic_engine_timeout }} + GH_AW_MODEL_NOT_SUPPORTED_ERROR: ${{ needs.agent.outputs.model_not_supported_error }} GH_AW_LOCKDOWN_CHECK_FAILED: ${{ needs.activation.outputs.lockdown_check_failed }} + GH_AW_STALE_LOCK_FILE_FAILED: ${{ needs.activation.outputs.stale_lock_file_failed }} GH_AW_GROUP_REPORTS: "false" GH_AW_FAILURE_REPORT_AS_ISSUE: "true" GH_AW_TIMEOUT_MINUTES: "20" @@ -1004,27 +1021,9 @@ jobs: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_agent_failure.cjs'); await main(); - - name: Update reaction comment with completion status - id: conclusion - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} - GH_AW_COMMENT_ID: ${{ needs.activation.outputs.comment_id }} - GH_AW_COMMENT_REPO: ${{ needs.activation.outputs.comment_repo }} - GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - GH_AW_WORKFLOW_NAME: "Add Tactics Template On Comment" - GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }} - GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.outputs.detection_conclusion }} - with: - github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/notify_comment_error.cjs'); - await main(); detection: needs: @@ -1037,11 +1036,12 @@ jobs: contents: read outputs: detection_conclusion: ${{ steps.detection_conclusion.outputs.conclusion }} + detection_reason: ${{ steps.detection_conclusion.outputs.reason }} detection_success: ${{ steps.detection_conclusion.outputs.success }} steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 + uses: github/gh-aw-actions/setup@ba90f2186d7ad780ec640f364005fa24e797b360 # v0.68.3 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -1066,8 +1066,12 @@ jobs: with: persist-credentials: false # --- Threat Detection --- + - name: Clean stale firewall files from agent artifact + run: | + rm -rf /tmp/gh-aw/sandbox/firewall/logs + rm -rf /tmp/gh-aw/sandbox/firewall/audit - name: Download container images - run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.18 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.18 ghcr.io/github/gh-aw-firewall/squid:0.25.18 + run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.20 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.20 ghcr.io/github/gh-aw-firewall/squid:0.25.20 - name: Check if detection needed id: detection_guard if: always() @@ -1104,7 +1108,7 @@ jobs: ls -la /tmp/gh-aw/threat-detection/ 2>/dev/null || true - name: Setup threat detection if: always() && steps.detection_guard.outputs.run_detection == 'true' - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: WORKFLOW_NAME: "Add Tactics Template On Comment" WORKFLOW_DESCRIPTION: "No description provided" @@ -1112,7 +1116,7 @@ jobs: with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/setup_threat_detection.cjs'); await main(); - name: Ensure threat-detection directory and log @@ -1121,11 +1125,11 @@ jobs: mkdir -p /tmp/gh-aw/threat-detection touch /tmp/gh-aw/threat-detection/detection.log - name: Install GitHub Copilot CLI - run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.20 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.21 env: GH_HOST: github.com - name: Install AWF binary - run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.18 + run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.20 - name: Execute GitHub Copilot CLI if: always() && steps.detection_guard.outputs.run_detection == 'true' id: detection_agentic_execution @@ -1134,19 +1138,19 @@ jobs: run: | set -o pipefail touch /tmp/gh-aw/agent-step-summary.md + (umask 177 && touch /tmp/gh-aw/threat-detection/detection.log) # shellcheck disable=SC1003 - sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,github.com,host.docker.internal,telemetry.enterprise.githubcopilot.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.18 --skip-pull --enable-api-proxy \ - -- /bin/bash -c 'node ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --allow-all-tools --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/threat-detection/detection.log + sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,github.com,host.docker.internal,telemetry.enterprise.githubcopilot.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --image-tag 0.25.20 --skip-pull --enable-api-proxy \ + -- /bin/bash -c 'node ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-all-tools --add-dir "${GITHUB_WORKSPACE}" --prompt "$(cat /tmp/gh-aw/aw-prompts/prompt.txt)"' 2>&1 | tee -a /tmp/gh-aw/threat-detection/detection.log env: COPILOT_AGENT_RUNNER_TYPE: STANDALONE COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} COPILOT_MODEL: ${{ vars.GH_AW_MODEL_DETECTION_COPILOT || '' }} GH_AW_PHASE: detection GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt - GH_AW_VERSION: v0.67.4 + GH_AW_VERSION: v0.68.3 GITHUB_API_URL: ${{ github.api_url }} GITHUB_AW: true - GITHUB_COPILOT_INTEGRATION_ID: agentic-workflows GITHUB_HEAD_REF: ${{ github.head_ref }} GITHUB_REF_NAME: ${{ github.ref_name }} GITHUB_SERVER_URL: ${{ github.server_url }} @@ -1159,7 +1163,7 @@ jobs: XDG_CONFIG_HOME: /home/runner - name: Upload threat detection log if: always() && steps.detection_guard.outputs.run_detection == 'true' - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: detection path: /tmp/gh-aw/threat-detection/detection.log @@ -1167,21 +1171,22 @@ jobs: - name: Parse and conclude threat detection id: detection_conclusion if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: RUN_DETECTION: ${{ steps.detection_guard.outputs.run_detection }} + GH_AW_DETECTION_CONTINUE_ON_ERROR: "true" with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_threat_detection_results.cjs'); await main(); pre_activation: - if: "github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/tactics ') || startsWith(github.event.comment.body, '/tactics\n') || github.event.comment.body == '/tactics') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment')" + if: !github.event.repository.fork runs-on: ubuntu-slim outputs: - activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }} + activated: ${{ steps.check_command_position.outputs.command_position_ok == 'true' }} copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} matched_command: ${{ steps.check_command_position.outputs.matched_command }} select-copilot-pat_result: ${{ steps.select-copilot-pat.outcome }} @@ -1189,31 +1194,19 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 + uses: github/gh-aw-actions/setup@ba90f2186d7ad780ec640f364005fa24e797b360 # v0.68.3 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} - - name: Check team membership for command workflow - id: check_membership - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_REQUIRED_ROLES: "admin,maintainer,write" - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); - await main(); - name: Check command position id: check_command_position - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_COMMANDS: "[\"tactics\"]" with: script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - name: Checkout the select-copilot-pat action folder @@ -1251,6 +1244,8 @@ jobs: timeout-minutes: 15 env: GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/add-tactics-template-on-comment" + GH_AW_DETECTION_CONCLUSION: ${{ needs.detection.outputs.detection_conclusion }} + GH_AW_DETECTION_REASON: ${{ needs.detection.outputs.detection_reason }} GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }} GH_AW_ENGINE_ID: "copilot" GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }} @@ -1266,7 +1261,7 @@ jobs: steps: - name: Setup Scripts id: setup - uses: github/gh-aw-actions/setup@9d6ae06250fc0ec536a0e5f35de313b35bad7246 # v0.67.4 + uses: github/gh-aw-actions/setup@ba90f2186d7ad780ec640f364005fa24e797b360 # v0.68.3 with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} @@ -1296,25 +1291,27 @@ jobs: echo "GH_HOST=${GH_HOST}" >> "$GITHUB_ENV" - name: Process Safe Outputs id: process_safe_outputs - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 env: GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }} GH_AW_ALLOWED_DOMAINS: "api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com" GITHUB_SERVER_URL: ${{ github.server_url }} GITHUB_API_URL: ${{ github.api_url }} - GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"false\"},\"report_incomplete\":{},\"update_pull_request\":{\"allow_body\":true,\"allow_title\":true,\"max\":1,\"target\":\"*\"}}" + GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"false\"},\"report_incomplete\":{},\"update_pull_request\":{\"allow_body\":true,\"allow_title\":false,\"footer\":false,\"max\":1,\"target\":\"${{ github.event.issue.number }}\"}}" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); + setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require('${{ runner.temp }}/gh-aw/actions/safe_output_handler_manager.cjs'); await main(); - name: Upload Safe Outputs Items if: always() - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: safe-outputs-items - path: /tmp/gh-aw/safe-output-items.jsonl + path: | + /tmp/gh-aw/safe-output-items.jsonl + /tmp/gh-aw/temporary-id-map.json if-no-files-found: ignore diff --git a/.github/workflows/add-tactics-template-on-comment.md b/.github/workflows/add-tactics-template-on-comment.md index 0170a3fd6978..d68481944be2 100644 --- a/.github/workflows/add-tactics-template-on-comment.md +++ b/.github/workflows/add-tactics-template-on-comment.md @@ -1,161 +1,160 @@ ---- -permissions: - contents: read - issues: read - pull-requests: read - -network: defaults - -safe-outputs: - update-pull-request: - max: 1 - body: true - title: false - footer: false - target: "triggering" - noop: - report-as-issue: false -if: !github.event.repository.fork - -on: - roles: write - slash_command: - name: tactics - events: [pull_request_comment] - reaction: "+1" - status-comment: false - -# ############################################################### -# Override the COPILOT_GITHUB_TOKEN secret usage for the workflow -# with a randomly-selected token from a pool of secrets. -# -# As soon as organization-level billing is offered for Agentic -# Workflows, this stop-gap approach will be removed. -# -# See: /.github/actions/select-copilot-pat/README.md -# ############################################################### - - # Add the pre-activation step of selecting a random PAT from the supplied secrets - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Checkout the select-copilot-pat action folder - with: - persist-credentials: false - sparse-checkout: .github/actions/select-copilot-pat - sparse-checkout-cone-mode: true - fetch-depth: 1 - - - id: select-copilot-pat - name: Select Copilot token from pool - uses: ./.github/actions/select-copilot-pat - env: - SECRET_0: ${{ secrets.COPILOT_PAT_0 }} - SECRET_1: ${{ secrets.COPILOT_PAT_1 }} - SECRET_2: ${{ secrets.COPILOT_PAT_2 }} - SECRET_3: ${{ secrets.COPILOT_PAT_3 }} - SECRET_4: ${{ secrets.COPILOT_PAT_4 }} - SECRET_5: ${{ secrets.COPILOT_PAT_5 }} - SECRET_6: ${{ secrets.COPILOT_PAT_6 }} - SECRET_7: ${{ secrets.COPILOT_PAT_7 }} - SECRET_8: ${{ secrets.COPILOT_PAT_8 }} - SECRET_9: ${{ secrets.COPILOT_PAT_9 }} - -# Add the pre-activation output of the randomly selected PAT -jobs: - pre-activation: - outputs: - copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} - -# Override the COPILOT_GITHUB_TOKEN expression used in the activation job -# Consume the PAT number from the pre-activation step and select the corresponding secret -engine: - id: copilot - env: - # We cannot use line breaks in this expression as it leads to a syntax error in the compiled workflow - # If none of the `COPILOT_PAT_#` secrets were selected, then the default COPILOT_GITHUB_TOKEN is used - COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} ---- - -## Add Tactics Template on Comment - -You are an expert .NET SDK engineer who helps fill in "tactics" for servicing pull requests in the dotnet/sdk repository. A servicing PR targets a stable release branch (e.g. `release/9.0.1xx`) and undergoes extra scrutiny before merging. Your job is to produce accurate, specific, and informative tactics based on the PR context. - -### Trigger Context - -- **Issue/PR number**: `${{ github.event.issue.number }}` -- **Repository**: `${{ github.repository }}` -- **Triggering actor**: `${{ github.actor }}` -- **Run URL**: `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}` -- **Sanitized trigger context**: "${{ steps.sanitized.outputs.text }}" - -### Your Task - -Follow these steps precisely: - -#### Step 1: Gather PR context - -The `/tactics` command may optionally include an issue number (e.g. `/tactics #12345` or `/tactics 12345`). Parse the sanitized trigger context above to extract any issue number provided after the command. - -For PR #`${{ github.event.issue.number }}`, gather the following information: - -1. **PR details**: title, description/body, author, target (base) branch -2. **Files changed**: list filenames with addition/deletion counts (up to 20 files) -3. **PR comments**: all non-bot issue-level comments (exclude the triggering `/tactics` comment) -4. **Review comments**: all non-bot code-level review comments, including which file they reference -5. **Linked issue**: If the `/tactics` command included an issue number, use that. Otherwise, parse the PR body for keywords like `fixes #N`, `closes #N`, or `resolves #N` to find a linked issue. If found, fetch the issue title and body. - -#### Step 2: Generate tactics - -Based on all the gathered context, produce a tactics analysis following this exact template. Be specific and detailed—avoid vague statements. Do not speculate or invent details not present in the context. If information for a section is genuinely unavailable, say so clearly. - -**Guidelines per section:** - -- **Summary**: 2-4 sentences. State the root cause of the bug or regression being fixed, describe the exact code change made to address it, and explain why this fix is appropriate for a servicing release. -- **Customer Impact**: Describe concretely how customers are affected: the symptom (e.g. build error, runtime crash, incorrect output), the exact SDK version(s) impacted, the frequency/severity (all users vs. specific scenario), and any known workarounds. -- **Regression?**: Was this introduced by a specific PR or SDK version? Answer "Yes, introduced in #N (description)" or "Yes, introduced in vX.Y.Z" if known. If not a regression or unclear, say "No" or "Unknown — not enough information to determine origin". -- **Testing**: List all forms of validation: unit tests added or modified, integration tests, manual repro steps from PR comments, private/lab testing, and CI results. If only CI ran, say so explicitly. -- **Risk**: Rate as Low, Medium, or High. Justify the rating by referencing the scope of the change (e.g. lines changed, components touched), test coverage, and any known edge cases or risks. - -The output format must be exactly: - -``` -### Summary - -[your text] - -### Customer Impact - -[your text] - -### Regression? - -[your text] - -### Testing - -[your text] - -### Risk - -[your text] -``` - -#### Step 3: Apply tactics and report status - -1. Use the `update_pull_request` tool to update the **PR description** by adding (or replacing) a tactics section delimited by `` and `` markers. The section should contain: - ``` - - ## Tactics - - [generated tactics content] - - ``` - If the markers already exist in the body, replace the content between them. Otherwise, append the block at the end. - -2. If a linked issue was found and used as input, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description using context from issue #[issue number]." Include the PR number and a brief snippet of the generated tactics summary. - -3. If no linked issue was found, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description." Include the PR number and a brief snippet of the generated tactics summary. - -### Error Handling - -If any step fails unexpectedly, call the `noop` tool with a markdown summary including "❌ Failed to generate or apply tactics" and the error details. The framework will post the failure status automatically. +--- +permissions: + contents: read + issues: read + pull-requests: read + +network: defaults + +safe-outputs: + update-pull-request: + max: 1 + body: true + title: false + footer: false + target: "${{ github.event.issue.number }}" + noop: + report-as-issue: false +if: "!github.event.repository.fork" +on: + roles: all + slash_command: + name: tactics + events: [pull_request_comment] + reaction: "+1" + status-comment: false + +# ############################################################### +# Override the COPILOT_GITHUB_TOKEN secret usage for the workflow +# with a randomly-selected token from a pool of secrets. +# +# As soon as organization-level billing is offered for Agentic +# Workflows, this stop-gap approach will be removed. +# +# See: /.github/actions/select-copilot-pat/README.md +# ############################################################### + + # Add the pre-activation step of selecting a random PAT from the supplied secrets + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + name: Checkout the select-copilot-pat action folder + with: + persist-credentials: false + sparse-checkout: .github/actions/select-copilot-pat + sparse-checkout-cone-mode: true + fetch-depth: 1 + + - id: select-copilot-pat + name: Select Copilot token from pool + uses: ./.github/actions/select-copilot-pat + env: + SECRET_0: ${{ secrets.COPILOT_PAT_0 }} + SECRET_1: ${{ secrets.COPILOT_PAT_1 }} + SECRET_2: ${{ secrets.COPILOT_PAT_2 }} + SECRET_3: ${{ secrets.COPILOT_PAT_3 }} + SECRET_4: ${{ secrets.COPILOT_PAT_4 }} + SECRET_5: ${{ secrets.COPILOT_PAT_5 }} + SECRET_6: ${{ secrets.COPILOT_PAT_6 }} + SECRET_7: ${{ secrets.COPILOT_PAT_7 }} + SECRET_8: ${{ secrets.COPILOT_PAT_8 }} + SECRET_9: ${{ secrets.COPILOT_PAT_9 }} + +# Add the pre-activation output of the randomly selected PAT +jobs: + pre-activation: + outputs: + copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} + +# Override the COPILOT_GITHUB_TOKEN expression used in the activation job +# Consume the PAT number from the pre-activation step and select the corresponding secret +engine: + id: copilot + env: + # We cannot use line breaks in this expression as it leads to a syntax error in the compiled workflow + # If none of the `COPILOT_PAT_#` secrets were selected, then the default COPILOT_GITHUB_TOKEN is used + COPILOT_GITHUB_TOKEN: ${{ case(needs.pre_activation.outputs.copilot_pat_number == '0', secrets.COPILOT_PAT_0, needs.pre_activation.outputs.copilot_pat_number == '1', secrets.COPILOT_PAT_1, needs.pre_activation.outputs.copilot_pat_number == '2', secrets.COPILOT_PAT_2, needs.pre_activation.outputs.copilot_pat_number == '3', secrets.COPILOT_PAT_3, needs.pre_activation.outputs.copilot_pat_number == '4', secrets.COPILOT_PAT_4, needs.pre_activation.outputs.copilot_pat_number == '5', secrets.COPILOT_PAT_5, needs.pre_activation.outputs.copilot_pat_number == '6', secrets.COPILOT_PAT_6, needs.pre_activation.outputs.copilot_pat_number == '7', secrets.COPILOT_PAT_7, needs.pre_activation.outputs.copilot_pat_number == '8', secrets.COPILOT_PAT_8, needs.pre_activation.outputs.copilot_pat_number == '9', secrets.COPILOT_PAT_9, secrets.COPILOT_GITHUB_TOKEN) }} +--- + +## Add Tactics Template on Comment + +You are an expert .NET SDK engineer who helps fill in "tactics" for servicing pull requests in the dotnet/sdk repository. A servicing PR targets a stable release branch (e.g. `release/9.0.1xx`) and undergoes extra scrutiny before merging. Your job is to produce accurate, specific, and informative tactics based on the PR context. + +### Trigger Context + +- **Issue/PR number**: `${{ github.event.issue.number }}` +- **Repository**: `${{ github.repository }}` +- **Triggering actor**: `${{ github.actor }}` +- **Run URL**: `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}` +- **Sanitized trigger context**: "${{ steps.sanitized.outputs.text }}" + +### Your Task + +Follow these steps precisely: + +#### Step 1: Gather PR context + +The `/tactics` command may optionally include an issue number (e.g. `/tactics #12345` or `/tactics 12345`). Parse the sanitized trigger context above to extract any issue number provided after the command. + +For PR #`${{ github.event.issue.number }}`, gather the following information: + +1. **PR details**: title, description/body, author, target (base) branch +2. **Files changed**: list filenames with addition/deletion counts (up to 20 files) +3. **PR comments**: all non-bot issue-level comments (exclude the triggering `/tactics` comment) +4. **Review comments**: all non-bot code-level review comments, including which file they reference +5. **Linked issue**: If the `/tactics` command included an issue number, use that. Otherwise, parse the PR body for keywords like `fixes #N`, `closes #N`, or `resolves #N` to find a linked issue. If found, fetch the issue title and body. + +#### Step 2: Generate tactics + +Based on all the gathered context, produce a tactics analysis following this exact template. Be specific and detailed—avoid vague statements. Do not speculate or invent details not present in the context. If information for a section is genuinely unavailable, say so clearly. + +**Guidelines per section:** + +- **Summary**: 2-4 sentences. State the root cause of the bug or regression being fixed, describe the exact code change made to address it, and explain why this fix is appropriate for a servicing release. +- **Customer Impact**: Describe concretely how customers are affected: the symptom (e.g. build error, runtime crash, incorrect output), the exact SDK version(s) impacted, the frequency/severity (all users vs. specific scenario), and any known workarounds. +- **Regression?**: Was this introduced by a specific PR or SDK version? Answer "Yes, introduced in #N (description)" or "Yes, introduced in vX.Y.Z" if known. If not a regression or unclear, say "No" or "Unknown — not enough information to determine origin". +- **Testing**: List all forms of validation: unit tests added or modified, integration tests, manual repro steps from PR comments, private/lab testing, and CI results. If only CI ran, say so explicitly. +- **Risk**: Rate as Low, Medium, or High. Justify the rating by referencing the scope of the change (e.g. lines changed, components touched), test coverage, and any known edge cases or risks. + +The output format must be exactly: + +``` +### Summary + +[your text] + +### Customer Impact + +[your text] + +### Regression? + +[your text] + +### Testing + +[your text] + +### Risk + +[your text] +``` + +#### Step 3: Apply tactics and report status + +1. Use the `update_pull_request` tool to update the **PR description** by adding (or replacing) a tactics section delimited by `` and `` markers. The section should contain: + ``` + + ## Tactics + + [generated tactics content] + + ``` + If the markers already exist in the body, replace the content between them. Otherwise, append the block at the end. + +2. If a linked issue was found and used as input, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description using context from issue #[issue number]." Include the PR number and a brief snippet of the generated tactics summary. + +3. If no linked issue was found, call the `noop` tool with a markdown summary: "✅ Tactics have been added to the PR description." Include the PR number and a brief snippet of the generated tactics summary. + +### Error Handling + +If any step fails unexpectedly, call the `noop` tool with a markdown summary including "❌ Failed to generate or apply tactics" and the error details. The framework will post the failure status automatically. From bdfa6b79f7d52f1f6f3bb55eb22986cd8c19a35d Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 17 Apr 2026 01:28:49 +0000 Subject: [PATCH 169/230] Update dependencies from build 310753 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26215.119 -> 10.0.0-preview.26216.115) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26215-119 -> 18.6.0-preview-26216-115) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.21619 -> 7.6.0-rc.21715) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26215.119 -> 10.0.300-alpha.26216.115) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26215.119 -> 5.6.0-2.26216.115) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26215.119 -> 10.0.0-beta.26216.115) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26215.119 -> 15.2.300-servicing.26216.115) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26215-119 -> 18.3.0-release-26216-115) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26215.119 -> 10.0.300-preview.26216.115) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index d5b8e36ed307..82e48abcaa25 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-preview.26215.119 + 10.0.0-preview.26216.115 10.0.6 10.0.6 - 18.6.0-preview-26215-119 - 18.6.0-preview-26215-119 - 7.6.0-rc.21619 - 10.0.300-alpha.26215.119 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 - 10.0.0-preview.26215.119 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 + 18.6.0-preview-26216-115 + 18.6.0-preview-26216-115 + 7.6.0-rc.21715 + 10.0.300-alpha.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 10.0.0-preview.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 2.0.0-preview.1.26176.101 2.2.6 - 10.0.0-beta.26215.119 - 10.0.0-beta.26215.119 - 10.0.0-beta.26215.119 - 10.0.0-beta.26215.119 - 10.0.0-beta.26215.119 - 10.0.0-beta.26215.119 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 10.0.6 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-beta.26215.119 - 10.0.0-beta.26215.119 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 10.0.6 10.0.6 10.0.6 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 15.2.300-servicing.26215.119 + 15.2.300-servicing.26216.115 10.0.6 - 5.6.0-2.26215.119 - 5.6.0-2.26215.119 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 10.0.6-servicing.26176.101 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26215.119 + 10.0.0-preview.26216.115 10.0.6-servicing.26176.101 - 18.3.0-release-26215-119 + 18.3.0-release-26216-115 10.0.6 10.0.6-servicing.26176.101 - 10.0.300-alpha.26215.119 - 10.0.300-alpha.26215.119 - 10.0.300-alpha.26215.119 - 10.0.300-alpha.26215.119 - 10.0.300-alpha.26215.119 - 10.0.300-preview.26215.119 - 10.0.300-preview.26215.119 - 10.0.300-preview.26215.119 - 10.0.300-preview.26215.119 - 10.0.300-preview.26215.119 - 10.0.300-preview.26215.119 - 10.0.300-preview.26215.119 - 10.0.300-preview.26215.119 - 10.0.300-preview.26215.119 - 18.3.0-release-26215-119 - 18.3.0-release-26215-119 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 18.3.0-release-26216-115 + 18.3.0-release-26216-115 3.2.6 10.0.6 10.0.6-servicing.26176.101 10.0.6 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 - 7.6.0-rc.21619 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index be4ddb0cdfcc..5b32d0e3744e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - 5c62320222555757bd9b82f3d38eaf5069f3d883 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index f52ea61f9358..32e5d4729716 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26215.119", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26215.119", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26216.115", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26216.115", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From c11659863e01f0aec80cbc9d628a1c30eaad8083 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Fri, 17 Apr 2026 08:35:56 +0200 Subject: [PATCH 170/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2953524 --- src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf index 2f5d8f197eba..17422f7562f2 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf @@ -1258,7 +1258,7 @@ Nástroj {1} (verze {2}) se úspěšně nainstaloval. Do souboru manifestu {3} s Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + Několik odkazovaných souborů by bylo převedeno do stejného adresáře: {0}. {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index 857e8e4e459a..32e862d8da98 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -1258,7 +1258,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + 複数の参照ファイルが同じディレクトリに変換されます: '{0}' {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index 47a36ac13072..f9978ef192fe 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -1258,7 +1258,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + Несколько файлов, на которые указывают ссылки, будут преобразованы в один каталог: "{0}" {0} is the target directory path. From 058fa78d27dc4eb368badb5a59bdef9b4c9e1e36 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Fri, 17 Apr 2026 08:38:50 +0200 Subject: [PATCH 171/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2953524 --- .../xlf/FileBasedProgramsResources.cs.xlf | 4 ++-- .../xlf/FileBasedProgramsResources.de.xlf | 4 ++-- .../xlf/FileBasedProgramsResources.es.xlf | 2 +- .../xlf/FileBasedProgramsResources.fr.xlf | 2 +- .../xlf/FileBasedProgramsResources.it.xlf | 4 ++-- .../xlf/FileBasedProgramsResources.ja.xlf | 4 ++-- .../xlf/FileBasedProgramsResources.ko.xlf | 2 +- .../xlf/FileBasedProgramsResources.pl.xlf | 2 +- .../xlf/FileBasedProgramsResources.pt-BR.xlf | 4 ++-- .../xlf/FileBasedProgramsResources.ru.xlf | 4 ++-- .../xlf/FileBasedProgramsResources.tr.xlf | 2 +- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf index c7b527bc9754..a5cc8144f6ea 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.cs.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + Soubor {0} nebyl nalezen. {0} is the file path. @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + Direktiva #:ref je neplatná: {0}. {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf index ae85b7a2a9fb..0a2844c607d6 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.de.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + Die Datei "{0}" konnte nicht gefunden werden. {0} is the file path. @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + Die „#:ref“-Direktive ist ungültig: {0} {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf index 99af05fd0a22..3d3f76062d7b 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + No se pudo encontrar el archivo '{0}'. {0} is the file path. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf index 90add5915dd1..c3cb53dfa9e0 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + Impossible de trouver le fichier '{0}'. {0} is the file path. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf index 47de1ef37010..08aa5428a90b 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.it.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + Il file '{0}' non è stato trovato. {0} is the file path. @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + La direttiva "#:ref" non è valida: {0} {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf index 573c9be2ff5c..259a6b3fb80c 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ja.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + ファイル '{0}' が見つかりませんでした。 {0} is the file path. @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + '#:ref' ディレクティブが無効です: {0} {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf index b466d59e7a63..75f293801c3a 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + '{0}' 파일을 찾을 수 없습니다. {0} is the file path. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf index eaf6b0b78253..70bc479286d5 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + Nie można odnaleźć pliku '{0}'. {0} is the file path. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf index 72cc2e9f3706..b389de338664 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pt-BR.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + Não foi possível encontrar arquivo "{0}". {0} is the file path. @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + A diretiva ''#:ref'' é inválida: {0} {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf index 5d580c932efe..bc0686e203f6 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ru.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + Не удалось найти файл "{0}". {0} is the file path. @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + Недопустимая директива "#:ref": {0} {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf index e64081b711aa..3a2e8533ee02 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + '{0}' dosyası bulunamadı. {0} is the file path. From 90af2dd84883d8e104996c5e8b2c161bb4c494a3 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Fri, 17 Apr 2026 08:40:14 +0200 Subject: [PATCH 172/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2953524 --- .../xlf/FileBasedProgramsResources.zh-Hans.xlf | 2 +- .../xlf/FileBasedProgramsResources.zh-Hant.xlf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf index bbcefb9f1d7f..1cd4525ecc9c 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + 找不到文件“{0}”。 {0} is the file path. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf index ecfe1971bf1c..7d2c81a0428d 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf @@ -19,7 +19,7 @@ Could not find file '{0}'. - Could not find file '{0}'. + 找不到檔案 '{0}'。 {0} is the file path. From ccdab300ea6320886d9dc160d3ca6cd181698487 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Fri, 17 Apr 2026 13:17:20 +0200 Subject: [PATCH 173/230] Warn about common run-file pitfalls (#53833) --- .../dotnet/Commands/CliCommandStrings.resx | 16 ++ src/Cli/dotnet/Commands/CommandFactory.cs | 21 ++ src/Cli/dotnet/Commands/Run/RunCommand.cs | 35 +++ .../Commands/xlf/CliCommandStrings.cs.xlf | 22 +- .../Commands/xlf/CliCommandStrings.de.xlf | 22 +- .../Commands/xlf/CliCommandStrings.es.xlf | 22 +- .../Commands/xlf/CliCommandStrings.fr.xlf | 22 +- .../Commands/xlf/CliCommandStrings.it.xlf | 22 +- .../Commands/xlf/CliCommandStrings.ja.xlf | 22 +- .../Commands/xlf/CliCommandStrings.ko.xlf | 22 +- .../Commands/xlf/CliCommandStrings.pl.xlf | 22 +- .../Commands/xlf/CliCommandStrings.pt-BR.xlf | 22 +- .../Commands/xlf/CliCommandStrings.ru.xlf | 22 +- .../Commands/xlf/CliCommandStrings.tr.xlf | 22 +- .../xlf/CliCommandStrings.zh-Hans.xlf | 22 +- .../xlf/CliCommandStrings.zh-Hant.xlf | 22 +- .../CommandTests/Run/RunFileTests.cs | 264 +++++++++++++++++- 17 files changed, 603 insertions(+), 19 deletions(-) diff --git a/src/Cli/dotnet/Commands/CliCommandStrings.resx b/src/Cli/dotnet/Commands/CliCommandStrings.resx index 7b40ab16089e..d7c1610513d4 100644 --- a/src/Cli/dotnet/Commands/CliCommandStrings.resx +++ b/src/Cli/dotnet/Commands/CliCommandStrings.resx @@ -964,6 +964,22 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Couldn't find a project to run. Ensure a project exists in {0}, or pass the path to the project using {1}. + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + Unable to proceed with project '{0}'. Ensure you have a runnable project type. diff --git a/src/Cli/dotnet/Commands/CommandFactory.cs b/src/Cli/dotnet/Commands/CommandFactory.cs index 6f50a6b2d4d7..f948c6d1e934 100644 --- a/src/Cli/dotnet/Commands/CommandFactory.cs +++ b/src/Cli/dotnet/Commands/CommandFactory.cs @@ -5,6 +5,7 @@ using Microsoft.DotNet.Cli.CommandLine; using Microsoft.DotNet.Cli.Commands.Run; using Microsoft.DotNet.Cli.Utils; +using Microsoft.DotNet.Cli.Utils.Extensions; using Microsoft.DotNet.ProjectTools; namespace Microsoft.DotNet.Cli.Commands; @@ -39,6 +40,26 @@ internal static CommandBase CreateVirtualOrPhysicalCommand( } else { + // Warn if any argument looks like a file-based program entry point but we're falling back to MSBuild. + // This can happen when extra positional arguments prevent the single-arg file-based path from being taken, + // or when a .cs file doesn't exist (so IsValidEntryPointPath returns false). + foreach (var candidate in nonBinLogArgs) + { + if (VirtualProjectBuilder.IsValidEntryPointPath(candidate)) + { + Reporter.Error.WriteLine( + string.Format(CliCommandStrings.WarningFileArgumentPassedToMSBuild, candidate, commandDefinition.Name).Yellow()); + break; + } + + if (candidate.EndsWith(".cs", StringComparison.OrdinalIgnoreCase)) + { + Reporter.Error.WriteLine( + string.Format(CliCommandStrings.WarningCsFileArgumentPassedToMSBuild, candidate).Yellow()); + break; + } + } + var msbuildArgs = MSBuildArgs.AnalyzeMSBuildArguments([.. forwardedArgs, .. args], [.. optionsToUseWhenParsingMSBuildFlags]); msbuildArgs = transformer?.Invoke(msbuildArgs) ?? msbuildArgs; return createPhysicalCommand(msbuildArgs, msbuildPath); diff --git a/src/Cli/dotnet/Commands/Run/RunCommand.cs b/src/Cli/dotnet/Commands/Run/RunCommand.cs index af35ce75ad46..010cb252cdd4 100644 --- a/src/Cli/dotnet/Commands/Run/RunCommand.cs +++ b/src/Cli/dotnet/Commands/Run/RunCommand.cs @@ -852,6 +852,41 @@ public static RunCommand FromParseResult(ParseResult parseResult) ref args, out string? entryPointFilePath); + // Warn if an argument looks like a file-based program entry point but we're falling back to project-based run. + // This helps users who accidentally run `dotnet run file.cs` in a directory containing a project file. + // Do not warn if --project or --file was explicitly specified. + // Only consider arguments that appear before '--' in the command line. + if (projectFilePath is not null && projectOption is null && fileOption is null && !readCodeFromStdin) + { + var argValuesBeforeDoubleDash = parseResult.Tokens + .TakeWhile(static t => t.Type != TokenType.DoubleDash) + .Where(static t => t.Type == TokenType.Argument) + .Select(static t => t.Value) + .ToHashSet(); + + foreach (var arg in args) + { + if (!argValuesBeforeDoubleDash.Contains(arg)) + { + continue; + } + + if (VirtualProjectBuilder.IsValidEntryPointPath(arg)) + { + Reporter.Error.WriteLine( + string.Format(CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, arg, projectFilePath).Yellow()); + break; + } + + if (arg.EndsWith(".cs", StringComparison.OrdinalIgnoreCase)) + { + Reporter.Error.WriteLine( + string.Format(CliCommandStrings.RunCommandWarningCsFileArgumentPassedToProject, arg, projectFilePath).Yellow()); + break; + } + } + } + bool noBuild = parseResult.HasOption(definition.NoBuildOption); string launchProfile = parseResult.GetValue(definition.LaunchProfileOption) ?? string.Empty; diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf index 17422f7562f2..50ac257b0f42 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Cílem projektu je více architektur. Pomocí parametru {0} určete, která arch {0} není platný soubor projektu. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. Upozornění: Nastavení z {0} nejsou použita, protože {1} má přednost. @@ -2069,6 +2079,16 @@ příkazu „dotnet tool list“. Spustí příkazy VSTest (Microsoft Test Engine). + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. Spustí sledovací proces souborů, který při změnách souborů spustí příkaz. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf index 67d8a75d1641..cf217b15cdeb 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Ihr Projekt verwendet mehrere Zielframeworks. Geben Sie über "{0}" an, welches "{0}" ist keine gültige Projektdatei. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. Warnung: Einstellungen von „{0}“ werden nicht verwendet, weil „{1}“ Vorrang hat. @@ -2069,6 +2079,16 @@ und die zugehörigen Paket-IDs für installierte Tools über den Befehl Hiermit werden Befehle der Microsoft-Test-Engine (VSTest) ausgeführt. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. Hiermit starten Sie einen Datei-Watcher, der einen Befehl ausführt, sobald Dateien geändert werden. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf index a7784fbe6057..fb2de6eee99c 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Su proyecto tiene como destino varias plataformas. Especifique la que quiere usa "{0}" no es un archivo de proyecto válido. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. Advertencia: la configuración de '{0}' no se utiliza porque '{1}' tiene prioridad. @@ -2069,6 +2079,16 @@ y los identificadores de los paquetes correspondientes a las herramientas instal Ejecuta comandos de Microsoft Test Engine (VSTest). + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. Inicia un monitor de archivo que ejecuta un comando cuando los archivos cambian. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf index 173b8a464603..06cfb885c868 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Votre projet cible plusieurs frameworks. Spécifiez le framework à exécuter à '{0}' n'est pas un fichier projet valide. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. Avertissement : les paramètres de « {0} » ne sont pas utilisés, car « {1} » a la priorité. @@ -2069,6 +2079,16 @@ et les ID de package correspondants aux outils installés, utilisez la commande Exécutez des commandes VSTest (Microsoft Test Engine). + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. Démarrez un observateur de fichier qui exécute une commande quand les fichiers changent. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf index a4ecc79c41ba..ec71ee5e9c87 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Il progetto è destinato a più framework. Specificare il framework da eseguire '{0}' non è un file di progetto valido. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. Avviso: le impostazioni di "{0}" non vengono usate perché "{1}" ha la precedenza. @@ -2069,6 +2079,16 @@ e gli ID pacchetto corrispondenti per gli strumenti installati usando il comando Esegue i comandi di Microsoft Test Engine (VSTest). + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. Avvia un controllo file che esegue un comando in caso di modifica dei file. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index 32e862d8da98..d129d876345f 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Your project targets multiple frameworks. Specify which framework to run using ' '{0}' は有効なプロジェクト ファイルではありません。 + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. 警告: '{1}' が優先されるため、'{0}' の設定は使用されません。 @@ -2069,6 +2079,16 @@ and the corresponding package Ids for installed tools using the command Microsoft Test Engine (VSTest) コマンドを実行します。 + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. ファイルが変更されたときにコマンドを実行するファイル ウォッチャーを起動します。 diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf index da738b37cbe7..06af364db1f7 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Your project targets multiple frameworks. Specify which framework to run using ' '{0}'은(는) 유효한 프로젝트 파일이 아닙니다. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. 경고: '{0}'의 설정은 '{1}'이(가) 우선하므로 사용되지 않습니다. @@ -2069,6 +2079,16 @@ and the corresponding package Ids for installed tools using the command Microsoft Test Engine(VSTest) 명령을 실행합니다. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. 파일이 변경되면 명령을 실행하는 파일 감시자를 시작합니다. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf index da4ba95c1ea4..65737b51140a 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Projekt ma wiele platform docelowych. Określ platformę do uruchomienia przy u „{0}” nie jest prawidłowym plikiem projektu. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. Ostrzeżenie: ustawienia z „{0}” nie są używane, ponieważ element „{1}” ma pierwszeństwo. @@ -2069,6 +2079,16 @@ i odpowiednie identyfikatory pakietów zainstalowanych narzędzi można znaleź Uruchom polecenia aparatu Microsoft Test Engine (VSTest). + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. Rozpocznij pracę obserwatora plików służącego do uruchamiania polecenia po wprowadzeniu zmian w plikach. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf index 426840b2d695..35e1bec6efbe 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Ele tem diversas estruturas como destino. Especifique que estrutura executar usa '{0}' não é um arquivo de projeto válido. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. Aviso: As configurações de '{0}' não são utilizadas porque '{1}' tem precedência. @@ -2069,6 +2079,16 @@ e as Ids de pacote correspondentes para as ferramentas instaladas usando o coman Executar comandos do VSTest (Microsoft Test Engine). + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. Inicie um observador de arquivo que executa um comando quando os arquivos são alterados. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index f9978ef192fe..b9158636ca3b 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Your project targets multiple frameworks. Specify which framework to run using ' "{0}" не является допустимым файлом проекта. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. Внимание! Параметры из "{0}" не используются, так как "{1}" обладает приоритетом. @@ -2070,6 +2080,16 @@ and the corresponding package Ids for installed tools using the command Выполнение команд Microsoft Test Engine (VSTest). + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. Запуск наблюдателя за файлами, который выполняет команду при изменении файлов. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf index a702754d4ca1..6ece903c03dd 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Projeniz birden fazla Framework'ü hedefliyor. '{0}' kullanarak hangi Framework' '{0}' geçerli bir proje dosyası değil. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. Uyarı: ‘{1}’ öncelikli olduğu için ‘{0}’ ayarları kullanılmaz. @@ -2069,6 +2079,16 @@ karşılık gelen paket kimliklerini bulmak için Microsoft Test Engine (VSTest) komutlarını çalıştırır. + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. Dosyalar değiştiğinde bir komut çalıştıran bir dosya izleyici başlatın. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf index 97f4b9fe46cf..4e8c3ce5f26b 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Your project targets multiple frameworks. Specify which framework to run using ' “{0}”不是有效的项目文件。 + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. 警告: 不使用 ‘{0}’ 中的设置,因为 ‘{1}’ 具有优先级。 @@ -2069,6 +2079,16 @@ and the corresponding package Ids for installed tools using the command 运行 Microsoft 测试引擎(VSTest)命令。 + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. 启动文件观察程序,它会在文件发生更改时运行命令。 diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf index c3c7ed0d05c9..4e539b59c7a8 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf @@ -1,4 +1,4 @@ - + @@ -1498,6 +1498,16 @@ Your project targets multiple frameworks. Specify which framework to run using ' '{0}' 並非有效的專案名稱。 + + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} + + + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} + Warning: Settings from '{0}' are not used because '{1}' has precedence. 警告: 來自 '{0}' 的設定未被使用,因為 '{1}' 具有優先順序。 @@ -2069,6 +2079,16 @@ and the corresponding package Ids for installed tools using the command 執行 Microsoft Test Engine (VSTest) 命令。 + + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + {0} is the .cs file path argument. + + + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} + Start a file watcher that runs a command when files change. 啟動會在檔案變更時執行命令的檔案監看員。 diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index 44356531c095..02d4fbd7f110 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -754,7 +754,8 @@ public void ProjectPath_Exists() .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Pass() - .And.HaveStdOutContaining(""" + .And.NotHaveStdErr() + .And.HaveStdOut(""" echo args:./App.csproj Hello from App """); @@ -773,9 +774,8 @@ public void ProjectInCurrentDirectory_NoRunVerb() .WithWorkingDirectory(Path.Join(testInstance.Path, "proj")) .Execute() .Should().Pass() - .And.HaveStdOutContaining(""" - Hello from Program - """); + .And.NotHaveStdErr() + .And.HaveStdOut("Hello from Program"); } [Fact] @@ -791,11 +791,263 @@ public void ProjectInCurrentDirectory_FileOption() .WithWorkingDirectory(Path.Join(testInstance.Path, "proj")) .Execute() .Should().Pass() - .And.HaveStdOutContaining(""" - Hello from Program + .And.NotHaveStdErr() + .And.HaveStdOut("Hello from Program"); + } + + /// + /// dotnet run --project App.csproj Program.cs does not warn + /// because --project was explicitly specified. + /// + [Fact] + public void ProjectInCurrentDirectory_ProjectOption_NoWarning() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "--project", "App.csproj", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdErr() + .And.HaveStdOut(""" + echo args:Program.cs + Hello from App """); } + /// + /// dotnet run file.cs in a directory with a project file warns + /// because file.cs is passed as an application argument to the project instead of running as a file-based program. + /// + [Fact] + public void ProjectInCurrentDirectory_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:Program.cs + Hello from App + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, + "Program.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run nonexistent.cs in a directory with a project file warns + /// even though the file does not exist, because the .cs extension suggests it was intended as a file-based program. + /// + [Fact] + public void ProjectInCurrentDirectory_NonExistentCsFile_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "nonexistent.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:nonexistent.cs + Hello from App + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningCsFileArgumentPassedToProject, + "nonexistent.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run -- file.cs in a directory with a project file does not warn + /// because -- signals that the arguments are intentional. + /// + [Fact] + public void ProjectInCurrentDirectory_DoubleDash_NoWarning() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "--", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:Program.cs + Hello from App + """) + .And.NotHaveStdErr(); + } + + /// + /// dotnet run file.cs -- other still warns because file.cs appears before --. + /// + [Fact] + public void ProjectInCurrentDirectory_DoubleDashAfterFile_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "Program.cs", "--", "otherArg") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:Program.cs;otherArg + Hello from App + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, + "Program.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run someArg file.cs in a directory with a project warns + /// when an unrecognized argument prevents file.cs from being treated as a file-based program entry point. + /// + [Fact] + public void ProjectInCurrentDirectory_UnrecognizedArg_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "someArg", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:someArg;Program.cs + Hello from App + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, + "Program.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run -c Release Program.cs in a directory with a project warns because + /// known options like -c don't suppress the warning; only --project, --file, or -- do. + /// + [Fact] + public void ProjectInCurrentDirectory_KnownOption_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "-c", "Release", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:Program.cs + Hello from App + Release config + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, + "Program.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run someArg -- file.cs does not warn because the .cs file is after --. + /// + [Fact] + public void ProjectInCurrentDirectory_UnrecognizedArg_DoubleDash_NoWarning() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "someArg", "--", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:someArg;Program.cs + Hello from App + """) + .And.NotHaveStdErr(); + } + + /// + /// dotnet build someArg Program.cs warns because 'Program.cs' is a valid file-based entry point + /// but additional positional arguments cause it to fall back to MSBuild. + /// + [Theory] + [InlineData("build", "someArg", "Program.cs")] + [InlineData("clean", "someArg", "Program.cs")] + [InlineData("publish", "someArg", "Program.cs")] + [InlineData("build", "Program.cs", "-consoleLoggerParameters:NoSummary")] + public void ExtraArgWithFileEntryPoint_Warns(string command, string arg1, string arg2) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, command, arg1, arg2) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.WarningFileArgumentPassedToMSBuild, + "Program.cs", + command)); + } + + /// + /// dotnet build nonexistent.cs warns because the .cs extension suggests it was intended as a file-based program. + /// + [Theory] + [InlineData("build")] + [InlineData("clean")] + [InlineData("publish")] + public void NonExistentCsFile_Warns(string command) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + new DotnetCommand(Log, command, "nonexistent.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.WarningCsFileArgumentPassedToMSBuild, + "nonexistent.cs", + command)); + } + + /// + /// dotnet build --no-incremental Program.cs is handled as file-based (known option + single positional arg) and does not warn. + /// + [Theory] + [InlineData("Program.cs")] + [InlineData("--no-incremental", "Program.cs")] + public void SingleFileEntryPoint_NoWarning(params string[] extraArgs) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, ["build", .. extraArgs]) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdErr(); + } + /// /// When a file is not a .cs file, we probe the first characters of the file for #!, and /// execute as a single file program if we find them. From ea123223bbec53d4e9d630fd1ea8e654e10f6b96 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Fri, 17 Apr 2026 15:31:30 +0200 Subject: [PATCH 174/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2953743 --- src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf | 4 ++-- src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf | 4 ++-- src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf | 4 ++-- src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf | 4 ++-- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf | 4 ++-- src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf | 4 ++-- src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf | 4 ++-- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf | 2 +- src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf | 4 ++-- src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf | 4 ++-- src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf | 2 +- 13 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf index 50ac257b0f42..e07f0214c790 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf index cf217b15cdeb..18a5eeff1d7d 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf @@ -1,4 +1,4 @@ - + @@ -1258,7 +1258,7 @@ Das Tool "{1}" (Version {2}) wurde erfolgreich installiert. Der Eintrag wird der Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + Mehrere Dateien, auf die verwiesen wird, werden in dasselbe Verzeichnis konvertiert: „{0}“ {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf index fb2de6eee99c..61cf2fafbf85 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf @@ -1,4 +1,4 @@ - + @@ -1258,7 +1258,7 @@ La herramienta "{1}" (versión "{2}") se instaló correctamente. Se ha agregado Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + Varios archivos a los que se hace referencia se convertirían en el mismo directorio: "{0}" {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf index 06cfb885c868..d59257a44347 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf @@ -1,4 +1,4 @@ - + @@ -1258,7 +1258,7 @@ L'outil '{1}' (version '{2}') a été correctement installé. L'entrée est ajou Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + Plusieurs fichiers référencés seraient convertis dans le même dossier : « {0} » {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf index ec71ee5e9c87..4ffd173f2e8b 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf @@ -1,4 +1,4 @@ - + @@ -1258,7 +1258,7 @@ Lo strumento '{1}' versione '{2}' è stato installato. La voce è stata aggiunta Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + Più file a cui si fa riferimento verranno convertiti nella stessa directory: '{0}' {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index d129d876345f..e1255a3658c2 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf index 06af364db1f7..6ae7735085da 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf @@ -1,4 +1,4 @@ - + @@ -1258,7 +1258,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + 참조된 여러 파일이 동일한 디렉터리 '{0}'으(로) 변환됩니다. {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf index 65737b51140a..75795f96f4bf 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf @@ -1,4 +1,4 @@ - + @@ -1258,7 +1258,7 @@ Narzędzie „{1}” (wersja „{2}”) zostało pomyślnie zainstalowane. Wpis Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + Wiele odwoływanych plików zostałoby przekonwertowanych do tego samego katalogu: „{0}” {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf index 35e1bec6efbe..6c0de7f3dfea 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -1258,7 +1258,7 @@ A ferramenta '{1}' (versão '{2}') foi instalada com êxito. A entrada foi adici Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + Vários arquivos referenciados seriam convertidos no mesmo diretório: '{0}' {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index b9158636ca3b..af8d83fda6fa 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf index 6ece903c03dd..c30b005d8895 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf @@ -1,4 +1,4 @@ - + @@ -1258,7 +1258,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + Birden fazla başvurulan dosya aynı dizine dönüştürülecek: '{0}' {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf index 4e8c3ce5f26b..443e3fb2b543 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf @@ -1,4 +1,4 @@ - + @@ -1258,7 +1258,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + 多个引用的文件将转换到同一目录: {0} {0} is the target directory path. diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf index 4e539b59c7a8..76e4c11c4e0f 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf @@ -1,4 +1,4 @@ - + From 5521e9a1ca8af5240a41172e4e0c55e140644f0a Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Fri, 17 Apr 2026 15:34:23 +0200 Subject: [PATCH 175/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2953743 --- .../xlf/FileBasedProgramsResources.es.xlf | 2 +- .../xlf/FileBasedProgramsResources.fr.xlf | 2 +- .../xlf/FileBasedProgramsResources.ko.xlf | 2 +- .../xlf/FileBasedProgramsResources.pl.xlf | 2 +- .../xlf/FileBasedProgramsResources.tr.xlf | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf index 3d3f76062d7b..1e8f0b7167a2 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.es.xlf @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + La directiva "#:ref" no es válida: {0} {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf index c3cb53dfa9e0..61d4881186ad 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.fr.xlf @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + La directive « #:ref » est invalide : {0} {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf index 75f293801c3a..5226d09c601e 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.ko.xlf @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + ‘#:ref’ 지시문이 잘못되었습니다: {0} {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf index 70bc479286d5..206da655e6ed 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.pl.xlf @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + Dyrektywa „#:ref” jest nieprawidłowa: {0} {Locked="#:ref"}{0} is the inner error message. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf index 3a2e8533ee02..5db8e086b974 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.tr.xlf @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + '#:ref' yönergesi geçersiz: {0} {Locked="#:ref"}{0} is the inner error message. From ef77c5408c0f42312ee1968aa21695dd72c63556 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Fri, 17 Apr 2026 15:35:47 +0200 Subject: [PATCH 176/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2953743 --- .../xlf/FileBasedProgramsResources.zh-Hans.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf index 1cd4525ecc9c..9abb7769ed62 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hans.xlf @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + "#:ref" 指令无效: {0} {Locked="#:ref"}{0} is the inner error message. From 116d03efe737206566f41a44318d2d4810b40eb0 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Fri, 17 Apr 2026 10:43:47 -0700 Subject: [PATCH 177/230] Enable CI builds and locbranch for 4xx --- .vsts-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vsts-ci.yml b/.vsts-ci.yml index f552a15920e3..e28a658a8d28 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -5,7 +5,7 @@ trigger: branches: include: - main - - release/10.0.3* + - release/10.0.4* - internal/release/* - exp/* @@ -104,7 +104,7 @@ extends: publishTaskPrefix: 1ES. populateInternalRuntimeVariables: true runtimeSourceProperties: /p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) - locBranch: release/10.0.3xx + locBranch: release/10.0.4xx # WORKAROUND: BinSkim requires the folder exist prior to scanning. preSteps: - powershell: New-Item -ItemType Directory -Path $(Build.SourcesDirectory)/artifacts/bin -Force From b0c88f0ee0abffc65f36a8bdbc21d2bc42a5e25d Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Fri, 17 Apr 2026 10:47:44 -0700 Subject: [PATCH 178/230] Remove the roles node to fall back to the default of writers+ --- .../add-tactics-template-on-comment.lock.yml | 37 ++++++++++++------- .../add-tactics-template-on-comment.md | 1 - 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.github/workflows/add-tactics-template-on-comment.lock.yml b/.github/workflows/add-tactics-template-on-comment.lock.yml index 66af35ac7e7a..18fe94a39063 100644 --- a/.github/workflows/add-tactics-template-on-comment.lock.yml +++ b/.github/workflows/add-tactics-template-on-comment.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"cad50c3365e8cc66b59cc202409bb738ed901538e5c388e1d826f2583a079b64","compiler_version":"v0.68.3","strict":true,"agent_id":"copilot"} +# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"564589df884c703a182365f755b25f31ba504cd7c605643f8ecbbdab81114460","compiler_version":"v0.68.3","strict":true,"agent_id":"copilot"} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","COPILOT_PAT_0","COPILOT_PAT_1","COPILOT_PAT_2","COPILOT_PAT_3","COPILOT_PAT_4","COPILOT_PAT_5","COPILOT_PAT_6","COPILOT_PAT_7","COPILOT_PAT_8","COPILOT_PAT_9","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"373c709c69115d41ff229c7e5df9f8788daa9553","version":"v9"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"ba90f2186d7ad780ec640f364005fa24e797b360","version":"v0.68.3"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.20"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.2.19"},{"image":"ghcr.io/github/github-mcp-server:v0.32.0"},{"image":"node:lts-alpine"}]} # ___ _ _ # / _ \ | | (_) @@ -60,7 +60,6 @@ name: "Add Tactics Template On Comment" types: - created - edited - # roles: all # Roles processed as role check in pre-activation job # steps: # Steps injected into pre-activation job # - name: Checkout the select-copilot-pat action folder # uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd @@ -224,14 +223,14 @@ jobs: run: | bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh" { - cat << 'GH_AW_PROMPT_ba6fbf6fa63535ca_EOF' + cat << 'GH_AW_PROMPT_f6f938f72b13ef46_EOF' - GH_AW_PROMPT_ba6fbf6fa63535ca_EOF + GH_AW_PROMPT_f6f938f72b13ef46_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md" cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md" cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md" cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md" - cat << 'GH_AW_PROMPT_ba6fbf6fa63535ca_EOF' + cat << 'GH_AW_PROMPT_f6f938f72b13ef46_EOF' Tools: update_pull_request, missing_tool, missing_data, noop @@ -263,15 +262,15 @@ jobs: {{/if}} - GH_AW_PROMPT_ba6fbf6fa63535ca_EOF + GH_AW_PROMPT_f6f938f72b13ef46_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md" if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md" fi - cat << 'GH_AW_PROMPT_ba6fbf6fa63535ca_EOF' + cat << 'GH_AW_PROMPT_f6f938f72b13ef46_EOF' {{#runtime-import .github/workflows/add-tactics-template-on-comment.md}} - GH_AW_PROMPT_ba6fbf6fa63535ca_EOF + GH_AW_PROMPT_f6f938f72b13ef46_EOF } > "$GH_AW_PROMPT" - name: Interpolate variables and render templates uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 @@ -453,9 +452,9 @@ jobs: mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs" mkdir -p /tmp/gh-aw/safeoutputs mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs - cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_a4a3af2de409479b_EOF' + cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_a35a68747714d5fa_EOF' {"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{},"update_pull_request":{"allow_body":true,"allow_title":false,"footer":false,"max":1,"target":"${{ github.event.issue.number }}"}} - GH_AW_SAFE_OUTPUTS_CONFIG_a4a3af2de409479b_EOF + GH_AW_SAFE_OUTPUTS_CONFIG_a35a68747714d5fa_EOF - name: Write Safe Outputs Tools env: GH_AW_TOOLS_META_JSON: | @@ -651,7 +650,7 @@ jobs: export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.2.19' mkdir -p /home/runner/.copilot - cat << GH_AW_MCP_CONFIG_4c919e4f5411e719_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh" + cat << GH_AW_MCP_CONFIG_8a7e716d8ff165b0_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh" { "mcpServers": { "github": { @@ -692,7 +691,7 @@ jobs: "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" } } - GH_AW_MCP_CONFIG_4c919e4f5411e719_EOF + GH_AW_MCP_CONFIG_8a7e716d8ff165b0_EOF - name: Download activation artifact uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: @@ -1186,7 +1185,7 @@ jobs: if: !github.event.repository.fork runs-on: ubuntu-slim outputs: - activated: ${{ steps.check_command_position.outputs.command_position_ok == 'true' }} + activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }} copilot_pat_number: ${{ steps.select-copilot-pat.outputs.copilot_pat_number }} matched_command: ${{ steps.check_command_position.outputs.matched_command }} select-copilot-pat_result: ${{ steps.select-copilot-pat.outcome }} @@ -1198,6 +1197,18 @@ jobs: with: destination: ${{ runner.temp }}/gh-aw/actions job-name: ${{ github.job }} + - name: Check team membership for command workflow + id: check_membership + uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 + env: + GH_AW_REQUIRED_ROLES: "admin,maintainer,write" + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io, getOctokit); + const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); + await main(); - name: Check command position id: check_command_position uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 diff --git a/.github/workflows/add-tactics-template-on-comment.md b/.github/workflows/add-tactics-template-on-comment.md index d68481944be2..a40b4137eb8b 100644 --- a/.github/workflows/add-tactics-template-on-comment.md +++ b/.github/workflows/add-tactics-template-on-comment.md @@ -17,7 +17,6 @@ safe-outputs: report-as-issue: false if: "!github.event.repository.fork" on: - roles: all slash_command: name: tactics events: [pull_request_comment] From b055edd4200b68ead3ef365a3845f1d427b5b555 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Mar 2026 23:15:37 +0000 Subject: [PATCH 179/230] Fix NRE in ToolConfigurationDeserializer when ridSpecificPackages is null Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> --- src/Cli/dotnet/ToolPackage/ToolConfigurationDeserializer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cli/dotnet/ToolPackage/ToolConfigurationDeserializer.cs b/src/Cli/dotnet/ToolPackage/ToolConfigurationDeserializer.cs index b7b8e87e55eb..fa7ffc59589f 100644 --- a/src/Cli/dotnet/ToolPackage/ToolConfigurationDeserializer.cs +++ b/src/Cli/dotnet/ToolPackage/ToolConfigurationDeserializer.cs @@ -71,7 +71,7 @@ public static ToolConfiguration Deserialize(string pathToXml, IFileSystem fileSy .AsReadOnly(); // Also error out if there are no RID-specific packages and the runner is empty - if (string.IsNullOrEmpty(runner) && !ridSpecificPackages.Any()) + if (string.IsNullOrEmpty(runner) && (ridSpecificPackages == null || !ridSpecificPackages.Any())) { throw new ToolConfigurationException( string.Format( From 51183a3686e16a41e7cb1dbf1a407ca6f15e995b Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Fri, 17 Apr 2026 11:32:45 -0700 Subject: [PATCH 180/230] Downgrade implicit version for the hotfix Updated VersionFeature80 and VersionFeature90 to reflect new versioning. --- eng/Versions.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 4ce39fbd1a25..34f926303169 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -37,8 +37,8 @@ 36 20 - $([MSBuild]::Add($(VersionFeature), 20)) - $([MSBuild]::Add($(VersionFeature), 9)) + $([MSBuild]::Add($(VersionFeature), 19)) + $([MSBuild]::Add($(VersionFeature), 8)) <_NET70ILLinkPackVersion>7.0.100-1.23211.1 From 49e3b567c470ac12239be05ec12baa7efb7bec10 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Fri, 17 Apr 2026 11:38:35 -0700 Subject: [PATCH 181/230] Switch to automatic version calculation for 10.0.3xx --- eng/Versions.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 241a90b546b9..c04eeee62ee7 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -35,8 +35,8 @@ 36 20 - 25 - 14 + $([MSBuild]::Add($(VersionFeature), 27)) + $([MSBuild]::Add($(VersionFeature), 16)) <_NET70ILLinkPackVersion>7.0.100-1.23211.1 From ea548bf9405d2bed8a0d1d178bf094af110182b7 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Fri, 17 Apr 2026 11:40:56 -0700 Subject: [PATCH 182/230] Update branding and implicit version --- eng/Versions.props | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 241a90b546b9..c0a2ff695f62 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -6,7 +6,7 @@ 10 0 - 3 + 4 0 $([System.String]::Copy('$(VersionSDKMinorPatch)').PadLeft(2, '0')) - 25 - 14 + 26 + 15 <_NET70ILLinkPackVersion>7.0.100-1.23211.1 From 9ac5f515dfdd4b6af911e90e5b789a19bc728a87 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Fri, 17 Apr 2026 21:49:15 +0200 Subject: [PATCH 183/230] Remove feature flags for `#:include` and `#:exclude` (#53775) --- documentation/general/dotnet-run-file.md | 5 - .../FileLevelDirectiveHelpers.cs | 4 - .../InternalAPI.Unshipped.txt | 3 - .../VirtualProjectBuilder.cs | 25 +-- .../Convert/DotnetProjectConvertTests.cs | 22 +-- .../CommandTests/Run/RunFileTests.cs | 146 ++---------------- 6 files changed, 23 insertions(+), 182 deletions(-) diff --git a/documentation/general/dotnet-run-file.md b/documentation/general/dotnet-run-file.md index 9c9ed03ab167..dfcb07822795 100644 --- a/documentation/general/dotnet-run-file.md +++ b/documentation/general/dotnet-run-file.md @@ -236,18 +236,13 @@ The directives are processed as follows: where `{0}` is the directive's value and `{1}` is determined by its extension. The mapping can be customized by setting the MSBuild property `FileBasedProgramsItemMapping` which is by default set to `.cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content`. - (The mapping customization is currently gated under a feature flag that can be enabled by setting the MSBuild property `ExperimentalFileBasedProgramEnableItemMapping=true`.) It is an error if the value is empty. Relative paths are resolved relative to the file containing the directive. - This directive is currently gated under a feature flag that can be enabled by setting the MSBuild property `ExperimentalFileBasedProgramEnableIncludeDirective=true`. - - Each `#:exclude` is injected similarly to `#:include` but with `Remove="{0}"` instead of `Include="{0}"`. - This directive is currently gated under a feature flag that can be enabled by setting the MSBuild property `ExperimentalFileBasedProgramEnableExcludeDirective=true`. - - Other directive kinds result in an error, reserving them for future use. Directive values support MSBuild variables (like `$(..)`) normally as they are translated literally and left to MSBuild engine to process. diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs b/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs index bee6360deaaf..65fd17f44bdb 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs @@ -693,11 +693,7 @@ public enum IncludeOrExcludeKind /// public sealed class IncludeOrExclude(in ParseInfo info) : Named(info) { - public const string ExperimentalFileBasedProgramEnableIncludeDirective = nameof(ExperimentalFileBasedProgramEnableIncludeDirective); - public const string ExperimentalFileBasedProgramEnableExcludeDirective = nameof(ExperimentalFileBasedProgramEnableExcludeDirective); public const string ExperimentalFileBasedProgramEnableTransitiveDirectives = nameof(ExperimentalFileBasedProgramEnableTransitiveDirectives); - public const string ExperimentalFileBasedProgramEnableItemMapping = nameof(ExperimentalFileBasedProgramEnableItemMapping); - public const string MappingPropertyName = "FileBasedProgramsItemMapping"; public static string DefaultMappingString => ".cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content"; diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt b/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt index bbf3d44bc01b..d3a08eaa3a3e 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt @@ -1,6 +1,3 @@ -const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableExcludeDirective = "ExperimentalFileBasedProgramEnableExcludeDirective" -> string! -const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective = "ExperimentalFileBasedProgramEnableIncludeDirective" -> string! -const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableItemMapping = "ExperimentalFileBasedProgramEnableItemMapping" -> string! const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives = "ExperimentalFileBasedProgramEnableTransitiveDirectives" -> string! const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.MappingPropertyName = "FileBasedProgramsItemMapping" -> string! const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective = "ExperimentalFileBasedProgramEnableRefDirective" -> string! diff --git a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs index 78ffdbcbf176..50f18abe9265 100644 --- a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs +++ b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs @@ -252,12 +252,10 @@ private ImmutableArray EvaluateDirectives( internal ImmutableArray<(string Extension, string ItemType)> GetItemMapping(ProjectInstance project, ErrorReporter reportError) { - return MSBuildUtilities.ConvertStringToBool(project.GetPropertyValue(CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableItemMapping)) - ? CSharpDirective.IncludeOrExclude.ParseMapping( - project.GetPropertyValue(CSharpDirective.IncludeOrExclude.MappingPropertyName), - EntryPointSourceFile, - reportError) - : CSharpDirective.IncludeOrExclude.DefaultMapping; + return CSharpDirective.IncludeOrExclude.ParseMapping( + project.GetPropertyValue(CSharpDirective.IncludeOrExclude.MappingPropertyName), + EntryPointSourceFile, + reportError); } public static ProjectInstance CreateProjectInstance( @@ -439,8 +437,6 @@ private void CheckDirectives( ErrorReporter reportError) { bool? refEnabled = null; - bool? includeEnabled = null; - bool? excludeEnabled = null; bool? transitiveEnabled = null; foreach (var directive in directives) @@ -450,19 +446,6 @@ private void CheckDirectives( CheckFlagEnabled(ref refEnabled, CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, directive); } - if (directive is CSharpDirective.IncludeOrExclude includeOrExcludeDirective) - { - if (includeOrExcludeDirective.Kind == CSharpDirective.IncludeOrExcludeKind.Include) - { - CheckFlagEnabled(ref includeEnabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective, directive); - } - else - { - Debug.Assert(includeOrExcludeDirective.Kind == CSharpDirective.IncludeOrExcludeKind.Exclude); - CheckFlagEnabled(ref excludeEnabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableExcludeDirective, directive); - } - } - if (directive.Info.SourceFile.Path != EntryPointSourceFile.Path) { CheckFlagEnabled(ref transitiveEnabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives, directive); diff --git a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs index c0e03300da4e..b06c4aae98f6 100644 --- a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs +++ b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs @@ -448,8 +448,7 @@ public void RefDirective_DuplicateFolderName_ViaInclude() <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - true - true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true """); @@ -1689,15 +1688,6 @@ public void Directives_IncludeExclude() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - true - - - """); - VerifyConversion( baseDirectory: testInstance.Path, evaluateDirectives: true, @@ -1742,8 +1732,6 @@ public void Directives_IncludeExclude_FilesCopied() { var testInstance = _testAssetsManager.CreateTestDirectory(); File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:property ExperimentalFileBasedProgramEnableIncludeDirective=true - #:property ExperimentalFileBasedProgramEnableExcludeDirective=true #:include **/*.cs #:include *.json #:exclude my.json @@ -2632,7 +2620,6 @@ public void DeleteSource_WithIncludeDirective() // Create entry point file with #:include directive File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:property ExperimentalFileBasedProgramEnableIncludeDirective=true #:include Util.cs Console.WriteLine("Test"); """); @@ -2662,7 +2649,6 @@ public void DeleteSource_WithIncludeDirective_NotDeleted() // Create entry point file with #:include directive File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:property ExperimentalFileBasedProgramEnableIncludeDirective=true #:include Util.cs Console.WriteLine("Test"); """); @@ -2693,7 +2679,6 @@ public void DeleteSource_WithIncludeDirective_MultipleFiles() // Create entry point file with multiple #:include directives File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:property ExperimentalFileBasedProgramEnableIncludeDirective=true #:include Util.cs #:include Helper.cs #:include config.json @@ -2730,9 +2715,8 @@ public void DeleteSource_WithIncludeDirective_Transitive() var testInstance = _testAssetsManager.CreateTestDirectory(); // Create entry point file with #:include directive - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:property ExperimentalFileBasedProgramEnableIncludeDirective=true - #:property ExperimentalFileBasedProgramEnableTransitiveDirectives=true + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #:property {CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}=true #:include Util.cs Console.WriteLine("Test"); """); diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index 02d4fbd7f110..26e16204fc0e 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -1247,10 +1247,10 @@ public static class B public static string M() => "String from Util"; } """); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true @@ -1979,14 +1979,6 @@ public void BinaryLog_EvaluationData_MultiFile() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - - - """); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" #!/usr/bin/env dotnet @@ -2152,15 +2144,6 @@ public void MissingShebangWarning() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - true - - - """); - // Single-file program without shebang should NOT produce CA2266 // (the warning only fires when there are multiple files via #:include). File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ @@ -3919,7 +3902,6 @@ public void RefDirective_WithInclude() <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective}>true """); @@ -4099,7 +4081,6 @@ public void RefDirective_DuplicateRefFromIncludedFiles() <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective}>true <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true @@ -4158,7 +4139,6 @@ public void RefDirective_DuplicateRefFromIncludedFiles_Subdirectories() <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective}>true <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true @@ -4224,7 +4204,6 @@ public void RefDirective_IncludeAndRefSameFile() <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective}>true <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true @@ -4261,15 +4240,6 @@ public void IncludeDirective( { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - true - - - """); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" #!/usr/bin/env dotnet #:include {includePattern} @@ -4292,14 +4262,6 @@ public void IncludeDirective_WorkingDirectory() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - - - """); - var srcDir = Path.Join(testInstance.Path, "src"); Directory.CreateDirectory(srcDir); @@ -4335,7 +4297,6 @@ static class B { public static string M() => "Hello from B"; } new DirectoryInfo(testInstance.Path) .Should().HaveSubtree(""" - Directory.Build.props src/ src/A.cs src/A/ @@ -4379,11 +4340,10 @@ public void IncludeDirective_Transitive() Directory.CreateDirectory(Path.Join(testInstance.Path, "dir1/dir2")); Directory.CreateDirectory(Path.Join(testInstance.Path, "dir3")); - File.WriteAllText(Path.Join(testInstance.Path, "dir1/Directory.Build.props"), """ + File.WriteAllText(Path.Join(testInstance.Path, "dir1/Directory.Build.props"), $""" - true - true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true """); @@ -4497,14 +4457,6 @@ public void IncludeDirective_FileNotFound() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - - - """); - var programPath = Path.Join(testInstance.Path, "A.cs"); File.WriteAllText(programPath, """ @@ -4530,14 +4482,6 @@ public void IncludeDirective_UpToDate_Glob(string glob) { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - - - """); - var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" #!/usr/bin/env dotnet @@ -4597,14 +4541,6 @@ public void IncludeDirective_UpToDate_NoGlob() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - - - """); - var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" #!/usr/bin/env dotnet @@ -4662,11 +4598,10 @@ public void IncludeDirective_UpToDate_ProjectReference() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - true - true + <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true """); @@ -4730,51 +4665,30 @@ class UtilClass Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput, workDir: appDir); } + /// + /// Transitive directives (directives in non-entry-point files) are gated behind a feature flag. + /// [Fact] public void IncludeDirective_FeatureFlags() { var testInstance = _testAssetsManager.CreateTestDirectory(); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, $""" + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ #!/usr/bin/env dotnet - #:include *.cs - {s_programDependingOnUtil} + #:include Util.cs + Console.WriteLine(Util.M()); """); var utilPath = Path.Join(testInstance.Path, "Util.cs"); - File.WriteAllText(utilPath, $""" - #:exclude Other.cs - {s_util} + File.WriteAllText(utilPath, """ + #:property DefineConstants=MY_CONST + static class Util { public static string M() => "Hello from Util"; } """); new DotnetCommand(Log, "run", "Program.cs") .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Fail() - .And.HaveStdErr($""" - {DirectiveError(programPath, 2, Resources.ExperimentalFeatureDisabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective)} - - {CliCommandStrings.RunCommandException} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .WithEnvironmentVariable(CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective, "true") - .Execute() - .Should().Fail() - .And.HaveStdErr($""" - {DirectiveError(utilPath, 1, Resources.ExperimentalFeatureDisabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableExcludeDirective)} - - {CliCommandStrings.RunCommandException} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .WithEnvironmentVariable(CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective, "true") - .WithEnvironmentVariable(CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableExcludeDirective, "true") - .Execute() - .Should().Fail() .And.HaveStdErr($""" {DirectiveError(utilPath, 1, Resources.ExperimentalFeatureDisabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives)} @@ -4783,12 +4697,10 @@ public void IncludeDirective_FeatureFlags() new DotnetCommand(Log, "run", "Program.cs") .WithWorkingDirectory(testInstance.Path) - .WithEnvironmentVariable(CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableIncludeDirective, "true") - .WithEnvironmentVariable(CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableExcludeDirective, "true") .WithEnvironmentVariable(CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives, "true") .Execute() .Should().Pass() - .And.HaveStdOut("Hello, String from Util"); + .And.HaveStdOut("Hello from Util"); } [Fact] @@ -4796,15 +4708,6 @@ public void IncludeDirective_CustomMapping() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - true - - - """); - var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" #!/usr/bin/env dotnet @@ -4859,15 +4762,6 @@ public void IncludeDirective_CustomMapping_ParseErrors() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - true - - - """); - var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, """ #:property FileBasedProgramsItemMapping=x @@ -7029,14 +6923,6 @@ public void Api_Evaluation() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - - - """); - var programPath = Path.Join(testInstance.Path, "A.cs"); File.WriteAllText(programPath, """ #:property P1=cs From a005e0404cc62e6988f5feb2e9e8eb57ee6c08e4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 10 Apr 2026 23:45:50 +0000 Subject: [PATCH 184/230] Re-enable C++/CLI and SourceLink Cpp tests (revert issue #53789 skips) Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/33b3216b-f350-432d-829d-3015575296e5 Co-authored-by: marcpopMSFT <12663534+marcpopMSFT@users.noreply.github.com> --- .../GivenThatWeWantToBuildACppCliProject.cs | 16 ++++++++-------- ...antToBuildACppCliProjectWithTransitiveDeps.cs | 6 +++--- .../Microsoft.NET.Build.Tests/SourceLinkTests.cs | 2 +- .../GivenThatWeWantToPackACppCliProject.cs | 2 +- .../GivenThatWeWantToPublishACppCliProject.cs | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs index c53de712e12c..263f48e896ab 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs @@ -13,7 +13,7 @@ public GivenThatWeWantToBuildACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void It_builds_and_runs() { var testAsset = TestAssetsManager @@ -49,7 +49,7 @@ public void It_builds_and_runs() .HaveStdOutContaining("Hello, World!"); } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void It_builds_and_runs_with_package_reference() { var targetFramework = ToolsetInfo.CurrentTargetFramework + "-windows"; @@ -84,7 +84,7 @@ public void It_builds_and_runs_with_package_reference() } } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void Given_no_restore_It_builds_cpp_project() { var testAsset = TestAssetsManager @@ -98,7 +98,7 @@ public void Given_no_restore_It_builds_cpp_project() .Pass(); } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void Given_Wpf_framework_reference_It_builds_cpp_project() { var testAsset = TestAssetsManager @@ -111,7 +111,7 @@ public void Given_Wpf_framework_reference_It_builds_cpp_project() .Pass(); } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void It_fails_with_error_message_on_EnableComHosting() { var testAsset = TestAssetsManager @@ -139,7 +139,7 @@ public void It_fails_with_error_message_on_EnableComHosting() .HaveStdOutContaining(Strings.NoSupportCppEnableComHosting); } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void It_fails_with_error_message_on_fullframework() { var testAsset = TestAssetsManager @@ -156,7 +156,7 @@ public void It_fails_with_error_message_on_fullframework() .HaveStdOutContaining(Strings.NETFrameworkWithoutUsingNETSdkDefaults); } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void It_fails_with_error_message_on_tfm_lower_than_3_1() { var testAsset = TestAssetsManager @@ -173,7 +173,7 @@ public void It_fails_with_error_message_on_tfm_lower_than_3_1() .HaveStdOutContaining(Strings.CppRequiresTFMVersion31); } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void When_run_with_selfcontained_It_fails_with_error_message() { var testAsset = TestAssetsManager diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs index 4526d366f600..51dafdb3fad8 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps.cs @@ -12,7 +12,7 @@ public GivenThatWeWantToBuildACppCliProjectWithTransitiveDeps(ITestOutputHelper private readonly Lazy _buildAsset; - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void It_can_generate_correct_depsJson_file() { TestAsset testAsset = _buildAsset.Value; @@ -23,7 +23,7 @@ public void It_can_generate_correct_depsJson_file() depsJsonContent.Should().Contain("NETCoreCppCliTestC.dll", "should contain transitive reference"); } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void It_can_generate_all_runtimeconfig_files_to_output_folder() { TestAsset testAsset = _buildAsset.Value; @@ -35,7 +35,7 @@ public void It_can_generate_all_runtimeconfig_files_to_output_folder() }); } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void It_can_generate_all_depsjson_files_to_output_folder() { TestAsset testAsset = _buildAsset.Value; diff --git a/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs b/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs index e36f89def8d0..3819bd59a63f 100644 --- a/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs +++ b/test/Microsoft.NET.Build.Tests/SourceLinkTests.cs @@ -290,7 +290,7 @@ public void SuppressImplicitGitSourceLink_ExplicitPackage(bool multitarget) } } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void Cpp() { var testAsset = TestAssetsManager diff --git a/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs b/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs index faeb2cc577bf..2399f112f2c7 100644 --- a/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs +++ b/test/Microsoft.NET.Pack.Tests/GivenThatWeWantToPackACppCliProject.cs @@ -11,7 +11,7 @@ public GivenThatWeWantToPackACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void It_cannot_pack_the_cppcliproject() { var testAsset = TestAssetsManager diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs index c459438ea90d..d2cf293bbb66 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishACppCliProject.cs @@ -11,7 +11,7 @@ public GivenThatWeWantToPublishACppCliProject(ITestOutputHelper log) : base(log) { } - [FullMSBuildOnlyFact(Skip = "https://github.com/dotnet/sdk/issues/53789")] + [FullMSBuildOnlyFact] public void When_referenced_by_csharp_project_it_publishes_and_runs() { var testAsset = TestAssetsManager From f2d612b28df6a5b23e2dc78276f0925f15b38534 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Apr 2026 23:22:29 +0000 Subject: [PATCH 185/230] Re-enable net46 InlineData test case (revert issue #53796 skip) Agent-Logs-Url: https://github.com/dotnet/sdk/sessions/6aee415a-a0d7-4924-8760-63471c8b6cac Co-authored-by: MiYanni <17788297+MiYanni@users.noreply.github.com> --- .../GivenThatWeWantToPreserveCompilationContext.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs index 390e5f34668e..e2a7bd1c6cf1 100644 --- a/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs +++ b/test/Microsoft.NET.Publish.Tests/GivenThatWeWantToPreserveCompilationContext.cs @@ -14,8 +14,7 @@ public GivenThatWeWantToPreserveCompilationContext(ITestOutputHelper log) : base } [Theory] - // Skip = "https://github.com/dotnet/sdk/issues/53796" - //[InlineData("net46", "netstandard1.3", false)] + [InlineData("net46", "netstandard1.3", false)] [InlineData("netcoreapp2.0", "netstandard2.0", false)] [InlineData("netcoreapp2.0", "netstandard2.0", true)] [InlineData("netcoreapp3.0", "netstandard2.0", false)] From b0553cbeb48ac56b75d45a3ebc54abc0c35b4271 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 22:32:52 +0000 Subject: [PATCH 186/230] Reset files to release/10.0.3xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 3 +- eng/Version.Details.props | 274 +++++++-------- eng/Version.Details.xml | 692 +++++++++++++++++++------------------- global.json | 6 +- 4 files changed, 497 insertions(+), 478 deletions(-) diff --git a/NuGet.config b/NuGet.config index 1f47b0c8efce..f3f728c95515 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,7 +4,6 @@ - @@ -39,6 +38,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 60dca63fa742..82e48abcaa25 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,142 +8,145 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.7-servicing.26216.103 - 10.0.7-servicing.26216.103 - 10.0.7-servicing.26216.103 - 10.0.7-servicing.26216.103 - 10.0.7 - 10.0.7-servicing.26216.103 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7-servicing.26216.103 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7-servicing.26216.103 - 10.0.7 - 10.0.7-servicing.26216.103 - 10.0.7-servicing.26216.103 - 10.0.0-preview.26216.103 - 10.0.7 - 10.0.7 - 18.0.11 - 18.0.11-servicing-26216-103 - 7.0.3-rc.21703 - 10.0.107 - 5.0.0-2.26216.103 - 5.0.0-2.26216.103 - 5.0.0-2.26216.103 - 5.0.0-2.26216.103 - 5.0.0-2.26216.103 - 5.0.0-2.26216.103 - 5.0.0-2.26216.103 - 10.0.0-preview.26216.103 - 5.0.0-2.26216.103 - 5.0.0-2.26216.103 - 2.0.0-preview.1.26216.103 - 2.2.7 - 10.0.0-beta.26216.103 - 10.0.0-beta.26216.103 - 10.0.0-beta.26216.103 - 10.0.0-beta.26216.103 - 10.0.0-beta.26216.103 - 10.0.0-beta.26216.103 - 10.0.7 - 10.0.7 - 10.0.7-servicing.26216.103 - 10.0.7-servicing.26216.103 - 10.0.0-beta.26216.103 - 10.0.0-beta.26216.103 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 14.0.107-servicing.26216.103 - 10.0.7 - 5.0.0-2.26216.103 - 5.0.0-2.26216.103 - 10.0.7-servicing.26216.103 - 10.0.7 - 10.0.7 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.0-preview.26216.115 + 10.0.6 + 10.0.6 + 18.6.0-preview-26216-115 + 18.6.0-preview-26216-115 + 7.6.0-rc.21715 + 10.0.300-alpha.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 10.0.0-preview.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 2.0.0-preview.1.26176.101 + 2.2.6 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.6 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6-servicing.26176.101 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 15.2.300-servicing.26216.115 + 10.0.6 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 10.0.6-servicing.26176.101 + 10.0.6 + 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26216.103 - 10.0.7-servicing.26216.103 - 18.0.2-release-26216-103 - 10.0.7 - 10.0.7-servicing.26216.103 - 10.0.107 - 10.0.107 - 10.0.107 - 10.0.107 - 10.0.107 - 10.0.107 - 10.0.107 - 10.0.107 - 10.0.107-servicing.26216.103 - 10.0.107 - 10.0.107-servicing.26216.103 - 10.0.107 - 10.0.107 - 10.0.107-servicing.26216.103 - 18.0.2-release-26216-103 - 18.0.2-release-26216-103 - 3.2.7 - 10.0.7 - 10.0.7-servicing.26216.103 - 10.0.7 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 7.0.3-rc.21703 - 10.0.7 - 2.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 - 10.0.7 + 10.0.0-preview.26216.115 + 10.0.6-servicing.26176.101 + 18.3.0-release-26216-115 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 18.3.0-release-26216-115 + 18.3.0-release-26216-115 + 3.2.6 + 10.0.6 + 10.0.6-servicing.26176.101 + 10.0.6 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 10.0.6 + 2.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 + 10.0.6 - 2.3.0-preview.26203.3 - 4.3.0-preview.26203.3 + 2.1.0-preview.25571.1 + 4.1.0-preview.25571.1 @@ -185,10 +188,12 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisCSharpCodeStylePackageVersion) $(MicrosoftCodeAnalysisCSharpFeaturesPackageVersion) $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion) $(MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion) $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) + $(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion) $(MicrosoftDeploymentDotNetReleasesPackageVersion) $(MicrosoftDiaSymReaderPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) @@ -204,6 +209,7 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetXliffTasksPackageVersion) $(MicrosoftDotNetXUnitExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) $(MicrosoftExtensionsDependencyModelPackageVersion) $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) $(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 79eb5cef3db1..5b32d0e3744e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 @@ -68,170 +68,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + 7141470de2a1582db15ae6886e361ead12efb3d8 - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/microsoft/testfx - 1ddd2f1a558e9c79b5327c5ccc0e9e89df39d4da + 43e592148ac1c7916908477bdffcf2a345affa6d - + https://github.com/microsoft/testfx - 1ddd2f1a558e9c79b5327c5ccc0e9e89df39d4da + 43e592148ac1c7916908477bdffcf2a345affa6d - - https://github.com/dotnet/dotnet - bcdf64a8780acee9d4470cbe3ff8f487cc58b137 + + https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet + 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 diff --git a/global.json b/global.json index 33719b767a81..32e5d4729716 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.106", + "dotnet": "10.0.105", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26216.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26216.103", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26216.115", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26216.115", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 8ce472075c386967adfba49688a13d2b916241c3 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Mon, 20 Apr 2026 03:12:54 +0000 Subject: [PATCH 187/230] Update dependencies from build 311020 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26216.115 -> 10.0.0-preview.26217.103) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26216-115 -> 18.6.0-preview-26217-103) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.21715 -> 7.6.0-rc.21803) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26216.115 -> 10.0.300-alpha.26217.103) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26216.115 -> 5.6.0-2.26217.103) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26216.115 -> 10.0.0-beta.26217.103) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26216.115 -> 15.2.300-servicing.26217.103) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26216-115 -> 18.3.0-release-26217-103) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26216.115 -> 10.0.300-preview.26217.103) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 82e48abcaa25..99f797e5d9ed 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-preview.26216.115 + 10.0.0-preview.26217.103 10.0.6 10.0.6 - 18.6.0-preview-26216-115 - 18.6.0-preview-26216-115 - 7.6.0-rc.21715 - 10.0.300-alpha.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 10.0.0-preview.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 + 18.6.0-preview-26217-103 + 18.6.0-preview-26217-103 + 7.6.0-rc.21803 + 10.0.300-alpha.26217.103 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 + 10.0.0-preview.26217.103 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 2.0.0-preview.1.26176.101 2.2.6 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 + 10.0.0-beta.26217.103 + 10.0.0-beta.26217.103 + 10.0.0-beta.26217.103 + 10.0.0-beta.26217.103 + 10.0.0-beta.26217.103 + 10.0.0-beta.26217.103 10.0.6 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 + 10.0.0-beta.26217.103 + 10.0.0-beta.26217.103 10.0.6 10.0.6 10.0.6 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 15.2.300-servicing.26216.115 + 15.2.300-servicing.26217.103 10.0.6 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 + 5.6.0-2.26217.103 + 5.6.0-2.26217.103 10.0.6-servicing.26176.101 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26216.115 + 10.0.0-preview.26217.103 10.0.6-servicing.26176.101 - 18.3.0-release-26216-115 + 18.3.0-release-26217-103 10.0.6 10.0.6-servicing.26176.101 - 10.0.300-alpha.26216.115 - 10.0.300-alpha.26216.115 - 10.0.300-alpha.26216.115 - 10.0.300-alpha.26216.115 - 10.0.300-alpha.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 18.3.0-release-26216-115 - 18.3.0-release-26216-115 + 10.0.300-alpha.26217.103 + 10.0.300-alpha.26217.103 + 10.0.300-alpha.26217.103 + 10.0.300-alpha.26217.103 + 10.0.300-alpha.26217.103 + 10.0.300-preview.26217.103 + 10.0.300-preview.26217.103 + 10.0.300-preview.26217.103 + 10.0.300-preview.26217.103 + 10.0.300-preview.26217.103 + 10.0.300-preview.26217.103 + 10.0.300-preview.26217.103 + 10.0.300-preview.26217.103 + 10.0.300-preview.26217.103 + 18.3.0-release-26217-103 + 18.3.0-release-26217-103 3.2.6 10.0.6 10.0.6-servicing.26176.101 10.0.6 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 + 7.6.0-rc.21803 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 5b32d0e3744e..030099280eaa 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + e30a7bd50de5c85da94a3ef0d5718bacb59d4423 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 32e5d4729716..2153ce93b9a5 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26216.115", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26216.115", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26217.103", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26217.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 17056f1d7634ace0395886c79bc67dc427f85555 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Mon, 20 Apr 2026 05:20:46 +0000 Subject: [PATCH 188/230] Update dependencies from build 311030 Updated Dependencies: Microsoft.AspNetCore.Mvc.Razor.Extensions.Tooling.Internal, Microsoft.CodeAnalysis.Razor.Tooling.Internal, Microsoft.NET.Sdk.Razor.SourceGenerators.Transport (Version 10.0.0-preview.26216.115 -> 10.0.0-preview.26217.116) Microsoft.Build, Microsoft.Build.Localization (Version 18.6.0-preview-26216-115 -> 18.6.0-preview-26217-116) Microsoft.Build.NuGetSdkResolver, NuGet.Build.Tasks, NuGet.Build.Tasks.Console, NuGet.Build.Tasks.Pack, NuGet.CommandLine.XPlat, NuGet.Commands, NuGet.Common, NuGet.Configuration, NuGet.Credentials, NuGet.DependencyResolver.Core, NuGet.Frameworks, NuGet.LibraryModel, NuGet.Localization, NuGet.Packaging, NuGet.ProjectModel, NuGet.Protocol, NuGet.Versioning (Version 7.6.0-rc.21715 -> 7.7.0-rc.21816) Microsoft.Build.Tasks.Git, Microsoft.SourceLink.AzureRepos.Git, Microsoft.SourceLink.Bitbucket.Git, Microsoft.SourceLink.Common, Microsoft.SourceLink.GitHub, Microsoft.SourceLink.GitLab (Version 10.0.300-alpha.26216.115 -> 10.0.300-alpha.26217.116) Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.BuildClient, Microsoft.CodeAnalysis.CSharp, Microsoft.CodeAnalysis.CSharp.CodeStyle, Microsoft.CodeAnalysis.CSharp.Features, Microsoft.CodeAnalysis.CSharp.Workspaces, Microsoft.CodeAnalysis.ExternalAccess.HotReload, Microsoft.CodeAnalysis.PublicApiAnalyzers, Microsoft.CodeAnalysis.Workspaces.Common, Microsoft.CodeAnalysis.Workspaces.MSBuild, Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost, Microsoft.Net.Compilers.Toolset, Microsoft.Net.Compilers.Toolset.Framework (Version 5.6.0-2.26216.115 -> 5.6.0-2.26217.116) Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.SignTool, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.26216.115 -> 10.0.0-beta.26217.116) Microsoft.FSharp.Compiler (Version 15.2.300-servicing.26216.115 -> 15.2.300-servicing.26217.116) Microsoft.NET.Test.Sdk, Microsoft.TestPlatform.Build, Microsoft.TestPlatform.CLI (Version 18.3.0-release-26216-115 -> 18.3.0-release-26217-116) Microsoft.TemplateEngine.Abstractions, Microsoft.TemplateEngine.Authoring.TemplateVerifier, Microsoft.TemplateEngine.Edge, Microsoft.TemplateEngine.Mocks, Microsoft.TemplateEngine.Orchestrator.RunnableProjects, Microsoft.TemplateEngine.TestHelper, Microsoft.TemplateEngine.Utils, Microsoft.TemplateSearch.Common, Microsoft.TemplateSearch.TemplateDiscovery (Version 10.0.300-preview.26216.115 -> 10.0.300-preview.26217.116) [[ commit created by automation ]] --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 82e48abcaa25..128c7cf73046 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-preview.26216.115 + 10.0.0-preview.26217.116 10.0.6 10.0.6 - 18.6.0-preview-26216-115 - 18.6.0-preview-26216-115 - 7.6.0-rc.21715 - 10.0.300-alpha.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 10.0.0-preview.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 + 18.6.0-preview-26217-116 + 18.6.0-preview-26217-116 + 7.7.0-rc.21816 + 10.0.300-alpha.26217.116 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 + 10.0.0-preview.26217.116 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 2.0.0-preview.1.26176.101 2.2.6 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 + 10.0.0-beta.26217.116 + 10.0.0-beta.26217.116 + 10.0.0-beta.26217.116 + 10.0.0-beta.26217.116 + 10.0.0-beta.26217.116 + 10.0.0-beta.26217.116 10.0.6 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-beta.26216.115 - 10.0.0-beta.26216.115 + 10.0.0-beta.26217.116 + 10.0.0-beta.26217.116 10.0.6 10.0.6 10.0.6 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 15.2.300-servicing.26216.115 + 15.2.300-servicing.26217.116 10.0.6 - 5.6.0-2.26216.115 - 5.6.0-2.26216.115 + 5.6.0-2.26217.116 + 5.6.0-2.26217.116 10.0.6-servicing.26176.101 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26216.115 + 10.0.0-preview.26217.116 10.0.6-servicing.26176.101 - 18.3.0-release-26216-115 + 18.3.0-release-26217-116 10.0.6 10.0.6-servicing.26176.101 - 10.0.300-alpha.26216.115 - 10.0.300-alpha.26216.115 - 10.0.300-alpha.26216.115 - 10.0.300-alpha.26216.115 - 10.0.300-alpha.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 10.0.300-preview.26216.115 - 18.3.0-release-26216-115 - 18.3.0-release-26216-115 + 10.0.300-alpha.26217.116 + 10.0.300-alpha.26217.116 + 10.0.300-alpha.26217.116 + 10.0.300-alpha.26217.116 + 10.0.300-alpha.26217.116 + 10.0.300-preview.26217.116 + 10.0.300-preview.26217.116 + 10.0.300-preview.26217.116 + 10.0.300-preview.26217.116 + 10.0.300-preview.26217.116 + 10.0.300-preview.26217.116 + 10.0.300-preview.26217.116 + 10.0.300-preview.26217.116 + 10.0.300-preview.26217.116 + 18.3.0-release-26217-116 + 18.3.0-release-26217-116 3.2.6 10.0.6 10.0.6-servicing.26176.101 10.0.6 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 - 7.6.0-rc.21715 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 + 7.7.0-rc.21816 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 5b32d0e3744e..b868dd4ad279 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 - + https://github.com/dotnet/dotnet - 7141470de2a1582db15ae6886e361ead12efb3d8 + 5b150b1d949d9509e9822fa44fd52923d1d162e5 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 32e5d4729716..4779305f43e6 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26216.115", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26216.115", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26217.116", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26217.116", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 4c2c4e14329c2ee332fb5d6e03680039419744b5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 05:44:47 +0000 Subject: [PATCH 189/230] Reset files to release/10.0.4xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 99f797e5d9ed..82e48abcaa25 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-preview.26217.103 + 10.0.0-preview.26216.115 10.0.6 10.0.6 - 18.6.0-preview-26217-103 - 18.6.0-preview-26217-103 - 7.6.0-rc.21803 - 10.0.300-alpha.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 10.0.0-preview.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 + 18.6.0-preview-26216-115 + 18.6.0-preview-26216-115 + 7.6.0-rc.21715 + 10.0.300-alpha.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 10.0.0-preview.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 2.0.0-preview.1.26176.101 2.2.6 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 10.0.6 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 10.0.6 10.0.6 10.0.6 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 15.2.300-servicing.26217.103 + 15.2.300-servicing.26216.115 10.0.6 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 10.0.6-servicing.26176.101 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26217.103 + 10.0.0-preview.26216.115 10.0.6-servicing.26176.101 - 18.3.0-release-26217-103 + 18.3.0-release-26216-115 10.0.6 10.0.6-servicing.26176.101 - 10.0.300-alpha.26217.103 - 10.0.300-alpha.26217.103 - 10.0.300-alpha.26217.103 - 10.0.300-alpha.26217.103 - 10.0.300-alpha.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 18.3.0-release-26217-103 - 18.3.0-release-26217-103 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 18.3.0-release-26216-115 + 18.3.0-release-26216-115 3.2.6 10.0.6 10.0.6-servicing.26176.101 10.0.6 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 030099280eaa..5b32d0e3744e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 2153ce93b9a5..32e5d4729716 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26217.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26217.103", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26216.115", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26216.115", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From e17bbd59996a18ba4ec810b35f3c25ee5572c28a Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Mon, 20 Apr 2026 08:36:50 +0200 Subject: [PATCH 190/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2955435 --- src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf | 8 ++++---- src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf | 8 ++++---- src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf | 8 ++++---- src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf | 8 ++++---- src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf | 8 ++++---- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf | 8 ++++---- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf | 8 ++++---- src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf | 8 ++++---- .../dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf | 8 ++++---- src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf | 8 ++++---- .../dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf | 8 ++++---- .../dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf | 10 +++++----- 12 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf index e07f0214c790..58fe26ffcca6 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.cs.xlf @@ -1500,12 +1500,12 @@ Cílem projektu je více architektur. Pomocí parametru {0} určete, která arch Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Upozornění: {0} vypadá jako souborová aplikace, ale soubor nebyl nalezen a byl předán jako argument projektu {1}. Pokud ho chcete předat jako argument aplikace, použijte dotnet run -- {0}, čímž toto upozornění potlačíte. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Upozornění: {0} vypadá jako souborová aplikace, ale byl předán jako argument projektu {1}. Pokud ho chcete spustit jako souborovou aplikaci, použijte příkaz dotnet run --file {0}. Pokud ho chcete předat jako argument aplikace, použijte dotnet run -- {0}, čímž toto upozornění potlačíte. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ příkazu „dotnet tool list“. Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Upozornění: {0} vypadá jako souborová aplikace, ale soubor nebyl nalezen a byl považován za argument MSBuild. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Upozornění: {0} vypadá jako souborová aplikace, ale bylo s ní zacházeno jako s argumentem MSBuild. Pokud ji chcete považovat za souborovou aplikaci, použijte dotnet {1} {0}. {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf index 18a5eeff1d7d..9900e1504395 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.de.xlf @@ -1500,12 +1500,12 @@ Ihr Projekt verwendet mehrere Zielframeworks. Geben Sie über "{0}" an, welches Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warnung: „{0}“ sieht wie eine dateibasierte App aus, aber die Datei wurde nicht gefunden und als Argument an das Projekt „{1}“ übergeben. Um es als Anwendungsargument zu übergeben, verwenden Sie „dotnet run -- {0}“, um diese Warnung zu unterdrücken. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Warnung: „{0}“ scheint eine dateibasierte App zu sein, wurde aber als Argument an das Projekt „{1}“ übergeben. Um sie als dateibasierte App auszuführen, verwenden Sie „dotnet run --file {0}“. Um es als Anwendungsargument zu übergeben, verwenden Sie „dotnet run -- {0}“, um diese Warnung zu unterdrücken. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ und die zugehörigen Paket-IDs für installierte Tools über den Befehl Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Warnung: „{0}“ sieht wie eine dateibasierte App aus, aber die Datei wurde nicht gefunden und als MSBuild-Argument behandelt. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Warnung: „{0}“ scheint eine dateibasierte App zu sein, wurde aber als MSBuild-Argument behandelt. Verwenden Sie „dotnet {1} {0}“, um sie als dateibasierte App zu behandeln. {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf index 61cf2fafbf85..b174c111c0ae 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.es.xlf @@ -1500,12 +1500,12 @@ Su proyecto tiene como destino varias plataformas. Especifique la que quiere usa Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Advertencia: "{0}" parece una aplicación basada en archivos, pero no se encontró el archivo y se pasó como argumento al proyecto "{1}". Para pasarlo como argumento de aplicación, use "dotnet run -- {0}" para suprimir esta advertencia. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Advertencia: "{0}" parece ser una aplicación basada en archivos, pero se pasó como argumento al proyecto "{1}". Para ejecutarla como una aplicación basada en archivos, use "dotnet run --file {0}". Para pasarlo como argumento de aplicación, use "dotnet run -- {0}" para suprimir esta advertencia. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ y los identificadores de los paquetes correspondientes a las herramientas instal Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Advertencia: "{0}" parece una aplicación basada en archivos, pero no se encontró el archivo y se trató como un argumento de MSBuild. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Advertencia: "{0}" parece ser una aplicación basada en archivos, pero se trató como un argumento de MSBuild. Para tratarla como una aplicación basada en archivos, use "dotnet {1}{0}". {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf index d59257a44347..f71d532d903e 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.fr.xlf @@ -1500,12 +1500,12 @@ Votre projet cible plusieurs frameworks. Spécifiez le framework à exécuter à Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Avertissement : « {0} » ressemble à une application basée sur un fichier, mais le fichier est introuvable et il a été passé en tant qu’argument au projet « {1} ». Pour le passer en tant qu’argument d’application, utilisez « dotnet run -- {0} » afin de supprimer cet avertissement. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Avertissement : « {0} » semble être une application basée sur un fichier, mais elle a été transmise en tant qu’argument au projet « {1} ». Pour l’exécuter en tant qu’application basée sur un fichier, utilisez « dotnet run --file {0} ». Pour le passer en tant qu’argument d’application, utilisez « dotnet run -- {0} » afin de supprimer cet avertissement. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ et les ID de package correspondants aux outils installés, utilisez la commande Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Avertissement : « {0} » ressemble à une application basée sur un fichier, mais le fichier est introuvable et il a été traité en tant qu’argument MSBuild. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Avertissement : « {0} » semble être une application basée sur un fichier, mais a été traitée comme un argument MSBuild. Pour la traiter comme une application basée sur un fichier, utilisez « dotnet {1} {0} ». {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf index 4ffd173f2e8b..23fc7c610107 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.it.xlf @@ -1500,12 +1500,12 @@ Il progetto è destinato a più framework. Specificare il framework da eseguire Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Avviso: '{0}' sembra un'app basata su file, ma il file non è stato trovato ed è stato passato come argomento al progetto '{1}'. Per passarla come argomento dell'app, usare 'dotnet run -- {0}' per eliminare l'avviso. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Avviso: '{0}' sembra un'app basata su file, ma è stata passata come argomento al progetto '{1}'. Per eseguirla come app basata su file, usare 'dotnet run --file {0}'. Per passarla come argomento dell'app, usare 'dotnet run -- {0}' per eliminare l'avviso. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ e gli ID pacchetto corrispondenti per gli strumenti installati usando il comando Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Avviso: '{0}' sembra un'app basata su file, ma il file non è stato trovato ed è stata considerata come argomento di MSBuild. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Avviso: '{0}' sembra un'app basata su file, ma è stata considerata come argomento di MSBuild. Per considerarla come app basata su file, usare 'dotnet {1} {0}'. {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf index e1255a3658c2..ac112d3422b3 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ja.xlf @@ -1500,12 +1500,12 @@ Your project targets multiple frameworks. Specify which framework to run using ' Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + 警告: '{0}' はファイルベースのアプリのように見えますが、ファイルが見つからず、プロジェクト '{1}' の引数として渡されました。アプリケーション引数として渡すには、'dotnet run -- {0}' を使用してこの警告を抑制してください。 {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + 警告: '{0}' はファイルベースのアプリのように見えますが、プロジェクト '{1}' への引数として渡されました。ファイルベースのアプリとして実行するには、'dotnet run --file {0}' を使用してください。アプリケーション引数として渡すには、'dotnet run -- {0}' を使用してこの警告を抑制してください。 {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ and the corresponding package Ids for installed tools using the command Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + 警告: '{0}' はファイルベースのアプリのように見えますが、ファイルが見つからず、MSBuild 引数として扱われました。 {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + 警告: '{0}' はファイルベースのアプリのように見えますが、MSBuild 引数として扱われました。ファイルベースのアプリとして扱うには、'dotnet {1} {0}' を使用してください。 {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf index 6ae7735085da..481689db5794 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ko.xlf @@ -1500,12 +1500,12 @@ Your project targets multiple frameworks. Specify which framework to run using ' Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + 경고: '{0}'은(는) 파일 기반 앱처럼 보이지만 파일을 찾을 수 없으며 프로젝트 '{1}'에 인수로 전달되었습니다. 응용 프로그램 인수로 전달하려면 'dotnet run -- {0}'을(를) 사용해 이 경고를 표시하지 않도록 설정하세요. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + 경고: '{0}'은(는) 파일 기반 앱으로 보이지만 프로젝트 '{1}'에 인수로 전달되었습니다. 파일 기반 앱으로 실행하려면 'dotnet run --file {0}'을(를) 사용하세요. 응용 프로그램 인수로 전달하려면 'dotnet run -- {0}'을(를) 사용해 이 경고를 표시하지 않도록 설정하세요. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ and the corresponding package Ids for installed tools using the command Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + 경고: '{0}'은(는) 파일 기반 앱으로 보이지만 파일을 찾을 수 없으며 MSBuild 인수로 처리되었습니다. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + 경고: '{0}'은(는) 파일 기반 앱으로 보이지만 MSBuild 인수로 처리되었습니다. 파일 기반 앱으로 실행하려면 'dotnet {1} {0}'을 사용하세요. {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf index 75795f96f4bf..a9ae42d9cd7b 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pl.xlf @@ -1500,12 +1500,12 @@ Projekt ma wiele platform docelowych. Określ platformę do uruchomienia przy u Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Ostrzeżenie: „{0}” wygląda jak aplikacja oparta na plikach, ale plik nie został znaleziony, i został przekazana jako argument do projektu „{1}”. Aby przekazać go jako argument aplikacji, użyj polecenia „dotnet run -- {0}”, aby pominąć to ostrzeżenie. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Ostrzeżenie: „{0}” wydaje się być aplikacją opartą na plikach, ale została przekazana jako argument do projektu „{1}”. Aby uruchomić ją jako aplikację opartą na plikach, użyj polecenia „dotnet run --file {0}”. Aby przekazać go jako argument aplikacji, użyj polecenia „dotnet run -- {0}”, aby pominąć to ostrzeżenie. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ i odpowiednie identyfikatory pakietów zainstalowanych narzędzi można znaleź Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Ostrzeżenie: „{0}” wygląda jak aplikacja oparta na plikach, ale plik nie został znaleziony, i była traktowana jako argument MSBuild. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Ostrzeżenie: „{0}” wydaje się być aplikacją opartą na plikach, ale była traktowana jako argument MSBuild. Aby traktować ją jako aplikację opartą na plikach, użyj polecenia „dotnet {1}{0}”. {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf index 6c0de7f3dfea..59bb956ae6a9 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.pt-BR.xlf @@ -1500,12 +1500,12 @@ Ele tem diversas estruturas como destino. Especifique que estrutura executar usa Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Aviso: '{0}' parece um aplicativo baseado em arquivo, mas o arquivo não foi encontrado e foi passado como um argumento para o projeto '{1}'. Para passá-lo como um argumento de aplicativo, use 'dotnet run -- {0}' para suprimir esse aviso. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Aviso: '{0}' parece ser um aplicativo baseado em arquivo, mas foi passado como um argumento para o projeto '{1}'. Para executar como um aplicativo baseado em arquivo, use 'dotnet run --file {0}'. Para passá-lo como um argumento de aplicativo, use 'dotnet run -- {0}' para suprimir esse aviso. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ e as Ids de pacote correspondentes para as ferramentas instaladas usando o coman Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Aviso: '{0}' parece um aplicativo baseado em arquivo, mas o arquivo não foi encontrado e foi tratado como um argumento do MSBuild. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Aviso: '{0}' parece ser um aplicativo baseado em arquivo, mas foi tratado como um argumento do MSBuild. Para tratá-lo como um aplicativo baseado em arquivo, use 'dotnet {1}{0}'. {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf index af8d83fda6fa..d05d064409cb 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.ru.xlf @@ -1500,12 +1500,12 @@ Your project targets multiple frameworks. Specify which framework to run using ' Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Предупреждение: "{0}" выглядит как файловое приложение, но файл не найден. Оно было передано в качестве аргумента проекту "{1}". Чтобы передать его как аргумент приложения, используйте "dotnet run -- {0}" для подавления этого предупреждения. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Предупреждение: "{0}" выглядит как файловое приложение, но было передано в качестве аргумента проекту "{1}". Чтобы запустить его как файловое приложение, используйте "dotnet run --file {0}". Чтобы передать его как аргумент приложения, используйте "dotnet run -- {0}" для подавления этого предупреждения. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2082,12 +2082,12 @@ and the corresponding package Ids for installed tools using the command Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Предупреждение: "{0}" выглядит как файловое приложение, но файл не найден. Оно было обработано как аргумент MSBuild. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Предупреждение: "{0}" выглядит как файловое приложение, но было обработано как аргумент MSBuild. Чтобы обработать его как файловое приложение, используйте "dotnet {1} {0}". {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf index 443e3fb2b543..afedbb8b8a4d 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hans.xlf @@ -1500,12 +1500,12 @@ Your project targets multiple frameworks. Specify which framework to run using ' Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + 警告:“{0}”似乎是一个基于文件的应用,但找不到该文件,并且它已作为参数传递给项目“{1}”。要将其作为应用程序参数传递,请使用“dotnet run -- {0}”来抑制此警告。 {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + 警告:“{0}”似乎是一个基于文件的应用,但已作为参数传递给项目“{1}”。要将其作为基于文件的应用运行,请使用“dotnet run --file {0}”。要将其作为应用程序参数传递,请使用“dotnet run -- {0}”来抑制此警告。 {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ and the corresponding package Ids for installed tools using the command Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + 警告:“{0}”似乎是基于文件的应用,但找不到该文件,并且它被视为 MSBuild 参数。 {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + 警告:“{0}”似乎是一个基于文件的应用,但被视为 MSBuild 参数。要将其视为基于文件的应用,请使用“dotnet {1} {0}”。 {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf index 76e4c11c4e0f..45d626f1c015 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.zh-Hant.xlf @@ -1258,7 +1258,7 @@ Tool '{1}' (version '{2}') was successfully installed. Entry is added to the man Multiple referenced files would be converted into the same directory: '{0}' - Multiple referenced files would be converted into the same directory: '{0}' + 多個參照的檔案將會轉換到相同的目錄: '{0}' {0} is the target directory path. @@ -1500,12 +1500,12 @@ Your project targets multiple frameworks. Specify which framework to run using ' Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + 警告: '{0}' 看起來像檔案型應用程式,但找不到檔案,且是以引數形式傳遞至專案 '{1}'。若要以應用程式引數形式傳遞它,請使用 'dotnet run -- {0}' 來抑制此警告。 {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + 警告: '{0}' 似乎是檔案型應用程式,但它是以引數形式傳遞至專案 '{1}'。若要以檔案型應用程式執行它,請使用 'dotnet run --file {0}'。若要以應用程式引數形式傳遞它,請使用 'dotnet run -- {0}' 來抑制此警告。 {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ and the corresponding package Ids for installed tools using the command Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + 警告: '{0}' 看起來像檔案型應用程式,但找不到檔案,且將其視為 MSBuild 引數。 {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + 警告: '{0}' 似乎是檔案型應用程式,但被視為 MSBuild 引數。若要將它視為檔案型應用程式,請使用 'dotnet {1} {0}'。 {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} From 9f7836b65d3942ded9421b2d957f659e6e7ed779 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Mon, 20 Apr 2026 08:40:59 +0200 Subject: [PATCH 191/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2955435 --- .../xlf/FileBasedProgramsResources.zh-Hant.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf index 7d2c81a0428d..a6aa49ad64fd 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/xlf/FileBasedProgramsResources.zh-Hant.xlf @@ -64,7 +64,7 @@ The '#:ref' directive is invalid: {0} - The '#:ref' directive is invalid: {0} + '#:ref' 指示詞無效: {0} {Locked="#:ref"}{0} is the inner error message. From c1eb8baef4b8bc57f10725299e5a770621935996 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Mon, 20 Apr 2026 14:58:44 +0200 Subject: [PATCH 192/230] Update sarif files to 10.0.400 --- .../src/Microsoft.CodeAnalysis.NetAnalyzers.sarif | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif index b2710e8f8fbd..3896133aaa7b 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/src/Microsoft.CodeAnalysis.NetAnalyzers.sarif @@ -5,7 +5,7 @@ { "tool": { "name": "Microsoft.CodeAnalysis.CSharp.NetAnalyzers", - "version": "10.0.300", + "version": "10.0.400", "language": "en-US" }, "rules": { @@ -727,7 +727,7 @@ { "tool": { "name": "Microsoft.CodeAnalysis.NetAnalyzers", - "version": "10.0.300", + "version": "10.0.400", "language": "en-US" }, "rules": { @@ -6522,7 +6522,7 @@ { "tool": { "name": "Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers", - "version": "10.0.300", + "version": "10.0.400", "language": "en-US" }, "rules": { From e6731e641fa133ee7d7c7e56d37de07ce6877ce7 Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Mon, 20 Apr 2026 10:52:53 -0500 Subject: [PATCH 193/230] Fix CS0103: Add missing using for CommandLoggingContext (#53996) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs index 1befbb89c992..91e58c83c1e0 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs @@ -5,6 +5,7 @@ using Microsoft.Build.Logging.StructuredLogger; using Microsoft.DotNet.Cli.Commands; using Microsoft.DotNet.Cli.Commands.Run; +using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.FileBasedPrograms; using Microsoft.DotNet.ProjectTools; using Xunit.Sdk; From 228215093690aa0a2ededece5325262139e459b8 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Mon, 20 Apr 2026 10:02:42 -0700 Subject: [PATCH 194/230] Fix the lock conditional --- .../add-tactics-template-on-comment.lock.yml | 26 +++++++++---------- .../add-tactics-template-on-comment.md | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/add-tactics-template-on-comment.lock.yml b/.github/workflows/add-tactics-template-on-comment.lock.yml index 18fe94a39063..02a0d94bfeff 100644 --- a/.github/workflows/add-tactics-template-on-comment.lock.yml +++ b/.github/workflows/add-tactics-template-on-comment.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"564589df884c703a182365f755b25f31ba504cd7c605643f8ecbbdab81114460","compiler_version":"v0.68.3","strict":true,"agent_id":"copilot"} +# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"36fd040281b4bf04fd61ce436695dc4ad23cff6ec9e36f5ebbaa259c5921daed","compiler_version":"v0.68.3","strict":true,"agent_id":"copilot"} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","COPILOT_PAT_0","COPILOT_PAT_1","COPILOT_PAT_2","COPILOT_PAT_3","COPILOT_PAT_4","COPILOT_PAT_5","COPILOT_PAT_6","COPILOT_PAT_7","COPILOT_PAT_8","COPILOT_PAT_9","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"373c709c69115d41ff229c7e5df9f8788daa9553","version":"v9"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"ba90f2186d7ad780ec640f364005fa24e797b360","version":"v0.68.3"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.20"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.20"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.2.19"},{"image":"ghcr.io/github/github-mcp-server:v0.32.0"},{"image":"node:lts-alpine"}]} # ___ _ _ # / _ \ | | (_) @@ -93,7 +93,7 @@ run-name: "Add Tactics Template On Comment" jobs: activation: needs: pre_activation - if: needs.pre_activation.outputs.activated == 'true' && (!github.event.repository.fork) + if: needs.pre_activation.outputs.activated == 'true' && (github.event.repository.fork == false) runs-on: ubuntu-slim permissions: actions: read @@ -223,14 +223,14 @@ jobs: run: | bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh" { - cat << 'GH_AW_PROMPT_f6f938f72b13ef46_EOF' + cat << 'GH_AW_PROMPT_4ba01523648299ab_EOF' - GH_AW_PROMPT_f6f938f72b13ef46_EOF + GH_AW_PROMPT_4ba01523648299ab_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md" cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md" cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md" cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md" - cat << 'GH_AW_PROMPT_f6f938f72b13ef46_EOF' + cat << 'GH_AW_PROMPT_4ba01523648299ab_EOF' Tools: update_pull_request, missing_tool, missing_data, noop @@ -262,15 +262,15 @@ jobs: {{/if}} - GH_AW_PROMPT_f6f938f72b13ef46_EOF + GH_AW_PROMPT_4ba01523648299ab_EOF cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md" if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md" fi - cat << 'GH_AW_PROMPT_f6f938f72b13ef46_EOF' + cat << 'GH_AW_PROMPT_4ba01523648299ab_EOF' {{#runtime-import .github/workflows/add-tactics-template-on-comment.md}} - GH_AW_PROMPT_f6f938f72b13ef46_EOF + GH_AW_PROMPT_4ba01523648299ab_EOF } > "$GH_AW_PROMPT" - name: Interpolate variables and render templates uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9 @@ -452,9 +452,9 @@ jobs: mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs" mkdir -p /tmp/gh-aw/safeoutputs mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs - cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_a35a68747714d5fa_EOF' + cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_0bc3e8469dd3293c_EOF' {"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{},"update_pull_request":{"allow_body":true,"allow_title":false,"footer":false,"max":1,"target":"${{ github.event.issue.number }}"}} - GH_AW_SAFE_OUTPUTS_CONFIG_a35a68747714d5fa_EOF + GH_AW_SAFE_OUTPUTS_CONFIG_0bc3e8469dd3293c_EOF - name: Write Safe Outputs Tools env: GH_AW_TOOLS_META_JSON: | @@ -650,7 +650,7 @@ jobs: export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.2.19' mkdir -p /home/runner/.copilot - cat << GH_AW_MCP_CONFIG_8a7e716d8ff165b0_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh" + cat << GH_AW_MCP_CONFIG_43d5126e1ec9dd03_EOF | bash "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.sh" { "mcpServers": { "github": { @@ -691,7 +691,7 @@ jobs: "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" } } - GH_AW_MCP_CONFIG_8a7e716d8ff165b0_EOF + GH_AW_MCP_CONFIG_43d5126e1ec9dd03_EOF - name: Download activation artifact uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: @@ -1182,7 +1182,7 @@ jobs: await main(); pre_activation: - if: !github.event.repository.fork + if: github.event.repository.fork == false runs-on: ubuntu-slim outputs: activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }} diff --git a/.github/workflows/add-tactics-template-on-comment.md b/.github/workflows/add-tactics-template-on-comment.md index a40b4137eb8b..185773848957 100644 --- a/.github/workflows/add-tactics-template-on-comment.md +++ b/.github/workflows/add-tactics-template-on-comment.md @@ -15,7 +15,7 @@ safe-outputs: target: "${{ github.event.issue.number }}" noop: report-as-issue: false -if: "!github.event.repository.fork" +if: "github.event.repository.fork == false" on: slash_command: name: tactics From 35a63bbd2c9265c850cfe0f4c0321afc4d1b9ff1 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Fri, 17 Apr 2026 11:43:53 -0700 Subject: [PATCH 195/230] Update implicit versions for 80, 90, and 100 for April releases --- eng/Versions.props | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 3e37a6104252..e5788e235ed0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -34,9 +34,9 @@ 36 20 - 25 - 14 - 5 + 26 + 15 + 6 <_NET70ILLinkPackVersion>7.0.100-1.23211.1 From dc458ab5c1cd4dbb380b819a89961388da29ec24 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 21 Apr 2026 08:44:39 -0500 Subject: [PATCH 196/230] [dotnet-watch] Clear WebSocket env vars in ClearHotReloadEnvironmentVariables (#53999) I just noticed this reading the code -- not sure if it actually causes a problem, but should probably be fixed. `ClearHotReloadEnvironmentVariables` already clears the named pipe env var ($DOTNET_WATCH_HOTRELOAD_NAMEDPIPE_NAME) but does not clear the WebSocket equivalents ($DOTNET_WATCH_HOTRELOAD_WEBSOCKET_ENDPOINT and $DOTNET_WATCH_HOTRELOAD_WEBSOCKET_KEY). Fix parity so WebSocket env vars are also cleared for child processes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Dotnet.Watch/HotReloadAgent/HotReloadAgent.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Dotnet.Watch/HotReloadAgent/HotReloadAgent.cs b/src/Dotnet.Watch/HotReloadAgent/HotReloadAgent.cs index 61af429cfd25..3cc8e36cd88f 100644 --- a/src/Dotnet.Watch/HotReloadAgent/HotReloadAgent.cs +++ b/src/Dotnet.Watch/HotReloadAgent/HotReloadAgent.cs @@ -305,6 +305,8 @@ public static void ClearHotReloadEnvironmentVariables(Type startupHookType) } Environment.SetEnvironmentVariable(AgentEnvironmentVariables.DotNetWatchHotReloadNamedPipeName, null); + Environment.SetEnvironmentVariable(AgentEnvironmentVariables.DotNetWatchHotReloadWebSocketEndpoint, null); + Environment.SetEnvironmentVariable(AgentEnvironmentVariables.DotNetWatchHotReloadWebSocketKey, null); Environment.SetEnvironmentVariable(AgentEnvironmentVariables.HotReloadDeltaClientLogMessages, null); } From 946cb7a3bd5cbd1a31e1e8718d4e3e64f2ea4956 Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Tue, 21 Apr 2026 09:39:00 -0500 Subject: [PATCH 197/230] Update format integration tests to .NET 10.0 GA and fix solution discovery (#53965) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/dotnet-format/dotnet-format-integration.yml | 16 +++++++++------- eng/dotnet-format/format-verifier.ps1 | 10 +++++++++- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/eng/dotnet-format/dotnet-format-integration.yml b/eng/dotnet-format/dotnet-format-integration.yml index 26ecd59edc46..8df9e7fe7b05 100644 --- a/eng/dotnet-format/dotnet-format-integration.yml +++ b/eng/dotnet-format/dotnet-format-integration.yml @@ -8,19 +8,21 @@ parameters: - name: TestArguments type: object default: + # Commit SHAs align with the .NET 10.0 GA release (v10.0.100). + # See https://github.com/dotnet/dotnet/blob/v10.0.100/src/source-manifest.json - Name: Roslyn _repo: "https://github.com/dotnet/roslyn" _repoName: "dotnet/roslyn" _targetSolution: "Compilers.slnf" _branchName: "main" - _sha: "a3bb37003aeccad012a6e7dd220977599e8b8e65" + _sha: "739dc0e352a331e8a41cd66c09d2edf359255365" _useParentSdk: 0 - Name: sdk _repo: "https://github.com/dotnet/sdk" _repoName: "dotnet/sdk" _targetSolution: "sdk.slnx" _branchName: "main" - _sha: "be25db95c376bffd508a023399ddd34392fe6458" + _sha: "e6bc966cc3d1348265b0831c6daca23267169d8f" _useParentSdk: 0 - Name: project_system _repo: "https://github.com/dotnet/project-system" @@ -34,21 +36,21 @@ parameters: _repoName: "dotnet/msbuild" _targetSolution: "MSBuild.sln" _branchName: "main" - _sha: "f4fa6bde775a3f7cbb2bb90a349ee5fc759114f3" + _sha: "995a3dce41788caebf2b8ca6602a7431f08bfd06" _useParentSdk: 0 - Name: aspnetcore _repo: "https://github.com/dotnet/aspnetcore" _repoName: "dotnet/aspnetcore" - _targetSolution: "AspNetCore.sln" + _targetSolution: "AspNetCore.slnx" _branchName: "main" - _sha: "d765d7ba4871a8c2cb38d4134553d3be9a7370d7" + _sha: "7387de91234d3ef751fa50b3d1bfede4130213ff" _useParentSdk: 0 - Name: efcore _repo: "https://github.com/dotnet/efcore" _repoName: "dotnet/efcore" - _targetSolution: "All.sln" + _targetSolution: "EFCore.sln" _branchName: "main" - _sha: "1b2ff365399ab6736a9ea4c98ab1b60acda5d917" + _sha: "12b8d44bf691d2e6933a6d1003647cce4f13c3d3" _useParentSdk: 0 - name: timeoutInMinutes diff --git a/eng/dotnet-format/format-verifier.ps1 b/eng/dotnet-format/format-verifier.ps1 index eba185f3188c..c165a5dd7f22 100644 --- a/eng/dotnet-format/format-verifier.ps1 +++ b/eng/dotnet-format/format-verifier.ps1 @@ -56,8 +56,9 @@ try { if ($stage -eq "prepare" -or $stage -eq "format-workspace") { Write-Output "$(Get-Date) - Finding solutions." - $solutions = Get-ChildItem -Filter *.sln -Recurse -Depth 2 | Select-Object -ExpandProperty FullName | Where-Object { $_ -match '.sln$' } + $solutions = Get-ChildItem -Include *.sln,*.slnf,*.slnx -Recurse -Depth 2 | Select-Object -ExpandProperty FullName + $solutionFound = $false foreach ($solution in $solutions) { $solutionPath = Split-Path $solution $solutionFile = Split-Path $solution -leaf @@ -66,6 +67,7 @@ try { continue } + $solutionFound = $true Set-Location $solutionPath if ($stage -eq "prepare") { @@ -99,6 +101,12 @@ try { Write-Output "$(Get-Date) - $solutionFile - Complete" } + + if (-not $solutionFound) { + $solutionNames = $solutions | ForEach-Object { Split-Path $_ -Leaf } + Write-Output "$(Get-Date) - Target solution '$targetSolution' was not found. Available solutions ($($solutionNames.Count)): $($solutionNames -join ', ')" + exit -1 + } } if ($stage -eq "format-folder") { From e252a9b8fa8fe646aa0a33fb52dd5a1046d0129b Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Tue, 21 Apr 2026 09:39:29 -0500 Subject: [PATCH 198/230] Fix Helix test sharding: parse TestFullMSBuild as boolean (#54000) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs b/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs index c8bfa9ef0dc4..93d52d96d27b 100644 --- a/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs +++ b/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs @@ -152,7 +152,8 @@ private async Task ExecuteAsync() msbuildAdditionalSdkResolverFolder = ""; } - var scheduler = new AssemblyScheduler(methodLimit: !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("TestFullMSBuild")) ? 32 : 16); + var isFullMSBuild = string.Equals(Environment.GetEnvironmentVariable("TestFullMSBuild"), "true", StringComparison.OrdinalIgnoreCase); + var scheduler = new AssemblyScheduler(methodLimit: isFullMSBuild ? 32 : 16); var assemblyPartitionInfos = scheduler.Schedule(targetPath); var partitionedWorkItem = new List(); From 9f304988cbf11478d61b8bb71286ffe9dccd027e Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Tue, 21 Apr 2026 09:54:03 -0500 Subject: [PATCH 199/230] Fix TemplateEngine RS0016/RS0041 public API analyzer violations (#53978) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/TemplateEngine/.editorconfig | 2 ++ src/TemplateEngine/Directory.Build.props | 6 +----- .../PublicAPI.Unshipped.txt | 7 +++++++ .../PublicAPI.Shipped.txt | 2 ++ .../Microsoft.TemplateEngine.Core/PublicAPI.Shipped.txt | 2 ++ .../PublicAPI.Unshipped.txt | 3 +++ 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/TemplateEngine/.editorconfig b/src/TemplateEngine/.editorconfig index 6302ad145f70..ecfc8ffc6a4b 100644 --- a/src/TemplateEngine/.editorconfig +++ b/src/TemplateEngine/.editorconfig @@ -6,6 +6,8 @@ # flagged as unnecessary for netcoreapp TFMs. dotnet_diagnostic.IDE0005.severity = suggestion +dotnet_diagnostic.RS0041.severity = suggestion + dotnet_diagnostic.SA0001.severity = none dotnet_diagnostic.SA1005.severity = none dotnet_diagnostic.SA1101.severity = none diff --git a/src/TemplateEngine/Directory.Build.props b/src/TemplateEngine/Directory.Build.props index e312cb7e7190..3928af1d7cd6 100644 --- a/src/TemplateEngine/Directory.Build.props +++ b/src/TemplateEngine/Directory.Build.props @@ -6,11 +6,7 @@ TemplateEngine-specific build properties. --> - - $(NoWarn);NU5105;NU5128;NU5100;NU5118;0419;0649;RS0016;RS0041 + $(NoWarn);NU5105;NU5128;NU5100;NU5118;0419;0649 - - $(NoWarn);NU5125;NU5123;xUnit1051 + $(NoWarn);NU5125;NU5123 false diff --git a/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/ResponseStreamWrapperCompressionTest.cs b/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/ResponseStreamWrapperCompressionTest.cs index f55018921ee4..32c39452edb2 100644 --- a/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/ResponseStreamWrapperCompressionTest.cs +++ b/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/ResponseStreamWrapperCompressionTest.cs @@ -32,7 +32,7 @@ public async Task WriteAsync_HandlesGzipCompressedHtmlResponse() var wrapper = new ResponseStreamWrapper(context, NullLogger.Instance); // Act - await wrapper.WriteAsync(compressedData); + await wrapper.WriteAsync(compressedData, TestContext.Current.CancellationToken); await wrapper.CompleteAsync(); // Assert @@ -96,7 +96,7 @@ public async Task WriteAsync_DoesNotModifyNonHtmlCompressedResponse() var wrapper = new ResponseStreamWrapper(context, NullLogger.Instance); // Act - await wrapper.WriteAsync(compressedData); + await wrapper.WriteAsync(compressedData, TestContext.Current.CancellationToken); await wrapper.CompleteAsync(); var result = outputStream.ToArray(); @@ -156,7 +156,7 @@ public async Task WriteAsync_IgnoresNonGzipCompressionTypes() var wrapper = new ResponseStreamWrapper(context, NullLogger.Instance); // Act - await wrapper.WriteAsync(data); + await wrapper.WriteAsync(data, TestContext.Current.CancellationToken); await wrapper.CompleteAsync(); // Assert @@ -219,7 +219,7 @@ public async Task WriteAsync_PreservesNonCompressedHtmlResponse() var wrapper = new ResponseStreamWrapper(context, NullLogger.Instance); // Act - await wrapper.WriteAsync(data); + await wrapper.WriteAsync(data, TestContext.Current.CancellationToken); await wrapper.CompleteAsync(); // Assert diff --git a/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/ScriptInjectingStreamTests.cs b/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/ScriptInjectingStreamTests.cs index 8194e29022a6..dd3bdbb24b68 100644 --- a/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/ScriptInjectingStreamTests.cs +++ b/test/Microsoft.AspNetCore.Watch.BrowserRefresh.Tests/ScriptInjectingStreamTests.cs @@ -33,7 +33,7 @@ public async Task WriteAsync_CompleteBodyTagInSingleWrite_InjectsScript() var html = "Content"; // Act - await stream.WriteAsync(Encoding.UTF8.GetBytes(html)); + await stream.WriteAsync(Encoding.UTF8.GetBytes(html), TestContext.Current.CancellationToken); // Assert var result = Encoding.UTF8.GetString(baseStream.ToArray()); @@ -92,7 +92,7 @@ public async Task WriteAsync_BodyTagSplitAcrossMultipleWrites_InjectsScript(para // Act foreach (var part in parts) { - await stream.WriteAsync(Encoding.UTF8.GetBytes(part.Replace("^", ""))); + await stream.WriteAsync(Encoding.UTF8.GetBytes(part.Replace("^", "")), TestContext.Current.CancellationToken); } // Assert @@ -129,7 +129,7 @@ public async Task DisposeAsync_FlushesPartialBodyTagAtEndOfInput() var stream = new ScriptInjectingStream(baseStream); // Act - await stream.WriteAsync(Encoding.UTF8.GetBytes("ContentContent" across 7 writes - await stream.WriteAsync(Encoding.UTF8.GetBytes("Content<")); - await stream.WriteAsync(Encoding.UTF8.GetBytes("/")); - await stream.WriteAsync(Encoding.UTF8.GetBytes("b")); - await stream.WriteAsync(Encoding.UTF8.GetBytes("o")); - await stream.WriteAsync(Encoding.UTF8.GetBytes("d")); - await stream.WriteAsync(Encoding.UTF8.GetBytes("y")); - await stream.WriteAsync(Encoding.UTF8.GetBytes(">")); + await stream.WriteAsync(Encoding.UTF8.GetBytes("Content<"), TestContext.Current.CancellationToken); + await stream.WriteAsync(Encoding.UTF8.GetBytes("/"), TestContext.Current.CancellationToken); + await stream.WriteAsync(Encoding.UTF8.GetBytes("b"), TestContext.Current.CancellationToken); + await stream.WriteAsync(Encoding.UTF8.GetBytes("o"), TestContext.Current.CancellationToken); + await stream.WriteAsync(Encoding.UTF8.GetBytes("d"), TestContext.Current.CancellationToken); + await stream.WriteAsync(Encoding.UTF8.GetBytes("y"), TestContext.Current.CancellationToken); + await stream.WriteAsync(Encoding.UTF8.GetBytes(">"), TestContext.Current.CancellationToken); // Assert var result = Encoding.UTF8.GetString(baseStream.ToArray()); @@ -210,8 +210,8 @@ public async Task WriteAsync_FalsePositivePartialMatch_FlushesCorrectly() var stream = new ScriptInjectingStream(baseStream); // Act - Start with partial match that turns out false - await stream.WriteAsync(Encoding.UTF8.GetBytes("ContentNot a body tag")); + await stream.WriteAsync(Encoding.UTF8.GetBytes("ContentNot a body tag"), TestContext.Current.CancellationToken); // Assert var result = Encoding.UTF8.GetString(baseStream.ToArray()); @@ -245,7 +245,7 @@ public async Task WriteAsync_NoBodyTag_NoInjection() var html = "
Content
"; // Act - await stream.WriteAsync(Encoding.UTF8.GetBytes(html)); + await stream.WriteAsync(Encoding.UTF8.GetBytes(html), TestContext.Current.CancellationToken); // Assert var result = Encoding.UTF8.GetString(baseStream.ToArray()); @@ -278,8 +278,8 @@ public async Task WriteAsync_MultipleBodyTags_InjectsOnlyOnce() var stream = new ScriptInjectingStream(baseStream); // Act - await stream.WriteAsync(Encoding.UTF8.GetBytes("First")); - await stream.WriteAsync(Encoding.UTF8.GetBytes("Second")); + await stream.WriteAsync(Encoding.UTF8.GetBytes("First"), TestContext.Current.CancellationToken); + await stream.WriteAsync(Encoding.UTF8.GetBytes("Second"), TestContext.Current.CancellationToken); // Assert var result = Encoding.UTF8.GetString(baseStream.ToArray()); @@ -327,7 +327,7 @@ public async Task WriteAsync_EmptyBuffer_DoesNothing() var stream = new ScriptInjectingStream(baseStream); // Act - await stream.WriteAsync(ReadOnlyMemory.Empty); + await stream.WriteAsync(ReadOnlyMemory.Empty, TestContext.Current.CancellationToken); // Assert Assert.Empty(baseStream.ToArray()); @@ -381,7 +381,7 @@ public async Task WriteAsync_ArrayOverload_CompleteBodyTag_InjectsScript() var bytes = Encoding.UTF8.GetBytes(html); // Act - await stream.WriteAsync(bytes, 0, bytes.Length); + await stream.WriteAsync(bytes, 0, bytes.Length, TestContext.Current.CancellationToken); // Assert var result = Encoding.UTF8.GetString(baseStream.ToArray()); @@ -415,7 +415,7 @@ public async Task WriteAsync_ArrayOverloadWithOffset_InjectsScript() var buffer = Encoding.UTF8.GetBytes("XXXContentYYY"); // Act - await stream.WriteAsync(buffer, 3, buffer.Length - 6); // Skip XXX and YYY + await stream.WriteAsync(buffer, 3, buffer.Length - 6, TestContext.Current.CancellationToken); // Skip XXX and YYY // Assert var result = Encoding.UTF8.GetString(baseStream.ToArray()); @@ -446,7 +446,7 @@ public async Task FlushAsync_WithoutAnyWrites_DoesNotCrash() var stream = new ScriptInjectingStream(baseStream); // Act - await stream.FlushAsync(); + await stream.FlushAsync(TestContext.Current.CancellationToken); // Assert Assert.Empty(baseStream.ToArray()); diff --git a/test/Microsoft.DotNet.HotReload.Client.Tests/ArrayBufferWriterTests.cs b/test/Microsoft.DotNet.HotReload.Client.Tests/ArrayBufferWriterTests.cs index 768f6c401981..30e267edf8de 100644 --- a/test/Microsoft.DotNet.HotReload.Client.Tests/ArrayBufferWriterTests.cs +++ b/test/Microsoft.DotNet.HotReload.Client.Tests/ArrayBufferWriterTests.cs @@ -553,7 +553,7 @@ public async Task WriteAndCopyToStreamAsync(bool clearContent) Assert.True(transient.Span[0] != 0); byte expectedFirstByte = transient.Span[0]; - await memStream.WriteAsync(transient.ToArray(), 0, transient.Length); + await memStream.WriteAsync(transient.ToArray(), 0, transient.Length, TestContext.Current.CancellationToken); if (clearContent) { diff --git a/test/Microsoft.NET.Build.Containers.IntegrationTests/RegistryTests.cs b/test/Microsoft.NET.Build.Containers.IntegrationTests/RegistryTests.cs index 263d4b5083c8..4bf882a26162 100644 --- a/test/Microsoft.NET.Build.Containers.IntegrationTests/RegistryTests.cs +++ b/test/Microsoft.NET.Build.Containers.IntegrationTests/RegistryTests.cs @@ -48,7 +48,7 @@ public async Task CanReadManifestFromRegistry(string fullyQualifiedContainerName containerTag, "linux-x64", ToolsetUtils.RidGraphManifestPicker, - cancellationToken: default); + cancellationToken: TestContext.Current.CancellationToken); Assert.NotNull(downloadedImage); } diff --git a/test/Microsoft.NET.Build.Containers.UnitTests/AuthHandshakeMessageHandlerTests.cs b/test/Microsoft.NET.Build.Containers.UnitTests/AuthHandshakeMessageHandlerTests.cs index bbb0376c550d..d20bbf4c14b5 100644 --- a/test/Microsoft.NET.Build.Containers.UnitTests/AuthHandshakeMessageHandlerTests.cs +++ b/test/Microsoft.NET.Build.Containers.UnitTests/AuthHandshakeMessageHandlerTests.cs @@ -58,7 +58,7 @@ public async Task Authenticate(string authConf, Func templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -87,7 +87,7 @@ public async Task CacheSearchNameMatchTest() IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); @@ -124,7 +124,7 @@ public async Task CacheSearchCliSymbolNameFilterTest() ParseResult parseResult = myCommand.Parse($"new search foo --framework netcoreapp2.0"); SearchCommandArgs args = new((SearchCommand)parseResult.CommandResult.Command, parseResult); - IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -134,7 +134,7 @@ public async Task CacheSearchCliSymbolNameFilterTest() IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); @@ -168,7 +168,7 @@ public async Task CacheSearchCliSymbolNameMismatchFilterTest() ParseResult parseResult = myCommand.Parse($"new search foo --tfm netcoreapp2.0"); SearchCommandArgs args = new((SearchCommand)parseResult.CommandResult.Command, parseResult); - IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -178,7 +178,7 @@ public async Task CacheSearchCliSymbolNameMismatchFilterTest() IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); @@ -207,7 +207,7 @@ public async Task CacheSearchLanguageFilterTest() ParseResult parseResult = myCommand.Parse($"new search bar --language F#"); SearchCommandArgs args = new((SearchCommand)parseResult.CommandResult.Command, parseResult); - IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -217,7 +217,7 @@ public async Task CacheSearchLanguageFilterTest() IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); @@ -251,7 +251,7 @@ public async Task CacheSearchAuthorFilterTest(string commandTemplate, string com ParseResult parseResult = myCommand.Parse($"new search {commandTemplate} --author {commandAuthor}"); SearchCommandArgs args = new((SearchCommand)parseResult.CommandResult.Command, parseResult); - IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -261,7 +261,7 @@ public async Task CacheSearchAuthorFilterTest(string commandTemplate, string com IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); @@ -293,7 +293,7 @@ public async Task CacheSearchTypeFilterTest(string commandTemplate, string comma ParseResult parseResult = myCommand.Parse($"new search {commandTemplate} --type {commandType}"); SearchCommandArgs args = new((SearchCommand)parseResult.CommandResult.Command, parseResult); - IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -303,7 +303,7 @@ public async Task CacheSearchTypeFilterTest(string commandTemplate, string comma IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); @@ -336,7 +336,7 @@ public async Task CacheSearchPackageFilterTest(string commandTemplate, string co ParseResult parseResult = myCommand.Parse($"new search {commandTemplate} --package {commandPackage}"); SearchCommandArgs args = new((SearchCommand)parseResult.CommandResult.Command, parseResult); - IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -346,7 +346,7 @@ public async Task CacheSearchPackageFilterTest(string commandTemplate, string co IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); @@ -383,7 +383,7 @@ public async Task CacheSearchTagFilterTest(string commandTemplate, string comman ParseResult parseResult = myCommand.Parse($"new search {commandTemplate} --tag {commandTag}"); SearchCommandArgs args = new((SearchCommand)parseResult.CommandResult.Command, parseResult); - IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -393,7 +393,7 @@ public async Task CacheSearchTagFilterTest(string commandTemplate, string comman IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); @@ -425,7 +425,7 @@ public async Task CacheSearchLanguageMismatchFilterTest() ParseResult parseResult = myCommand.Parse($"new search bar --language VB"); SearchCommandArgs args = new((SearchCommand)parseResult.CommandResult.Command, parseResult); - IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -435,7 +435,7 @@ public async Task CacheSearchLanguageMismatchFilterTest() IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); @@ -462,7 +462,7 @@ public async Task CacheSkipInvalidTemplatesTest() ParseResult parseResult = myCommand.Parse($"new search --unknown"); SearchCommandArgs args = new((SearchCommand)parseResult.CommandResult.Command, parseResult); - IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, default); + IReadOnlyList templatePackages = await templatePackageManager.GetManagedTemplatePackagesAsync(false, TestContext.Current.CancellationToken); TemplateSearchCoordinator searchCoordinator = CliTemplateSearchCoordinatorFactory.CreateCliTemplateSearchCoordinator(engineEnvironmentSettings); CliSearchFiltersFactory factory = new(templatePackages); @@ -470,7 +470,7 @@ public async Task CacheSkipInvalidTemplatesTest() IReadOnlyList searchResults = await searchCoordinator.SearchAsync( factory.GetPackFilter(args), CliSearchFiltersFactory.GetMatchingTemplatesFilter(args), - default); + TestContext.Current.CancellationToken); Assert.Single(searchResults); Assert.Single(searchResults, result => result.Provider.Factory.DisplayName == "NuGet.org"); diff --git a/test/Microsoft.WebTools.AspireService.Tests/AspireServerServiceTests.cs b/test/Microsoft.WebTools.AspireService.Tests/AspireServerServiceTests.cs index 593fbe67e931..5b59dd10ffa4 100644 --- a/test/Microsoft.WebTools.AspireService.Tests/AspireServerServiceTests.cs +++ b/test/Microsoft.WebTools.AspireService.Tests/AspireServerServiceTests.cs @@ -107,7 +107,7 @@ public async Task LaunchProject_Success() using HttpClient client = GetHttpClient(tokens); HttpResponseMessage response; - response = await client.PutAsJsonAsync(VersionedSessionUrl, Project1SessionRequest); + response = await client.PutAsJsonAsync(VersionedSessionUrl, Project1SessionRequest, TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.Equal($"{client.BaseAddress}run_session/2", response.Headers.Location.AbsoluteUri); @@ -131,7 +131,7 @@ public async Task LaunchProject_WithNullArgs_PassesThroughNullArgs() using HttpClient client = GetHttpClient(tokens); HttpResponseMessage response; - response = await client.PutAsJsonAsync(VersionedSessionUrl, Project2SessionRequest); + response = await client.PutAsJsonAsync(VersionedSessionUrl, Project2SessionRequest, TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.Equal($"{client.BaseAddress}run_session/2", response.Headers.Location.AbsoluteUri); @@ -156,15 +156,15 @@ public async Task LaunchProject_Success_ThenStopProcessRequest() using HttpClient client = GetHttpClient(tokens); - var response = await client.PutAsJsonAsync(VersionedSessionUrl, Project1SessionRequest); + var response = await client.PutAsJsonAsync(VersionedSessionUrl, Project1SessionRequest, TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.Created, response.StatusCode); // Now send a stop session - response = await client.DeleteAsync(RunSessionRequest.Url + "/2"); + response = await client.DeleteAsync(RunSessionRequest.Url + "/2", TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.OK, response.StatusCode); // Validate NoContent response if session not found - response = await client.DeleteAsync(RunSessionRequest.Url + "/3"); + response = await client.DeleteAsync(RunSessionRequest.Url + "/3", TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); await server.DisposeAsync(); @@ -185,11 +185,11 @@ public async Task LaunchProject_FailedToLaunchProject() var tokens = server.GetServerVariables(); using HttpClient client = GetHttpClient(tokens); - var response = await client.PutAsJsonAsync(VersionedSessionUrl, Project1SessionRequest); + var response = await client.PutAsJsonAsync(VersionedSessionUrl, Project1SessionRequest, TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode); Assert.Equal("application/json; charset=utf-8", response.Content.Headers.ContentType.ToString()); - Assert.Equal("{\"error\":{\"message\":\"Launch project failed\"}}", await response.Content.ReadAsStringAsync()); + Assert.Equal("{\"error\":{\"message\":\"Launch project failed\"}}", await response.Content.ReadAsStringAsync(TestContext.Current.CancellationToken)); await server.DisposeAsync(); mocks.Verify(); @@ -206,7 +206,7 @@ public async Task LaunchProject_FailNoBearerToken() using HttpClient client = GetHttpClient(tokens); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "badToken"); - var response = await client.PutAsJsonAsync(VersionedSessionUrl, Project1SessionRequest); + var response = await client.PutAsJsonAsync(VersionedSessionUrl, Project1SessionRequest, TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); @@ -224,7 +224,7 @@ public async Task LaunchProject_FailWrongUrl() var tokens = server.GetServerVariables(); using HttpClient client = GetHttpClient(tokens); - var response = await client.PutAsJsonAsync("/run_badurl", Project1SessionRequest); + var response = await client.PutAsJsonAsync("/run_badurl", Project1SessionRequest, TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); @@ -243,7 +243,7 @@ public async Task LaunchProject_NotAPUTRequest() var tokens = aspireServer.GetServerVariables(); using HttpClient client = GetHttpClient(tokens); - var response = await client.PostAsJsonAsync(VersionedSessionUrl, Project1SessionRequest); + var response = await client.PostAsJsonAsync(VersionedSessionUrl, Project1SessionRequest, TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.MethodNotAllowed, response.StatusCode); @@ -263,7 +263,7 @@ public async Task StopSession_FailNoBearerToken() using HttpClient client = GetHttpClient(tokens); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "badToken"); - var response = await client.DeleteAsync(RunSessionRequest.Url + "/2"); + var response = await client.DeleteAsync(RunSessionRequest.Url + "/2", TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); @@ -281,7 +281,7 @@ public async Task Info_Success() var tokens = server.GetServerVariables(); using HttpClient client = GetHttpClient(tokens); - var response = await client.GetAsync(InfoResponse.Url); + var response = await client.GetAsync(InfoResponse.Url, TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.OK, response.StatusCode); @@ -300,7 +300,7 @@ public async Task Info_FailNoBearerToken() using HttpClient client = GetHttpClient(tokens); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "badToken"); - var response = await client.GetAsync(InfoResponse.Url); + var response = await client.GetAsync(InfoResponse.Url, TestContext.Current.CancellationToken); Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); @@ -367,7 +367,7 @@ private async Task ListenForSessionUpdatesAsync(AspireServerService aspireServer ws.Options.SetRequestHeader("Authorization", $"Bearer {tokens.bearerToken}"); try { - await ws.ConnectAsync(new Uri($"wss://{tokens.serverAddress}{RunSessionRequest.Url}{SessionNotification.Url}"), httpClient, CancellationToken.None); + await ws.ConnectAsync(new Uri($"wss://{tokens.serverAddress}{RunSessionRequest.Url}{SessionNotification.Url}"), httpClient, TestContext.Current.CancellationToken); } catch (Exception ex) { @@ -387,7 +387,7 @@ private async Task ListenForSessionUpdatesAsync(AspireServerService aspireServer if (messageType == WebSocketMessageType.Close) { - await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None); + await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, null, TestContext.Current.CancellationToken); return; } } @@ -440,7 +440,7 @@ private static HttpClient GetHttpClient((string serverAddress, string bearerToke private async Task<(string, WebSocketMessageType)> GetSocketMsgAsync(ClientWebSocket client) { var rcvBuffer = new ArraySegment(new byte[2048]); - WebSocketReceiveResult rcvResult = await client.ReceiveAsync(rcvBuffer, CancellationToken.None); + WebSocketReceiveResult rcvResult = await client.ReceiveAsync(rcvBuffer, TestContext.Current.CancellationToken); if (rcvResult.MessageType == WebSocketMessageType.Text) { byte[] msgBytes = rcvBuffer.Skip(rcvBuffer.Offset).Take(rcvResult.Count).ToArray(); @@ -537,7 +537,7 @@ public static async Task WaitForListeningAsync(this AspireServerService aspireSe string serverAddress = aspireServer.GetServerVariables().serverAddress; // We need to wait on the port being available - await Helpers.CanConnectToPortAsync(new Uri($"http://{serverAddress}"), 5000, CancellationToken.None); + await Helpers.CanConnectToPortAsync(new Uri($"http://{serverAddress}"), 5000, TestContext.Current.CancellationToken); } diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/ExportCommandTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/ExportCommandTests.cs index 55417747a05f..4f65e492057a 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/ExportCommandTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests/ExportCommandTests.cs @@ -167,8 +167,8 @@ public async Task SubdirectoriesAreNotSearchedByDefault() Directory.CreateDirectory(Path.Combine(_workingDirectory, "subdir2")); string templateJson = GetTestTemplateJsonContent(); - await File.WriteAllTextAsync(Path.Combine(_workingDirectory, "subdir", "template.json"), templateJson); - await File.WriteAllTextAsync(Path.Combine(_workingDirectory, "subdir2", "template.json"), templateJson); + await File.WriteAllTextAsync(Path.Combine(_workingDirectory, "subdir", "template.json"), templateJson, TestContext.Current.CancellationToken); + await File.WriteAllTextAsync(Path.Combine(_workingDirectory, "subdir2", "template.json"), templateJson, TestContext.Current.CancellationToken); int runResult = await Program.Main(new string[] { "localize", "export", _workingDirectory, "--language", "es" }); // Error: no templates found under the given folder. @@ -185,8 +185,8 @@ public async Task SubdirectoriesCanBeSearched() Directory.CreateDirectory(Path.Combine(_workingDirectory, ".template.config")); string templateJson = GetTestTemplateJsonContent(); - await File.WriteAllTextAsync(Path.Combine(_workingDirectory, "subdir", ".template.config", "template.json"), templateJson); - await File.WriteAllTextAsync(Path.Combine(_workingDirectory, ".template.config", "template.json"), templateJson); + await File.WriteAllTextAsync(Path.Combine(_workingDirectory, "subdir", ".template.config", "template.json"), templateJson, TestContext.Current.CancellationToken); + await File.WriteAllTextAsync(Path.Combine(_workingDirectory, ".template.config", "template.json"), templateJson, TestContext.Current.CancellationToken); int runResult = await Program.Main(new string[] { "localize", "export", _workingDirectory, "--language", "es", "--recursive" }); Assert.Equal(0, runResult); @@ -200,7 +200,7 @@ public async Task SubdirectoriesWithoutTemplateConfigFileAreNotSearched() { Directory.CreateDirectory(Path.Combine(_workingDirectory, "subdir")); - await File.WriteAllTextAsync(Path.Combine(_workingDirectory, "subdir", "template.json"), GetTestTemplateJsonContent()); + await File.WriteAllTextAsync(Path.Combine(_workingDirectory, "subdir", "template.json"), GetTestTemplateJsonContent(), TestContext.Current.CancellationToken); int runResult = await Program.Main(new string[] { "localize", "export", _workingDirectory, "--language", "es", "--recursive" }); // Error: no templates found under the given folder. diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.CLI.UnitTests/ValidateCommandTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.CLI.UnitTests/ValidateCommandTests.cs index 7d17777be84c..95ea70faff4b 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.CLI.UnitTests/ValidateCommandTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.CLI.UnitTests/ValidateCommandTests.cs @@ -17,7 +17,7 @@ public async Task ValidateCommand_BasicTest_InvalidTemplate() new ValidateCommand() }; - int result = await root.Parse(new[] { "validate", Path.Combine(TestTemplatesLocation, "Invalid") }).InvokeAsync(); + int result = await root.Parse(new[] { "validate", Path.Combine(TestTemplatesLocation, "Invalid") }).InvokeAsync(null, TestContext.Current.CancellationToken); //there are some invalid templates in location "Invalid" Assert.Equal(1, result); @@ -31,7 +31,7 @@ public async Task ValidateCommand_BasicTest_ValidTemplate() new ValidateCommand() }; - int result = await root.Parse(new[] { "validate", Path.Combine(TestTemplatesLocation, "TemplateWithSourceName") }).InvokeAsync(); + int result = await root.Parse(new[] { "validate", Path.Combine(TestTemplatesLocation, "TemplateWithSourceName") }).InvokeAsync(null, TestContext.Current.CancellationToken); Assert.Equal(0, result); } diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/ExampleTemplateTest.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/ExampleTemplateTest.cs index 337391bdf60f..de9d4b3b531d 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/ExampleTemplateTest.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/ExampleTemplateTest.cs @@ -55,7 +55,7 @@ public async Task VerificationEngineSampleDogfoodTest() })); VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -90,7 +90,7 @@ public async Task VerificationEngineSampleDogfoodTest_ExecThroughApi() })); VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } } } diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/TemplateEngineSamplesTest.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/TemplateEngineSamplesTest.cs index ac042ff42648..9b57b635888f 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/TemplateEngineSamplesTest.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/TemplateEngineSamplesTest.cs @@ -60,7 +60,7 @@ public async Task TemplateEngineSamplesProjectTest( .AddScrubber(sb => sb.Replace(DateTime.Now.ToString("MM/dd/yyyy"), "**/**/****"))); VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } private string GetSamplesTemplateLocation() => Path.Combine(SampleTemplatesLocation, "content"); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/VerificationEngineTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/VerificationEngineTests.cs index 5d262353db2b..bcce317a3fc4 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/VerificationEngineTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests/VerificationEngineTests.cs @@ -157,7 +157,7 @@ public async Task VerificationEngine_DotFile_EditorConfigTests() VerificationEngine engine = new VerificationEngine(_log); // Demonstrate well handling of dot files - workarounding Verify bug https://github.com/VerifyTests/Verify/issues/699 - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/VerificationEngineTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/VerificationEngineTests.cs index e55d5a1a01a0..7ea381443941 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/VerificationEngineTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests/VerificationEngineTests.cs @@ -128,7 +128,7 @@ public async Task ExecuteSucceedsOnExpectedInstantiationFailure() }; VerificationEngine engine = new VerificationEngine(commandRunner, _log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -151,7 +151,7 @@ public async Task ExecuteSucceedsOnExpectedInstantiationSuccess() }; VerificationEngine engine = new VerificationEngine(commandRunner, _log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } } } diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.Templates.IntegrationTests/AuthoringTemplatesTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.Templates.IntegrationTests/AuthoringTemplatesTests.cs index 577c1d82370e..b28c18f89028 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.Templates.IntegrationTests/AuthoringTemplatesTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Authoring.Templates.IntegrationTests/AuthoringTemplatesTests.cs @@ -38,7 +38,7 @@ public async Task TemplateJsonTest() } .WithInstantiationThroughTemplateCreatorApi(new Dictionary()); VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -68,7 +68,7 @@ public async Task TemplateJsonTest_WithParameters() .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -96,7 +96,7 @@ public async Task TemplateJsonTest_NoConfigFolder() .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -118,7 +118,7 @@ public async Task TemplatePackageTest() } .WithInstantiationThroughTemplateCreatorApi(new Dictionary()); VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -146,7 +146,7 @@ public async Task TemplatePackageTest_WithName() .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -174,7 +174,7 @@ public async Task TemplatePackageTest_NoMSBuildTasks() .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -196,7 +196,7 @@ public async Task TemplateJsonTest_CLI() ScenarioName = "CLI", }; VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -218,7 +218,7 @@ public async Task TemplatePackageTest_CLI() ScenarioName = "CLI", }; VerificationEngine engine = new VerificationEngine(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } } } diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/FolderInstallerTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/FolderInstallerTests.cs index ed96457a152b..483a3df0f465 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/FolderInstallerTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/FolderInstallerTests.cs @@ -138,9 +138,9 @@ public async Task Update_Success() FolderManagedTemplatePackage source = new FolderManagedTemplatePackage(engineEnvironmentSettings, folderInstaller, provider, Path.GetRandomFileName(), DateTime.UtcNow); //add a delay so update updates last changed time - await Task.Delay(100); + await Task.Delay(100, TestContext.Current.CancellationToken); UpdateRequest updateRequest = new UpdateRequest(source, "1.0.0"); - UpdateResult result = await folderInstaller.UpdateAsync(updateRequest, provider, CancellationToken.None); + UpdateResult result = await folderInstaller.UpdateAsync(updateRequest, provider, TestContext.Current.CancellationToken); Assert.True(result.Success); Assert.Equal(updateRequest, result.UpdateRequest); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/GeneratorTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/GeneratorTests.cs index 13e8dc73c11e..efb64787be6e 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/GeneratorTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/GeneratorTests.cs @@ -38,7 +38,7 @@ public async Task CanUseCustomGenerator() IReadOnlyList foundTemplates = await templatePackagesManager.GetTemplatesAsync( matchFilter: WellKnownSearchFilters.MatchesAllCriteria, filters: new[] { WellKnownSearchFilters.NameFilter("test-template") }, - cancellationToken: default); + cancellationToken: TestContext.Current.CancellationToken); ITemplateMatchInfo template = Assert.Single(foundTemplates); string output = TestUtils.CreateTemporaryFolder(); @@ -49,7 +49,7 @@ public async Task CanUseCustomGenerator() outputPath: output, inputParameters: new Dictionary(), forceCreation: true, - dryRun: true); + dryRun: true, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, dryRunResult.Status); Assert.Equal((ICreationEffects)CustomGenerator.CreationEffects.Instance, dryRunResult.CreationEffects); @@ -61,7 +61,7 @@ public async Task CanUseCustomGenerator() outputPath: output, inputParameters: new Dictionary(), forceCreation: true, - dryRun: false); + dryRun: false, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, runResult.Status); Assert.Equal(CustomGenerator.SimpleCreationResult.Instance, runResult.CreationResult); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/GlobalSettingsTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/GlobalSettingsTests.cs index 0b31cda0d914..2a70e49db004 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/GlobalSettingsTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/GlobalSettingsTests.cs @@ -25,7 +25,7 @@ public async Task TestLocking() var settingsFile = Path.Combine(_helper.CreateTemporaryFolder(), "settings.json"); using var globalSettings1 = new GlobalSettings(envSettings, settingsFile); using var globalSettings2 = new GlobalSettings(envSettings, settingsFile); - var disposable = await globalSettings1.LockAsync(default); + var disposable = await globalSettings1.LockAsync(TestContext.Current.CancellationToken); bool exceptionThrown = false; using var cts = new CancellationTokenSource(50); try @@ -64,15 +64,15 @@ public async Task TestFileWatcher() // This handler may fire after globalSettings2 is disposed at end of test. } }; - var mutex = await globalSettings1.LockAsync(default); + var mutex = await globalSettings1.LockAsync(TestContext.Current.CancellationToken); var newData = new TemplatePackageData( Guid.NewGuid(), "Hi", DateTime.UtcNow, new Dictionary() { { "a", "b" } }); - await globalSettings1.SetInstalledTemplatePackagesAsync(new[] { newData }, default); + await globalSettings1.SetInstalledTemplatePackagesAsync(new[] { newData }, TestContext.Current.CancellationToken); mutex.Dispose(); - var timeoutTask = Task.Delay(10000); + var timeoutTask = Task.Delay(10000, TestContext.Current.CancellationToken); var firstFinishedTask = await Task.WhenAny(timeoutTask, taskSource.Task); Assert.Equal(taskSource.Task, firstFinishedTask); @@ -92,14 +92,14 @@ public async Task TestReadWhileLocked() #region Open1AndPopulateAndSave - using (await globalSettings1.LockAsync(default)) + using (await globalSettings1.LockAsync(TestContext.Current.CancellationToken)) { var newData = new TemplatePackageData( Guid.NewGuid(), "Hi", DateTime.UtcNow, new Dictionary() { { "a", "b" } }); - await globalSettings1.SetInstalledTemplatePackagesAsync(new[] { newData }, default); + await globalSettings1.SetInstalledTemplatePackagesAsync(new[] { newData }, TestContext.Current.CancellationToken); } #endregion Open1AndPopulateAndSave @@ -107,15 +107,15 @@ public async Task TestReadWhileLocked() #region Open2LoadAndLock using var globalSettings2 = new GlobalSettings(envSettings, settingsFile); - Assert.Equal((await globalSettings1.GetInstalledTemplatePackagesAsync(default))[0].InstallerId, (await globalSettings2.GetInstalledTemplatePackagesAsync(default))[0].InstallerId); - var mutex2 = await globalSettings2.LockAsync(default); + Assert.Equal((await globalSettings1.GetInstalledTemplatePackagesAsync(TestContext.Current.CancellationToken))[0].InstallerId, (await globalSettings2.GetInstalledTemplatePackagesAsync(TestContext.Current.CancellationToken))[0].InstallerId); + var mutex2 = await globalSettings2.LockAsync(TestContext.Current.CancellationToken); #endregion Open2LoadAndLock #region Open3Load using var globalSettings3 = new GlobalSettings(envSettings, settingsFile); - Assert.Equal((await globalSettings1.GetInstalledTemplatePackagesAsync(default))[0].InstallerId, (await globalSettings3.GetInstalledTemplatePackagesAsync(default))[0].InstallerId); + Assert.Equal((await globalSettings1.GetInstalledTemplatePackagesAsync(TestContext.Current.CancellationToken))[0].InstallerId, (await globalSettings3.GetInstalledTemplatePackagesAsync(TestContext.Current.CancellationToken))[0].InstallerId); #endregion Open3Load diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/HostConstraintTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/HostConstraintTests.cs index 9aa38b3d0f53..bedb3aa361bf 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/HostConstraintTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/HostConstraintTests.cs @@ -55,7 +55,7 @@ public async Task CanReadConfiguration_WithoutVersion() A.CallTo(() => settings.Components.OfType()).Returns(new[] { new HostConstraintFactory() }); var constraintManager = new TemplateConstraintManager(settings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.Allowed, evaluateResult.EvaluationStatus); } @@ -100,7 +100,7 @@ public async Task CanReadConfiguration_ExactVersion() A.CallTo(() => settings.Components.OfType()).Returns(new[] { new HostConstraintFactory() }); var constraintManager = new TemplateConstraintManager(settings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.Restricted, evaluateResult.EvaluationStatus); Assert.Equal("Running template on host2 (version: 2.0.0) is not supported, supported hosts is/are: host1, host2(1.0.0), host3([1.0.0-*]).", evaluateResult.LocalizedErrorMessage); Assert.Null(evaluateResult.CallToAction); @@ -149,7 +149,7 @@ public async Task CanReadConfiguration_VersionRange() A.CallTo(() => settings.Components.OfType()).Returns(new[] { new HostConstraintFactory() }); var constraintManager = new TemplateConstraintManager(settings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.Allowed, evaluateResult.EvaluationStatus); } @@ -182,7 +182,7 @@ public async Task FailsOnWrongConfiguration() A.CallTo(() => settings.Components.OfType()).Returns(new[] { new HostConstraintFactory() }); var constraintManager = new TemplateConstraintManager(settings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.NotEvaluated, evaluateResult.EvaluationStatus); Assert.Equal("'{\"hostName\":\"host2\",\"version\":\"1.0.0\"}' is not a valid JSON array.", evaluateResult.LocalizedErrorMessage); Assert.Equal("Check the constraint configuration in template.json.", evaluateResult.CallToAction); @@ -231,7 +231,7 @@ public async Task CanProcessDifferentVersions(string configuredVersion, string h A.CallTo(() => settings.Components.OfType()).Returns(new[] { new HostConstraintFactory() }); var constraintManager = new TemplateConstraintManager(settings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); if (expectedResult) { Assert.Equal(TemplateConstraintResult.Status.Allowed, evaluateResult.EvaluationStatus); @@ -282,7 +282,7 @@ public async Task CanProcessDifferentHostNames(string hostName, string fallbackH A.CallTo(() => settings.Components.OfType()).Returns(new[] { new HostConstraintFactory() }); var constraintManager = new TemplateConstraintManager(settings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); if (expectedResult) { Assert.Equal(TemplateConstraintResult.Status.Allowed, evaluateResult.EvaluationStatus); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/LocalizationTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/LocalizationTests.cs index 228e09bb56c5..349100f825f1 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/LocalizationTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/LocalizationTests.cs @@ -123,7 +123,7 @@ public async Task TestLocalizedPostActionFields( { var environmentSettings = LoadHostWithLocalizationTemplates(locale, out _, out ITemplateInfo localizationTemplate); var templateCreator = new TemplateCreator(environmentSettings); - ITemplate? template = await templateCreator.LoadTemplateAsync(localizationTemplate, null, default); + ITemplate? template = await templateCreator.LoadTemplateAsync(localizationTemplate, null, TestContext.Current.CancellationToken); Assert.NotNull(template); Assert.NotNull(template!.Generator); @@ -132,7 +132,7 @@ public async Task TestLocalizedPostActionFields( template, new ParameterSetData(template), Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()), - default); + TestContext.Current.CancellationToken); Assert.NotNull(effects); Assert.NotNull(effects.CreationResult); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/NuGetApiPackageManagerTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/NuGetApiPackageManagerTests.cs index 5c71d02937cf..94aff4c05454 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/NuGetApiPackageManagerTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/NuGetApiPackageManagerTests.cs @@ -31,7 +31,7 @@ public async Task DownloadPackage_Latest() installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", // use a different source for checking specific nuget metadata - additionalSources: new[] { "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" }); + additionalSources: new[] { "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" }, cancellationToken: TestContext.Current.CancellationToken); result.Author.Should().Be("Microsoft"); result.FullPath.Should().ContainAll(installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0"); @@ -55,7 +55,7 @@ public async Task DownloadPackage_LatestFromNugetOrgFeed() installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", // add the source for getting ownership info - additionalSources: _additionalSources); + additionalSources: _additionalSources, cancellationToken: TestContext.Current.CancellationToken); result.Author.Should().Be("Microsoft"); result.FullPath.Should().ContainAll(installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0"); @@ -78,7 +78,7 @@ public async Task DownloadPackage_SpecificVersion() installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0", - additionalSources: _additionalSources); + additionalSources: _additionalSources, cancellationToken: TestContext.Current.CancellationToken); result.Author.Should().Be("Microsoft"); result.FullPath.Should().ContainAll(installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0"); @@ -96,7 +96,7 @@ public async Task DownloadPackage_UnknownPackage() NuGetApiPackageManager packageManager = new NuGetApiPackageManager(engineEnvironmentSettings); var exception = await Assert.ThrowsAsync(() => packageManager.DownloadPackageAsync( - installPath, "Microsoft.DotNet.NotCommon.ProjectTemplates.5.0", "5.0.0", additionalSources: _additionalSources)); + installPath, "Microsoft.DotNet.NotCommon.ProjectTemplates.5.0", "5.0.0", additionalSources: _additionalSources, cancellationToken: TestContext.Current.CancellationToken)); exception.PackageIdentifier.Should().Be("Microsoft.DotNet.NotCommon.ProjectTemplates.5.0"); exception.PackageVersion.Should().NotBeNull(); @@ -112,7 +112,7 @@ public async Task DownloadPackage_InvalidPath() NuGetApiPackageManager packageManager = new NuGetApiPackageManager(engineEnvironmentSettings); var exception = await Assert.ThrowsAsync(() => packageManager.DownloadPackageAsync( - installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0", additionalSources: _additionalSources)); + installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0", additionalSources: _additionalSources, cancellationToken: TestContext.Current.CancellationToken)); exception.PackageIdentifier.Should().Be("Microsoft.DotNet.Common.ProjectTemplates.5.0"); exception.PackageVersion.ToString().Should().Be("5.0.0"); @@ -126,9 +126,9 @@ public async Task DownloadPackage_CannotOverwritePackage() IEngineEnvironmentSettings engineEnvironmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true); NuGetApiPackageManager packageManager = new NuGetApiPackageManager(engineEnvironmentSettings); - await packageManager.DownloadPackageAsync(installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0", additionalSources: _additionalSources); + await packageManager.DownloadPackageAsync(installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0", additionalSources: _additionalSources, cancellationToken: TestContext.Current.CancellationToken); var exception = await Assert.ThrowsAsync(() => packageManager.DownloadPackageAsync( - installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0", additionalSources: _additionalSources)); + installPath, "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0", additionalSources: _additionalSources, cancellationToken: TestContext.Current.CancellationToken)); exception.PackageIdentifier.Should().Be("Microsoft.DotNet.Common.ProjectTemplates.5.0"); exception.PackageVersion.ToString().Should().Be("5.0.0"); @@ -149,7 +149,7 @@ internal async Task DownloadPackage_HasVulnerabilities() "System.Text.Json", "8.0.4", // add the source for getting vulnerability info - additionalSources: _additionalSources)); + additionalSources: _additionalSources, cancellationToken: TestContext.Current.CancellationToken)); exception.PackageIdentifier.Should().Be("System.Text.Json"); exception.PackageVersion.Should().Be("8.0.4"); @@ -171,7 +171,7 @@ internal async Task DownloadPackage_HasVulnerabilitiesForce() "8.0.4", // add the source for getting vulnerability info additionalSources: _additionalSources, - force: true); + force: true, cancellationToken: TestContext.Current.CancellationToken); result.PackageIdentifier.Should().Be("System.Text.Json"); result.Author.Should().Be("Microsoft"); @@ -187,7 +187,7 @@ public async Task GetLatestVersion_Success() IEngineEnvironmentSettings engineEnvironmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true); NuGetApiPackageManager packageManager = new NuGetApiPackageManager(engineEnvironmentSettings); - (string latestVersion, bool isLatestVersion, _) = await packageManager.GetLatestVersionAsync("Microsoft.DotNet.Common.ProjectTemplates.5.0", additionalSource: _additionalSources.FirstOrDefault()); + (string latestVersion, bool isLatestVersion, _) = await packageManager.GetLatestVersionAsync("Microsoft.DotNet.Common.ProjectTemplates.5.0", additionalSource: _additionalSources.FirstOrDefault(), cancellationToken: TestContext.Current.CancellationToken); latestVersion.Should().NotBeNullOrEmpty(); isLatestVersion.Should().BeFalse(); @@ -200,7 +200,7 @@ public async Task GetLatestVersion_SpecificVersion() NuGetApiPackageManager packageManager = new NuGetApiPackageManager(engineEnvironmentSettings); (string latestVersion, bool isLatestVersion, _) = await packageManager.GetLatestVersionAsync( - "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0", additionalSource: _additionalSources.First()); + "Microsoft.DotNet.Common.ProjectTemplates.5.0", "5.0.0", additionalSource: _additionalSources.First(), cancellationToken: TestContext.Current.CancellationToken); latestVersion.Should().NotBe("5.0.0"); isLatestVersion.Should().BeFalse(); @@ -213,7 +213,7 @@ public async Task GetLatestVersion_UnknownPackage() NuGetApiPackageManager packageManager = new NuGetApiPackageManager(engineEnvironmentSettings); var exception = await Assert.ThrowsAsync(() => packageManager.GetLatestVersionAsync( - "Microsoft.DotNet.NotCommon.ProjectTemplates.5.0", "5.0.0", additionalSource: _additionalSources.FirstOrDefault())); + "Microsoft.DotNet.NotCommon.ProjectTemplates.5.0", "5.0.0", additionalSource: _additionalSources.FirstOrDefault(), cancellationToken: TestContext.Current.CancellationToken)); exception.PackageIdentifier.Should().Be("Microsoft.DotNet.NotCommon.ProjectTemplates.5.0"); exception.Message.Should().NotBeNullOrEmpty(); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/OSConstraintTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/OSConstraintTests.cs index 543bc83fe051..a38895a14daf 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/OSConstraintTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/OSConstraintTests.cs @@ -39,7 +39,7 @@ public async Task CanReadStringConfiguration() var configModel = TemplateConfigModel.FromJObject(JsonNode.Parse(JsonSerializer.Serialize(config))!.AsObject()); var constraintManager = new TemplateConstraintManager(_sharedSettings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(RuntimeInformation.IsOSPlatform(OSPlatform.Windows), evaluateResult.EvaluationStatus == TemplateConstraintResult.Status.Allowed); @@ -72,7 +72,7 @@ public async Task CanReadArrayConfiguration() var configModel = TemplateConfigModel.FromJObject(JsonNode.Parse(JsonSerializer.Serialize(config))!.AsObject()); var constraintManager = new TemplateConstraintManager(_sharedSettings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); var pass = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/ScannerTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/ScannerTests.cs index e891fef137bb..4079f664ddc8 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/ScannerTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/ScannerTests.cs @@ -31,7 +31,7 @@ public async Task CanLogValidationMessagesOnInstall_MissingIdentity() Scanner scanner = new(settings); - ScanResult result = await scanner.ScanAsync(templatesLocation, default); + ScanResult result = await scanner.ScanAsync(templatesLocation, TestContext.Current.CancellationToken); Assert.Empty(result.Templates); #pragma warning disable CS0618 // Type or member is obsolete @@ -54,7 +54,7 @@ public async Task CanLogValidationMessagesOnInstall_ErrorsInTemplateConfig() Scanner scanner = new(settings); - ScanResult result = await scanner.ScanAsync(templatesLocation, default); + ScanResult result = await scanner.ScanAsync(templatesLocation, TestContext.Current.CancellationToken); Assert.Empty(result.Templates); #pragma warning disable CS0618 // Type or member is obsolete @@ -106,7 +106,7 @@ public async Task CanLogValidationMessagesOnInstall_Localization() Scanner scanner = new(settings); - ScanResult result = await scanner.ScanAsync(templatesLocation, default); + ScanResult result = await scanner.ScanAsync(templatesLocation, TestContext.Current.CancellationToken); Assert.Single(result.Templates); #pragma warning disable CS0618 // Type or member is obsolete diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/SdkVersionConstraintTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/SdkVersionConstraintTests.cs index 4434f79d8ee6..5ff3700d746c 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/SdkVersionConstraintTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/SdkVersionConstraintTests.cs @@ -49,7 +49,7 @@ public async Task Evaluate_ArrayOfVersions(string sdkVersion, bool allowed) //Workaround needed //A.CallTo(() => sdkInfoProvider.GetVersionAsync(A._)).Returns(Task.Run(() => sdkVersion)); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(allowed ? TemplateConstraintResult.Status.Allowed : TemplateConstraintResult.Status.Restricted, evaluateResult.EvaluationStatus); } @@ -88,7 +88,7 @@ public async Task Evaluate_SingleVersionRange(string sdkVersion, bool allowed) //Workaround needed //A.CallTo(() => sdkInfoProvider.GetVersionAsync(A._)).Returns(t); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(allowed ? TemplateConstraintResult.Status.Allowed : TemplateConstraintResult.Status.Restricted, evaluateResult.EvaluationStatus); } @@ -119,7 +119,7 @@ public async Task Evaluate_AlternativeInstalledVersions(string sdkVersion, IRead var constraintManager = new TemplateConstraintManager(settings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.Restricted, evaluateResult.EvaluationStatus); Assert.StartsWith( hasAlternativeInstalled diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplateConstraintManagerTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplateConstraintManagerTests.cs index 3ba82f612d28..dd7f8c23b5be 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplateConstraintManagerTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplateConstraintManagerTests.cs @@ -27,10 +27,10 @@ public async Task CanEvaluateConstraint() var constraintManager = new TemplateConstraintManager(engineEnvironmentSettings); - var success1 = await constraintManager.EvaluateConstraintAsync("test-1", "yes", default); - var failure1 = await constraintManager.EvaluateConstraintAsync("test-1", "no", default); - var notEvaluated1 = await constraintManager.EvaluateConstraintAsync("test-1", "not-valid", default); - var success2 = await constraintManager.EvaluateConstraintAsync("test-2", "yes", default); + var success1 = await constraintManager.EvaluateConstraintAsync("test-1", "yes", TestContext.Current.CancellationToken); + var failure1 = await constraintManager.EvaluateConstraintAsync("test-1", "no", TestContext.Current.CancellationToken); + var notEvaluated1 = await constraintManager.EvaluateConstraintAsync("test-1", "not-valid", TestContext.Current.CancellationToken); + var success2 = await constraintManager.EvaluateConstraintAsync("test-2", "yes", TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.Allowed, success1.EvaluationStatus); Assert.Null(success1.LocalizedErrorMessage); @@ -58,7 +58,7 @@ public async Task CanGetConstraints() var constraintManager = new TemplateConstraintManager(engineEnvironmentSettings); - var constraints = await constraintManager.GetConstraintsAsync(); + var constraints = await constraintManager.GetConstraintsAsync(cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(4, constraints.Count); Assert.Equal(new[] { "host", "os", "test-1", "test-2" }, constraints.Select(c => c.Type).OrderBy(t => t)); @@ -79,7 +79,7 @@ public async Task CanGetConstraints_Filter() new TemplateConstraintInfo("test-1", "yes") }); - var constraints = await constraintManager.GetConstraintsAsync(new[] { templateInfo }, default); + var constraints = await constraintManager.GetConstraintsAsync(new[] { templateInfo }, TestContext.Current.CancellationToken); Assert.Single(constraints); Assert.Equal("test-1", constraints.Single().Type); @@ -93,7 +93,7 @@ public async Task CanGetConstraints_WhenCreationFailed() engineEnvironmentSettings.Components.AddComponent(typeof(ITemplateConstraintFactory), new TestConstraintFactory("test-2")); var constraintManager = new TemplateConstraintManager(engineEnvironmentSettings); - var constraints = await constraintManager.GetConstraintsAsync(); + var constraints = await constraintManager.GetConstraintsAsync(cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(3, constraints.Count); Assert.Equal(new[] { "host", "os", "test-2" }, constraints.Select(c => c.Type).OrderBy(t => t)); @@ -107,7 +107,7 @@ public async Task CannotEvaluateConstraint_WhenCreationFailed() var constraintManager = new TemplateConstraintManager(engineEnvironmentSettings); - var result = await constraintManager.EvaluateConstraintAsync("test-1", "yes", default); + var result = await constraintManager.EvaluateConstraintAsync("test-1", "yes", TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.NotEvaluated, result.EvaluationStatus); Assert.Equal("The constraint 'test-1' failed to initialize: creation failed", result.LocalizedErrorMessage); Assert.Null(result.CallToAction); @@ -122,12 +122,12 @@ public async Task CanEvaluateConstraint_WhenOtherCreationFailed() var constraintManager = new TemplateConstraintManager(engineEnvironmentSettings); - var result1 = await constraintManager.EvaluateConstraintAsync("test-1", "yes", default); + var result1 = await constraintManager.EvaluateConstraintAsync("test-1", "yes", TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.NotEvaluated, result1.EvaluationStatus); Assert.Equal("The constraint 'test-1' failed to initialize: creation failed", result1.LocalizedErrorMessage); Assert.Null(result1.CallToAction); - var success2 = await constraintManager.EvaluateConstraintAsync("test-2", "yes", default); + var success2 = await constraintManager.EvaluateConstraintAsync("test-2", "yes", TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.Allowed, success2.EvaluationStatus); Assert.Null(success2.LocalizedErrorMessage); @@ -143,7 +143,7 @@ public async Task CanEvaluateConstraint_WhenOtherCreationStillRuns() var constraintManager = new TemplateConstraintManager(engineEnvironmentSettings); - var success2 = await constraintManager.EvaluateConstraintAsync("test-2", "yes", default); + var success2 = await constraintManager.EvaluateConstraintAsync("test-2", "yes", TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.Allowed, success2.EvaluationStatus); Assert.Null(success2.LocalizedErrorMessage); @@ -167,9 +167,9 @@ public async Task CanGetConstraints_DoesNotWaitForNotNeededConstraints() var constraintsTask = Task.Run(async () => { var constraintManager = new TemplateConstraintManager(engineEnvironmentSettings); - constraints = await constraintManager.GetConstraintsAsync(new[] { templateInfo }, default); - }); - var completedTask = await Task.WhenAny(constraintsTask, Task.Delay(10000)); + constraints = await constraintManager.GetConstraintsAsync(new[] { templateInfo }, TestContext.Current.CancellationToken); + }, TestContext.Current.CancellationToken); + var completedTask = await Task.WhenAny(constraintsTask, Task.Delay(10000, TestContext.Current.CancellationToken)); Assert.Equal(completedTask, constraintsTask); Assert.Equal(1, constraints?.Count); @@ -187,7 +187,7 @@ public async Task CanEvaluateConstraints_Success() ITemplateInfo template = A.Fake(); A.CallTo(() => template.Constraints).Returns(new[] { new TemplateConstraintInfo("test-1", "yes"), new TemplateConstraintInfo("test-2", "no") }); - var result = await constraintManager.EvaluateConstraintsAsync(new[] { template }, default); + var result = await constraintManager.EvaluateConstraintsAsync(new[] { template }, TestContext.Current.CancellationToken); Assert.Equal(2, result.Single().Result.Count); Assert.Equal(template, result.Single().Template); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplateCreatorTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplateCreatorTests.cs index c3ca50c69dca..6e6f6f73faeb 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplateCreatorTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplateCreatorTests.cs @@ -767,7 +767,7 @@ public async Task InstantiateAsync_InvalidTemplate() name: "test", fallbackName: "test", inputParameters: new Dictionary(), - outputPath: targetDir); + outputPath: targetDir, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.TemplateIssueDetected, instantiateResult.Status); Assert.Equal("The template is invalid and cannot be instantiated.", instantiateResult.ErrorMessage); @@ -853,7 +853,7 @@ public async Task InstantiateAsync_InvalidLocalization() name: "test", fallbackName: "test", inputParameters: new Dictionary(), - outputPath: targetDir); + outputPath: targetDir, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, instantiateResult.Status); Assert.Null(instantiateResult.ErrorMessage); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplatePackageManagerTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplatePackageManagerTests.cs index 1b47408e79f3..d30b99d553e9 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplatePackageManagerTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/TemplatePackageManagerTests.cs @@ -44,7 +44,7 @@ public async Task OrderOfScanningIsCorrect() FakeFactory.SetNuPkgsAndFolders(folders: folders); engineEnvironmentSettings.Components.AddComponent(typeof(ITemplatePackageProviderFactory), new FakeFactory()); - var templates = await new TemplatePackageManager(engineEnvironmentSettings).GetTemplatesAsync(default); + var templates = await new TemplatePackageManager(engineEnvironmentSettings).GetTemplatesAsync(TestContext.Current.CancellationToken); Assert.Single(templates); Assert.Equal("sample99", templates.Single().ShortNameList[0]); @@ -74,7 +74,7 @@ public async Task OrderOfScanningIsCorrectWithPriority() FakeFactory.SetNuPkgsAndFolders(folders: folders.Skip(50).Take(50)); engineEnvironmentSettings.Components.AddComponent(typeof(ITemplatePackageProviderFactory), new FakeFactory()); - var templates = await new TemplatePackageManager(engineEnvironmentSettings).GetTemplatesAsync(default); + var templates = await new TemplatePackageManager(engineEnvironmentSettings).GetTemplatesAsync(TestContext.Current.CancellationToken); Assert.Single(templates); Assert.Equal("sample49", templates.Single().ShortNameList[0]); @@ -90,7 +90,7 @@ public async Task RebuildCacheIfNotCurrentScansAll() FakeFactory.SetNuPkgsAndFolders(nupkgsWildcard); engineEnvironmentSettings.Components.AddComponent(typeof(ITemplatePackageProviderFactory), new FakeFactory()); - await new TemplatePackageManager(engineEnvironmentSettings).GetTemplatesAsync(default); + await new TemplatePackageManager(engineEnvironmentSettings).GetTemplatesAsync(TestContext.Current.CancellationToken); var allNupkgs = Directory.GetFiles(nupkgFolder); // All mount points should have been scanned @@ -112,7 +112,7 @@ public async Task GetsManagedPackageWithTemplates(string packageIdentifier, stri }); var result = await new TemplatePackageManager(engineEnvironmentSettings) - .GetManagedTemplatePackageAsync(packageIdentifier, version, default); + .GetManagedTemplatePackageAsync(packageIdentifier, version, TestContext.Current.CancellationToken); var (package, templates) = result; Assert.NotNull(templates); @@ -135,7 +135,7 @@ public async Task CantGetManagedPackageWithTemplatesDueToVersionMismatchAsync(st }); var packageManager = new TemplatePackageManager(engineEnvironmentSettings); - await Assert.ThrowsAsync(async () => await packageManager.GetManagedTemplatePackageAsync(packageIdentifier, version, default)); + await Assert.ThrowsAsync(async () => await packageManager.GetManagedTemplatePackageAsync(packageIdentifier, version, TestContext.Current.CancellationToken)); } [Fact] @@ -153,7 +153,7 @@ public async Task EnsureCacheIsLoadedOnlyOnce() // Execute 1st time to create file on disk monitoredFileSystem.Reset(); var templatePackageManager1 = new TemplatePackageManager(engineEnvironmentSettings); - await templatePackageManager1.GetTemplatesAsync(default); + await templatePackageManager1.GetTemplatesAsync(TestContext.Current.CancellationToken); Assert.Contains(new SettingsFilePaths(engineEnvironmentSettings).TemplateCacheFile, monitoredFileSystem.FilesOpened); // All mount points should have been scanned AssertMountPointsWereOpened(Directory.GetFiles(nupkgFolder), engineEnvironmentSettings); @@ -161,14 +161,14 @@ public async Task EnsureCacheIsLoadedOnlyOnce() // Execute 2st time with different templatePackageManager to load existing cached created in 1st step monitoredFileSystem.Reset(); var templatePackageManager2 = new TemplatePackageManager(engineEnvironmentSettings); - await templatePackageManager2.GetTemplatesAsync(default); + await templatePackageManager2.GetTemplatesAsync(TestContext.Current.CancellationToken); Assert.Contains(new SettingsFilePaths(engineEnvironmentSettings).TemplateCacheFile, monitoredFileSystem.FilesOpened); // No mount points should have been scanned AssertMountPointsWereOpened([], engineEnvironmentSettings); // Execute 3rd time with same templatePackageManager to test that TemplateCacheFile is not parsed. monitoredFileSystem.Reset(); - await templatePackageManager2.GetTemplatesAsync(default); + await templatePackageManager2.GetTemplatesAsync(TestContext.Current.CancellationToken); Assert.DoesNotContain(new SettingsFilePaths(engineEnvironmentSettings).TemplateCacheFile, monitoredFileSystem.FilesOpened); // No mount points should have been scanned AssertMountPointsWereOpened([], engineEnvironmentSettings); @@ -183,7 +183,7 @@ public async Task RebuildCacheSkipsNonAccessibleMounts() FakeFactory.SetNuPkgsAndFolders(validAndInvalidNuPkg); engineEnvironmentSettings.Components.AddComponent(typeof(ITemplatePackageProviderFactory), new FakeFactory()); - await new TemplatePackageManager(engineEnvironmentSettings).GetTemplatesAsync(default); + await new TemplatePackageManager(engineEnvironmentSettings).GetTemplatesAsync(TestContext.Current.CancellationToken); var allNupkgs = validAndInvalidNuPkg.Take(1); // All mount points should have been scanned @@ -201,7 +201,7 @@ public async Task RebuildCacheIfForceRebuildScansAll() FakeFactory.SetNuPkgsAndFolders(nupkgsWildcard); engineEnvironmentSettings.Components.AddComponent(typeof(ITemplatePackageProviderFactory), new FakeFactory()); TemplatePackageManager templatePackageManager = new TemplatePackageManager(engineEnvironmentSettings); - await templatePackageManager.GetTemplatesAsync(default); + await templatePackageManager.GetTemplatesAsync(TestContext.Current.CancellationToken); var allNupkgs = Directory.GetFiles(nupkgFolder); // All mount points should have been scanned @@ -210,17 +210,17 @@ public async Task RebuildCacheIfForceRebuildScansAll() var monitoredFileSystem = (MonitoredFileSystem)engineEnvironmentSettings.Host.FileSystem; monitoredFileSystem.Reset(); - await templatePackageManager.GetTemplatesAsync(default); + await templatePackageManager.GetTemplatesAsync(TestContext.Current.CancellationToken); // Make sure that we don't rescan with force=false AssertMountPointsWereOpened([], engineEnvironmentSettings); monitoredFileSystem.Reset(); - await templatePackageManager.RebuildTemplateCacheAsync(default); + await templatePackageManager.RebuildTemplateCacheAsync(TestContext.Current.CancellationToken); // Make sure that we rescan with force=false AssertMountPointsWereOpened(allNupkgs, engineEnvironmentSettings); monitoredFileSystem.Reset(); - await templatePackageManager.GetTemplatesAsync(default); + await templatePackageManager.GetTemplatesAsync(TestContext.Current.CancellationToken); // Make sure that we don't rescan with force=false AssertMountPointsWereOpened([], engineEnvironmentSettings); } @@ -236,7 +236,7 @@ public async Task EnsureCacheRoundtripPreservesTemplateWithLocaleTimestamp() FakeFactory.SetNuPkgsAndFolders(nupkgsWildcard); engineEnvironmentSettings.Components.AddComponent(typeof(ITemplatePackageProviderFactory), new FakeFactory()); TemplatePackageManager templatePackageManager = new TemplatePackageManager(engineEnvironmentSettings); - await templatePackageManager.GetTemplatesAsync(default); + await templatePackageManager.GetTemplatesAsync(TestContext.Current.CancellationToken); var allNupkgs = Directory.GetFiles(nupkgFolder); // All mount points should have been scanned @@ -247,7 +247,7 @@ public async Task EnsureCacheRoundtripPreservesTemplateWithLocaleTimestamp() FakeFactory.TriggerChanged(); monitoredFileSystem.Reset(); - await templatePackageManager.GetTemplatesAsync(default); + await templatePackageManager.GetTemplatesAsync(TestContext.Current.CancellationToken); // Make sure that we don't rescan with force=false AssertMountPointsWereOpened([], engineEnvironmentSettings); } @@ -263,7 +263,7 @@ public async Task RemoveMountpointRemovesTemplates() FakeFactory.SetNuPkgsAndFolders(allNupkgs); engineEnvironmentSettings.Components.AddComponent(typeof(ITemplatePackageProviderFactory), new FakeFactory()); TemplatePackageManager templatePackageManager = new TemplatePackageManager(engineEnvironmentSettings); - var templatesAll = await templatePackageManager.GetTemplatesAsync(default); + var templatesAll = await templatePackageManager.GetTemplatesAsync(TestContext.Current.CancellationToken); // All mount points should have been scanned AssertMountPointsWereOpened(allNupkgs, engineEnvironmentSettings); @@ -279,7 +279,7 @@ public async Task RemoveMountpointRemovesTemplates() allNupkgs.RemoveRange(1, allNupkgs.Count - 1); FakeFactory.TriggerChanged(); - var templatesOnly1 = await templatePackageManager.GetTemplatesAsync(default); + var templatesOnly1 = await templatePackageManager.GetTemplatesAsync(TestContext.Current.CancellationToken); // Make sure that templates return only have MountPointUri of our remaining nupkg Assert.Equal(allNupkgs, templatesOnly1.Select(t => t.MountPointUri).Distinct().OrderBy(m => m)); @@ -294,7 +294,7 @@ public async Task CanSkipFaultedProvider() engineEnvironmentSettings.Components.AddComponent(typeof(ITemplatePackageProviderFactory), new FaultFakeFactory()); TemplatePackageManager templatePackageManager = new TemplatePackageManager(engineEnvironmentSettings); - var templates = await templatePackageManager.GetTemplatesAsync(default); + var templates = await templatePackageManager.GetTemplatesAsync(TestContext.Current.CancellationToken); Assert.NotEmpty(templates); } diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/WorkloadConstraintTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/WorkloadConstraintTests.cs index d525e67f38ed..36b86db8dc9a 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/WorkloadConstraintTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Edge.UnitTests/WorkloadConstraintTests.cs @@ -49,7 +49,7 @@ public async Task Evaluate_ArrayOfVersions(IReadOnlyList workloads, bool // .GetInstalledWorkloadsAsync(A._)) // .Returns(Task.FromResult(workloads.Select(s => new WorkloadInfo(s, $"D:{s}")))); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(allowed ? TemplateConstraintResult.Status.Allowed : TemplateConstraintResult.Status.Restricted, evaluateResult.EvaluationStatus); } @@ -89,7 +89,7 @@ public async Task Evaluate_MultipleConflictingProviders() var constraintManager = new TemplateConstraintManager(settings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.NotEvaluated, evaluateResult.EvaluationStatus); Assert.Equal(0, messagesCollection.Count(t => t.Item1 >= LogLevel.Warning)); Assert.StartsWith("The constraint 'workload' failed to initialize", evaluateResult.LocalizedErrorMessage); @@ -131,7 +131,7 @@ public async Task Evaluate_MultipleDuplicateProviders() var constraintManager = new TemplateConstraintManager(settings); - var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, default); + var evaluateResult = await constraintManager.EvaluateConstraintAsync(configModel.Constraints.Single().Type, configModel.Constraints.Single().Args, TestContext.Current.CancellationToken); Assert.Equal(TemplateConstraintResult.Status.NotEvaluated, evaluateResult.EvaluationStatus); Assert.Equal(0, messagesCollection.Count(t => t.Item1 >= LogLevel.Warning)); Assert.StartsWith("The constraint 'workload' failed to initialize", evaluateResult.LocalizedErrorMessage); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/BasicTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/BasicTests.cs index 377d5c86ecae..67cd7a2a2bd7 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/BasicTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/BasicTests.cs @@ -27,8 +27,8 @@ internal async Task GetCreationEffects_BasicTest_Folder() string output = TestUtils.CreateTemporaryFolder(); var foundTemplates = await bootstrapper.GetTemplatesAsync( - new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithSourceName") }); - var result = await bootstrapper.GetCreationEffectsAsync(foundTemplates[0].Info, "test", output, new Dictionary()); + new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithSourceName") }, cancellationToken: TestContext.Current.CancellationToken); + var result = await bootstrapper.GetCreationEffectsAsync(foundTemplates[0].Info, "test", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(2, result.CreationEffects?.CreationResult.PrimaryOutputs.Count); Assert.Equal(0, result.CreationEffects?.CreationResult.PostActions.Count); Assert.Equal(2, result.CreationEffects?.FileChanges.Count); @@ -55,9 +55,9 @@ internal async Task Create_BasicTest_Folder() string output = TestUtils.CreateTemporaryFolder(); var foundTemplates = await bootstrapper.GetTemplatesAsync( - new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithSourceName") }); + new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithSourceName") }, cancellationToken: TestContext.Current.CancellationToken); - var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test", output, new Dictionary()); + var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(2, result.CreationResult?.PrimaryOutputs.Count); Assert.Equal(0, result.CreationResult?.PostActions.Count); @@ -74,8 +74,8 @@ internal async Task GetCreationEffects_BasicTest_Package() string output = TestUtils.CreateTemporaryFolder(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("console") }); - var result = await bootstrapper.GetCreationEffectsAsync(foundTemplates[0].Info, "test", output, new Dictionary()); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("console") }, cancellationToken: TestContext.Current.CancellationToken); + var result = await bootstrapper.GetCreationEffectsAsync(foundTemplates[0].Info, "test", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(2, result.CreationEffects?.CreationResult.PrimaryOutputs.Count); Assert.Equal(2, result.CreationEffects?.CreationResult.PostActions.Count); Assert.Equal(2, result.CreationEffects?.FileChanges.Count); @@ -101,8 +101,8 @@ internal async Task Create_BasicTest_Package() await InstallTemplateAsync(bootstrapper, packageLocation); string output = TestUtils.CreateTemporaryFolder(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("console") }); - var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test", output, new Dictionary()); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("console") }, cancellationToken: TestContext.Current.CancellationToken); + var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(2, result.CreationResult?.PrimaryOutputs.Count); Assert.Equal(2, result.CreationResult?.PostActions.Count); @@ -119,8 +119,8 @@ internal async Task Create_TemplateWithBinaryFile_Folder() string output = TestUtils.CreateTemporaryFolder(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithBinaryFile") }); - await bootstrapper.CreateAsync(foundTemplates[0].Info, "my-test-folder", output, new Dictionary()); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithBinaryFile") }, cancellationToken: TestContext.Current.CancellationToken); + await bootstrapper.CreateAsync(foundTemplates[0].Info, "my-test-folder", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); string sourceImage = Path.Combine(templateLocation, "image.png"); string targetImage = Path.Combine(output, "image.png"); @@ -144,8 +144,8 @@ internal async Task Create_TemplateWithBinaryFile_Package() string output = TestUtils.CreateTemporaryFolder(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithBinaryFile") }); - await bootstrapper.CreateAsync(foundTemplates[0].Info, "my-test-folder", output, new Dictionary()); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithBinaryFile") }, cancellationToken: TestContext.Current.CancellationToken); + await bootstrapper.CreateAsync(foundTemplates[0].Info, "my-test-folder", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); string sourceImage = Path.Combine(templateLocation, "image.png"); string targetImage = Path.Combine(output, "image.png"); @@ -163,8 +163,8 @@ internal async Task GetTemplates_BasicTest() { using Bootstrapper bootstrapper = GetBootstrapper(loadTestTemplates: true); - var result1 = await bootstrapper.GetTemplatesAsync(default); - var result2 = await bootstrapper.GetTemplatesAsync([], cancellationToken: default); + var result1 = await bootstrapper.GetTemplatesAsync(TestContext.Current.CancellationToken); + var result2 = await bootstrapper.GetTemplatesAsync([], cancellationToken: TestContext.Current.CancellationToken); Assert.NotEmpty(result1); Assert.Equal(result1.Count, result2.Count); @@ -179,8 +179,8 @@ internal async Task SourceNameForms_BasicTest() string output = TestUtils.CreateTemporaryFolder(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.SourceNameForms") }); - var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "MyApp.1", output, new Dictionary()); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.SourceNameForms") }, cancellationToken: TestContext.Current.CancellationToken); + var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "MyApp.1", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(Edge.Template.CreationResultStatus.Success, result.Status); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/ConfigurationTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/ConfigurationTests.cs index 61ce9af47a40..cf1d2226f604 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/ConfigurationTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/ConfigurationTests.cs @@ -23,7 +23,7 @@ internal async Task PhysicalConfigurationTest() var host = new DefaultTemplateEngineHost(nameof(PhysicalConfigurationTest).ToString(), "1.0.0", null, builtIns, []); Bootstrapper bootstrapper = new Bootstrapper(host, virtualizeConfiguration: false, loadDefaultComponents: true); - var result = await bootstrapper.GetTemplatesAsync(cancellationToken: default); + var result = await bootstrapper.GetTemplatesAsync(cancellationToken: TestContext.Current.CancellationToken); Assert.True(result.Any()); bootstrapper.Dispose(); Assert.True(Directory.Exists(hostDir)); @@ -49,7 +49,7 @@ internal async Task VirtualConfigurationTest() var host = new DefaultTemplateEngineHost(nameof(VirtualConfigurationTest).ToString(), "1.0.0", null, builtIns, []); Bootstrapper bootstrapper = new Bootstrapper(host, virtualizeConfiguration: true, loadDefaultComponents: true); - var result = await bootstrapper.GetTemplatesAsync(cancellationToken: default); + var result = await bootstrapper.GetTemplatesAsync(cancellationToken: TestContext.Current.CancellationToken); Assert.True(result.Any()); DateTime? packagesJsonModificationTime = null; @@ -59,7 +59,7 @@ internal async Task VirtualConfigurationTest() } InstallRequest installRequest = new InstallRequest("Microsoft.DotNet.Web.ProjectTemplates.5.0", "5.0.0"); - IReadOnlyList installResult = await bootstrapper.InstallTemplatePackagesAsync(new[] { installRequest }, InstallationScope.Global, CancellationToken.None); + IReadOnlyList installResult = await bootstrapper.InstallTemplatePackagesAsync(new[] { installRequest }, InstallationScope.Global, TestContext.Current.CancellationToken); Assert.Single(installResult); Assert.True(installResult[0].Success); @@ -89,7 +89,7 @@ internal async Task PhysicalConfigurationTest_WithChangedHostLocation() var host = new DefaultTemplateEngineHost(nameof(PhysicalConfigurationTest_WithChangedHostLocation).ToString(), "1.0.0", null, builtIns, []); Bootstrapper bootstrapper = new Bootstrapper(host, virtualizeConfiguration: false, loadDefaultComponents: true, hostSettingsLocation: expectedHostDir); - var result = await bootstrapper.GetTemplatesAsync(cancellationToken: default); + var result = await bootstrapper.GetTemplatesAsync(cancellationToken: TestContext.Current.CancellationToken); Assert.True(result.Any()); bootstrapper.Dispose(); var hostDir = Path.Combine(expectedHostDir, nameof(PhysicalConfigurationTest_WithChangedHostLocation).ToString()); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/End2EndTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/End2EndTests.cs index 9072b12a3ad8..1858cb4e15ba 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/End2EndTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/End2EndTests.cs @@ -22,8 +22,8 @@ internal async Task SourceNameFormsTest() string output = TestUtils.CreateTemporaryFolder(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.SourceNameForms") }); - var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "MyApp.1", output, new Dictionary()); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.SourceNameForms") }, cancellationToken: TestContext.Current.CancellationToken); + var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "MyApp.1", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -44,8 +44,8 @@ internal async Task ValueForms_DerivedSymbolTest() string output = TestUtils.CreateTemporaryFolder(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.ValueForms.DerivedSymbol") }); - var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "Real.Web.App", output, new Dictionary()); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.ValueForms.DerivedSymbol") }, cancellationToken: TestContext.Current.CancellationToken); + var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "Real.Web.App", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -66,8 +66,8 @@ internal async Task ValueForms_DerivedSymbolFromGeneratedSymbolTest() string output = TestUtils.CreateTemporaryFolder(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.ValueForms.DerivedSymbolFromGeneratedSymbol") }); - var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "Real.Web.App", output, new Dictionary()); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.ValueForms.DerivedSymbolFromGeneratedSymbol") }, cancellationToken: TestContext.Current.CancellationToken); + var result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "Real.Web.App", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -86,8 +86,8 @@ internal async Task PortAndCoalesceTest_WithFallbackInput() string output = TestUtils.CreateTemporaryFolder(); - IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }); - ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, new Dictionary()); + IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }, cancellationToken: TestContext.Current.CancellationToken); + ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -124,8 +124,8 @@ internal async Task PortAndCoalesceTest_WithUserInput() { "userPort2", "3000" }, }; - IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }); - ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters); + IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }, cancellationToken: TestContext.Current.CancellationToken); + ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -155,8 +155,8 @@ internal async Task PortAndCoalesceTest_WithUserInputEqualToDefaults() { "userPort2", "0" }, }; - IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }); - ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters); + IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }, cancellationToken: TestContext.Current.CancellationToken); + ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -181,8 +181,8 @@ internal async Task StringCoalesceTest_WithFallbackInput() string output = TestUtils.CreateTemporaryFolder(); - IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithStringCoalesce") }); - ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, new Dictionary()); + IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithStringCoalesce") }, cancellationToken: TestContext.Current.CancellationToken); + ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -210,8 +210,8 @@ internal async Task StringCoalesceTest_WithUserInput() { "userVal", "myVal" }, }; - IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithStringCoalesce") }); - ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters); + IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithStringCoalesce") }, cancellationToken: TestContext.Current.CancellationToken); + ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -241,8 +241,8 @@ internal async Task StringCoalesceTest_WithEmptyUserInput() }; #pragma warning restore SA1122 // Use string.Empty for empty strings - IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithStringCoalesce") }); - ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters); + IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithStringCoalesce") }, cancellationToken: TestContext.Current.CancellationToken); + ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -270,8 +270,8 @@ internal async Task StringCoalesceTest_WithNullUserInput() { "userVal", null }, }; - IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithStringCoalesce") }); - ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters); + IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithStringCoalesce") }, cancellationToken: TestContext.Current.CancellationToken); + ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "test-template", output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -295,7 +295,7 @@ internal async Task Test_CreateAsync_OnInvalidParamsPassed() string output = TestUtils.CreateTemporaryFolder(); - IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }); + IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }, cancellationToken: TestContext.Current.CancellationToken); Dictionary parameters = new() { @@ -303,7 +303,7 @@ internal async Task Test_CreateAsync_OnInvalidParamsPassed() { "userPort2", string.Empty } }; - ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "Test", output, parameters); + ITemplateCreationResult result = await bootstrapper.CreateAsync(foundTemplates[0].Info, "Test", output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.InvalidParamValues, result.Status); Assert.Equal("userPort1, userPort2", result.ErrorMessage); @@ -318,7 +318,7 @@ internal async Task Test_DryRunAsync_OnInvalidParamsPassed() string output = TestUtils.CreateTemporaryFolder(); - IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }); + IReadOnlyList foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPortsAndCoalesce") }, cancellationToken: TestContext.Current.CancellationToken); Dictionary parameters = new() { @@ -326,7 +326,7 @@ internal async Task Test_DryRunAsync_OnInvalidParamsPassed() { "userPort2", string.Empty } }; - ITemplateCreationResult result = await bootstrapper.GetCreationEffectsAsync(foundTemplates[0].Info, "Test", output, parameters); + ITemplateCreationResult result = await bootstrapper.GetCreationEffectsAsync(foundTemplates[0].Info, "Test", output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.InvalidParamValues, result.Status); Assert.Equal("userPort1, userPort2", result.ErrorMessage); @@ -342,7 +342,7 @@ internal async Task Test_CreateAsync_OnTemplateWithConditions() string output = TestUtils.CreateTemporaryFolder(); IReadOnlyList foundTemplates = await bootstrapper - .GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithConditions") }); + .GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithConditions") }, cancellationToken: TestContext.Current.CancellationToken); Dictionary parameters = new() { @@ -350,7 +350,7 @@ internal async Task Test_CreateAsync_OnTemplateWithConditions() }; ITemplateCreationResult result = await bootstrapper - .CreateAsync(foundTemplates[0].Info, "Test", output, parameters); + .CreateAsync(foundTemplates[0].Info, "Test", output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); @@ -374,7 +374,7 @@ internal async Task Test_CreateAsync_PreferDefaultNameValidParameters(string? na string output = TestUtils.CreateTemporaryFolder(); IReadOnlyList foundTemplates = await bootstrapper - .GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPreferDefaultName") }); + .GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPreferDefaultName") }, cancellationToken: TestContext.Current.CancellationToken); // Using this parameter with no real info so bootstrapper.CreateAsync is not an ambiguous call Dictionary parameters = new() @@ -383,7 +383,7 @@ internal async Task Test_CreateAsync_PreferDefaultNameValidParameters(string? na }; ITemplateCreationResult result = await bootstrapper - .CreateAsync(foundTemplates[0].Info, name, output, parameters); + .CreateAsync(foundTemplates[0].Info, name, output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.Success, result.Status); string expectedName = Path.Combine(output, expectedFileName); @@ -400,7 +400,7 @@ internal async Task Test_CreateAsync_PreferDefaultNameInvalidParameters() string output = TestUtils.CreateTemporaryFolder(); IReadOnlyList foundTemplates = await bootstrapper - .GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPreferDefaultName") }); + .GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.TemplateWithPreferDefaultName") }, cancellationToken: TestContext.Current.CancellationToken); // Using this parameter with no real info so bootstrapper.CreateAsync is not an ambiguous call Dictionary parameters = new() @@ -409,7 +409,7 @@ internal async Task Test_CreateAsync_PreferDefaultNameInvalidParameters() }; ITemplateCreationResult result = await bootstrapper - .CreateAsync(foundTemplates[0].Info, null, output, parameters); + .CreateAsync(foundTemplates[0].Info, null, output, parameters, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(CreationResultStatus.TemplateIssueDetected, result.Status); Assert.Equal( @@ -426,13 +426,13 @@ internal async Task PostAction_WithFileRename_Test() string output = TestUtils.CreateTemporaryFolder(); IReadOnlyList foundTemplates = await bootstrapper - .GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.PostActions.AddJsonProperty.WithSourceNameChangeInJson") }); + .GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter("TestAssets.PostActions.AddJsonProperty.WithSourceNameChangeInJson") }, cancellationToken: TestContext.Current.CancellationToken); // Using this parameter with no real info so bootstrapper.CreateAsync is not an ambiguous call Dictionary parameters = new(); ITemplateCreationResult result = await bootstrapper - .CreateAsync(foundTemplates[0].Info, "CompanyProject", output, parameters); + .CreateAsync(foundTemplates[0].Info, "CompanyProject", output, parameters, cancellationToken: TestContext.Current.CancellationToken); IPostAction postAction = Assert.Single(result.CreationResult!.PostActions); Assert.Equal("testfile.json", postAction.Args["jsonFileName"]); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/FileRenameTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/FileRenameTests.cs index 4b6999b6cff3..55ab098dd161 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/FileRenameTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/FileRenameTests.cs @@ -201,9 +201,9 @@ internal async Task GetCreationEffectsTest(string templateName, string parameter string output = BasicParametersParser.GetOutputFromParameterString(parameters); Dictionary parametersDict = BasicParametersParser.ParseParameterString(parameters); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter(templateName) }); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter(templateName) }, cancellationToken: TestContext.Current.CancellationToken); ITemplateInfo template = foundTemplates.Single(template => template.Info.ShortNameList.Contains($"TestAssets.{templateName}")).Info; - Edge.Template.ITemplateCreationResult result = await bootstrapper.GetCreationEffectsAsync(template, name, output, parametersDict); + Edge.Template.ITemplateCreationResult result = await bootstrapper.GetCreationEffectsAsync(template, name, output, parametersDict, cancellationToken: TestContext.Current.CancellationToken); Assert.Equal(expectedResult.CreationResult.PrimaryOutputs.Count, result.CreationEffects?.CreationResult.PrimaryOutputs.Count); @@ -235,9 +235,9 @@ internal async Task CreateTest(string templateName, string parameters, MockCreat string output = BasicParametersParser.GetOutputFromParameterString(parameters); Dictionary parametersDict = BasicParametersParser.ParseParameterString(parameters); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter(templateName) }); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter(templateName) }, cancellationToken: TestContext.Current.CancellationToken); ITemplateInfo template = foundTemplates.Single(template => template.Info.ShortNameList.Contains($"TestAssets.{templateName}")).Info; - var result = await bootstrapper.CreateAsync(template, name, output, parametersDict); + var result = await bootstrapper.CreateAsync(template, name, output, parametersDict, cancellationToken: TestContext.Current.CancellationToken); Assert.NotNull(result.CreationResult); @@ -283,9 +283,9 @@ internal async Task GetCreationEffectsTest_Package(string templateName, string p string output = BasicParametersParser.GetOutputFromParameterString(parameters); Dictionary parametersDict = BasicParametersParser.ParseParameterString(parameters); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter(templateName) }); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter(templateName) }, cancellationToken: TestContext.Current.CancellationToken); ITemplateInfo template = foundTemplates.Single(template => template.Info.ShortNameList.Contains($"TestAssets.{templateName}")).Info; - Edge.Template.ITemplateCreationResult result = await bootstrapper.GetCreationEffectsAsync(template, name, output, parametersDict); + Edge.Template.ITemplateCreationResult result = await bootstrapper.GetCreationEffectsAsync(template, name, output, parametersDict, cancellationToken: TestContext.Current.CancellationToken); Assert.NotNull(result.CreationEffects); Assert.NotNull(result.CreationEffects.CreationResult.PrimaryOutputs); @@ -317,9 +317,9 @@ internal async Task CreateTest_Package(string templateName, string parameters, M string output = BasicParametersParser.GetOutputFromParameterString(parameters); Dictionary parametersDict = BasicParametersParser.ParseParameterString(parameters); - var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter(templateName) }); + var foundTemplates = await bootstrapper.GetTemplatesAsync(new[] { WellKnownSearchFilters.NameFilter(templateName) }, cancellationToken: TestContext.Current.CancellationToken); ITemplateInfo template = foundTemplates.Single(template => template.Info.ShortNameList.Contains($"TestAssets.{templateName}")).Info; - var result = await bootstrapper.CreateAsync(template, name, output, parametersDict); + var result = await bootstrapper.CreateAsync(template, name, output, parametersDict, cancellationToken: TestContext.Current.CancellationToken); Assert.NotNull(result.CreationResult); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/LocalizationTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/LocalizationTests.cs index 9865394a6844..68d6a196594a 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/LocalizationTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/LocalizationTests.cs @@ -27,11 +27,11 @@ public async Task SkipsLocalizationOnInstall_WhenInvalidFormat() string testTemplateLocation = GetTestTemplateLocation("Invalid/Localization/InvalidFormat"); List installRequests = new() { new InstallRequest(testTemplateLocation) }; - IReadOnlyList installationResults = await bootstrapper.InstallTemplatePackagesAsync(installRequests); + IReadOnlyList installationResults = await bootstrapper.InstallTemplatePackagesAsync(installRequests, cancellationToken: TestContext.Current.CancellationToken); Assert.True(installationResults.Single().Success); loggedMessages.Clear(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(default); + var foundTemplates = await bootstrapper.GetTemplatesAsync(TestContext.Current.CancellationToken); Assert.Single(foundTemplates); (LogLevel level, string message) = Assert.Single(loggedMessages, m => m.Level == LogLevel.Warning); @@ -75,11 +75,11 @@ [Warning][CONFIG0201] Id of the post action 'pa2' at index '3' is not unique. On }; List installRequests = new() { new InstallRequest(testTemplateLocation) }; - IReadOnlyList installationResults = await bootstrapper.InstallTemplatePackagesAsync(installRequests); + IReadOnlyList installationResults = await bootstrapper.InstallTemplatePackagesAsync(installRequests, cancellationToken: TestContext.Current.CancellationToken); Assert.True(installationResults.Single().Success); loggedMessages.Clear(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(default); + var foundTemplates = await bootstrapper.GetTemplatesAsync(TestContext.Current.CancellationToken); Assert.Single(foundTemplates); var errors = loggedMessages.Where(m => m.Level == LogLevel.Error).Select(m => m.Message); @@ -117,11 +117,11 @@ public async Task SkipsLocalizationOnInstantiate_WhenInvalidFormat() TestUtils.DirectoryCopy(validTestTemplateLocation, tmpTemplateLocation, copySubDirs: true); List installRequests = new() { new InstallRequest(tmpTemplateLocation) }; - IReadOnlyList installationResults = await bootstrapper.InstallTemplatePackagesAsync(installRequests); + IReadOnlyList installationResults = await bootstrapper.InstallTemplatePackagesAsync(installRequests, cancellationToken: TestContext.Current.CancellationToken); Assert.True(installationResults.Single().Success); loggedMessages.Clear(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(default); + var foundTemplates = await bootstrapper.GetTemplatesAsync(TestContext.Current.CancellationToken); var templateToRun = Assert.Single(foundTemplates); Assert.DoesNotContain(loggedMessages, m => m.Level == LogLevel.Error); @@ -135,7 +135,7 @@ public async Task SkipsLocalizationOnInstantiate_WhenInvalidFormat() Path.Combine(tmpTemplateLocation, ".template.config", "localize", "templatestrings.de-DE.json"), overwrite: true); - var result = await bootstrapper.CreateAsync(templateToRun, "MyApp.1", output, new Dictionary()); + var result = await bootstrapper.CreateAsync(templateToRun, "MyApp.1", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.True(result.Status == Edge.Template.CreationResultStatus.Success); @@ -183,11 +183,11 @@ [Error][LOC001] In der Lokalisierungsdatei unter der POST-Aktion mit der ID „p "Lokalisierung „de-DE“ der Vorlage 'name' (TestAssets.TemplateWithLocalization) konnte nicht geladen werden: Die Lokalisierungsdatei ist ungültig. Die Lokalisierung wird übersprungen.", }; List installRequests = new() { new InstallRequest(tmpTemplateLocation) }; - IReadOnlyList installationResults = await bootstrapper.InstallTemplatePackagesAsync(installRequests); + IReadOnlyList installationResults = await bootstrapper.InstallTemplatePackagesAsync(installRequests, cancellationToken: TestContext.Current.CancellationToken); Assert.True(installationResults.Single().Success); loggedMessages.Clear(); - var foundTemplates = await bootstrapper.GetTemplatesAsync(default); + var foundTemplates = await bootstrapper.GetTemplatesAsync(TestContext.Current.CancellationToken); var templateToRun = Assert.Single(foundTemplates); Assert.DoesNotContain(loggedMessages, m => m.Level == LogLevel.Error); @@ -201,7 +201,7 @@ [Error][LOC001] In der Lokalisierungsdatei unter der POST-Aktion mit der ID „p Path.Combine(tmpTemplateLocation, ".template.config", "localize", "templatestrings.de-DE.json"), overwrite: true); - var result = await bootstrapper.CreateAsync(templateToRun, "MyApp.1", output, new Dictionary()); + var result = await bootstrapper.CreateAsync(templateToRun, "MyApp.1", output, new Dictionary(), cancellationToken: TestContext.Current.CancellationToken); Assert.True(result.Status == Edge.Template.CreationResultStatus.Success); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/SnapshotTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/SnapshotTests.cs index 155cb88bc005..2d70fe1eca5c 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/SnapshotTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.IDE.IntegrationTests/SnapshotTests.cs @@ -38,7 +38,7 @@ public Task PreferDefaultNameTest() .WithInstantiationThroughTemplateCreatorApi(new Dictionary()); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -58,7 +58,7 @@ public Task TemplateWithOnlyIfStatementTest() .WithInstantiationThroughTemplateCreatorApi(new Dictionary() { { "default-port", "3332" } }); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -78,7 +78,7 @@ public Task TemplateWithOnlyIfStatementTestForLocalhostTest() .WithInstantiationThroughTemplateCreatorApi(new Dictionary() { { "default-port", "3332" } }); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Theory] @@ -108,7 +108,7 @@ public async Task BooleanConditionsTest(string testName, string?[]? parametersAr .WithInstantiationThroughTemplateCreatorApi(parameters); VerificationEngine engine = new(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Theory] @@ -154,7 +154,7 @@ public async Task LegacyTests(string scenarioName, string templateFolderName, st .WithInstantiationThroughTemplateCreatorApi(parameters); VerificationEngine engine = new(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -190,7 +190,7 @@ public async Task LegacyTest_PortsAndCoalesceRenames() .WithInstantiationThroughTemplateCreatorApi(parameters); VerificationEngine engine = new(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } private Dictionary ConvertToParameters(string?[]? parametersArray) diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/RunnableProjectConfigTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/RunnableProjectConfigTests.cs index 72f63b74e089..fe76e44ba5c3 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/RunnableProjectConfigTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/RunnableProjectConfigTests.cs @@ -149,7 +149,7 @@ public async Task PerformTemplateValidation_ChoiceValuesValidation(string paramD RunnableProjectGenerator rpg = new(); using RunnableProjectConfig templateConfig = new RunnableProjectConfig(environmentSettings, rpg, config, sourceMountPoint.Root); - await templateConfig.ValidateAsync(ValidationScope.Instantiation, default); + await templateConfig.ValidateAsync(ValidationScope.Instantiation, TestContext.Current.CancellationToken); if (expectedToBeValid) { diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/ScanTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/ScanTests.cs index 33028c8605dd..0eed234e3475 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/ScanTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/ScanTests.cs @@ -47,7 +47,7 @@ public async Task CanReadPostActions() using IMountPoint mountPoint = environmentSettings.MountPath(sourceBasePath); RunnableProjectGenerator generator = new RunnableProjectGenerator(); - IReadOnlyList? templates = await (generator as IGenerator).GetTemplatesFromMountPointAsync(mountPoint, default); + IReadOnlyList? templates = await (generator as IGenerator).GetTemplatesFromMountPointAsync(mountPoint, TestContext.Current.CancellationToken); Assert.Single(templates); var template = templates[0]; diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/SnapshotTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/SnapshotTests.cs index 7925ffe88fae..b3480d8daa0b 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/SnapshotTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/SnapshotTests.cs @@ -44,7 +44,7 @@ public Task TestGeneratedSymbolWithRefToDerivedSymbol() .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -69,7 +69,7 @@ public Task TestGeneratedSymbolWithRefToDerivedSymbol_DifferentOrder() .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -94,7 +94,7 @@ public Task TestCoalesce_EmptyStringForMultiChoices() .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -119,7 +119,7 @@ public Task TestSingleSelectionForMultiChoices() .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -145,7 +145,7 @@ public Task TestTemplateWithBrokenGeneratedInComputed() .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -171,7 +171,7 @@ public Task TestTemplateWithComputedInGenerated() }); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -193,7 +193,7 @@ public Task TestTemplateWithComputedInDerivedThroughGenerated() .WithInstantiationThroughTemplateCreatorApi(new Dictionary()); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -220,7 +220,7 @@ public Task TestTemplateWithGeneratedInComputed() }); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -247,7 +247,7 @@ public Task TestTemplateWithGeneratedSwitchInComputed() }); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -271,7 +271,7 @@ public Task TestTemplateWithCircleDependencyInMacros() .WithInstantiationThroughTemplateCreatorApi(new Dictionary()); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } [Fact] @@ -300,7 +300,7 @@ public Task TestSelectionForMultiChoicesWhenThereAreMultiplePartialMatchesAndOne .WithInstantiationThroughTemplateCreatorApi(templateParams); VerificationEngine engine = new VerificationEngine(_log); - return engine.Execute(options); + return engine.Execute(options, TestContext.Current.CancellationToken); } } } diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/FileRenameTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/FileRenameTests.cs index 836801538fa9..053d7fd22303 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/FileRenameTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/FileRenameTests.cs @@ -64,7 +64,7 @@ public async Task SourceRenameIsCaseSensitive() using ITemplate template = new RunnableProjectConfig(environment, generator, templateConfigFile); ParameterSetData parameters = new(template); - ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(environment, template, parameters, targetDir, default); + ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(environment, template, parameters, targetDir, TestContext.Current.CancellationToken); IEnumerable changes = result.FileChanges.Cast(); Assert.Equal(2, result.FileChanges.Count); @@ -121,7 +121,7 @@ public async Task SourceModifierRenameIsCaseSensitive() using ITemplate template = new RunnableProjectConfig(environment, generator, templateConfigFile); ParameterSetData parameters = new(template); - ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(environment, template, parameters, targetDir, default); + ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(environment, template, parameters, targetDir, TestContext.Current.CancellationToken); IEnumerable changes = result.FileChanges.Cast(); Assert.Equal(2, result.FileChanges.Count); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/LocalizationTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/LocalizationTests.cs index 72bb8b8dde0a..86e3feb7a165 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/LocalizationTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/LocalizationTests.cs @@ -354,7 +354,7 @@ public async Task CanValidatePostActionWithoutLocalization() Assert.NotNull(locFile); using var runnableProjectConfig = new RunnableProjectConfig(environmentSettings, generator, templateConfigFile, localeConfigFile: locFile); - await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, default); + await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, TestContext.Current.CancellationToken); Assert.NotNull(runnableProjectConfig.Localization); Assert.True(runnableProjectConfig.Localization.IsValid); @@ -408,7 +408,7 @@ public async Task CanValidatePostActionWithDefaultInstructionLocalization() Assert.NotNull(locFile); using var runnableProjectConfig = new RunnableProjectConfig(environmentSettings, generator, templateConfigFile, localeConfigFile: locFile); - await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, default); + await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, TestContext.Current.CancellationToken); Assert.NotNull(runnableProjectConfig.Localization); Assert.True(runnableProjectConfig.Localization.IsValid); @@ -474,7 +474,7 @@ public async Task CannotValidatePostActionWithExtraInstructionLocalization() Assert.NotNull(locFile); using var runnableProjectConfig = new RunnableProjectConfig(environmentSettings, generator, templateConfigFile, localeConfigFile: locFile); - await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, default); + await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, TestContext.Current.CancellationToken); Assert.NotNull(runnableProjectConfig.Localization); Assert.False(runnableProjectConfig.Localization.IsValid); @@ -546,7 +546,7 @@ public async Task CannotValidateExtraPostActionLocalization() Assert.NotNull(locFile); using var runnableProjectConfig = new RunnableProjectConfig(environmentSettings, generator, templateConfigFile, localeConfigFile: locFile); - await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, default); + await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, TestContext.Current.CancellationToken); Assert.NotNull(runnableProjectConfig.Localization); Assert.False(runnableProjectConfig.Localization.IsValid); @@ -615,7 +615,7 @@ public async Task CanLocalizeParameters() Assert.NotNull(locFile); using var runnableProjectConfig = new RunnableProjectConfig(environmentSettings, generator, templateConfigFile, localeConfigFile: locFile); - await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, default); + await runnableProjectConfig.ValidateAsync(ValidationScope.Instantiation, TestContext.Current.CancellationToken); Assert.NotNull(runnableProjectConfig.Localization); Assert.True(runnableProjectConfig.Localization.IsValid); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/SourceConfigTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/SourceConfigTests.cs index 78f5206feeea..8d4ba3b57123 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/SourceConfigTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/SourceConfigTests.cs @@ -64,7 +64,7 @@ public async Task SourceConfigExcludesAreOverriddenByIncludes() using ITemplate template = new RunnableProjectConfig(_engineEnvironmentSettings, generator, templateConfigFile); ParameterSetData parameters = new(template); - await (generator as IGenerator).CreateAsync(_engineEnvironmentSettings, template, parameters, targetDir, default); + await (generator as IGenerator).CreateAsync(_engineEnvironmentSettings, template, parameters, targetDir, TestContext.Current.CancellationToken); Assert.True(_engineEnvironmentSettings.Host.FileSystem.FileExists(Path.Combine(targetDir, "core.config"))); Assert.False(_engineEnvironmentSettings.Host.FileSystem.FileExists(Path.Combine(targetDir, "full.config"))); } @@ -112,7 +112,7 @@ public async Task CopyOnlyWithoutIncludeDoesntActuallyCopyFile() using ITemplate template = new RunnableProjectConfig(_engineEnvironmentSettings, generator, templateConfigFile); ParameterSetData parameters = new(template); - ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, default); + ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, TestContext.Current.CancellationToken); Assert.All(result.FileChanges.Cast(), c => c.SourceRelativePath.StartsWith("./")); Assert.Single(result.FileChanges); @@ -162,7 +162,7 @@ public async Task CopyOnlyWithParentIncludeActuallyCopiesFile() using ITemplate template = new RunnableProjectConfig(_engineEnvironmentSettings, generator, templateConfigFile); ParameterSetData parameters = new(template); - ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, default); + ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, TestContext.Current.CancellationToken); Assert.All(result.FileChanges.Cast(), c => c.SourceRelativePath.StartsWith("./")); Assert.Single(result.FileChanges); @@ -211,7 +211,7 @@ public async Task CopyOnlyWithWildcardAndParentIncludeActuallyCopiesFile() using ITemplate template = new RunnableProjectConfig(_engineEnvironmentSettings, generator, templateConfigFile); ParameterSetData parameters = new(template); - ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, default); + ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, TestContext.Current.CancellationToken); Assert.All(result.FileChanges.Cast(), c => c.SourceRelativePath.StartsWith("./")); Assert.Single(result.FileChanges); @@ -265,7 +265,7 @@ public async Task IncludeModifierOverridesPreviousExcludeModifierTemplateTest() using ITemplate template = new RunnableProjectConfig(_engineEnvironmentSettings, generator, templateConfigFile); ParameterSetData parameters = new(template); - ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, default); + ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, TestContext.Current.CancellationToken); Assert.All(result.FileChanges.Cast(), c => c.SourceRelativePath.StartsWith("./")); Assert.Single(result.FileChanges); @@ -320,7 +320,7 @@ public async Task ExcludeModifierOverridesPreviousIncludeModifierTemplateTest() using ITemplate template = new RunnableProjectConfig(_engineEnvironmentSettings, generator, templateConfigFile); ParameterSetData parameters = new(template); - ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, default); + ICreationEffects result = await (generator as IGenerator).GetCreationEffectsAsync(_engineEnvironmentSettings, template, parameters, targetDir, TestContext.Current.CancellationToken); IEnumerable changes = result.FileChanges.Cast(); Assert.All(result.FileChanges.Cast(), c => c.SourceRelativePath.StartsWith("./")); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/SplitConfigurationTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/SplitConfigurationTests.cs index 3024d1060ceb..22d03090f32e 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/SplitConfigurationTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/SplitConfigurationTests.cs @@ -191,7 +191,7 @@ public async Task SplitConfigTest() Assert.NotNull(templateConfigFileInfo); ScannedTemplateInfo config = new ScannedTemplateInfo(_engineEnvironmentSettings, generator, templateConfigFileInfo); - ITemplate? template = await generator.LoadTemplateAsync(_engineEnvironmentSettings, config, baselineName: null, cancellationToken: default); + ITemplate? template = await generator.LoadTemplateAsync(_engineEnvironmentSettings, config, baselineName: null, cancellationToken: TestContext.Current.CancellationToken); Assert.NotNull(template); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/TemplateRootTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/TemplateRootTests.cs index 5f6a8f000e95..2f7dd283aa47 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/TemplateRootTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/TemplateConfigTests/TemplateRootTests.cs @@ -110,7 +110,7 @@ public async Task CheckTemplateRootRelativeToInstallPath(string pathToTemplateJs IFile? templateConfigFile = mountPoint.FileInfo(pathToTemplateJson); Assert.NotNull(templateConfigFile); using RunnableProjectConfig templateModel = new(environmentSettings, generator, templateConfigFile); - await templateModel.ValidateAsync(ValidationScope.Instantiation, default); + await templateModel.ValidateAsync(ValidationScope.Instantiation, TestContext.Current.CancellationToken); Assert.True(templateModel.IsValid); Assert.DoesNotContain(templateModel.ValidationErrors, e => e is { Severity: IValidationEntry.SeverityLevel.Error } or { Severity: IValidationEntry.SeverityLevel.Warning }); @@ -147,7 +147,7 @@ public async Task CheckTemplateSourcesRelativeToTemplateRoot(bool shouldAllPaths Assert.NotNull(templateConfigFile); using RunnableProjectConfig templateModel = new RunnableProjectConfig(environmentSettings, generator, templateConfigFile); - await templateModel.ValidateAsync(ValidationScope.Instantiation, default); + await templateModel.ValidateAsync(ValidationScope.Instantiation, TestContext.Current.CancellationToken); if (shouldAllPathsBeValid) { @@ -208,7 +208,7 @@ public async Task CheckTemplateSourcesRelativeToTemplateRootMultipleDirsUnderMou Assert.NotNull(templateConfigFile); using RunnableProjectConfig templateModel = new RunnableProjectConfig(environmentSettings, generator, templateConfigFile); - await templateModel.ValidateAsync(ValidationScope.Instantiation, default); + await templateModel.ValidateAsync(ValidationScope.Instantiation, TestContext.Current.CancellationToken); if (shouldAllPathsBeValid) { diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/ValidationTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/ValidationTests.cs index cc0b5fd43601..a853686005b7 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/ValidationTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests/ValidationTests.cs @@ -25,7 +25,7 @@ public async Task ValidateAllTestTemplates() IEngineEnvironmentSettings environmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true); using IMountPoint sourceMountPoint = environmentSettings.MountPath(TestTemplatesLocation); RunnableProjectGenerator generator = new(); - IReadOnlyList loadedTemplates = await generator.GetTemplatesFromMountPointInternalAsync(sourceMountPoint, default); + IReadOnlyList loadedTemplates = await generator.GetTemplatesFromMountPointInternalAsync(sourceMountPoint, TestContext.Current.CancellationToken); IEnumerable filteredTemplates = loadedTemplates.Where(t => !exceptions.Contains(t.ConfigurationModel.Identity)); @@ -38,7 +38,7 @@ public async Task ValidateAllSampleTemplates() IEngineEnvironmentSettings environmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true); using IMountPoint sourceMountPoint = environmentSettings.MountPath(SampleTemplatesLocation); RunnableProjectGenerator generator = new(); - IReadOnlyList loadedTemplates = await generator.GetTemplatesFromMountPointInternalAsync(sourceMountPoint, default); + IReadOnlyList loadedTemplates = await generator.GetTemplatesFromMountPointInternalAsync(sourceMountPoint, TestContext.Current.CancellationToken); Assert.True(loadedTemplates.All(t => t.IsValid)); } @@ -48,7 +48,7 @@ public async Task ValidateInvalidTemplate() IEngineEnvironmentSettings environmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true); using IMountPoint sourceMountPoint = environmentSettings.MountPath(GetTestTemplateLocation("Invalid/MissingMandatoryConfig")); RunnableProjectGenerator generator = new(); - IReadOnlyList loadedTemplates = await generator.GetTemplatesFromMountPointInternalAsync(sourceMountPoint, default); + IReadOnlyList loadedTemplates = await generator.GetTemplatesFromMountPointInternalAsync(sourceMountPoint, TestContext.Current.CancellationToken); ScannedTemplateInfo loadedTemplate = Assert.Single(loadedTemplates); Assert.False(loadedTemplate.IsValid); diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests/StringUpdaterTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests/StringUpdaterTests.cs index 4651ba51df09..da9602dc8876 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests/StringUpdaterTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests/StringUpdaterTests.cs @@ -84,7 +84,7 @@ public async Task StringOrderIsPreserved() Assert.True(File.Exists(expectedFilename)); using FileStream locFileStream = File.OpenRead(expectedFilename); - JsonDocument locFile = await JsonDocument.ParseAsync(locFileStream); + JsonDocument locFile = await JsonDocument.ParseAsync(locFileStream, cancellationToken: TestContext.Current.CancellationToken); int inputIndex = 0; foreach (JsonProperty property in locFile.RootElement.EnumerateObject()) diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Utils.UnitTests/DefaultTemplatePackageProviderTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Utils.UnitTests/DefaultTemplatePackageProviderTests.cs index 7eb0018115f4..52b5ea99c741 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Utils.UnitTests/DefaultTemplatePackageProviderTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Utils.UnitTests/DefaultTemplatePackageProviderTests.cs @@ -29,7 +29,7 @@ public async Task ReturnsFoldersAndNuPkgs() var nupkgs = new[] { Path.Combine(templateEngineTestAssets, "nupkg_templates", "*.nupkg") }; var provider = new DefaultTemplatePackageProvider(null!, _engineEnvironmentSettings, nupkgs, folders); - var sources = await provider.GetAllTemplatePackagesAsync(default); + var sources = await provider.GetAllTemplatePackagesAsync(TestContext.Current.CancellationToken); //Total should be 7 Assert.Equal(7, sources.Count); diff --git a/test/TemplateEngine/Microsoft.TemplateSearch.Common.UnitTests/NuGetMetadataSearchProviderTests.cs b/test/TemplateEngine/Microsoft.TemplateSearch.Common.UnitTests/NuGetMetadataSearchProviderTests.cs index b1d5df298712..4b7e8691b49b 100644 --- a/test/TemplateEngine/Microsoft.TemplateSearch.Common.UnitTests/NuGetMetadataSearchProviderTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateSearch.Common.UnitTests/NuGetMetadataSearchProviderTests.cs @@ -74,7 +74,7 @@ static IReadOnlyList Filter(TemplatePackageSearchData templatePac .ToList(); var searchCoordinator = new TemplateSearchCoordinator(engineEnvironmentSettings); - var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, default); + var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, TestContext.Current.CancellationToken); Assert.NotNull(searchResult); Assert.Single(searchResult); @@ -103,7 +103,7 @@ static IReadOnlyList Filter(TemplatePackageSearchData templatePac .ToList(); var searchCoordinator = new TemplateSearchCoordinator(engineEnvironmentSettings); - var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, default); + var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, TestContext.Current.CancellationToken); Assert.NotNull(searchResult); Assert.Single(searchResult); @@ -193,7 +193,7 @@ static IReadOnlyList Filter(TemplatePackageSearchData templatePac .ToList(); var searchCoordinator = new TemplateSearchCoordinator(engineEnvironmentSettings); - var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, default); + var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, TestContext.Current.CancellationToken); Assert.NotNull(searchResult); Assert.Single(searchResult); @@ -226,7 +226,7 @@ static IReadOnlyList Filter(TemplatePackageSearchData templatePac .ToList(); var searchCoordinator = new TemplateSearchCoordinator(engineEnvironmentSettings); - var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, default); + var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, TestContext.Current.CancellationToken); Assert.NotNull(searchResult); Assert.Single(searchResult); @@ -259,7 +259,7 @@ static IReadOnlyList Filter(TemplatePackageSearchData templatePac .ToList(); var searchCoordinator = new TemplateSearchCoordinator(engineEnvironmentSettings); - var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, default); + var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, TestContext.Current.CancellationToken); Assert.NotNull(searchResult); Assert.Single(searchResult); @@ -292,7 +292,7 @@ static IReadOnlyList Filter(TemplatePackageSearchData templatePac .ToList(); var searchCoordinator = new TemplateSearchCoordinator(engineEnvironmentSettings); - var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, default); + var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, TestContext.Current.CancellationToken); Assert.NotNull(searchResult); Assert.Single(searchResult); diff --git a/test/TemplateEngine/Microsoft.TemplateSearch.Common.UnitTests/TemplateSearchCoordinatorTests.cs b/test/TemplateEngine/Microsoft.TemplateSearch.Common.UnitTests/TemplateSearchCoordinatorTests.cs index 843bdca523d4..dc1d225d0d55 100644 --- a/test/TemplateEngine/Microsoft.TemplateSearch.Common.UnitTests/TemplateSearchCoordinatorTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateSearch.Common.UnitTests/TemplateSearchCoordinatorTests.cs @@ -42,7 +42,7 @@ public async Task TwoSourcesAreBothSearched() new MockTemplateSearchProviderFactory(Guid.NewGuid(), "provider2", provider2)); var searchCoordinator = new TemplateSearchCoordinator(_engineEnvironmentSettings); - var searchResult = await searchCoordinator.SearchAsync(p => true, p => p.Templates.ToList(), default); + var searchResult = await searchCoordinator.SearchAsync(p => true, p => p.Templates.ToList(), TestContext.Current.CancellationToken); Assert.Equal(2, searchResult.Count); Assert.Single(searchResult, r => r.Provider.Factory.DisplayName == "provider1"); @@ -73,7 +73,7 @@ static IReadOnlyList Filter(TemplatePackageSearchData templatePac .ToList(); var searchCoordinator = new TemplateSearchCoordinator(_engineEnvironmentSettings); - var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, default); + var searchResult = await searchCoordinator.SearchAsync(p => true, Filter, TestContext.Current.CancellationToken); Assert.Equal(2, searchResult.Count); var searchResultDictionary = searchResult.ToDictionary(r => r.Provider.Factory.DisplayName); diff --git a/test/TemplateEngine/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/NuGetTests.cs b/test/TemplateEngine/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/NuGetTests.cs index 785dda51e719..6423f132fe45 100644 --- a/test/TemplateEngine/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/NuGetTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests/NuGetTests.cs @@ -16,15 +16,15 @@ public async Task CanReadPackageInfo() { string nuGetOrgFeed = "https://api.nuget.org/v3/index.json"; var repository = Repository.Factory.GetCoreV3(nuGetOrgFeed); - ServiceIndexResourceV3 indexResource = repository.GetResource(); + ServiceIndexResourceV3 indexResource = repository.GetResource(TestContext.Current.CancellationToken); IReadOnlyList searchResources = indexResource.GetServiceEntries("SearchQueryService"); string queryString = $"{searchResources[0].Uri}?q=Microsoft.DotNet.Common.ProjectTemplates.5.0&skip=0&take=10&prerelease=true&semVerLevel=2.0.0"; Uri queryUri = new Uri(queryString); using HttpClient client = new HttpClient(); - using HttpResponseMessage response = await client.GetAsync(queryUri, CancellationToken.None); + using HttpResponseMessage response = await client.GetAsync(queryUri, TestContext.Current.CancellationToken); if (response.IsSuccessStatusCode) { - string responseText = await response.Content.ReadAsStringAsync(CancellationToken.None); + string responseText = await response.Content.ReadAsStringAsync(TestContext.Current.CancellationToken); NuGetPackageSearchResult resultsForPage = NuGetPackageSearchResult.FromJObject(JsonNode.Parse(responseText)!.AsObject()); Assert.Equal(1, resultsForPage.TotalHits); diff --git a/test/dotnet-new.IntegrationTests/CommonTemplatesTests.cs b/test/dotnet-new.IntegrationTests/CommonTemplatesTests.cs index 4abb20bca2a9..99b209dd0397 100644 --- a/test/dotnet-new.IntegrationTests/CommonTemplatesTests.cs +++ b/test/dotnet-new.IntegrationTests/CommonTemplatesTests.cs @@ -95,12 +95,12 @@ public async Task AllCommonItemsCreate(string expectedTemplateName, string templ if (expectedTemplateName.Equals("global.json file") && (args == null || !args.Contains("--sdk-version"))) { - string sdkVersionUnderTest = await new SdkInfoProvider().GetCurrentVersionAsync(default); + string sdkVersionUnderTest = await new SdkInfoProvider().GetCurrentVersionAsync(TestContext.Current.CancellationToken); options.CustomScrubbers?.AddScrubber(sb => sb.Replace(sdkVersionUnderTest, "%CURRENT-VER%"), "json"); } VerificationEngine engine = new(_logger); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } // @@ -229,7 +229,7 @@ public async Task AotVariants(string name, string language) ); VerificationEngine engine = new(_logger); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); Directory.Delete(workingDir, true); } @@ -430,7 +430,7 @@ public async Task FeaturesSupport( ); VerificationEngine engine = new(_logger); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); if (buildPass) { diff --git a/test/dotnet-new.IntegrationTests/DotnetClassTemplateTests.cs b/test/dotnet-new.IntegrationTests/DotnetClassTemplateTests.cs index 23858d02a8ec..656a2d976f86 100644 --- a/test/dotnet-new.IntegrationTests/DotnetClassTemplateTests.cs +++ b/test/dotnet-new.IntegrationTests/DotnetClassTemplateTests.cs @@ -93,7 +93,7 @@ public async Task DotnetCSharpClassTemplatesTest( })); VerificationEngine engine = new(_logger); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); ValidateInstantiatedProject(workingDir); } @@ -174,7 +174,7 @@ public async Task DotnetVisualBasicClassTemplatesTest( })); VerificationEngine engine = new(_logger); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); ValidateInstantiatedProject(workingDir); } diff --git a/test/dotnet-new.IntegrationTests/TemplateEngineSamplesTest.cs b/test/dotnet-new.IntegrationTests/TemplateEngineSamplesTest.cs index 55b0cf29b758..8efbe6f3ecfa 100644 --- a/test/dotnet-new.IntegrationTests/TemplateEngineSamplesTest.cs +++ b/test/dotnet-new.IntegrationTests/TemplateEngineSamplesTest.cs @@ -67,7 +67,7 @@ public async Task TemplateEngineSamplesProjectTest( .AddScrubber(sb => sb.ScrubMSBuildDebugLogMessage(), "txt")); VerificationEngine engine = new(_log); - await engine.Execute(options); + await engine.Execute(options, TestContext.Current.CancellationToken); } private string GetScenarioName(string[]? args) diff --git a/test/dotnet-watch.Tests/CommandLine/ProgramTests.cs b/test/dotnet-watch.Tests/CommandLine/ProgramTests.cs index 2779e8353fbc..773cd6a11761 100644 --- a/test/dotnet-watch.Tests/CommandLine/ProgramTests.cs +++ b/test/dotnet-watch.Tests/CommandLine/ProgramTests.cs @@ -37,14 +37,14 @@ public async Task ConsoleCancelKey() var run = program.RunAsync(); - await watching.WaitAsync(); + await watching.WaitAsync(TestContext.Current.CancellationToken); console.PressKey(new ConsoleKeyInfo('C', ConsoleKey.C, shift: false, alt: false, control: true)); var exitCode = await run; Assert.Equal(0, exitCode); - await shutdownRequested.WaitAsync(); + await shutdownRequested.WaitAsync(TestContext.Current.CancellationToken); } [Fact] diff --git a/test/dotnet-watch.Tests/FileWatcher/FileWatcherTests.cs b/test/dotnet-watch.Tests/FileWatcher/FileWatcherTests.cs index aaed56fd6d92..c61c14c6d473 100644 --- a/test/dotnet-watch.Tests/FileWatcher/FileWatcherTests.cs +++ b/test/dotnet-watch.Tests/FileWatcher/FileWatcherTests.cs @@ -344,7 +344,7 @@ public async Task NoNotificationIfDisabled(bool usePolling) // On Unix the file write time is in 1s increments; // if we don't wait, there's a chance that the polling // watcher will not detect the change - await Task.Delay(1000); + await Task.Delay(1000, TestContext.Current.CancellationToken); } File.WriteAllText(testFileFullPath, string.Empty); @@ -370,7 +370,7 @@ public async Task DisposedNoEvents(bool usePolling) // On Unix the file write time is in 1s increments; // if we don't wait, there's a chance that the polling // watcher will not detect the change - await Task.Delay(1000); + await Task.Delay(1000, TestContext.Current.CancellationToken); } File.WriteAllText(file, string.Empty); diff --git a/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs b/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs index 4711ab947efa..e279a5f6b81c 100644 --- a/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs +++ b/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs @@ -91,7 +91,7 @@ public async Task ChangeExcludedFile() // no file change within timeout: var fileChanged = App.AssertOutputLineStartsWith("dotnet watch ⌚ File changed:"); - var finished = await Task.WhenAny(Task.Delay(TimeSpan.FromSeconds(5)), fileChanged); + var finished = await Task.WhenAny(Task.Delay(TimeSpan.FromSeconds(5), TestContext.Current.CancellationToken), fileChanged); Assert.NotSame(fileChanged, finished); } diff --git a/test/dotnet.Tests/CommandTests/New/SdkInfoProviderTests.cs b/test/dotnet.Tests/CommandTests/New/SdkInfoProviderTests.cs index be25b9f8cb05..65d6d0a89681 100644 --- a/test/dotnet.Tests/CommandTests/New/SdkInfoProviderTests.cs +++ b/test/dotnet.Tests/CommandTests/New/SdkInfoProviderTests.cs @@ -20,8 +20,8 @@ public async Task GetInstalledVersionsAsync_ShouldContainCurrentVersion() // make sure current process path is not picked up as the dontet executable location ISdkInfoProvider sp = new SdkInfoProvider(() => string.Empty); - string currentVersion = await sp.GetCurrentVersionAsync(default); - IEnumerable allVersions = await sp.GetInstalledVersionsAsync(default); + string currentVersion = await sp.GetCurrentVersionAsync(TestContext.Current.CancellationToken); + IEnumerable allVersions = await sp.GetInstalledVersionsAsync(TestContext.Current.CancellationToken); currentVersion.Should().NotBeNullOrEmpty("Current Sdk version should be populated"); allVersions.ToList().Should().NotBeNull(); diff --git a/test/dotnet.Tests/CommandTests/New/WorkloadsInfoProviderTests.cs b/test/dotnet.Tests/CommandTests/New/WorkloadsInfoProviderTests.cs index ff92878f3116..a2bc950be79a 100644 --- a/test/dotnet.Tests/CommandTests/New/WorkloadsInfoProviderTests.cs +++ b/test/dotnet.Tests/CommandTests/New/WorkloadsInfoProviderTests.cs @@ -43,7 +43,7 @@ public async Task InstalledWorkloads_ShouldReturnExpectedWorkloads() IWorkloadsInfoProvider wp = new WorkloadsInfoProvider(new Lazy(workloadsEnumerator)); // Act - var workloads = await wp.GetInstalledWorkloadsAsync(default); + var workloads = await wp.GetInstalledWorkloadsAsync(TestContext.Current.CancellationToken); // Assert List expected = new() diff --git a/test/dotnet.Tests/CommandTests/Test/IPCTests.cs b/test/dotnet.Tests/CommandTests/Test/IPCTests.cs index 124580f0f64f..04ef33dcb490 100644 --- a/test/dotnet.Tests/CommandTests/Test/IPCTests.cs +++ b/test/dotnet.Tests/CommandTests/Test/IPCTests.cs @@ -13,6 +13,7 @@ public class IPCTests [Fact] public async Task SingleConnectionNamedPipeServer_MultipleConnection_Fails() { + var cancellationToken = TestContext.Current.CancellationToken; string pipeName = NamedPipeServer.GetPipeName(Guid.NewGuid().ToString("N")); List openedPipes = []; @@ -30,10 +31,10 @@ public async Task SingleConnectionNamedPipeServer_MultipleConnection_Fails() pipeName, (_, _) => Task.FromResult(VoidResponse.CachedInstance), maxNumberOfServerInstances: 1, - CancellationToken.None, + cancellationToken, skipUnknownMessages: false); - await singleConnectionNamedPipeServer.WaitConnectionAsync(CancellationToken.None); + await singleConnectionNamedPipeServer.WaitConnectionAsync(cancellationToken); openedPipes.Add(singleConnectionNamedPipeServer); } } @@ -42,11 +43,11 @@ public async Task SingleConnectionNamedPipeServer_MultipleConnection_Fails() exceptions.Add(ex); waitException.Set(); } - }); + }, cancellationToken); var namedPipeClient1 = new NamedPipeClient(pipeName); - await namedPipeClient1.ConnectAsync(CancellationToken.None); - waitException.Wait(); + await namedPipeClient1.ConnectAsync(cancellationToken); + waitException.Wait(cancellationToken); var openedPipe = Assert.Single(openedPipes); var exception = Assert.Single(exceptions); @@ -67,6 +68,7 @@ public async Task SingleConnectionNamedPipeServer_MultipleConnection_Fails() [Fact] public async Task SingleConnectionNamedPipeServer_RequestReplySerialization_Succeeded() { + var cancellationToken = TestContext.Current.CancellationToken; Queue receivedMessages = new(); string pipeName = NamedPipeServer.GetPipeName(Guid.NewGuid().ToString("N")); NamedPipeClient namedPipeClient = new(pipeName); @@ -83,7 +85,7 @@ public async Task SingleConnectionNamedPipeServer_RequestReplySerialization_Succ { try { - await namedPipeClient.ConnectAsync(CancellationToken.None); + await namedPipeClient.ConnectAsync(cancellationToken); manualResetEventSlim.Set(); break; } @@ -95,7 +97,7 @@ public async Task SingleConnectionNamedPipeServer_RequestReplySerialization_Succ { } } - }, CancellationToken.None); + }, cancellationToken); NamedPipeServer singleConnectionNamedPipeServer = new( pipeName, (_, request) => @@ -104,21 +106,21 @@ public async Task SingleConnectionNamedPipeServer_RequestReplySerialization_Succ return Task.FromResult(VoidResponse.CachedInstance); }, NamedPipeServerStream.MaxAllowedServerInstances, - CancellationToken.None, + cancellationToken, skipUnknownMessages: false); singleConnectionNamedPipeServer.RegisterSerializer(new VoidResponseSerializer(), typeof(VoidResponse)); singleConnectionNamedPipeServer.RegisterSerializer(new TextMessageSerializer(), typeof(TextMessage)); singleConnectionNamedPipeServer.RegisterSerializer(new IntMessageSerializer(), typeof(IntMessage)); singleConnectionNamedPipeServer.RegisterSerializer(new LongMessageSerializer(), typeof(LongMessage)); - await singleConnectionNamedPipeServer.WaitConnectionAsync(CancellationToken.None); - manualResetEventSlim.Wait(); + await singleConnectionNamedPipeServer.WaitConnectionAsync(cancellationToken); + manualResetEventSlim.Wait(cancellationToken); await clientConnected; - await namedPipeClient.RequestReplyAsync(new IntMessage(10), CancellationToken.None); + await namedPipeClient.RequestReplyAsync(new IntMessage(10), cancellationToken); Assert.Equal(new IntMessage(10), receivedMessages.Dequeue()); - await namedPipeClient.RequestReplyAsync(new LongMessage(11), CancellationToken.None); + await namedPipeClient.RequestReplyAsync(new LongMessage(11), cancellationToken); Assert.Equal(new LongMessage(11), receivedMessages.Dequeue()); for (int i = 0; i < 100; i++) @@ -145,7 +147,7 @@ public async Task SingleConnectionNamedPipeServer_RequestReplySerialization_Succ async Task AssertWithLengthAsync(int length) { string currentString = RandomString(length); - await namedPipeClient.RequestReplyAsync(new TextMessage(currentString), CancellationToken.None); + await namedPipeClient.RequestReplyAsync(new TextMessage(currentString), cancellationToken); Assert.Single(receivedMessages); Assert.Equal(new TextMessage(currentString), receivedMessages.Dequeue()); } @@ -154,6 +156,7 @@ async Task AssertWithLengthAsync(int length) [Fact] public async Task ConnectionNamedPipeServer_MultipleConnection_Succeeds() { + var cancellationToken = TestContext.Current.CancellationToken; string pipeName = NamedPipeServer.GetPipeName(Guid.NewGuid().ToString("N")); List pipes = []; @@ -163,7 +166,7 @@ public async Task ConnectionNamedPipeServer_MultipleConnection_Succeeds() pipeName, (_, _) => Task.FromResult(VoidResponse.CachedInstance), maxNumberOfServerInstances: 3, - CancellationToken.None, + cancellationToken, skipUnknownMessages: false)); } @@ -172,7 +175,7 @@ public async Task ConnectionNamedPipeServer_MultipleConnection_Succeeds() pipeName, (_, _) => Task.FromResult(VoidResponse.CachedInstance), maxNumberOfServerInstances: 3, - CancellationToken.None, + cancellationToken, skipUnknownMessages: false)); Assert.Contains("All pipe instances are busy.", exception.Message); @@ -183,9 +186,9 @@ public async Task ConnectionNamedPipeServer_MultipleConnection_Succeeds() waitConnectionTask.Add(Task.Run( async () => { - await namedPipeServer.WaitConnectionAsync(CancellationToken.None); + await namedPipeServer.WaitConnectionAsync(cancellationToken); Interlocked.Increment(ref connectionCompleted); - }, CancellationToken.None)); + }, cancellationToken)); } List connectedClients = []; @@ -193,7 +196,7 @@ public async Task ConnectionNamedPipeServer_MultipleConnection_Succeeds() { var namedPipeClient = new NamedPipeClient(pipeName); connectedClients.Add(namedPipeClient); - await namedPipeClient.ConnectAsync(CancellationToken.None); + await namedPipeClient.ConnectAsync(cancellationToken); } await Task.WhenAll([.. waitConnectionTask]); From 0b52d15b98f624750ea5025b33285ccc19b971a6 Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Tue, 21 Apr 2026 15:17:36 -0500 Subject: [PATCH 201/230] Fix ItFailsWithAnAppropriateErrorMessage test for file-based programs (#53981) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../CommandTests/Run/GivenDotnetRunThrowsAParseError.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunThrowsAParseError.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunThrowsAParseError.cs index 035c7e7b1444..5fbec527dfd3 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunThrowsAParseError.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunThrowsAParseError.cs @@ -12,9 +12,12 @@ public GivenDotnetRunThrowsAParseError(ITestOutputHelper log) : base(log) [Fact] public void ItFailsWithAnAppropriateErrorMessage() { + // Use a dedicated empty directory because file-based program support means that dotnet run will + // pick up stray .cs files from other tests. + var emptyDir = TestAssetsManager.CreateTestDirectory().Path; + new DotnetCommand(Log, "run") - // executing in a known path, with no project, is a sure way to get run to throw a parse error - .WithWorkingDirectory(Path.GetTempPath()) + .WithWorkingDirectory(emptyDir) .Execute("--", "1") .Should().Fail() .And.HaveStdErrContainingOnce("Couldn't find a project to run."); From bf2024bca25369cbbbd92e8fc62083c375758a49 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 20:23:29 +0000 Subject: [PATCH 202/230] Reset files to release/10.0.4xx Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- eng/Version.Details.props | 124 +++++++++---------- eng/Version.Details.xml | 250 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 99f797e5d9ed..82e48abcaa25 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -30,39 +30,39 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-preview.26217.103 + 10.0.0-preview.26216.115 10.0.6 10.0.6 - 18.6.0-preview-26217-103 - 18.6.0-preview-26217-103 - 7.6.0-rc.21803 - 10.0.300-alpha.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 10.0.0-preview.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 + 18.6.0-preview-26216-115 + 18.6.0-preview-26216-115 + 7.6.0-rc.21715 + 10.0.300-alpha.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 10.0.0-preview.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 2.0.0-preview.1.26176.101 2.2.6 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 10.0.6 10.0.6 10.0.6-servicing.26176.101 10.0.6-servicing.26176.101 - 10.0.0-beta.26217.103 - 10.0.0-beta.26217.103 + 10.0.0-beta.26216.115 + 10.0.0-beta.26216.115 10.0.6 10.0.6 10.0.6 @@ -73,55 +73,55 @@ This file should be imported by eng/Versions.props 10.0.6 10.0.6 10.0.6 - 15.2.300-servicing.26217.103 + 15.2.300-servicing.26216.115 10.0.6 - 5.6.0-2.26217.103 - 5.6.0-2.26217.103 + 5.6.0-2.26216.115 + 5.6.0-2.26216.115 10.0.6-servicing.26176.101 10.0.6 10.0.6 10.0.0-preview.7.25377.103 - 10.0.0-preview.26217.103 + 10.0.0-preview.26216.115 10.0.6-servicing.26176.101 - 18.3.0-release-26217-103 + 18.3.0-release-26216-115 10.0.6 10.0.6-servicing.26176.101 - 10.0.300-alpha.26217.103 - 10.0.300-alpha.26217.103 - 10.0.300-alpha.26217.103 - 10.0.300-alpha.26217.103 - 10.0.300-alpha.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 10.0.300-preview.26217.103 - 18.3.0-release-26217-103 - 18.3.0-release-26217-103 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-alpha.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 10.0.300-preview.26216.115 + 18.3.0-release-26216-115 + 18.3.0-release-26216-115 3.2.6 10.0.6 10.0.6-servicing.26176.101 10.0.6 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 - 7.6.0-rc.21803 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 + 7.6.0-rc.21715 10.0.6 2.0.6 10.0.6 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 030099280eaa..5b32d0e3744e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,42 +1,42 @@ - + - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -72,142 +72,142 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -374,25 +374,25 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -409,29 +409,29 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 @@ -523,9 +523,9 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet @@ -537,37 +537,37 @@ - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 - + https://github.com/dotnet/dotnet - e30a7bd50de5c85da94a3ef0d5718bacb59d4423 + 7141470de2a1582db15ae6886e361ead12efb3d8 https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet diff --git a/global.json b/global.json index 2153ce93b9a5..32e5d4729716 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26217.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26217.103", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26216.115", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26216.115", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From a9ed4d0db583a460087376ffa2e32895dec39aff Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Tue, 21 Apr 2026 13:38:22 -0700 Subject: [PATCH 203/230] Increment VersionFeature100 from 6 to 7 --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index e5788e235ed0..a3aaea890741 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -36,7 +36,7 @@ 26 15 - 6 + 7 <_NET70ILLinkPackVersion>7.0.100-1.23211.1 From 1ae871d23309508bc08dff33f7885b5adbdf9c58 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Wed, 22 Apr 2026 09:52:15 +0200 Subject: [PATCH 204/230] Remove feature flag for transitive `#:` directives (#54012) --- documentation/general/dotnet-run-file.md | 1 - .../FileLevelDirectiveHelpers.cs | 1 - .../InternalAPI.Unshipped.txt | 1 - .../VirtualProjectBuilder.cs | 6 -- .../Convert/DotnetProjectConvertTests.cs | 4 +- .../CommandTests/Run/RunFileTests.cs | 60 ------------------- 6 files changed, 1 insertion(+), 72 deletions(-) diff --git a/documentation/general/dotnet-run-file.md b/documentation/general/dotnet-run-file.md index dfcb07822795..49a4946936d5 100644 --- a/documentation/general/dotnet-run-file.md +++ b/documentation/general/dotnet-run-file.md @@ -261,7 +261,6 @@ and can do that efficiently by stopping the search when it sees the first "C# to For a given `dotnet run file.cs`, we include directives from the current entry point file (`file.cs`) and all other non-entry-point C# files, specifically from all `Compile` items included in the project, no matter whether the `Compile` items are specified in some MSBuild code or inferred from `#:include`. -(Processing directives from other files is currently gated under a feature flag that can be enabled by setting the MSBuild property `ExperimentalFileBasedProgramEnableTransitiveDirectives=true`.) The order in which other files are processed is currently unspecified (can change across SDK versions) but deterministic (stable in a given SDK version). We do not limit these directives to appear only in entry point files because it allows: - a non-entry-point file like `Util.cs` to be self-contained and have all the `#:package`s it needs specified in it, diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs b/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs index 65fd17f44bdb..2303d48b4c2e 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs @@ -693,7 +693,6 @@ public enum IncludeOrExcludeKind ///
public sealed class IncludeOrExclude(in ParseInfo info) : Named(info) { - public const string ExperimentalFileBasedProgramEnableTransitiveDirectives = nameof(ExperimentalFileBasedProgramEnableTransitiveDirectives); public const string MappingPropertyName = "FileBasedProgramsItemMapping"; public static string DefaultMappingString => ".cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content"; diff --git a/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt b/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt index d3a08eaa3a3e..cb463f26bf99 100644 --- a/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt +++ b/src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt @@ -1,4 +1,3 @@ -const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives = "ExperimentalFileBasedProgramEnableTransitiveDirectives" -> string! const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.IncludeOrExclude.MappingPropertyName = "FileBasedProgramsItemMapping" -> string! const Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective = "ExperimentalFileBasedProgramEnableRefDirective" -> string! Microsoft.DotNet.FileBasedPrograms.CSharpDirective diff --git a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs index 50f18abe9265..64797417230f 100644 --- a/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs +++ b/src/Microsoft.DotNet.ProjectTools/VirtualProjectBuilder.cs @@ -437,7 +437,6 @@ private void CheckDirectives( ErrorReporter reportError) { bool? refEnabled = null; - bool? transitiveEnabled = null; foreach (var directive in directives) { @@ -445,11 +444,6 @@ private void CheckDirectives( { CheckFlagEnabled(ref refEnabled, CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, directive); } - - if (directive.Info.SourceFile.Path != EntryPointSourceFile.Path) - { - CheckFlagEnabled(ref transitiveEnabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives, directive); - } } void CheckFlagEnabled(ref bool? flag, string flagName, CSharpDirective directive) diff --git a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs index b06c4aae98f6..edf0e2c1841e 100644 --- a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs +++ b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs @@ -448,7 +448,6 @@ public void RefDirective_DuplicateFolderName_ViaInclude() <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true """); @@ -2715,8 +2714,7 @@ public void DeleteSource_WithIncludeDirective_Transitive() var testInstance = _testAssetsManager.CreateTestDirectory(); // Create entry point file with #:include directive - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" - #:property {CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}=true + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ #:include Util.cs Console.WriteLine("Test"); """); diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs index 26e16204fc0e..3a459765653b 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs @@ -1249,9 +1249,6 @@ public static class B """); File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true - @@ -4081,7 +4078,6 @@ public void RefDirective_DuplicateRefFromIncludedFiles() <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true """); @@ -4139,7 +4135,6 @@ public void RefDirective_DuplicateRefFromIncludedFiles_Subdirectories() <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true """); @@ -4204,7 +4199,6 @@ public void RefDirective_IncludeAndRefSameFile() <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true """); @@ -4340,14 +4334,6 @@ public void IncludeDirective_Transitive() Directory.CreateDirectory(Path.Join(testInstance.Path, "dir1/dir2")); Directory.CreateDirectory(Path.Join(testInstance.Path, "dir3")); - File.WriteAllText(Path.Join(testInstance.Path, "dir1/Directory.Build.props"), $""" - - - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true - - - """); - var a = """ B.M(); """; @@ -4598,14 +4584,6 @@ public void IncludeDirective_UpToDate_ProjectReference() { var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - - - <{CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives}>true - - - """); - var libDir = Path.Join(testInstance.Path, "Lib"); Directory.CreateDirectory(libDir); @@ -4665,44 +4643,6 @@ class UtilClass Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput, workDir: appDir); } - /// - /// Transitive directives (directives in non-entry-point files) are gated behind a feature flag. - /// - [Fact] - public void IncludeDirective_FeatureFlags() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #!/usr/bin/env dotnet - #:include Util.cs - Console.WriteLine(Util.M()); - """); - - var utilPath = Path.Join(testInstance.Path, "Util.cs"); - File.WriteAllText(utilPath, """ - #:property DefineConstants=MY_CONST - static class Util { public static string M() => "Hello from Util"; } - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr($""" - {DirectiveError(utilPath, 1, Resources.ExperimentalFeatureDisabled, CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives)} - - {CliCommandStrings.RunCommandException} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .WithEnvironmentVariable(CSharpDirective.IncludeOrExclude.ExperimentalFileBasedProgramEnableTransitiveDirectives, "true") - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Util"); - } - [Fact] public void IncludeDirective_CustomMapping() { From f10f362a322027f188dd6fa2e3a07b9ffadd3c16 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Wed, 22 Apr 2026 12:05:49 +0200 Subject: [PATCH 205/230] Localized file check-in by OneLocBuild Task: Build definition ID 140: Build ID 2957428 --- src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf index c30b005d8895..0b94119521b6 100644 --- a/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf +++ b/src/Cli/dotnet/Commands/xlf/CliCommandStrings.tr.xlf @@ -1500,12 +1500,12 @@ Projeniz birden fazla Framework'ü hedefliyor. '{0}' kullanarak hangi Framework' Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' looks like a file-based app but the file was not found, and it was passed as an argument to the project '{1}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Uyarı: '{0}' dosya tabanlı bir uygulama gibi görünüyor ancak dosya bulunamadı ve proje '{1}' için bağımsız değişken olarak iletildi. Uygulama bağımsız değişkeni olarak iletmek ve bu uyarıyı gizlemek için 'dotnet run -- {0}' komutunu kullanın. {0} is the .cs file path argument. {1} is the project file path.{Locked="dotnet run --"} Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. - Warning: '{0}' appears to be a file-based app but was passed as an argument to the project '{1}'. To run it as a file-based app, use 'dotnet run --file {0}'. To pass it as an application argument, use 'dotnet run -- {0}' to suppress this warning. + Uyarı: '{0}' dosya tabanlı bir uygulama gibi görünüyor ancak proje '{1}' için bağımsız değişken olarak iletildi. Dosya tabanlı bir uygulama olarak çalıştırmak için 'dotnet run --file {0}' komutunu kullanın. Uygulama bağımsız değişkeni olarak iletmek ve bu uyarıyı gizlemek için 'dotnet run -- {0}' komutunu kullanın. {0} is the file path argument. {1} is the project file path.{Locked="dotnet run --file"}{Locked="dotnet run --"} @@ -2081,12 +2081,12 @@ karşılık gelen paket kimliklerini bulmak için Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. - Warning: '{0}' looks like a file-based app but the file was not found, and it was treated as an MSBuild argument. + Uyarı: '{0}' dosya tabanlı bir uygulama gibi görünüyor ancak dosya bulunamadı ve MSBuild bağımsız değişkeni olarak işlendi. {0} is the .cs file path argument. Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. - Warning: '{0}' appears to be a file-based app but was treated as an MSBuild argument. To treat it as a file-based app, use 'dotnet {1} {0}'. + Uyarı: '{0}' dosya tabanlı bir uygulama gibi görünüyor ancak MSBuild bağımsız değişkeni olarak işlendi. Dosya tabanlı bir uygulama olarak işlemek için 'dotnet {1} {0}' komutunu kullanın. {0} is the file path argument. {1} is the command name (e.g. build, clean, publish).{Locked="dotnet"} From d88975602491e7ba612d4e2b2059a177a242d6d5 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Wed, 22 Apr 2026 14:22:49 +0200 Subject: [PATCH 206/230] Split RunFileTests into multiple files to match main branch structure Splits the monolithic RunFileTests.cs into: - RunFileTestBase.cs: shared base class, fields, helpers - RunFileTests_General.cs: general file path, stdin, project tests - RunFileTests_BuildOptions.cs: build options, binary logs, verbosity tests - RunFileTests_BuildCommands.cs: restore, build, publish, pack, clean tests - RunFileTests_Directives.cs: directive tests (define, package, sdk, ref, include) - RunFileTests_CscOnlyAndApi.cs: csc-only, up-to-date, API tests This matches the split structure on main to minimize merge conflicts when flowing changes between branches. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Convert/DotnetProjectConvertTests.cs | 6 +- .../CommandTests/Run/RunFileTestBase.cs | 215 + .../CommandTests/Run/RunFileTests.cs | 7519 ----------------- .../Run/RunFileTests_BuildCommands.cs | 924 ++ .../Run/RunFileTests_BuildOptions.cs | 1007 +++ .../Run/RunFileTests_CscOnlyAndApi.cs | 2574 ++++++ .../Run/RunFileTests_Directives.cs | 1686 ++++ .../CommandTests/Run/RunFileTests_General.cs | 1180 +++ 8 files changed, 7589 insertions(+), 7522 deletions(-) create mode 100644 test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs delete mode 100644 test/dotnet.Tests/CommandTests/Run/RunFileTests.cs create mode 100644 test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildCommands.cs create mode 100644 test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildOptions.cs create mode 100644 test/dotnet.Tests/CommandTests/Run/RunFileTests_CscOnlyAndApi.cs create mode 100644 test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs create mode 100644 test/dotnet.Tests/CommandTests/Run/RunFileTests_General.cs diff --git a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs index edf0e2c1841e..e559f47539b3 100644 --- a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs +++ b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs @@ -1266,7 +1266,7 @@ public void ProcessingFails() .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Fail() - .And.HaveStdErrContaining(RunFileTests.DirectiveError(filePath, 1, FileBasedProgramsResources.UnrecognizedDirective, "invalid")); + .And.HaveStdErrContaining(RunFileTestBase.DirectiveError(filePath, 1, FileBasedProgramsResources.UnrecognizedDirective, "invalid")); new DirectoryInfo(Path.Join(testInstance.Path)) .EnumerateDirectories().Should().BeEmpty(); @@ -1719,8 +1719,8 @@ public void Directives_IncludeExclude() expectedCSharp: "", expectedErrors: [ - (7, string.Format(FileBasedProgramsResources.IncludeOrExcludeDirectiveUnknownFileType, "#:include", RunFileTests.s_includeExcludeDefaultKnownExtensions)), - (8, string.Format(FileBasedProgramsResources.IncludeOrExcludeDirectiveUnknownFileType, "#:exclude", RunFileTests.s_includeExcludeDefaultKnownExtensions)), + (7, string.Format(FileBasedProgramsResources.IncludeOrExcludeDirectiveUnknownFileType, "#:include", RunFileTestBase.s_includeExcludeDefaultKnownExtensions)), + (8, string.Format(FileBasedProgramsResources.IncludeOrExcludeDirectiveUnknownFileType, "#:exclude", RunFileTestBase.s_includeExcludeDefaultKnownExtensions)), (1, string.Format(Resources.IncludedFileNotFound, Path.Join(testInstance.Path, "A.cs"))), (1, string.Format(Resources.IncludedFileNotFound, Path.Join(testInstance.Path, "|.cs"))), ]); diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs new file mode 100644 index 000000000000..71d0e567721c --- /dev/null +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs @@ -0,0 +1,215 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.Build.Framework; +using Microsoft.Build.Logging.StructuredLogger; +using Microsoft.DotNet.Cli.Commands; +using Microsoft.DotNet.Cli.Commands.Run; +using Microsoft.DotNet.Cli.Utils; +using Microsoft.DotNet.FileBasedPrograms; +using Microsoft.DotNet.ProjectTools; + +namespace Microsoft.DotNet.Cli.Run.Tests; + +public abstract class RunFileTestBase(ITestOutputHelper log) : SdkTest(log) +{ + internal static string s_includeExcludeDefaultKnownExtensions + => field ??= string.Join(", ", CSharpDirective.IncludeOrExclude.DefaultMapping.Select(static e => e.Extension)); + + internal static readonly string s_program = /* lang=C#-Test */ """ + if (args.Length > 0) + { + Console.WriteLine("echo args:" + string.Join(";", args)); + } + Console.WriteLine("Hello from " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name); + #if !DEBUG + Console.WriteLine("Release config"); + #endif + #if CUSTOM_DEFINE + Console.WriteLine("Custom define"); + #endif + """; + + internal static readonly string s_programDependingOnUtil = /* lang=C#-Test */ """ + if (args.Length > 0) + { + Console.WriteLine("echo args:" + string.Join(";", args)); + } + Console.WriteLine("Hello, " + Util.GetMessage()); + """; + + internal static readonly string s_util = /* lang=C#-Test */ """ + static class Util + { + public static string GetMessage() + { + return "String from Util"; + } + } + """; + + internal static readonly string s_programReadingEmbeddedResource = /* lang=C#-Test */ """ + var assembly = System.Reflection.Assembly.GetExecutingAssembly(); + var resourceName = assembly.GetManifestResourceNames().SingleOrDefault(); + + if (resourceName is null) + { + Console.WriteLine("Resource not found"); + return; + } + + using var stream = assembly.GetManifestResourceStream(resourceName)!; + using var reader = new System.Resources.ResourceReader(stream); + Console.WriteLine(reader.Cast().Single()); + """; + + internal static readonly string s_resx = """ + + + TestValue + + + """; + + internal static readonly string s_consoleProject = $""" + + + Exe + {ToolsetInfo.CurrentTargetFramework} + enable + + + """; + + internal static readonly string s_launchSettings = """ + { + "profiles": { + "TestProfile1": { + "commandName": "Project", + "environmentVariables": { + "Message": "TestProfileMessage1" + } + }, + "TestProfile2": { + "commandName": "Project", + "environmentVariables": { + "Message": "TestProfileMessage2" + } + } + } + } + """; + + /// + /// Used when we need an out-of-tree base test directory to avoid having implicit build files + /// like Directory.Build.props in scope and negating the optimizations we want to test. + /// + internal static string OutOfTreeBaseDirectory => field ??= PrepareOutOfTreeBaseDirectory(); + + internal static bool HasCaseInsensitiveFileSystem + { + get + { + return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) + || RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + } + } + + /// + private static string PrepareOutOfTreeBaseDirectory() + { + string outOfTreeBaseDirectory = TestPathUtility.ResolveTempPrefixLink(Path.Join(Path.GetTempPath(), "dotnetSdkTests")); + Directory.CreateDirectory(outOfTreeBaseDirectory); + + // Create NuGet.config in our out-of-tree base directory. + var sourceNuGetConfig = Path.Join(SdkTestContext.Current.TestExecutionDirectory, "NuGet.config"); + var targetNuGetConfig = Path.Join(outOfTreeBaseDirectory, "NuGet.config"); + File.Copy(sourceNuGetConfig, targetNuGetConfig, overwrite: true); + + // Check there are no implicit build files that would prevent testing optimizations. + VirtualProjectBuildingCommand.CollectImplicitBuildFiles(new DirectoryInfo(outOfTreeBaseDirectory), [], out var exampleMSBuildFile); + exampleMSBuildFile.Should().BeNull(because: "there should not be any implicit build files in the temp directory or its parents " + + "so we can test optimizations that would be disabled with implicit build files present"); + + return outOfTreeBaseDirectory; + } + + internal static string DirectiveError(string path, int line, string messageFormat, params ReadOnlySpan args) + { + return $"{path}({line}): {FileBasedProgramsResources.DirectiveError}: {string.Format(messageFormat, args)}"; + } + + internal static void EnableRefDirective(TestDirectory testInstance) + { + var propsPath = Path.Join(testInstance.Path, "Directory.Build.props"); + var propsContent = File.Exists(propsPath) ? File.ReadAllText(propsPath) : null; + if (propsContent is not null && propsContent.Contains(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective)) + { + return; + } + + File.WriteAllText(propsPath, $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + } + + + internal static void VerifyBinLogEvaluationDataCount(string binaryLogPath, int expectedCount) + { + var records = BinaryLog.ReadRecords(binaryLogPath).ToList(); + records.Count(static r => r.Args is ProjectEvaluationStartedEventArgs).Should().Be(expectedCount); + records.Count(static r => r.Args is ProjectEvaluationFinishedEventArgs).Should().Be(expectedCount); + } + + private protected void Build( + TestDirectory testInstance, + BuildLevel expectedLevel, + ReadOnlySpan args = default, + string expectedOutput = "Hello from Program", + string programFileName = "Program.cs", + string? workDir = null, + Func? customizeCommand = null) + { + string prefix = expectedLevel switch + { + BuildLevel.None => CliCommandStrings.NoBinaryLogBecauseUpToDate + Environment.NewLine, + BuildLevel.Csc => CliCommandStrings.NoBinaryLogBecauseRunningJustCsc + Environment.NewLine, + BuildLevel.All => string.Empty, + _ => throw new ArgumentOutOfRangeException(paramName: nameof(expectedLevel)), + }; + + var command = new DotnetCommand(Log, ["run", programFileName, "-bl", .. args]) + .WithWorkingDirectory(workDir ?? testInstance.Path); + + if (customizeCommand != null) + { + command = customizeCommand(command); + } + + command.Execute() + .Should().Pass() + .And.HaveStdOut(prefix + expectedOutput); + + var binlogs = new DirectoryInfo(workDir ?? testInstance.Path) + .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly); + + binlogs.Select(f => f.Name) + .Should().BeEquivalentTo( + expectedLevel switch + { + BuildLevel.None or BuildLevel.Csc => [], + BuildLevel.All => ["msbuild.binlog"], + _ => throw new ArgumentOutOfRangeException(paramName: nameof(expectedLevel), message: expectedLevel.ToString()), + }); + + foreach (var binlog in binlogs) + { + binlog.Delete(); + } + } + +} diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs deleted file mode 100644 index 3a459765653b..000000000000 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests.cs +++ /dev/null @@ -1,7519 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Collections.Immutable; -using System.Runtime.Versioning; -using System.Text.Json; -using Basic.CompilerLog.Util; -using Microsoft.Build.Evaluation; -using Microsoft.Build.Framework; -using Microsoft.Build.Logging.StructuredLogger; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.Text; -using Microsoft.DotNet.Cli.Commands; -using Microsoft.DotNet.Cli.Commands.NuGet; -using Microsoft.DotNet.Cli.Commands.Run; -using Microsoft.DotNet.Cli.Utils; -using Microsoft.DotNet.FileBasedPrograms; -using Microsoft.DotNet.ProjectTools; - -namespace Microsoft.DotNet.Cli.Run.Tests; - -public sealed class RunFileTests(ITestOutputHelper log) : SdkTest(log) -{ - internal static string s_includeExcludeDefaultKnownExtensions - => field ??= string.Join(", ", CSharpDirective.IncludeOrExclude.DefaultMapping.Select(static e => e.Extension)); - - private static readonly string s_program = /* lang=C#-Test */ """ - if (args.Length > 0) - { - Console.WriteLine("echo args:" + string.Join(";", args)); - } - Console.WriteLine("Hello from " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name); - #if !DEBUG - Console.WriteLine("Release config"); - #endif - #if CUSTOM_DEFINE - Console.WriteLine("Custom define"); - #endif - """; - - private static readonly string s_programDependingOnUtil = /* lang=C#-Test */ """ - if (args.Length > 0) - { - Console.WriteLine("echo args:" + string.Join(";", args)); - } - Console.WriteLine("Hello, " + Util.GetMessage()); - """; - - private static readonly string s_util = /* lang=C#-Test */ """ - static class Util - { - public static string GetMessage() - { - return "String from Util"; - } - } - """; - - private static readonly string s_programReadingEmbeddedResource = /* lang=C#-Test */ """ - var assembly = System.Reflection.Assembly.GetExecutingAssembly(); - var resourceName = assembly.GetManifestResourceNames().SingleOrDefault(); - - if (resourceName is null) - { - Console.WriteLine("Resource not found"); - return; - } - - using var stream = assembly.GetManifestResourceStream(resourceName)!; - using var reader = new System.Resources.ResourceReader(stream); - Console.WriteLine(reader.Cast().Single()); - """; - - private static readonly string s_resx = """ - - - TestValue - - - """; - - private static readonly string s_consoleProject = $""" - - - Exe - {ToolsetInfo.CurrentTargetFramework} - enable - - - """; - - private static readonly string s_launchSettings = """ - { - "profiles": { - "TestProfile1": { - "commandName": "Project", - "environmentVariables": { - "Message": "TestProfileMessage1" - } - }, - "TestProfile2": { - "commandName": "Project", - "environmentVariables": { - "Message": "TestProfileMessage2" - } - } - } - } - """; - - /// - /// Used when we need an out-of-tree base test directory to avoid having implicit build files - /// like Directory.Build.props in scope and negating the optimizations we want to test. - /// - private static string OutOfTreeBaseDirectory => field ??= PrepareOutOfTreeBaseDirectory(); - - private static bool HasCaseInsensitiveFileSystem - { - get - { - return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) - || RuntimeInformation.IsOSPlatform(OSPlatform.OSX); - } - } - - /// - private static string PrepareOutOfTreeBaseDirectory() - { - string outOfTreeBaseDirectory = TestPathUtility.ResolveTempPrefixLink(Path.Join(Path.GetTempPath(), "dotnetSdkTests")); - Directory.CreateDirectory(outOfTreeBaseDirectory); - - // Create NuGet.config in our out-of-tree base directory. - var sourceNuGetConfig = Path.Join(SdkTestContext.Current.TestExecutionDirectory, "NuGet.config"); - var targetNuGetConfig = Path.Join(outOfTreeBaseDirectory, "NuGet.config"); - File.Copy(sourceNuGetConfig, targetNuGetConfig, overwrite: true); - - // Check there are no implicit build files that would prevent testing optimizations. - VirtualProjectBuildingCommand.CollectImplicitBuildFiles(new DirectoryInfo(outOfTreeBaseDirectory), [], out var exampleMSBuildFile); - exampleMSBuildFile.Should().BeNull(because: "there should not be any implicit build files in the temp directory or its parents " + - "so we can test optimizations that would be disabled with implicit build files present"); - - return outOfTreeBaseDirectory; - } - - internal static string DirectiveError(string path, int line, string messageFormat, params ReadOnlySpan args) - { - return $"{path}({line}): {FileBasedProgramsResources.DirectiveError}: {string.Format(messageFormat, args)}"; - } - - private static void EnableRefDirective(TestDirectory testInstance) - { - var propsPath = Path.Join(testInstance.Path, "Directory.Build.props"); - var propsContent = File.Exists(propsPath) ? File.ReadAllText(propsPath) : null; - if (propsContent is not null && propsContent.Contains(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective)) - { - return; - } - - File.WriteAllText(propsPath, $""" - - - <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - - - """); - } - - /// - /// dotnet run file.cs succeeds without a project file. - /// - [Theory] - [InlineData(null, false)] // will be replaced with an absolute path - [InlineData("Program.cs", false)] - [InlineData("./Program.cs", false)] - [InlineData("Program.CS", true)] - public void FilePath(string? path, bool differentCasing) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - - File.WriteAllText(programPath, s_program); - - path ??= programPath; - - var result = new DotnetCommand(Log, "run", path) - .WithWorkingDirectory(testInstance.Path) - .Execute(); - - if (!differentCasing || HasCaseInsensitiveFileSystem) - { - result.Should().Pass() - .And.HaveStdOut("Hello from Program"); - } - else - { - result.Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandExceptionNoProjects, - testInstance.Path, - "--project")); - } - } - - /// - /// dotnet file.cs is equivalent to dotnet run file.cs. - /// - [Fact] - public void FilePath_WithoutRun() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - Hello from Program - """); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" - #:property Configuration=Release - {s_program} - """); - - string expectedOutput = """ - Hello from Program - Release config - """; - - new DotnetCommand(Log, "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - - new DotnetCommand(Log, "./Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - - new DotnetCommand(Log, $".{Path.DirectorySeparatorChar}Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - - new DotnetCommand(Log, Path.Join(testInstance.Path, "Program.cs")) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - - new DotnetCommand(Log, "Program.cs", "-c", "Debug") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - Hello from Program - """); - - new DotnetCommand(Log, "Program.cs", "arg1", "arg2") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:arg1;arg2 - Hello from Program - Release config - """); - - new DotnetCommand(Log, "Program.cs", "build") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:build - Hello from Program - Release config - """); - - new DotnetCommand(Log, "Program.cs", "arg1", "arg2") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:arg1;arg2 - Hello from Program - Release config - """); - - // https://github.com/dotnet/sdk/issues/52108 - new DotnetCommand(Log, "Program.cs", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:Program.cs - Hello from Program - Release config - """); - } - - /// - /// Casing of the argument is used for the output binary name. - /// - [Fact] - public void FilePath_DifferentCasing() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - var result = new DotnetCommand(Log, "run", "program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute(); - - if (HasCaseInsensitiveFileSystem) - { - result.Should().Pass() - .And.HaveStdOut("Hello from program"); - } - else - { - result.Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandExceptionNoProjects, - testInstance.Path, - "--project")); - } - } - - /// - /// dotnet run folder/file.cs succeeds without a project file. - /// - [Fact] - public void FilePath_OutsideWorkDir() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - var dirName = Path.GetFileName(testInstance.Path); - - new DotnetCommand(Log, "run", $"{dirName}/Program.cs") - .WithWorkingDirectory(Path.GetDirectoryName(testInstance.Path)!) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - } - - /// - /// dotnet run --project file.cs fails. - /// - [Fact] - public void FilePath_AsProjectArgument() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "run", "--project", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); - } - - /// - /// Even if there is a file-based app ./build, dotnet build should not execute that. - /// - [Theory] - // error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file. - [InlineData("build", "MSB1003", false)] - // dotnet watch: Could not find a MSBuild project file in '...'. Specify which project to use with the --project option. - [InlineData("watch", "--project", true)] - public void Precedence_BuiltInCommand(string cmd, string error, bool errorInStdErr) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, cmd), """ - #!/usr/bin/env dotnet - Console.WriteLine("hello 1"); - """); - File.WriteAllText(Path.Join(testInstance.Path, $"dotnet-{cmd}"), """ - #!/usr/bin/env dotnet - Console.WriteLine("hello 2"); - """); - - // dotnet build -> built-in command - var failure = new DotnetCommand(Log, cmd) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail(); - - if (errorInStdErr) - { - failure.And.HaveStdErrContaining(error); - } - else - { - failure.And.HaveStdOutContaining(error); - } - - // dotnet ./build -> file-based app - new DotnetCommand(Log, $"./{cmd}") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("hello 1"); - - // dotnet run build -> file-based app - new DotnetCommand(Log, "run", cmd) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("hello 1"); - } - - /// - /// Even if there is a file-based app ./test.dll, dotnet test.dll should not execute that. - /// - [Theory] - [InlineData("test.dll")] - [InlineData("./test.dll")] - public void Precedence_Dll(string arg) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "test.dll"), """ - #!/usr/bin/env dotnet - Console.WriteLine("hello world"); - """); - - // dotnet [./]test.dll -> exec the dll - new DotnetCommand(Log, arg) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - // A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in ... - .And.HaveStdErrContaining("hostpolicy"); - - // dotnet run [./]test.dll -> file-based app - new DotnetCommand(Log, "run", arg) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("hello world"); - } - - // https://github.com/dotnet/sdk/issues/49665 - // Failed to load /private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib, error: dlopen(/private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib, 0x0001): tried: '/private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib' (no such file), '/private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')) - [PlatformSpecificFact(TestPlatforms.Any & ~TestPlatforms.OSX)] - public void Precedence_NuGetTool() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "complog"), """ - #!/usr/bin/env dotnet - Console.WriteLine("hello world"); - """); - - new DotnetCommand(Log, "new", "tool-manifest") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "tool", "install", "complog@0.7.0") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - // dotnet complog -> NuGet tool - new DotnetCommand(Log, "complog") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining("complog"); - - // dotnet ./complog -> file-based app - new DotnetCommand(Log, "./complog") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("hello world"); - - // dotnet run complog -> file-based app - new DotnetCommand(Log, "run", "complog") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("hello world"); - } - - /// - /// dotnet run - reads the C# code from stdin. - /// - [Fact] - public void ReadFromStdin() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - new DotnetCommand(Log, "run", "-") - .WithWorkingDirectory(testInstance.Path) - .WithStandardInput(""" - Console.WriteLine("Hello from stdin"); - Console.WriteLine("Read: " + (Console.ReadLine() ?? "null")); - Console.WriteLine("Working directory: " + Environment.CurrentDirectory); - """) - .Execute() - .Should().Pass() - .And.HaveStdOut($""" - Hello from stdin - Read: null - Working directory: {testInstance.Path} - """); - } - - /// - /// Directory.Build.props doesn't have any effect on dotnet run -. - /// - [Fact] - public void ReadFromStdin_BuildProps() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - disable - - - """); - - new DotnetCommand(Log, "run", "-") - .WithWorkingDirectory(testInstance.Path) - .WithStandardInput(""" - Console.WriteLine("Hello from stdin"); - """) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from stdin"); - - new DotnetCommand(Log, "run", "-") - .WithWorkingDirectory(testInstance.Path) - .WithStandardInput(""" - #:property ImplicitUsings=disable - Console.WriteLine("Hello from stdin"); - """) - .Execute() - .Should().Fail() - // error CS0103: The name 'Console' does not exist in the current context - .And.HaveStdOutContaining("error CS0103"); - } - - /// - /// Directory.Build.props doesn't have any effect on dotnet run -. - /// - [Fact] - public void ReadFromStdin_ProjectReference() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var libDir = Path.Join(testInstance.Path, "lib"); - Directory.CreateDirectory(libDir); - - File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" - - - {ToolsetInfo.CurrentTargetFramework} - - - """); - - File.WriteAllText(Path.Join(libDir, "Lib.cs"), """ - namespace Lib; - public class LibClass - { - public static string GetMessage() => "Hello from Lib"; - } - """); - - var appDir = Path.Join(testInstance.Path, "app"); - Directory.CreateDirectory(appDir); - - new DotnetCommand(Log, "run", "-") - .WithWorkingDirectory(appDir) - .WithStandardInput($""" - #:project $(MSBuildStartupDirectory)/../lib - Console.WriteLine(Lib.LibClass.GetMessage()); - """) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Lib"); - - // Relative paths are resolved from the isolated temp directory, hence they don't work. - - var errorParts = DirectiveError("app.cs", 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, "{}")).Split("{}"); - errorParts.Should().HaveCount(2); - - new DotnetCommand(Log, "run", "-") - .WithWorkingDirectory(appDir) - .WithStandardInput($""" - #:project ../lib - Console.WriteLine(Lib.LibClass.GetMessage()); - """) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(errorParts[0]) - .And.HaveStdErrContaining(errorParts[1]); - } - - /// - /// dotnet run - with #:ref uses $(MSBuildStartupDirectory) to resolve paths. - /// Relative paths don't work from stdin since the file is in an isolated temp directory. - /// Analogous to . - /// - [Fact] - public void ReadFromStdin_RefDirective() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var libDir = Path.Join(testInstance.Path, "lib"); - Directory.CreateDirectory(libDir); - - File.WriteAllText(Path.Join(libDir, "mylib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "Hello from lib!"; - } - """); - - var appDir = Path.Join(testInstance.Path, "app"); - Directory.CreateDirectory(appDir); - - new DotnetCommand(Log, "run", "-") - .WithWorkingDirectory(appDir) - .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") - .WithStandardInput(""" - #:ref $(MSBuildStartupDirectory)/../lib/mylib.cs - Console.WriteLine(MyLib.Greeter.Greet()); - """) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from lib!"); - - // Relative paths are resolved from the isolated temp directory, hence they don't work. - - var errorParts = DirectiveError("app.cs", 1, FileBasedProgramsResources.InvalidRefDirective, - string.Format(FileBasedProgramsResources.CouldNotFindRefFile, "{}")).Split("{}"); - errorParts.Should().HaveCount(2); - - new DotnetCommand(Log, "run", "-") - .WithWorkingDirectory(appDir) - .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") - .WithStandardInput(""" - #:ref ../lib/mylib.cs - Console.WriteLine(MyLib.Greeter.Greet()); - """) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(errorParts[0]) - .And.HaveStdErrContaining(errorParts[1]); - } - - [Fact] - public void ReadFromStdin_NoBuild() - { - new DotnetCommand(Log, "run", "-", "--no-build") - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format(CliCommandStrings.InvalidOptionForStdin, "--no-build")); - } - - [Fact] - public void ReadFromStdin_LaunchProfile() - { - new DotnetCommand(Log, "run", "-", "--launch-profile=test") - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format(CliCommandStrings.InvalidOptionForStdin, "--launch-profile")); - } - - /// - /// dotnet run -- - should NOT read the C# file from stdin, - /// the hyphen should be considred an app argument instead since it's after --. - /// - [Fact] - public void ReadFromStdin_AfterDoubleDash() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - new DotnetCommand(Log, "run", "--", "-") - .WithWorkingDirectory(testInstance.Path) - .WithStandardInput("""Console.WriteLine("stdin code");""") - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format(CliCommandStrings.RunCommandExceptionNoProjects, testInstance.Path, "--project")); - } - - /// - /// dotnet run folder without a project file is not supported. - /// - [Theory] - [InlineData(null)] // will be replaced with an absolute path - [InlineData(".")] - [InlineData("../MSBuildTestApp")] - [InlineData("../MSBuildTestApp/")] - public void FolderPath(string? path) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - path ??= testInstance.Path; - - new DotnetCommand(Log, "run", path) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandExceptionNoProjects, - testInstance.Path, - "--project")); - } - - /// - /// dotnet run app.csproj fails if app.csproj does not exist. - /// - [Fact] - public void ProjectPath_DoesNotExist() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "run", "./App.csproj") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandExceptionNoProjects, - testInstance.Path, - "--project")); - } - - /// - /// dotnet run app.csproj where app.csproj exists - /// runs the project and passes 'app.csproj' as an argument. - /// - [Fact] - public void ProjectPath_Exists() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "./App.csproj") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.NotHaveStdErr() - .And.HaveStdOut(""" - echo args:./App.csproj - Hello from App - """); - } - - [Fact] - public void ProjectInCurrentDirectory_NoRunVerb() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - Directory.CreateDirectory(Path.Join(testInstance.Path, "file")); - File.WriteAllText(Path.Join(testInstance.Path, "file", "Program.cs"), s_program); - Directory.CreateDirectory(Path.Join(testInstance.Path, "proj")); - File.WriteAllText(Path.Join(testInstance.Path, "proj", "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "../file/Program.cs") - .WithWorkingDirectory(Path.Join(testInstance.Path, "proj")) - .Execute() - .Should().Pass() - .And.NotHaveStdErr() - .And.HaveStdOut("Hello from Program"); - } - - [Fact] - public void ProjectInCurrentDirectory_FileOption() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - Directory.CreateDirectory(Path.Join(testInstance.Path, "file")); - File.WriteAllText(Path.Join(testInstance.Path, "file", "Program.cs"), s_program); - Directory.CreateDirectory(Path.Join(testInstance.Path, "proj")); - File.WriteAllText(Path.Join(testInstance.Path, "proj", "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "--file", "../file/Program.cs") - .WithWorkingDirectory(Path.Join(testInstance.Path, "proj")) - .Execute() - .Should().Pass() - .And.NotHaveStdErr() - .And.HaveStdOut("Hello from Program"); - } - - /// - /// dotnet run --project App.csproj Program.cs does not warn - /// because --project was explicitly specified. - /// - [Fact] - public void ProjectInCurrentDirectory_ProjectOption_NoWarning() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "--project", "App.csproj", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.NotHaveStdErr() - .And.HaveStdOut(""" - echo args:Program.cs - Hello from App - """); - } - - /// - /// dotnet run file.cs in a directory with a project file warns - /// because file.cs is passed as an application argument to the project instead of running as a file-based program. - /// - [Fact] - public void ProjectInCurrentDirectory_Warns() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:Program.cs - Hello from App - """) - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, - "Program.cs", - Path.Join(testInstance.Path, "App.csproj"))); - } - - /// - /// dotnet run nonexistent.cs in a directory with a project file warns - /// even though the file does not exist, because the .cs extension suggests it was intended as a file-based program. - /// - [Fact] - public void ProjectInCurrentDirectory_NonExistentCsFile_Warns() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "nonexistent.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:nonexistent.cs - Hello from App - """) - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandWarningCsFileArgumentPassedToProject, - "nonexistent.cs", - Path.Join(testInstance.Path, "App.csproj"))); - } - - /// - /// dotnet run -- file.cs in a directory with a project file does not warn - /// because -- signals that the arguments are intentional. - /// - [Fact] - public void ProjectInCurrentDirectory_DoubleDash_NoWarning() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "--", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:Program.cs - Hello from App - """) - .And.NotHaveStdErr(); - } - - /// - /// dotnet run file.cs -- other still warns because file.cs appears before --. - /// - [Fact] - public void ProjectInCurrentDirectory_DoubleDashAfterFile_Warns() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "Program.cs", "--", "otherArg") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:Program.cs;otherArg - Hello from App - """) - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, - "Program.cs", - Path.Join(testInstance.Path, "App.csproj"))); - } - - /// - /// dotnet run someArg file.cs in a directory with a project warns - /// when an unrecognized argument prevents file.cs from being treated as a file-based program entry point. - /// - [Fact] - public void ProjectInCurrentDirectory_UnrecognizedArg_Warns() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "someArg", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:someArg;Program.cs - Hello from App - """) - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, - "Program.cs", - Path.Join(testInstance.Path, "App.csproj"))); - } - - /// - /// dotnet run -c Release Program.cs in a directory with a project warns because - /// known options like -c don't suppress the warning; only --project, --file, or -- do. - /// - [Fact] - public void ProjectInCurrentDirectory_KnownOption_Warns() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "-c", "Release", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:Program.cs - Hello from App - Release config - """) - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, - "Program.cs", - Path.Join(testInstance.Path, "App.csproj"))); - } - - /// - /// dotnet run someArg -- file.cs does not warn because the .cs file is after --. - /// - [Fact] - public void ProjectInCurrentDirectory_UnrecognizedArg_DoubleDash_NoWarning() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "someArg", "--", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:someArg;Program.cs - Hello from App - """) - .And.NotHaveStdErr(); - } - - /// - /// dotnet build someArg Program.cs warns because 'Program.cs' is a valid file-based entry point - /// but additional positional arguments cause it to fall back to MSBuild. - /// - [Theory] - [InlineData("build", "someArg", "Program.cs")] - [InlineData("clean", "someArg", "Program.cs")] - [InlineData("publish", "someArg", "Program.cs")] - [InlineData("build", "Program.cs", "-consoleLoggerParameters:NoSummary")] - public void ExtraArgWithFileEntryPoint_Warns(string command, string arg1, string arg2) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, command, arg1, arg2) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.WarningFileArgumentPassedToMSBuild, - "Program.cs", - command)); - } - - /// - /// dotnet build nonexistent.cs warns because the .cs extension suggests it was intended as a file-based program. - /// - [Theory] - [InlineData("build")] - [InlineData("clean")] - [InlineData("publish")] - public void NonExistentCsFile_Warns(string command) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - new DotnetCommand(Log, command, "nonexistent.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.WarningCsFileArgumentPassedToMSBuild, - "nonexistent.cs", - command)); - } - - /// - /// dotnet build --no-incremental Program.cs is handled as file-based (known option + single positional arg) and does not warn. - /// - [Theory] - [InlineData("Program.cs")] - [InlineData("--no-incremental", "Program.cs")] - public void SingleFileEntryPoint_NoWarning(params string[] extraArgs) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, ["build", .. extraArgs]) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.NotHaveStdErr(); - } - - /// - /// When a file is not a .cs file, we probe the first characters of the file for #!, and - /// execute as a single file program if we find them. - /// - [Theory] - [InlineData("Program")] - [InlineData("Program.csx")] - [InlineData("Program.vb")] - public void NonCsFileExtensionWithShebang(string fileName) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, fileName), """ - #!/usr/bin/env dotnet - Console.WriteLine("hello world"); - """); - - new DotnetCommand(Log, "run", fileName) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining("hello world"); - } - - /// - /// When a file is not a .cs file, we probe the first characters of the file for #!, and - /// fall back to normal dotnet run behavior if we don't find them. - /// - [Theory] - [InlineData("Program")] - [InlineData("Program.csx")] - [InlineData("Program.vb")] - public void NonCsFileExtensionWithNoShebang(string fileName) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, fileName), s_program); - - new DotnetCommand(Log, "run", fileName) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandExceptionNoProjects, - testInstance.Path, - "--project")); - } - - [Fact] - public void MultipleEntryPoints() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "Program2.cs"), s_program); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - new DotnetCommand(Log, "run", "Program2.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program2"); - } - - /// - /// When the entry-point file does not exist, fallback to normal dotnet run behavior. - /// - [Fact] - public void NoCode() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandExceptionNoProjects, - testInstance.Path, - "--project")); - } - - /// - /// Cannot run a non-entry-point file. - /// - [Fact] - public void ClassLibrary_EntryPointFileExists() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); - - new DotnetCommand(Log, "run", "Util.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("error CS5001:"); // Program does not contain a static 'Main' method suitable for an entry point - } - - /// - /// When the entry-point file does not exist, fallback to normal dotnet run behavior. - /// - [Fact] - public void ClassLibrary_EntryPointFileDoesNotExist() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); - - new DotnetCommand(Log, "run", "NonExistentFile.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandExceptionNoProjects, - testInstance.Path, - "--project")); - } - - /// - /// Other files in the folder are not part of the compilation. - /// See . - /// - [Fact] - public void MultipleFiles_RunEntryPoint() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_programDependingOnUtil); - File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("error CS0103"); // The name 'Util' does not exist in the current context - - // This can be overridden. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" - #!/usr/bin/env dotnet - #:property EnableDefaultCompileItems=true - {s_programDependingOnUtil} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello, String from Util"); - } - - /// - /// Setting EnableDefaultCompileItems=true via Directory.Build.props should not cause CS2002 warning. - /// See . - /// - [Fact] - public void MultipleFiles_EnableDefaultCompileItemsViaDirectoryBuildProps() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" - #!/usr/bin/env dotnet - {s_programDependingOnUtil} - """); - File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - - - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello, String from Util"); - } - - /// - /// Directives in other files are considered even if those files are included via manual MSBuild rather than #:include. - /// - [Fact] - public void MultipleFiles_DirectivesInOtherFiles() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "A.cs"), """ - #!/usr/bin/env dotnet - Console.WriteLine(B.M()); - #if !DEBUG - Console.WriteLine("Release config"); - #endif - """); - File.WriteAllText(Path.Join(testInstance.Path, "B.cs"), """ - #:property Configuration=Release - public static class B - { - public static string M() => "String from Util"; - } - """); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - - - - - - """); - - new DotnetCommand(Log, "run", "A.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - String from Util - Release config - """); - } - - /// - /// dotnet run util.cs fails if util.cs is not the entry-point. - /// - [Fact] - public void MultipleFiles_RunLibraryFile() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_programDependingOnUtil); - File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); - - new DotnetCommand(Log, "run", "Util.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("error CS5001:"); // Program does not contain a static 'Main' method suitable for an entry point - } - - /// - /// If there are nested project files like - /// - /// app/file.cs - /// app/nested/x.csproj - /// app/nested/another.cs - /// - /// executing dotnet run app/file.cs will include the nested .cs file in the compilation. - /// Hence we could consider reporting an error in this situation. - /// However, the same problem exists for normal builds with explicit project files - /// and usually the build fails because there are multiple entry points or other clashes. - /// - [Fact] - public void NestedProjectFiles() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - Directory.CreateDirectory(Path.Join(testInstance.Path, "nested")); - File.WriteAllText(Path.Join(testInstance.Path, "nested", "App.csproj"), s_consoleProject); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - } - - /// - /// dotnet run folder/app.csproj -> the argument is not recognized as an entry-point file - /// (it does not have .cs file extension), so this fallbacks to normal dotnet run behavior. - /// - [Fact] - public void RunNestedProjectFile() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); - - var dirName = Path.GetFileName(testInstance.Path); - - var workDir = Path.GetDirectoryName(testInstance.Path)!; - - new DotnetCommand(Log, "run", $"{dirName}/App.csproj") - .WithWorkingDirectory(workDir) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandExceptionNoProjects, - workDir, - "--project")); - } - - /// - /// Main method is supported just like top-level statements. - /// - [Fact] - public void MainMethod() - { - var testInstance = _testAssetsManager.CopyTestAsset("MSBuildTestApp").WithSource(); - File.Delete(Path.Join(testInstance.Path, "MSBuildTestApp.csproj")); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello World!"); - } - - /// - /// Empty file does not contain entry point, so that's an error. - /// - [Fact] - public void EmptyFile() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), string.Empty); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("error CS5001:"); // Program does not contain a static 'Main' method suitable for an entry point - } - - /// - /// See . - /// - [Theory, CombinatorialData] - public void WorkingDirectory(bool cscOnly) - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: cscOnly ? OutOfTreeBaseDirectory : null); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - - var code = """ - Console.WriteLine("v1"); - Console.WriteLine(Environment.CurrentDirectory); - Console.WriteLine(Directory.GetCurrentDirectory()); - Console.WriteLine(new DirectoryInfo(".").FullName); - Console.WriteLine(AppContext.GetData("EntryPointFileDirectoryPath")); - """; - - File.WriteAllText(programPath, code); - - var tempDir = Directory.CreateTempSubdirectory(); - var workDir = TestPathUtility.ResolveTempPrefixLink(tempDir.FullName).TrimEnd(Path.DirectorySeparatorChar); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, - expectedLevel: cscOnly ? BuildLevel.Csc : BuildLevel.All, - programFileName: programPath, - workDir: workDir, - expectedOutput: GetExpectedOutput("v1", workDir)); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - Build(testInstance, - expectedLevel: BuildLevel.Csc, - programFileName: programPath, - workDir: workDir, - expectedOutput: GetExpectedOutput("v2", workDir)); - - tempDir.Delete(); - - string GetExpectedOutput(string version, string workDir) => $""" - {version} - {workDir} - {workDir} - {workDir} - {Path.GetDirectoryName(programPath)} - """; - } - - /// - /// Combination of and . - /// - [Fact] - public void WorkingDirectory_CscOnly_AfterMSBuild() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - - var code = """ - #:property Configuration=Release - Console.WriteLine("v1"); - Console.WriteLine(Environment.CurrentDirectory); - Console.WriteLine(Directory.GetCurrentDirectory()); - Console.WriteLine(new DirectoryInfo(".").FullName); - Console.WriteLine(AppContext.GetData("EntryPointFileDirectoryPath")); - """; - - File.WriteAllText(programPath, code); - - var tempDir = Directory.CreateTempSubdirectory(); - var workDir = TestPathUtility.ResolveTempPrefixLink(tempDir.FullName).TrimEnd(Path.DirectorySeparatorChar); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, - expectedLevel: BuildLevel.All, - programFileName: programPath, - workDir: workDir, - expectedOutput: GetExpectedOutput("v1", workDir)); - - Build(testInstance, - expectedLevel: BuildLevel.None, - programFileName: programPath, - workDir: workDir, - expectedOutput: GetExpectedOutput("v1", workDir)); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - Build(testInstance, - expectedLevel: BuildLevel.Csc, - programFileName: programPath, - workDir: workDir, - expectedOutput: GetExpectedOutput("v2", workDir)); - - // Can be overridden with a #:property. - var workDir2 = Path.Join(testInstance.Path, "dir2"); - Directory.CreateDirectory(workDir2); - code = $""" - #:property RunWorkingDirectory={workDir2} - {code} - """; - File.WriteAllText(programPath, code); - - Build(testInstance, - expectedLevel: BuildLevel.All, - programFileName: programPath, - workDir: workDir, - expectedOutput: GetExpectedOutput("v2", workDir2)); - - tempDir.Delete(); - - string GetExpectedOutput(string version, string workDir) => $""" - {version} - {workDir} - {workDir} - {workDir} - {Path.GetDirectoryName(programPath)} - """; - } - - /// - /// Implicit build files have an effect. - /// - [Fact] - public void DirectoryBuildProps() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - TestName - - - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from TestName"); - } - - /// - /// Implicit build files are taken from the folder of the symbolic link itself, not its target. - /// This is equivalent to the behavior of symlinked project files. - /// See . - /// - [Fact] - public void DirectoryBuildProps_SymbolicLink() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var dir1 = Path.Join(testInstance.Path, "dir1"); - Directory.CreateDirectory(dir1); - - var originalPath = Path.Join(dir1, "original.cs"); - File.WriteAllText(originalPath, s_program); - - File.WriteAllText(Path.Join(dir1, "Directory.Build.props"), """ - - - OriginalAssemblyName - - - """); - - var dir2 = Path.Join(testInstance.Path, "dir2"); - Directory.CreateDirectory(dir2); - - var programFileName = "linked.cs"; - var programPath = Path.Join(dir2, programFileName); - - File.CreateSymbolicLink(path: programPath, pathToTarget: originalPath); - - File.WriteAllText(Path.Join(dir2, "Directory.Build.props"), """ - - - LinkedAssemblyName - - - """); - - new DotnetCommand(Log, "run", programFileName) - .WithWorkingDirectory(dir2) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from LinkedAssemblyName"); - - // Removing the Directory.Build.props should be detected by up-to-date check. - File.Delete(Path.Join(dir2, "Directory.Build.props")); - - new DotnetCommand(Log, "run", programFileName) - .WithWorkingDirectory(dir2) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from linked"); - } - - /// - /// Overriding default (implicit) properties of file-based apps via implicit build files. - /// - [Fact] - public void DefaultProps_DirectoryBuildProps() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.WriteLine("Hi"); - """); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - disable - - - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - // error CS0103: The name 'Console' does not exist in the current context - .And.HaveStdOutContaining("error CS0103"); - - // Converting to a project should not change the behavior. - - new DotnetCommand(Log, "project", "convert", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run") - .WithWorkingDirectory(Path.Join(testInstance.Path, "Program")) - .Execute() - .Should().Fail() - // error CS0103: The name 'Console' does not exist in the current context - .And.HaveStdOutContaining("error CS0103"); - } - - /// - /// Overriding default (implicit) properties of file-based apps from custom SDKs. - /// - [Fact] - public void DefaultProps_CustomSdk() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var sdkDir = Path.Join(testInstance.Path, "MySdk"); - Directory.CreateDirectory(sdkDir); - File.WriteAllText(Path.Join(sdkDir, "Sdk.props"), """ - - - disable - - - """); - File.WriteAllText(Path.Join(sdkDir, "Sdk.targets"), """ - - """); - File.WriteAllText(Path.Join(sdkDir, "MySdk.csproj"), $""" - - - {ToolsetInfo.CurrentTargetFramework} - MSBuildSdk - false - - - - - - """); - - new DotnetCommand(Log, "pack") - .WithWorkingDirectory(sdkDir) - .Execute() - .Should().Pass(); - - var appDir = Path.Join(testInstance.Path, "app"); - Directory.CreateDirectory(appDir); - File.WriteAllText(Path.Join(appDir, "NuGet.config"), $""" - - - - - - - """); - File.WriteAllText(Path.Join(appDir, "Program.cs"), """ - #:sdk Microsoft.NET.Sdk - #:sdk MySdk@1.0.0 - Console.WriteLine("Hi"); - """); - - // Use custom package cache to avoid reuse of the custom SDK packed by previous test runs. - var packagesDir = Path.Join(testInstance.Path, ".packages"); - - new DotnetCommand(Log, "run", "Program.cs") - .WithEnvironmentVariable("NUGET_PACKAGES", packagesDir) - .WithWorkingDirectory(appDir) - .Execute() - .Should().Fail() - // error CS0103: The name 'Console' does not exist in the current context - .And.HaveStdOutContaining("error CS0103"); - - // Converting to a project should not change the behavior. - - new DotnetCommand(Log, "project", "convert", "Program.cs") - .WithEnvironmentVariable("NUGET_PACKAGES", packagesDir) - .WithWorkingDirectory(appDir) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run") - .WithEnvironmentVariable("NUGET_PACKAGES", packagesDir) - .WithWorkingDirectory(Path.Join(appDir, "Program")) - .Execute() - .Should().Fail() - // error CS0103: The name 'Console' does not exist in the current context - .And.HaveStdOutContaining("error CS0103"); - } - - [Fact] - public void ComputeRunArguments_Success() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ - - - - $(RunArguments) extended - - - - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:extended - Hello from Program - """); - } - - [Fact] - public void ComputeRunArguments_Failure() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ - - - - - - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining(""" - MYAPP001: Custom error - """) - .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); - } - - /// - /// Command-line arguments should be passed through. - /// - [Theory] - [InlineData("other;args", "other;args")] - [InlineData("--;other;args", "other;args")] - [InlineData("--appArg", "--appArg")] - [InlineData("-c;Debug;--xyz", "--xyz")] - public void Arguments_PassThrough(string input, string output) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, ["run", "Program.cs", .. input.Split(';')]) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($""" - echo args:{output} - Hello from Program - """); - } - - /// - /// dotnet run --unknown-arg file.cs fallbacks to normal dotnet run behavior. - /// - [Fact] - public void Arguments_Unrecognized() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, ["run", "--arg", "Program.cs"]) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format( - CliCommandStrings.RunCommandExceptionNoProjects, - testInstance.Path, - "--project")); - } - - /// - /// dotnet run --some-known-arg file.cs is supported. - /// - [Theory, CombinatorialData] - public void Arguments_Recognized(bool beforeFile) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - string[] args = beforeFile - ? ["run", "-c", "Release", "Program.cs", "more", "args"] - : ["run", "Program.cs", "-c", "Release", "more", "args"]; - - new DotnetCommand(Log, args) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:more;args - Hello from Program - Release config - """); - } - - /// - /// dotnet run -bl file.cs produces a binary log. - /// - [Theory, CombinatorialData] - public void BinaryLog_Run(bool beforeFile) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - string[] args = beforeFile - ? ["-bl", "Program.cs"] - : ["Program.cs", "-bl"]; - - new DotnetCommand(Log, ["run", "--no-cache", .. args]) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - new DirectoryInfo(testInstance.Path) - .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) - .Select(f => f.Name) - .Should().BeEquivalentTo(["msbuild.binlog"]); - } - - [Theory, CombinatorialData] - public void BinaryLog_Build([CombinatorialValues("restore", "build")] string command, bool beforeFile) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - string[] args = beforeFile - ? [command, "-bl", "Program.cs"] - : [command, "Program.cs", "-bl"]; - - new DotnetCommand(Log, args) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(testInstance.Path) - .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) - .Select(f => f.Name) - .Should().BeEquivalentTo(["msbuild.binlog"]); - } - - [Theory] - [InlineData("-bl")] - [InlineData("-BL")] - [InlineData("-bl:msbuild.binlog")] - [InlineData("/bl")] - [InlineData("/bl:msbuild.binlog")] - [InlineData("--binaryLogger")] - [InlineData("--binaryLogger:msbuild.binlog")] - [InlineData("-bl:another.binlog")] - public void BinaryLog_ArgumentForms(string arg) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "run", "--no-cache", "Program.cs", arg) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - var fileName = arg.Split(':', 2) is [_, { Length: > 0 } value] ? Path.GetFileNameWithoutExtension(value) : "msbuild"; - - new DirectoryInfo(testInstance.Path) - .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) - .Select(f => f.Name) - .Should().BeEquivalentTo([$"{fileName}.binlog"]); - } - - [Fact] - public void BinaryLog_Multiple() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "run", "--no-cache", "Program.cs", "-bl:one.binlog", "two.binlog", "/bl:three.binlog") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - echo args:two.binlog - Hello from Program - """); - - new DirectoryInfo(testInstance.Path) - .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) - .Select(f => f.Name) - .Should().BeEquivalentTo(["three.binlog"]); - } - - [Fact] - public void BinaryLog_WrongExtension() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "run", "Program.cs", "-bl:test.test") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining("test.test"); // Invalid binary logger parameter(s): "test.test" - - new DirectoryInfo(testInstance.Path) - .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) - .Select(f => f.Name) - .Should().BeEmpty(); - } - - /// - /// dotnet run file.cs should not produce a binary log. - /// - [Fact] - public void BinaryLog_NotSpecified() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - new DirectoryInfo(testInstance.Path) - .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) - .Select(f => f.Name) - .Should().BeEmpty(); - } - - /// - /// Binary logs from our in-memory projects should have evaluation data. - /// - [Fact] - public void BinaryLog_EvaluationData() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "run", "--no-cache", "Program.cs", "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - string binaryLogPath = Path.Join(testInstance.Path, "msbuild.binlog"); - new FileInfo(binaryLogPath).Should().Exist(); - - // There should be exactly three - two for restore, one for build. - VerifyBinLogEvaluationDataCount(binaryLogPath, expectedCount: 3); - } - - private static void VerifyBinLogEvaluationDataCount(string binaryLogPath, int expectedCount) - { - var records = BinaryLog.ReadRecords(binaryLogPath).ToList(); - records.Count(static r => r.Args is ProjectEvaluationStartedEventArgs).Should().Be(expectedCount); - records.Count(static r => r.Args is ProjectEvaluationFinishedEventArgs).Should().Be(expectedCount); - } - - /// - /// Binary logs from our in-memory projects should have evaluation data. - /// - [Fact] - public void BinaryLog_EvaluationData_MultiFile() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), - $""" - #!/usr/bin/env dotnet - #:include *.cs - {s_programDependingOnUtil} - """); - - var utilPath = Path.Join(testInstance.Path, "Util.cs"); - File.WriteAllText(utilPath, s_util); - - new DotnetCommand(Log, "run", "--no-cache", "Program.cs", "-bl:first.binlog") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello, String from Util"); - - string binaryLogPath = Path.Join(testInstance.Path, "first.binlog"); - new FileInfo(binaryLogPath).Should().Exist(); - - // There should be exactly four - two for restore and one for build as usual, plus one for initial directive evaluation. - var expectedCount = 4; - VerifyBinLogEvaluationDataCount(binaryLogPath, expectedCount: expectedCount); - - File.WriteAllText(utilPath, s_util.Replace("String from Util", "v2")); - - new DotnetCommand(Log, "run", "Program.cs", "-bl:second.binlog") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello, v2"); - - binaryLogPath = Path.Join(testInstance.Path, "second.binlog"); - new FileInfo(binaryLogPath).Should().Exist(); - - // After rebuild, there should be the same number of evaluations. - VerifyBinLogEvaluationDataCount(binaryLogPath, expectedCount: expectedCount); - } - - /// - /// If we skip build due to up-to-date check, no binlog should be created. - /// - [Fact] - public void BinaryLog_EvaluationData_UpToDate() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, s_program); - - var expectedOutput = "Hello from Program"; - - new DotnetCommand(Log, "run", "--no-cache", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - - string binaryLogPath = Path.Join(testInstance.Path, "msbuild.binlog"); - new FileInfo(binaryLogPath).Should().NotExist(); - - new DotnetCommand(Log, "run", "Program.cs", "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($""" - {CliCommandStrings.NoBinaryLogBecauseUpToDate} - {expectedOutput} - """); - - new FileInfo(binaryLogPath).Should().NotExist(); - } - - [Theory, CombinatorialData] - public void TerminalLogger(bool on) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - var result = new DotnetCommand(Log, "run", "Program.cs", "--no-cache") - .WithWorkingDirectory(testInstance.Path) - .WithEnvironmentVariable("MSBUILDTERMINALLOGGER", on ? "on" : "off") - .Execute() - .Should().Pass() - .And.HaveStdOutContaining("Hello from Program"); - - const string terminalLoggerSubstring = "\x1b"; - if (on) - { - result.And.HaveStdOutContaining(terminalLoggerSubstring); - } - else - { - result.And.NotHaveStdOutContaining(terminalLoggerSubstring); - } - } - - [Fact] - public void Verbosity_Run() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - new DotnetCommand(Log, "run", "Program.cs", "--no-cache") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - // no additional build messages - .And.HaveStdOut("Hello from Program") - .And.NotHaveStdOutContaining("Program.dll") - .And.NotHaveStdErr(); - } - - [Fact] // https://github.com/dotnet/sdk/issues/50227 - public void Verbosity_Build() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - new DotnetCommand(Log, "build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - // should print path to the built DLL - .And.HaveStdOutContaining("Program.dll"); - } - - [Fact] - public void Verbosity_CompilationDiagnostics() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - string x = null; - Console.WriteLine("ran" + x); - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - // warning CS8600: Converting null literal or possible null value to non-nullable type. - .And.HaveStdOutContaining("warning CS8600") - .And.HaveStdOutContaining("ran"); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.Write - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - // error CS1002: ; expected - .And.HaveStdOutContaining("error CS1002") - .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); - } - - [Fact] - public void MissingShebangWarning() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - // Single-file program without shebang should NOT produce CA2266 - // (the warning only fires when there are multiple files via #:include). - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.WriteLine("hello"); - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.NotHaveStdOutContaining("CA2266") - .And.HaveStdOutContaining("hello"); - - // Included file without shebang should not produce CA2266. - File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), """ - class Util { public static string Greet() => "hello"; } - """); - - // Entry point with shebang and #:include — no warning. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #!/usr/bin/env dotnet - #:include Util.cs - Console.WriteLine(Util.Greet()); - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.NotHaveStdOutContaining("CA2266") - .And.HaveStdOutContaining("hello"); - - // Entry point without shebang and #:include — CA2266 warning expected. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:include Util.cs - Console.WriteLine(Util.Greet()); - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining("warning CA2266") - .And.HaveStdOutContaining("hello"); - - // CA2266 can be suppressed via NoWarn. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:property NoWarn=CA2266 - #:include Util.cs - Console.WriteLine(Util.Greet()); - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.NotHaveStdOutContaining("CA2266") - .And.HaveStdOutContaining("hello"); - } - - [Fact] - public void MissingShebangWarning_CompileItemFromDirectoryBuildProps() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - // Directory.Build.props adds a Compile item, effectively making - // the compilation multi-file (same as #:include). - File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), """ - class Util { public static string Greet() => "hello"; } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - - - - """); - - // Entry point without shebang — CA2266 warning expected - // because Directory.Build.props added another Compile item. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.WriteLine(Util.Greet()); - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining("warning CA2266") - .And.HaveStdOutContaining("hello"); - - // Adding shebang resolves the warning. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #!/usr/bin/env dotnet - Console.WriteLine(Util.Greet()); - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("hello"); - } - - /// - /// File-based projects using the default SDK do not include embedded resources by default. - /// - [Fact] - public void EmbeddedResource() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_programReadingEmbeddedResource); - File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx); - - // By default, with the default SDK, embedded resources are not included. - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - Resource not found - """); - - // This behavior can be overridden to enable embedded resources. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" - #:property EnableDefaultEmbeddedResourceItems=true - {s_programReadingEmbeddedResource} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - [MyString, TestValue] - """); - - // When using a non-default SDK, embedded resources are included by default. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" - #:sdk Microsoft.NET.Sdk.Web - {s_programReadingEmbeddedResource} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - [MyString, TestValue] - """); - - // When using the default SDK explicitly, embedded resources are not included. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" - #:sdk Microsoft.NET.Sdk - {s_programReadingEmbeddedResource} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - Resource not found - """); - } - - /// - /// Scripts in repo root should not include .resx files. - /// Part of . - /// - [Theory, CombinatorialData] - public void EmbeddedResource_AlongsideProj([CombinatorialValues("sln", "slnx", "csproj", "vbproj", "shproj", "proj")] string ext) - { - bool considered = ext is "sln" or "slnx" or "csproj"; - - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" - #:property EnableDefaultEmbeddedResourceItems=true - {s_programReadingEmbeddedResource} - """); - File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx); - File.WriteAllText(Path.Join(testInstance.Path, $"repo.{ext}"), ""); - - // Up-to-date check currently doesn't support default items, so we need to pass --no-cache - // otherwise other runs of this test theory might cause outdated results. - new DotnetCommand(Log, "run", "--no-cache", "--file", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(considered ? "Resource not found" : "[MyString, TestValue]"); - } - - [Fact] - public void Restore_NonExistentPackage() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, """ - #:package Microsoft.ThisPackageDoesNotExist@1.0.0 - Console.WriteLine(); - """); - - new DotnetCommand(Log, "restore", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("Program.cs.csproj : error NU1101"); - } - - [Fact] - public void NoRestore_01() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - // It is an error when never restored before. - new DotnetCommand(Log, "run", "--no-restore", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("NETSDK1004"); // error NETSDK1004: Assets file '...\obj\project.assets.json' not found. Run a NuGet package restore to generate this file. - - // Run restore. - new DotnetCommand(Log, "restore", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - // --no-restore works. - new DotnetCommand(Log, "run", "--no-restore", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - } - - [Fact] - public void NoRestore_02() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - // It is an error when never restored before. - new DotnetCommand(Log, "build", "--no-restore", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("NETSDK1004"); // error NETSDK1004: Assets file '...\obj\project.assets.json' not found. Run a NuGet package restore to generate this file. - - // Run restore. - new DotnetCommand(Log, "restore", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - // --no-restore works. - new DotnetCommand(Log, "build", "--no-restore", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run", "--no-build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - } - - [Fact] - public void Restore_StaticGraph_Implicit() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - true - - - """); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, "Console.WriteLine();"); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "restore", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - } - - [Fact] - public void Restore_StaticGraph_Explicit() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, """ - #:property RestoreUseStaticGraphEvaluation=true - Console.WriteLine(); - """); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "restore", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr(DirectiveError(programFile, 1, FileBasedProgramsResources.StaticGraphRestoreNotSupported)); - } - - [Fact] - public void NoBuild_01() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - // It is an error when never built before. - new DotnetCommand(Log, "run", "--no-build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining("An error occurred trying to start process"); - - // Now build it. - new DotnetCommand(Log, "build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - // Changing the program has no effect when it is not built. - File.WriteAllText(programFile, """Console.WriteLine("Changed");"""); - new DotnetCommand(Log, "run", "--no-build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - // The change has an effect when built again. - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Changed"); - } - - [Fact] - public void NoBuild_02() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - // It is an error when never built before. - new DotnetCommand(Log, "run", "--no-build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining("An error occurred trying to start process"); - - // Now build it. - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - // Changing the program has no effect when it is not built. - File.WriteAllText(programFile, """Console.WriteLine("Changed");"""); - new DotnetCommand(Log, "run", "--no-build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - // The change has an effect when built again. - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Changed"); - } - - [Fact] - public void Build_Library() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "lib.cs"); - File.WriteAllText(programFile, """ - #:property OutputType=Library - class C; - """); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "build", "lib.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run", "lib.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr(string.Format(CliCommandStrings.RunCommandExceptionUnableToRun, - VirtualProjectBuilder.GetVirtualProjectPath(programFile), - ToolsetInfo.CurrentTargetFrameworkVersion, - "Library")); - } - - [Fact] - public void Build_Library_MultiTarget() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "lib.cs"); - File.WriteAllText(programFile, $""" - #:property OutputType=Library - #:property PublishAot=false - #:property LangVersion=preview - #:property TargetFramework= - #:property TargetFrameworks=netstandard2.0;{ToolsetInfo.CurrentTargetFramework} - class C; - """); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "build", "lib.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run", "lib.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute("--no-interactive") - .Should().Fail() - .And.HaveStdErrContaining(string.Format(CliCommandStrings.RunCommandExceptionUnableToRunSpecifyFramework, "--framework")); - - new DotnetCommand(Log, "run", "lib.cs", "--framework", ToolsetInfo.CurrentTargetFramework) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr(string.Format(CliCommandStrings.RunCommandExceptionUnableToRun, - VirtualProjectBuilder.GetVirtualProjectPath(programFile), - ToolsetInfo.CurrentTargetFrameworkVersion, - "Library")); - } - - [Fact] - public void Build_Module() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "module.cs"); - File.WriteAllText(programFile, """ - #:property OutputType=Module - #:property ProduceReferenceAssembly=false - class C; - """); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "build", "module.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run", "module.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr(string.Format(CliCommandStrings.RunCommandExceptionUnableToRun, - VirtualProjectBuilder.GetVirtualProjectPath(programFile), - ToolsetInfo.CurrentTargetFrameworkVersion, - "Module")); - } - - [Fact] - public void Build_WinExe() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "winexe.cs"); - File.WriteAllText(programFile, """ - #:property OutputType=WinExe - Console.WriteLine("Hello WinExe"); - """); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "build", "winexe.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run", "winexe.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello WinExe"); - } - - [Fact] - public void Build_Exe() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "exe.cs"); - File.WriteAllText(programFile, """ - #:property OutputType=Exe - Console.WriteLine("Hello Exe"); - """); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "build", "exe.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run", "exe.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello Exe"); - } - - [Fact] - public void Build_Exe_MultiTarget() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "exe.cs"); - File.WriteAllText(programFile, $""" - #:property OutputType=Exe - #:property PublishAot=false - #:property LangVersion=preview - #:property TargetFramework= - #:property TargetFrameworks=netstandard2.0;{ToolsetInfo.CurrentTargetFramework} - Console.WriteLine("Hello Exe"); - """); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "build", "exe.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run", "exe.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format(CliCommandStrings.RunCommandExceptionUnableToRunSpecifyFramework, "--framework")); - - new DotnetCommand(Log, "run", "exe.cs", "--framework", ToolsetInfo.CurrentTargetFramework) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello Exe"); - } - - [Fact] - public void Build_AppContainerExe() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "appcontainerexe.cs"); - File.WriteAllText(programFile, """ - #:property OutputType=AppContainerExe - Console.WriteLine("Hello AppContainerExe"); - """); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "build", "appcontainerexe.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DotnetCommand(Log, "run", "appcontainerexe.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr(string.Format(CliCommandStrings.RunCommandExceptionUnableToRun, - VirtualProjectBuilder.GetVirtualProjectPath(programFile), - ToolsetInfo.CurrentTargetFrameworkVersion, - "AppContainerExe")); - } - - [Fact] - public void Publish() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var publishDir = Path.Join(testInstance.Path, "artifacts"); - if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); - - new DotnetCommand(Log, "publish", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(publishDir).Sub("Program") - .Should().Exist() - .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app - - new RunExeCommand(Log, Path.Join(publishDir, "Program", $"Program{Constants.ExeSuffix}")) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - Hello from Program - Release config - """); - } - - [Fact] - public void PublishWithCustomTarget() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var publishDir = Path.Join(testInstance.Path, "artifacts"); - if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); - - new DotnetCommand(Log, "publish", "Program.cs", "-t", "ComputeContainerConfig", "-p", "PublishAot=false", "--use-current-runtime") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - var appBinaryName = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "Program.exe" : "Program"; - new DirectoryInfo(publishDir).Sub("Program") - .Should().Exist() - .And.HaveFiles([ - appBinaryName, - "Program.deps.json", - "Program.runtimeconfig.json" - ]); - } - - [Fact] - public void Publish_WithJson() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, """ - #:sdk Microsoft.NET.Sdk.Web - Console.WriteLine(File.ReadAllText("config.json")); - """); - - File.WriteAllText(Path.Join(testInstance.Path, "config.json"), """ - { "MyKey": "MyValue" } - """); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var publishDir = Path.Join(testInstance.Path, "artifacts"); - if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); - - new DotnetCommand(Log, "publish", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(publishDir).Sub("Program") - .Should().Exist() - .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly) // no deps.json file for AOT-published app - .And.HaveFile("config.json"); // the JSON is included as content and hence copied - } - - [Fact] - public void Publish_Options() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var publishDir = Path.Join(testInstance.Path, "artifacts"); - if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); - - new DotnetCommand(Log, "publish", "Program.cs", "-c", "Debug", "-p:PublishAot=false", "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(publishDir).Sub("Program") - .Should().Exist() - .And.HaveFile("Program.deps.json"); - - new DirectoryInfo(testInstance.Path).File("msbuild.binlog").Should().Exist(); - } - - [Fact] - public void Publish_PublishDir_IncludesFileName() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "MyCustomProgram.cs"); - File.WriteAllText(programFile, s_program); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var publishDir = Path.Join(testInstance.Path, "artifacts"); - if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); - - new DotnetCommand(Log, "publish", "MyCustomProgram.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(publishDir).Sub("MyCustomProgram") - .Should().Exist() - .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app - } - - [Fact] - public void Publish_PublishDir_CommandLine() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - var customPublishDir = Path.Join(testInstance.Path, "custom-publish"); - if (Directory.Exists(customPublishDir)) Directory.Delete(customPublishDir, recursive: true); - - new DotnetCommand(Log, "publish", "Program.cs", $"/p:PublishDir={customPublishDir}") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(customPublishDir) - .Should().Exist() - .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app - } - - [Fact] - public void Publish_PublishDir_PropertyDirective() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - var publishDir = Path.Join(testInstance.Path, "directive-publish"); - File.WriteAllText(programFile, $""" - #:property PublishDir={publishDir} - {s_program} - """); - - if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); - - new DotnetCommand(Log, "publish", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(publishDir) - .Should().Exist() - .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app - } - - [Fact] - public void Publish_In_SubDir() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var subDir = Directory.CreateDirectory(Path.Combine(testInstance.Path, "subdir")); - - var programFile = Path.Join(subDir.FullName, "Program.cs"); - File.WriteAllText(programFile, s_program); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var publishDir = Path.Join(subDir.FullName, "artifacts"); - if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); - - new DotnetCommand(Log, "publish", "./subdir/Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(testInstance.Path).Sub("subdir").Sub("artifacts").Sub("Program") - .Should().Exist() - .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app - } - - [Fact] - public void Pack() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "MyFileBasedTool.cs"); - File.WriteAllText(programFile, """ - Console.WriteLine($"Hello; EntryPointFilePath set? {AppContext.GetData("EntryPointFilePath") is string}"); - #if !DEBUG - Console.WriteLine("Release config"); - #endif - """); - - // Run unpacked. - new DotnetCommand(Log, "run", "MyFileBasedTool.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello; EntryPointFilePath set? True"); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var outputDir = Path.Join(testInstance.Path, "artifacts"); - if (Directory.Exists(outputDir)) Directory.Delete(outputDir, recursive: true); - - // Pack. - new DotnetCommand(Log, "pack", "MyFileBasedTool.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - var packageDir = new DirectoryInfo(outputDir).Sub("MyFileBasedTool"); - packageDir.File("MyFileBasedTool.1.0.0.nupkg").Should().Exist(); - new DirectoryInfo(artifactsDir).Sub("package").Should().NotExist(); - - // Run the packed tool. - new DotnetCommand(Log, "tool", "exec", "MyFileBasedTool", "--yes", "--add-source", packageDir.FullName) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining(""" - Hello; EntryPointFilePath set? False - Release config - """); - } - - [Fact] - public void Pack_CustomPath() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "MyFileBasedTool.cs"); - File.WriteAllText(programFile, """ - #:property PackageOutputPath=custom - Console.WriteLine($"Hello; EntryPointFilePath set? {AppContext.GetData("EntryPointFilePath") is string}"); - """); - - // Run unpacked. - new DotnetCommand(Log, "run", "MyFileBasedTool.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello; EntryPointFilePath set? True"); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var outputDir = Path.Join(testInstance.Path, "custom"); - if (Directory.Exists(outputDir)) Directory.Delete(outputDir, recursive: true); - - // Pack. - new DotnetCommand(Log, "pack", "MyFileBasedTool.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(outputDir).File("MyFileBasedTool.1.0.0.nupkg").Should().Exist(); - new DirectoryInfo(artifactsDir).Sub("package").Should().NotExist(); - - // Run the packed tool. - new DotnetCommand(Log, "tool", "exec", "MyFileBasedTool", "--yes", "--add-source", outputDir) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining("Hello; EntryPointFilePath set? False"); - } - - [Fact] - public void Clean() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - var artifactsDir = new DirectoryInfo(VirtualProjectBuilder.GetArtifactsPath(programFile)); - artifactsDir.Should().HaveFiles(["build-start.cache", "build-success.cache"]); - - var dllFile = artifactsDir.File("bin/debug/Program.dll"); - dllFile.Should().Exist(); - - new DotnetCommand(Log, "clean", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - artifactsDir.EnumerateFiles().Should().BeEmpty(); - - dllFile.Refresh(); - dllFile.Should().NotExist(); - } - - [PlatformSpecificFact(TestPlatforms.AnyUnix), UnsupportedOSPlatform("windows")] - public void ArtifactsDirectory_Permissions() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFile = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programFile, s_program); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(artifactsDir).UnixFileMode - .Should().Be(UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute, artifactsDir); - - // Re-create directory with incorrect permissions. - Directory.Delete(artifactsDir, recursive: true); - Directory.CreateDirectory(artifactsDir, UnixFileMode.GroupRead | UnixFileMode.GroupWrite | UnixFileMode.GroupExecute); - var actualMode = new DirectoryInfo(artifactsDir).UnixFileMode - .Should().NotBe(UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute, artifactsDir).And.Subject; - - new DotnetCommand(Log, "build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining("build-start.cache"); // Unhandled exception: Access to the path '.../build-start.cache' is denied. - - // Build shouldn't have changed the permissions. - new DirectoryInfo(artifactsDir).UnixFileMode - .Should().Be(actualMode, artifactsDir); - } - - [Theory, CombinatorialData] - public void LaunchProfile( - bool cscOnly, - [CombinatorialValues("Properties/launchSettings.json", "Program.run.json")] string relativePath) - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: cscOnly ? OutOfTreeBaseDirectory : null); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program + """ - - Console.WriteLine($"Message: '{Environment.GetEnvironmentVariable("Message")}'"); - """); - var fullPath = Path.Join(testInstance.Path, relativePath); - Directory.CreateDirectory(Path.GetDirectoryName(fullPath)!); - File.WriteAllText(fullPath, s_launchSettings); - - var prefix = cscOnly - ? CliCommandStrings.NoBinaryLogBecauseRunningJustCsc + Environment.NewLine - : string.Empty; - - new DotnetCommand(Log, "run", "-bl", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining(prefix + """ - Hello from Program - Message: 'TestProfileMessage1' - """); - - prefix = CliCommandStrings.NoBinaryLogBecauseUpToDate + Environment.NewLine; - - new DotnetCommand(Log, "run", "-bl", "--no-launch-profile", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(prefix + """ - Hello from Program - Message: '' - """); - - new DotnetCommand(Log, "run", "-bl", "-lp", "TestProfile2", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining(prefix + """ - Hello from Program - Message: 'TestProfileMessage2' - """); - } - - /// - /// Properties/launchSettings.json takes precedence over Program.run.json. - /// - [Fact] - public void LaunchProfile_Precedence() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program + """ - - Console.WriteLine($"Message: '{Environment.GetEnvironmentVariable("Message")}'"); - """); - Directory.CreateDirectory(Path.Join(testInstance.Path, "Properties")); - string launchSettings = Path.Join(testInstance.Path, "Properties", "launchSettings.json"); - File.WriteAllText(launchSettings, s_launchSettings.Replace("TestProfileMessage", "PropertiesLaunchSettingsJson")); - string runJson = Path.Join(testInstance.Path, "Program.run.json"); - File.WriteAllText(runJson, s_launchSettings.Replace("TestProfileMessage", "ProgramRunJson")); - - new DotnetCommand(Log, "run", "--no-launch-profile", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - Hello from Program - Message: '' - """); - - // quiet runs here so that launch-profile usage messages don't impact test assertions - new DotnetCommand(Log, "run", "-v", "q", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($""" - {string.Format(CliCommandStrings.RunCommandWarningRunJsonNotUsed, runJson, launchSettings)} - Hello from Program - Message: 'PropertiesLaunchSettingsJson1' - """); - - new DotnetCommand(Log, "run", "-v", "q", "-lp", "TestProfile2", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($""" - {string.Format(CliCommandStrings.RunCommandWarningRunJsonNotUsed, runJson, launchSettings)} - Hello from Program - Message: 'PropertiesLaunchSettingsJson2' - """); - } - - /// - /// Each file-based app in a folder can have separate launch profile. - /// - [Fact] - public void LaunchProfile_Multiple() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var source = s_program + """ - - Console.WriteLine($"Message: '{Environment.GetEnvironmentVariable("Message")}'"); - """; - File.WriteAllText(Path.Join(testInstance.Path, "First.cs"), source); - File.WriteAllText(Path.Join(testInstance.Path, "First.run.json"), s_launchSettings.Replace("TestProfileMessage", "First")); - File.WriteAllText(Path.Join(testInstance.Path, "Second.cs"), source); - File.WriteAllText(Path.Join(testInstance.Path, "Second.run.json"), s_launchSettings.Replace("TestProfileMessage", "Second")); - - // do these runs with quiet verbosity so that default run output doesn't impact the tests - new DotnetCommand(Log, "run", "-v", "q", "First.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - Hello from First - Message: 'First1' - """); - - new DotnetCommand(Log, "run", "-v", "q", "Second.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(""" - Hello from Second - Message: 'Second1' - """); - } - - [Fact] - public void Define_01() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #if MY_DEFINE - Console.WriteLine("Test output"); - #endif - """); - - new DotnetCommand(Log, "run", "Program.cs", "-p:DefineConstants=MY_DEFINE") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Test output"); - } - - [Fact] - public void Define_02() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #if !MY_DEFINE - Console.WriteLine("Test output"); - #endif - """); - - new DotnetCommand(Log, "run", "Program.cs", "-p:DefineConstants=MY_DEFINE") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("error CS5001:"); // Program does not contain a static 'Main' method suitable for an entry point - } - - [Fact] - public void PackageReference() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:package System.CommandLine@2.0.0-beta4.22272.1 - using System.CommandLine; - - var rootCommand = new RootCommand("Sample app for System.CommandLine"); - return await rootCommand.InvokeAsync(args); - """); - - new DotnetCommand(Log, "run", "Program.cs", "--", "--help") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining(""" - Description: - Sample app for System.CommandLine - """); - } - - [Fact] - public void PackageReference_CentralVersion() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Packages.props"), """ - - - true - - - - - - """); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:package System.CommandLine - using System.CommandLine; - - var rootCommand = new RootCommand("Sample app for System.CommandLine"); - return await rootCommand.InvokeAsync(args); - """); - - new DotnetCommand(Log, "run", "Program.cs", "--", "--help") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining(""" - Description: - Sample app for System.CommandLine - """); - } - - // https://github.com/dotnet/sdk/issues/49665 - [PlatformSpecificFact(TestPlatforms.Any & ~TestPlatforms.OSX)] // https://github.com/dotnet/sdk/issues/48990 - public void SdkReference() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:sdk Microsoft.NET.Sdk - #:sdk Aspire.AppHost.Sdk@9.2.1 - #:package Aspire.Hosting.AppHost@9.2.1 - - var builder = DistributedApplication.CreateBuilder(args); - builder.Build().Run(); - """); - - new DotnetCommand(Log, "build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - } - - [Fact] // https://github.com/dotnet/sdk/issues/49797 - public void SdkReference_VersionedSdkFirst() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:sdk Microsoft.NET.Sdk@9.0.0 - Console.WriteLine(); - """); - - new DotnetCommand(Log, "build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - } - - [Theory] - [InlineData("../Lib/Lib.csproj")] - [InlineData("../Lib")] - [InlineData(@"..\Lib\Lib.csproj")] - [InlineData(@"..\Lib")] - [InlineData("$(MSBuildProjectDirectory)/../$(LibProjectName)")] - [InlineData(@"$(MSBuildProjectDirectory)/../Lib\$(LibProjectName).csproj")] - public void ProjectReference(string arg) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var libDir = Path.Join(testInstance.Path, "Lib"); - Directory.CreateDirectory(libDir); - - File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" - - - {ToolsetInfo.CurrentTargetFramework} - - - """); - - File.WriteAllText(Path.Join(libDir, "Lib.cs"), """ - namespace Lib; - public class LibClass - { - public static string GetMessage() => "Hello from Lib"; - } - """); - - var appDir = Path.Join(testInstance.Path, "App"); - Directory.CreateDirectory(appDir); - - File.WriteAllText(Path.Join(appDir, "Program.cs"), $""" - #:project {arg} - #:property LibProjectName=Lib - Console.WriteLine(Lib.LibClass.GetMessage()); - """); - - var expectedOutput = "Hello from Lib"; - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(appDir) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - - // Running from a different working directory shouldn't affect handling of the relative project paths. - new DotnetCommand(Log, "run", "App/Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - } - - [Theory] - [InlineData(null)] - [InlineData("app")] - public void ProjectReference_Errors(string? subdir) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var relativeFilePath = Path.Join(subdir, "Program.cs"); - var filePath = Path.Join(testInstance.Path, relativeFilePath); - Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); - File.WriteAllText(filePath, """ - #:project wrong.csproj - """); - - // Project file does not exist. - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "wrong.csproj")))); - - File.WriteAllText(filePath, """ - #:project dir/ - """); - - // Project directory does not exist. - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); - - Directory.CreateDirectory(Path.Join(testInstance.Path, subdir, "dir")); - - // Directory exists but has no project file. - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.CouldNotFindAnyProjectInDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); - - File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj1.csproj"), ""); - File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj2.csproj"), ""); - - // Directory exists but has multiple project files. - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.MoreThanOneProjectInDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); - - // Malformed MSBuild variable syntax. - File.WriteAllText(filePath, """ - #:project $(Test - """); - - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, - string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "$(Test")))); - } - - [Theory] - [InlineData(null)] - [InlineData("app")] - public void ProjectReference_Duplicate(string? subdir) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var relativeFilePath = Path.Join(subdir, "Program.cs"); - var filePath = Path.Join(testInstance.Path, relativeFilePath); - Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); - Directory.CreateDirectory(Path.Join(testInstance.Path, subdir, "dir")); - File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj1.csproj"), $""" - - - {ToolsetInfo.CurrentTargetFramework} - - - """); - - File.WriteAllText(filePath, """ - #:project dir/ - #:project dir/ - Console.WriteLine("Hello"); - """); - - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 2, FileBasedProgramsResources.DuplicateDirective, "#:project dir/")); - - File.WriteAllText(filePath, """ - #:project dir/ - #:project dir/proj1.csproj - Console.WriteLine("Hello"); - """); - - // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate project reference - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello"); - - File.WriteAllText(filePath, """ - #:project dir/ - #:project $(MSBuildProjectDirectory)/dir/ - Console.WriteLine("Hello"); - """); - - // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate project reference - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello"); - } - - [Fact] - public void RefDirective() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet(string name) => $"Hello, {name}!"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #:ref lib.cs - Console.WriteLine(MyLib.Greeter.Greet("World")); - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello, World!"); - } - - [Fact] - public void RefDirective_Subdirectory() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - var libDir = Path.Join(testInstance.Path, "lib"); - Directory.CreateDirectory(libDir); - - File.WriteAllText(Path.Join(libDir, "mylib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet(string name) => $"Hello, {name}!"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #:ref lib/mylib.cs - Console.WriteLine(MyLib.Greeter.Greet("World")); - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello, World!"); - } - - /// - /// Analogous to but for #:ref. - /// - [Theory] - [InlineData(null)] - [InlineData("app")] - public void RefDirective_Errors(string? subdir) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - var relativeFilePath = Path.Join(subdir, "Program.cs"); - var filePath = Path.Join(testInstance.Path, relativeFilePath); - Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); - - // Missing name. - File.WriteAllText(filePath, """ - #:ref - """); - - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.MissingDirectiveName, "ref")); - - // File does not exist. - File.WriteAllText(filePath, """ - #:ref nonexistent.cs - """); - - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidRefDirective, - string.Format(FileBasedProgramsResources.CouldNotFindRefFile, Path.Join(testInstance.Path, subdir, "nonexistent.cs")))); - } - - /// - /// Verifies that #:ref produces a metadata (assembly) reference, - /// meaning internal members are not accessible unless InternalsVisibleTo is used. - /// - [Fact] - public void RefDirective_InternalsNotAccessible() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class PublicClass - { - public static string PublicMethod() => "public"; - internal static string InternalMethod() => "internal"; - } - internal static class InternalClass - { - public static string Method() => "internal class"; - } - """); - - // Accessing internal member should fail. - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #:ref lib.cs - Console.WriteLine(MyLib.PublicClass.InternalMethod()); - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("error CS"); - - // Accessing public member should succeed. - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #:ref lib.cs - Console.WriteLine(MyLib.PublicClass.PublicMethod()); - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("public"); - } - - /// - /// Verifies transitive #:ref references work: app.cs → lib1.cs → lib2.cs. - /// - [Fact] - public void RefDirective_Transitive() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - File.WriteAllText(Path.Join(testInstance.Path, "lib2.cs"), """ - #:property OutputType=Library - namespace Lib2; - public static class Base - { - public static string Value() => "from lib2"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "lib1.cs"), """ - #:property OutputType=Library - #:ref lib2.cs - namespace Lib1; - public static class Middle - { - public static string Value() => $"from lib1 and {Lib2.Base.Value()}"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #:ref lib1.cs - Console.WriteLine(Lib1.Middle.Value()); - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("from lib1 and from lib2"); - } - - /// - /// #:ref with various path formats (forward slashes, backslashes, MSBuild properties, parent dirs). - /// Analogous to . - /// - [Theory] - [InlineData("../Lib/lib.cs")] - [InlineData(@"..\Lib\lib.cs")] - [InlineData("$(MSBuildProjectDirectory)/../$(LibDirName)/lib.cs")] - [InlineData(@"$(MSBuildProjectDirectory)\..\Lib\lib.cs")] - public void RefDirective_PathFormats(string arg) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - var libDir = Path.Join(testInstance.Path, "Lib"); - Directory.CreateDirectory(libDir); - - File.WriteAllText(Path.Join(libDir, "lib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet(string name) => $"Hello, {name}!"; - } - """); - - var appDir = Path.Join(testInstance.Path, "App"); - Directory.CreateDirectory(appDir); - - File.WriteAllText(Path.Join(appDir, "app.cs"), $""" - #:ref {arg} - #:property LibDirName=Lib - Console.WriteLine(MyLib.Greeter.Greet("World")); - """); - - var expectedOutput = "Hello, World!"; - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(appDir) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - - // Running from a different working directory shouldn't affect handling of the relative paths. - new DotnetCommand(Log, "run", "App/app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - } - - /// - /// #:ref duplicate detection. - /// Analogous to . - /// - [Theory] - [InlineData(null)] - [InlineData("app")] - public void RefDirective_Duplicate(string? subdir) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - var relativeFilePath = Path.Join(subdir, "Program.cs"); - var filePath = Path.Join(testInstance.Path, relativeFilePath); - Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); - - File.WriteAllText(Path.Join(testInstance.Path, subdir, "lib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "Hello!"; - } - """); - - File.WriteAllText(filePath, """ - #:ref lib.cs - #:ref lib.cs - Console.WriteLine(MyLib.Greeter.Greet()); - """); - - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 2, FileBasedProgramsResources.DuplicateDirective, "#:ref lib.cs")); - - File.WriteAllText(filePath, """ - #:ref lib.cs - #:ref ./lib.cs - Console.WriteLine(MyLib.Greeter.Greet()); - """); - - // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate ref - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello!"); - - File.WriteAllText(filePath, """ - #:ref lib.cs - #:ref $(MSBuildProjectDirectory)/lib.cs - Console.WriteLine(MyLib.Greeter.Greet()); - """); - - // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate ref - new DotnetCommand(Log, "run", relativeFilePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello!"); - } - - /// - /// #:ref is an experimental feature that must be opted into. - /// Analogous to . - /// - [Fact] - public void RefDirective_FeatureFlag() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var libPath = Path.Join(testInstance.Path, "lib.cs"); - File.WriteAllText(libPath, """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "Hello!"; - } - """); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, """ - #:ref lib.cs - Console.WriteLine(MyLib.Greeter.Greet()); - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr($""" - {DirectiveError(programPath, 1, Resources.ExperimentalFeatureDisabled, CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective)} - - {CliCommandStrings.RunCommandException} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello!"); - } - - /// - /// Combining #:ref and #:include in the same file-based app. - /// - [Fact] - public void RefDirective_WithInclude() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - - - <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - - - """); - - File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ - #!/usr/bin/env dotnet - #:property OutputType=Library - #:include LibHelper.cs - #:include LibFormatter.cs - namespace MyLib; - public static class Greeter - { - public static string Greet(string name) => LibFormatter.Format(LibHelper.Prefix, name); - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "LibHelper.cs"), """ - namespace MyLib; - public static class LibHelper - { - public static string Prefix => "Hello"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "LibFormatter.cs"), """ - namespace MyLib; - public static class LibFormatter - { - public static string Format(string prefix, string name) => $"{prefix}, {name}!"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), """ - static class Util - { - public static string GetName() => "World"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #!/usr/bin/env dotnet - #:ref lib.cs - #:include Util.cs - Console.WriteLine(MyLib.Greeter.Greet(Util.GetName())); - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello, World!"); - } - - /// - /// A #:ref library can target a different framework (e.g., netstandard2.0) - /// than the referencing app (net10.0). - /// - [Fact] - public void RefDirective_DifferentTargetFramework() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ - #:property OutputType=Library - #:property TargetFramework=netstandard2.0 - #:property LangVersion=latest - #:property ImplicitUsings=disable - #:property PublishAot=false - namespace MyLib; - public static class Greeter - { - #if NETSTANDARD2_0 - public static string Greet() => "Hello from netstandard2.0!"; - #else - public static string Greet() => "Hello from other!"; - #endif - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #:ref lib.cs - #if NET10_0_OR_GREATER - Console.WriteLine("App is net10.0+: " + MyLib.Greeter.Greet()); - #else - Console.WriteLine("App is older: " + MyLib.Greeter.Greet()); - #endif - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("App is net10.0+: Hello from netstandard2.0!"); - } - - /// - /// #:ref *.cs does not expand globs — it looks for a literal file named *.cs. - /// - [Fact] - public void RefDirective_Glob() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "Hello!"; - } - """); - - var filePath = Path.Join(testInstance.Path, "app.cs"); - File.WriteAllText(filePath, """ - #:ref *.cs - Console.WriteLine(MyLib.Greeter.Greet()); - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidRefDirective, - string.Format(FileBasedProgramsResources.CouldNotFindRefFile, Path.Join(testInstance.Path, "*.cs")))); - } - - /// - /// Verifies that cyclic #:ref references (lib1 → lib2 → lib1) do not cause an infinite loop. - /// - [Fact] - public void RefDirective_Cycle() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - File.WriteAllText(Path.Join(testInstance.Path, "lib1.cs"), """ - #:property OutputType=Library - #:ref lib2.cs - namespace Lib1; - public static class C1 { public static string Get() => "lib1"; } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "lib2.cs"), """ - #:property OutputType=Library - #:ref lib1.cs - namespace Lib2; - public static class C2 { public static string Get() => "lib2"; } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #:ref lib1.cs - Console.WriteLine(Lib1.C1.Get()); - """); - - // Should not hang. The cycle is broken by processedFiles deduplication. - // error NU1108: Cycle detected. - // error NU1108: lib1 -> lib2 -> lib1. - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("error NU1108"); - } - - /// - /// Two #:include'd files each have #:ref to the same library. - /// The deduplication via processedFiles should ensure the library is only processed once. - /// - [Fact] - public void RefDirective_DuplicateRefFromIncludedFiles() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - - - <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - - - """); - - File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "Hello!"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "helper1.cs"), """ - #:ref lib.cs - static class Helper1 - { - public static string Get() => MyLib.Greeter.Greet(); - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "helper2.cs"), """ - #:ref lib.cs - static class Helper2 - { - public static string Get() => MyLib.Greeter.Greet(); - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #!/usr/bin/env dotnet - #:include helper1.cs - #:include helper2.cs - Console.WriteLine(Helper1.Get() + " " + Helper2.Get()); - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello! Hello!"); - } - - /// - /// Two #:include'd files in different directories each have #:ref to the same library - /// using different relative paths. Deduplication via processedFiles uses the resolved (absolute) path, - /// so the library is only processed once. - /// - [Fact] - public void RefDirective_DuplicateRefFromIncludedFiles_Subdirectories() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - - - <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - - - """); - - // lib.cs is in the root directory. - File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "Hello!"; - } - """); - - // helper1.cs is in sub1/, refers to lib.cs via ../lib.cs. - var sub1 = Path.Join(testInstance.Path, "sub1"); - Directory.CreateDirectory(sub1); - File.WriteAllText(Path.Join(sub1, "helper1.cs"), """ - #:ref ../lib.cs - static class Helper1 - { - public static string Get() => MyLib.Greeter.Greet(); - } - """); - - // helper2.cs is in sub2/nested/, refers to lib.cs via ../../lib.cs (different relative path, same resolved path). - var sub2 = Path.Join(testInstance.Path, "sub2", "nested"); - Directory.CreateDirectory(sub2); - File.WriteAllText(Path.Join(sub2, "helper2.cs"), """ - #:ref ../../lib.cs - static class Helper2 - { - public static string Get() => MyLib.Greeter.Greet(); - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #!/usr/bin/env dotnet - #:include sub1/helper1.cs - #:include sub2/nested/helper2.cs - Console.WriteLine(Helper1.Get() + " " + Helper2.Get()); - """); - - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello! Hello!"); - } - - /// - /// Both #:include and #:ref pointing at the same file. - /// The file ends up both compiled into the current assembly and referenced as a separate assembly. - /// This is expected to produce a compilation error (duplicate type definitions). - /// - [Fact] - public void RefDirective_IncludeAndRefSameFile() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - - - <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true - - - """); - - File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "Hello!"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ - #:ref lib.cs - #:include lib.cs - Console.WriteLine(MyLib.Greeter.Greet()); - """); - - // The #:include brings in lib.cs's #:property OutputType=Library, making the app a library. - // error CS8805: Program using top-level statements must be an executable. - new DotnetCommand(Log, "run", "app.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("error CS8805"); - } - - [Theory, CombinatorialData] - public void IncludeDirective( - [CombinatorialValues("Util.cs", "**/*.cs", "**/*.$(MyProp1)")] string includePattern, - [CombinatorialValues("", "#:exclude Program.$(MyProp1)")] string additionalDirectives) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" - #!/usr/bin/env dotnet - #:include {includePattern} - {additionalDirectives} - #:property MyProp1=cs - {s_programDependingOnUtil} - """); - - File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello, String from Util"); - } - - [Fact] - public void IncludeDirective_WorkingDirectory() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var srcDir = Path.Join(testInstance.Path, "src"); - Directory.CreateDirectory(srcDir); - - var a = """ - Console.WriteLine(B.M()); - """; - - File.WriteAllText(Path.Join(srcDir, "A.cs"), $""" - #!/usr/bin/env dotnet - #:include B.cs - {a} - """); - - var b = """ - static class B { public static string M() => "Hello from B"; } - """; - - File.WriteAllText(Path.Join(srcDir, "B.cs"), b); - - var expectedOutput = "Hello from B"; - - new DotnetCommand(Log, "run", "src/A.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - - // Convert to a project. - new DotnetCommand(Log, "project", "convert", "src/A.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - new DirectoryInfo(testInstance.Path) - .Should().HaveSubtree(""" - src/ - src/A.cs - src/A/ - src/A/A.cs - src/A/A.csproj - src/A/B.cs - src/B.cs - """) - .And.HaveFileContent("src/A/A.cs", a) - .And.HaveFileContent("src/A/B.cs", b) - .And.HaveFileContentPattern("src/A/A.csproj", """ - - - - Exe - net10.0 - enable - enable - true - true - A-* - - - - - """); - - // Run the converted project. - new DotnetCommand(Log, "run") - .WithWorkingDirectory(Path.Join(testInstance.Path, "src/A")) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - } - - [Fact] - public void IncludeDirective_Transitive() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - Directory.CreateDirectory(Path.Join(testInstance.Path, "dir1/dir2")); - Directory.CreateDirectory(Path.Join(testInstance.Path, "dir3")); - - var a = """ - B.M(); - """; - - File.WriteAllText(Path.Join(testInstance.Path, "dir1/A.cs"), $""" - #!/usr/bin/env dotnet - #:include dir2/B.cs - {a} - """); - - var b = """ - static class B { public static void M() { C.M(); } } - """; - - File.WriteAllText(Path.Join(testInstance.Path, "dir1/dir2/B.cs"), $""" - #:include ../../dir3/$(P1).cs - #:property P1=C - {b} - """); - - var c = """ - static class C { public static void M() { D.M(); } } - """; - - File.WriteAllText(Path.Join(testInstance.Path, "dir3/C.cs"), $""" - #:include ../$(P1).cs - {c} - """); - - var d = """ - static class D - { - public static void M() - { - var asm = System.Reflection.Assembly.GetExecutingAssembly(); - using var stream = asm.GetManifestResourceStream($"{asm.GetName().Name}.Resources.resources")!; - using var reader = new System.Resources.ResourceReader(stream); - Console.WriteLine(reader.Cast().Single()); - } - } - """; - - File.WriteAllText(Path.Join(testInstance.Path, "C.cs"), $""" - #:include Resources.resx - {d} - """); - - File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx); - - var expectedOutput = "[MyString, TestValue]"; - - new DotnetCommand(Log, "run", "A.cs") - .WithWorkingDirectory(Path.Join(testInstance.Path, "dir1")) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - - // Convert to a project. - new DotnetCommand(Log, "project", "convert", "A.cs") - .WithWorkingDirectory(Path.Join(testInstance.Path, "dir1")) - .Execute() - .Should().Pass(); - - new DirectoryInfo(Path.Join(testInstance.Path, "dir1/A")) - .Should().HaveSubtree(""" - A.cs - A.csproj - C.cs - C_2.cs - Resources.resx - dir2/ - dir2/B.cs - """) - .And.HaveFileContent("A.cs", a) - .And.HaveFileContent("dir2/B.cs", b) - .And.HaveFileContent("C.cs", c) - .And.HaveFileContent("C_2.cs", d) - .And.HaveFileContent("Resources.resx", s_resx) - .And.HaveFileContentPattern("A.csproj", """ - - - - Exe - net10.0 - enable - enable - true - true - A-* - C - - - - - """); - - // Run the converted project. - new DotnetCommand(Log, "run") - .WithWorkingDirectory(Path.Join(testInstance.Path, "dir1/A")) - .Execute() - .Should().Pass() - .And.HaveStdOut(expectedOutput); - } - - [Fact] - public void IncludeDirective_FileNotFound() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "A.cs"); - - File.WriteAllText(programPath, """ - #:include B.cs - Console.WriteLine("Hello"); - """); - - new DotnetCommand(Log, "run", "A.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(DirectiveError(programPath, 1, Resources.IncludedFileNotFound, Path.Join(testInstance.Path, "B.cs"))); - } - - /// - /// Combination of optimization and #:include directive. - /// - [Theory] - [InlineData("*")] - [InlineData("$(_Star)")] - [InlineData("Util?")] - public void IncludeDirective_UpToDate_Glob(string glob) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, $""" - #!/usr/bin/env dotnet - #:include {glob}.cs - #:property _Star=* - {s_programDependingOnUtil} - """); - - var utilPath = Path.Join(testInstance.Path, "Util1.cs"); - var utilCode = s_util; - File.WriteAllText(utilPath, utilCode); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var expectedOutput = "Hello, String from Util"; - - Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput); - - Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput); - - utilCode = utilCode.Replace("String from Util", "v2"); - File.WriteAllText(utilPath, utilCode); - - Build(testInstance, BuildLevel.All, expectedOutput: "Hello, v2"); - - utilCode = utilCode.Replace("v2", "v3"); - File.WriteAllText(utilPath, utilCode); - - Build(testInstance, BuildLevel.All, expectedOutput: "Hello, v3"); - - var util2Path = Path.Join(testInstance.Path, "Util2.cs"); - File.WriteAllText(util2Path, """ - using System.Runtime.CompilerServices; - - file class C - { - [ModuleInitializer] - internal static void Initialize() - { - Console.WriteLine("Hello from Util2"); - } - } - """); - - Build(testInstance, BuildLevel.All, expectedOutput: """ - Hello from Util2 - Hello, v3 - """); - } - - /// - /// Combination of optimization and #:include directive. - /// - [Fact] - public void IncludeDirective_UpToDate_NoGlob() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, $""" - #!/usr/bin/env dotnet - #:include Util.cs - {s_programDependingOnUtil} - """); - - var utilPath = Path.Join(testInstance.Path, "Util.cs"); - var utilCode = s_util; - File.WriteAllText(utilPath, utilCode); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var expectedOutput = "Hello, String from Util"; - - Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput); - - Build(testInstance, BuildLevel.None, expectedOutput: expectedOutput); - - utilCode = utilCode.Replace("String from Util", "v2"); - File.WriteAllText(utilPath, utilCode); - - Build(testInstance, BuildLevel.All, expectedOutput: "Hello, v2"); - - utilCode = utilCode.Replace("v2", "v3"); - File.WriteAllText(utilPath, utilCode); - - Build(testInstance, BuildLevel.All, expectedOutput: "Hello, v3"); - - var util2Path = Path.Join(testInstance.Path, "Util2.cs"); - File.WriteAllText(util2Path, """ - using System.Runtime.CompilerServices; - - file class C - { - [ModuleInitializer] - internal static void Initialize() - { - Console.WriteLine("Hello from Util2"); - } - } - """); - - Build(testInstance, BuildLevel.None, expectedOutput: "Hello, v3"); - - Build(testInstance, BuildLevel.All, args: ["--no-cache"], expectedOutput: "Hello, v3"); - } - - /// - /// Combination of test and #:include directive. - /// - [Fact] - public void IncludeDirective_UpToDate_ProjectReference() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var libDir = Path.Join(testInstance.Path, "Lib"); - Directory.CreateDirectory(libDir); - - File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" - - - {ToolsetInfo.CurrentTargetFramework} - - - """); - - var libPath = Path.Join(libDir, "Lib.cs"); - var libCode = """ - namespace Lib; - public class LibClass - { - public static string GetMessage() => "Lib(v1)"; - } - """; - File.WriteAllText(libPath, libCode); - - var appDir = Path.Join(testInstance.Path, "App"); - Directory.CreateDirectory(appDir); - - var utilPath = Path.Join(appDir, "Util.cs"); - var utilCode = """ - #:project ../Lib - class UtilClass - { - public static string GetMessage() => "Util(v1) " + Lib.LibClass.GetMessage(); - } - """; - File.WriteAllText(utilPath, utilCode); - - var programPath = Path.Join(appDir, "Program.cs"); - var programCode = """ - #!/usr/bin/env dotnet - #:include Util.cs - Console.WriteLine("Program(v1) " + UtilClass.GetMessage()); - """; - File.WriteAllText(programPath, programCode); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var expectedOutput = "Program(v1) Util(v1) Lib(v1)"; - - Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput, workDir: appDir); - - Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput, workDir: appDir); - - libCode = libCode.Replace("v1", "v2"); - File.WriteAllText(libPath, libCode); - - expectedOutput = "Program(v1) Util(v1) Lib(v2)"; - - Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput, workDir: appDir); - } - - [Fact] - public void IncludeDirective_CustomMapping() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, $""" - #!/usr/bin/env dotnet - #:property FileBasedProgramsItemMapping=.json=Content - #:include *.cs - {s_programDependingOnUtil} - """); - - var utilPath = Path.Join(testInstance.Path, "Util.cs"); - File.WriteAllText(utilPath, s_util); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr($""" - {DirectiveError(programPath, 3, FileBasedProgramsResources.IncludeOrExcludeDirectiveUnknownFileType, "#:include", ".json")} - - {CliCommandStrings.RunCommandException} - """); - - File.WriteAllText(programPath, $""" - #!/usr/bin/env dotnet - #:property FileBasedProgramsItemMapping=.cs=Content - #:include *.cs - {s_programDependingOnUtil} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - // error CS0103: The name 'Util' does not exist in the current context - .And.HaveStdOutContaining("error CS0103"); - - File.WriteAllText(programPath, $""" - #!/usr/bin/env dotnet - #:property FileBasedProgramsItemMapping=.cs=Compile - #:include *.cs - {s_programDependingOnUtil} - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello, String from Util"); - } - - [Fact] - public void IncludeDirective_CustomMapping_ParseErrors() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, """ - #:property FileBasedProgramsItemMapping=x - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - // error CS5001: Program does not contain a static 'Main' method suitable for an entry point - .And.HaveStdOutContaining("error CS5001"); - - File.WriteAllText(programPath, """ - #:property FileBasedProgramsItemMapping=x - #:include *.* - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr($""" - {DirectiveError(programPath, 1, FileBasedProgramsResources.InvalidIncludeExcludeMappingEntry, "x")} - - {CliCommandStrings.RunCommandException} - """); - - File.WriteAllText(programPath, """ - #:property FileBasedProgramsItemMapping=.=X;y - #:include *.* - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr($""" - {DirectiveError(programPath, 1, FileBasedProgramsResources.InvalidIncludeExcludeMappingExtension, ".", ".=X")} - - {CliCommandStrings.RunCommandException} - """); - - File.WriteAllText(programPath, """ - #:property FileBasedProgramsItemMapping=.cs=;y - #:include *.* - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr($""" - {DirectiveError(programPath, 1, FileBasedProgramsResources.InvalidIncludeExcludeMappingItemType, "", ".cs=")} - - {CliCommandStrings.RunCommandException} - """); - - File.WriteAllText(programPath, """ - #:property FileBasedProgramsItemMapping=.x=X;y - #:include *.* - """); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErr($""" - {DirectiveError(programPath, 1, FileBasedProgramsResources.InvalidIncludeExcludeMappingEntry, "y")} - - {CliCommandStrings.RunCommandException} - """); - } - - /// - /// Demonstrates that consumers (e.g., IDE) can use the API to create an approximate virtual project without needing to know the full mapping. - /// - [Fact] - public void IncludeDirective_CustomMapping_Api() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - - var code = """ - #:include B.cs - #:include C.proto - Console.WriteLine(); - """; - - var builder = new VirtualProjectBuilder( - entryPointFileFullPath: programPath, - targetFramework: VirtualProjectBuildingCommand.TargetFramework, - sourceText: SourceText.From(code, Encoding.UTF8)); - - var directives = FileLevelDirectiveHelpers.FindDirectives( - builder.EntryPointSourceFile, - reportAllErrors: true, - VirtualProjectBuildingCommand.ThrowingReporter); - - ImmutableArray<(string Extension, string ItemType)> mapping = [(".cs", "Compile")]; - - var evaluatedBuilder = ImmutableArray.CreateBuilder(directives.Length); - - foreach (var directive in directives) - { - if (directive is CSharpDirective.IncludeOrExclude includeOrExcludeDirective) - { - var evaluated = includeOrExcludeDirective.WithDeterminedItemType(ErrorReporters.IgnoringReporter, mapping); - evaluatedBuilder.Add(evaluated); - } - else - { - evaluatedBuilder.Add(directive); - } - } - - var evaluatedDirectives = evaluatedBuilder.DrainToImmutable(); - - var projectWriter = new System.IO.StringWriter(); - VirtualProjectBuilder.WriteProjectFile( - projectWriter, - evaluatedDirectives, - VirtualProjectBuilder.GetDefaultProperties(VirtualProjectBuildingCommand.TargetFrameworkVersion), - isVirtualProject: true, - entryPointFilePath: programPath, - artifactsPath: builder.ArtifactsPath); - - var actualProject = projectWriter.ToString(); - - Log.WriteLine(actualProject); - - actualProject.Should().Contain(""""""); - - actualProject.Should().NotContain(".proto"); - } - - [Fact] - public void IncludeDirective_DefaultMapping_InSync() - { - var parsed = CSharpDirective.IncludeOrExclude.ParseMapping(CSharpDirective.IncludeOrExclude.DefaultMappingString, - sourceFile: default, - VirtualProjectBuildingCommand.ThrowingReporter); - parsed.Should().BeEquivalentTo(CSharpDirective.IncludeOrExclude.DefaultMapping); - } - - [Theory] // https://github.com/dotnet/aspnetcore/issues/63440 - [InlineData(true, null)] - [InlineData(false, null)] - [InlineData(true, "test-id")] - [InlineData(false, "test-id")] - public void UserSecrets(bool useIdArg, string? userSecretsId) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - string code = $""" - #:package Microsoft.Extensions.Configuration.UserSecrets@{CSharpCompilerCommand.RuntimeVersion} - {(userSecretsId is null ? "" : $"#:property UserSecretsId={userSecretsId}")} - - using Microsoft.Extensions.Configuration; - - IConfigurationRoot config = new ConfigurationBuilder() - .AddUserSecrets() - .Build(); - - Console.WriteLine("v1"); - Console.WriteLine(config.GetDebugView()); - """; - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, code); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - if (useIdArg) - { - if (userSecretsId == null) - { - var result = new DotnetCommand(Log, "build", "-getProperty:UserSecretsId", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute(); - result.Should().Pass(); - userSecretsId = result.StdOut!.Trim(); - } - - new DotnetCommand(Log, "user-secrets", "set", "MySecret", "MyValue", "--id", userSecretsId) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - } - else - { - new DotnetCommand(Log, "user-secrets", "set", "MySecret", "MyValue", "--file", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - } - - Build(testInstance, BuildLevel.All, expectedOutput: """ - v1 - MySecret=MyValue (JsonConfigurationProvider for 'secrets.json' (Optional)) - """); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.Csc, expectedOutput: """ - v2 - MySecret=MyValue (JsonConfigurationProvider for 'secrets.json' (Optional)) - """); - } - - /// - /// Verifies that msbuild-based runs use CSC args equivalent to csc-only runs. - /// Can regenerate CSC arguments template in . - /// - [Fact] - public void CscArguments() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - const string programName = "TestProgram"; - const string fileName = $"{programName}.cs"; - string entryPointPath = Path.Join(testInstance.Path, fileName); - File.WriteAllText(entryPointPath, s_program); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(entryPointPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - // Build using MSBuild. - new DotnetCommand(Log, "run", fileName, "-bl", "--no-cache") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($"Hello from {programName}"); - - // Find the csc args used by the build. - var msbuildCall = FindCompilerCall(Path.Join(testInstance.Path, "msbuild.binlog")); - var msbuildCallArgs = msbuildCall.GetArguments(); - var msbuildCallArgsString = ArgumentEscaper.EscapeAndConcatenateArgArrayForProcessStart(msbuildCallArgs); - - // Generate argument template code. - string sdkPath = NormalizePath(SdkTestContext.Current.ToolsetUnderTest.SdkFolderUnderTest); - string dotNetRootPath = NormalizePath(SdkTestContext.Current.ToolsetUnderTest.DotNetRoot); - string nuGetCachePath = NormalizePath(SdkTestContext.Current.NuGetCachePath!); - string artifactsDirNormalized = NormalizePath(artifactsDir); - string objPath = $"{artifactsDirNormalized}/obj/debug"; - string entryPointPathNormalized = NormalizePath(entryPointPath); - var msbuildArgsToVerify = new List(); - var nuGetPackageFilePaths = new List(); - bool referenceSpreadInserted = false; - bool analyzerSpreadInserted = false; - const string NetCoreAppRefPackPath = "packs/Microsoft.NETCore.App.Ref/"; - var code = new StringBuilder(); - code.AppendLine($$""" - // Licensed to the .NET Foundation under one or more agreements. - // The .NET Foundation licenses this file to you under the MIT license. - - using System.Text.Json; - - namespace Microsoft.DotNet.Cli.Commands.Run; - - // Generated by test `{{nameof(RunFileTests)}}.{{nameof(CscArguments)}}`. - partial class CSharpCompilerCommand - { - private IEnumerable GetCscArguments( - string objDir, - string binDir) - { - return - [ - """); - foreach (var arg in msbuildCallArgs) - { - // This option needs to be passed on the command line, not in an RSP file. - if (arg is "/noconfig") - { - continue; - } - - // We don't need to generate a ref assembly. - if (arg.StartsWith("/refout:", StringComparison.Ordinal)) - { - continue; - } - - // There should be no source link arguments. - if (arg.StartsWith("/sourcelink:", StringComparison.Ordinal)) - { - Assert.Fail($"Unexpected source link argument: {arg}"); - } - - // PreferredUILang is normally not set by default but can be in builds, so ignore it. - if (arg.StartsWith("/preferreduilang:", StringComparison.Ordinal)) - { - continue; - } - - bool needsInterpolation = false; - bool fromNuGetPackage = false; - - // Normalize slashes in paths. - string rewritten = NormalizePathArg(arg); - - // Remove quotes. - rewritten = RemoveQuotes(rewritten); - - string msbuildArgToVerify = rewritten; - - // Use variable SDK path. - if (rewritten.Contains(sdkPath, StringComparison.OrdinalIgnoreCase)) - { - rewritten = rewritten.Replace(sdkPath, "{SdkPath}", StringComparison.OrdinalIgnoreCase); - needsInterpolation = true; - } - - // Use variable .NET root path. - if (rewritten.Contains(dotNetRootPath, StringComparison.OrdinalIgnoreCase)) - { - rewritten = rewritten.Replace(dotNetRootPath, "{DotNetRootPath}", StringComparison.OrdinalIgnoreCase); - needsInterpolation = true; - } - - // Use variable NuGet cache path. - if (rewritten.Contains(nuGetCachePath, StringComparison.OrdinalIgnoreCase)) - { - rewritten = rewritten.Replace(nuGetCachePath, "{NuGetCachePath}", StringComparison.OrdinalIgnoreCase); - needsInterpolation = true; - fromNuGetPackage = true; - } - - // Use variable intermediate dir path. - if (rewritten.Contains(objPath, StringComparison.OrdinalIgnoreCase)) - { - // We want to emit the resulting DLL directly into the bin folder. - bool isOut = arg.StartsWith("/out", StringComparison.Ordinal); - string replacement = isOut ? "{binDir}" : "{objDir}"; - - if (isOut) - { - msbuildArgToVerify = msbuildArgToVerify.Replace("/obj/", "/bin/", StringComparison.OrdinalIgnoreCase); - } - - rewritten = rewritten.Replace(objPath, replacement, StringComparison.OrdinalIgnoreCase); - needsInterpolation = true; - } - - // Use variable file path. - if (rewritten.Contains(entryPointPathNormalized, StringComparison.OrdinalIgnoreCase)) - { - rewritten = rewritten.Replace(entryPointPathNormalized, "{" + nameof(CSharpCompilerCommand.EntryPointFileFullPath) + "}", StringComparison.OrdinalIgnoreCase); - needsInterpolation = true; - } - - // Use variable file name. - if (rewritten.Contains(fileName, StringComparison.OrdinalIgnoreCase)) - { - rewritten = rewritten.Replace(fileName, "{FileName}", StringComparison.OrdinalIgnoreCase); - needsInterpolation = true; - } - - // Use variable program name. - if (rewritten.Contains(programName, StringComparison.OrdinalIgnoreCase)) - { - rewritten = rewritten.Replace(programName, "{FileNameWithoutExtension}", StringComparison.OrdinalIgnoreCase); - needsInterpolation = true; - } - - // Use variable runtime version. - if (rewritten.Contains(CSharpCompilerCommand.RuntimeVersion, StringComparison.OrdinalIgnoreCase)) - { - rewritten = rewritten.Replace(CSharpCompilerCommand.RuntimeVersion, "{" + nameof(CSharpCompilerCommand.RuntimeVersion) + "}", StringComparison.OrdinalIgnoreCase); - needsInterpolation = true; - } - - // Ignore `/analyzerconfig` which is not variable (so it comes from the machine or sdk repo). - if (!needsInterpolation && arg.StartsWith("/analyzerconfig", StringComparison.Ordinal)) - { - continue; - } - - // Use GetFrameworkReferenceArguments() for framework references instead of hard-coding them. - if (arg.StartsWith("/reference:", StringComparison.Ordinal)) - { - if (!referenceSpreadInserted) - { - code.AppendLine(""" - .. GetFrameworkReferenceArguments(), - """); - referenceSpreadInserted = true; - } - - msbuildArgsToVerify.Add(msbuildArgToVerify); - continue; - } - - // Use GetFrameworkAnalyzerArguments() for targeting-pack analyzers instead of hard-coding them. - if (arg.StartsWith("/analyzer:", StringComparison.Ordinal) - && rewritten.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase)) - { - if (!analyzerSpreadInserted) - { - code.AppendLine(""" - .. GetFrameworkAnalyzerArguments(), - """); - analyzerSpreadInserted = true; - } - - msbuildArgsToVerify.Add(msbuildArgToVerify); - continue; - } - - string prefix = needsInterpolation ? "$" : string.Empty; - - code.AppendLine($""" - {prefix}"{rewritten}", - """); - - msbuildArgsToVerify.Add(msbuildArgToVerify); - - if (fromNuGetPackage) - { - nuGetPackageFilePaths.Add(CSharpCompilerCommand.IsPathOption(rewritten, out int colonIndex) - ? rewritten.Substring(colonIndex + 1) - : rewritten); - } - } - code.AppendLine(""" - ]; - } - - /// - /// Files that come from referenced NuGet packages (e.g., analyzers for NativeAOT) need to be checked specially (if they don't exist, MSBuild needs to run). - /// - public static IEnumerable GetPathsOfCscInputsFromNuGetCache() - { - return - [ - """); - foreach (var nuGetPackageFilePath in nuGetPackageFilePaths) - { - code.AppendLine($""" - $"{nuGetPackageFilePath}", - """); - } - code.AppendLine(""" - ]; - } - """); - - // Generate file content templates. - var baseDirectory = TestPathUtility.ResolveTempPrefixLink(Path.GetDirectoryName(entryPointPath)!); - var replacements = new List<(string, string)> - { - (TestPathUtility.ResolveTempPrefixLink(entryPointPath), nameof(CSharpCompilerCommand.EntryPointFileFullPath)), - (baseDirectory + Path.DirectorySeparatorChar, nameof(CSharpCompilerCommand.BaseDirectoryWithTrailingSeparator)), - (baseDirectory, nameof(CSharpCompilerCommand.BaseDirectory)), - (programName, nameof(CSharpCompilerCommand.FileNameWithoutExtension)), - (CSharpCompilerCommand.TargetFrameworkVersion, nameof(CSharpCompilerCommand.TargetFrameworkVersion)), - (CSharpCompilerCommand.TargetFramework, nameof(CSharpCompilerCommand.TargetFramework)), - (CSharpCompilerCommand.DefaultRuntimeVersion, nameof(CSharpCompilerCommand.DefaultRuntimeVersion)), - }; - var emittedFiles = Directory.EnumerateFiles(artifactsDir, "*", SearchOption.AllDirectories).Order(); - foreach (var emittedFile in emittedFiles) - { - var emittedFileName = Path.GetFileName(emittedFile); - var generatedMethodName = GetGeneratedMethodName(emittedFileName); - if (generatedMethodName is null) - { - Log.WriteLine($"Skipping unrecognized file '{emittedFile}'."); - continue; - } - - var emittedFileContent = File.ReadAllText(emittedFile); - - string interpolatedString = emittedFileContent; - string interpolationPrefix; - - if (emittedFileName.EndsWith(".json", StringComparison.Ordinal)) - { - interpolationPrefix = "$$"; - foreach (var (key, value) in replacements) - { - interpolatedString = interpolatedString.Replace(JsonSerializer.Serialize(key), "{{JsonSerializer.Serialize(" + value + ")}}"); - } - } - else - { - interpolationPrefix = "$"; - foreach (var (key, value) in replacements) - { - interpolatedString = interpolatedString.Replace(key, "{" + value + "}"); - } - } - - if (interpolatedString == emittedFileContent) - { - interpolationPrefix = ""; - } - - code.AppendLine($$"""" - - private string Get{{generatedMethodName}}Content() - { - return {{interpolationPrefix}}""" - {{interpolatedString}} - """; - } - """"); - } - - code.AppendLine(""" - } - """); - - // Save the code. - var codeFolder = new DirectoryInfo(Path.Join( - SdkTestContext.Current.ToolsetUnderTest.RepoRoot, - "src", "Cli", "dotnet", "Commands", "Run")); - var nonGeneratedFile = codeFolder.File("CSharpCompilerCommand.cs"); - if (!nonGeneratedFile.Exists) - { - Log.WriteLine($"Skipping code generation because file does not exist: {nonGeneratedFile.FullName}"); - } - else - { - var codeFilePath = codeFolder.File("CSharpCompilerCommand.Generated.cs"); - var existingText = codeFilePath.Exists ? File.ReadAllText(codeFilePath.FullName) : string.Empty; - var newText = code.ToString(); - if (existingText != newText) - { - Log.WriteLine($"{codeFilePath.FullName} needs to be updated:"); - Log.WriteLine(newText); - if (Env.GetEnvironmentVariableAsBool("CI")) - { - throw new InvalidOperationException($"Not updating file in CI: {codeFilePath.FullName}"); - } - else - { - File.WriteAllText(codeFilePath.FullName, newText); - throw new InvalidOperationException($"File outdated, commit the changes: {codeFilePath.FullName}"); - } - } - } - - // Build using CSC. - Directory.Delete(artifactsDir, recursive: true); - new DotnetCommand(Log, "run", fileName, "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($""" - {CliCommandStrings.NoBinaryLogBecauseRunningJustCsc} - Hello from {programName} - """); - - // Read args from csc.rsp file. - var rspFilePath = Path.Join(artifactsDir, "csc.rsp"); - var cscOnlyCallArgs = File.ReadAllLines(rspFilePath); - var cscOnlyCallArgsString = string.Join(' ', cscOnlyCallArgs); - - // Check that csc args between MSBuild run and CSC-only run are equivalent. - var normalizedCscOnlyArgs = cscOnlyCallArgs - .Select(static a => NormalizePathArg(RemoveQuotes(a))) - .ToList(); - Log.WriteLine("CSC-only args:"); - Log.WriteLine(string.Join(Environment.NewLine, normalizedCscOnlyArgs)); - Log.WriteLine("MSBuild args:"); - Log.WriteLine(string.Join(Environment.NewLine, msbuildArgsToVerify)); - - // References and targeting-pack analyzers may be in a different order (FrameworkList.xml vs. MSBuild), - // so compare them as sets. All other args must be in the same order. - var cscOnlyRefArgs = normalizedCscOnlyArgs.Where(static a => a.StartsWith("/reference:", StringComparison.Ordinal)).ToList(); - var cscOnlyAnalyzerArgs = normalizedCscOnlyArgs.Where(a => a.StartsWith("/analyzer:", StringComparison.Ordinal) && a.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase)).ToList(); - var cscOnlyOtherArgs = normalizedCscOnlyArgs.Where(a => !a.StartsWith("/reference:", StringComparison.Ordinal) && !(a.StartsWith("/analyzer:", StringComparison.Ordinal) && a.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase))).ToList(); - var msbuildRefArgs = msbuildArgsToVerify.Where(static a => a.StartsWith("/reference:", StringComparison.Ordinal)).ToList(); - var msbuildAnalyzerArgs = msbuildArgsToVerify.Where(a => a.StartsWith("/analyzer:", StringComparison.Ordinal) && a.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase)).ToList(); - var msbuildOtherArgs = msbuildArgsToVerify.Where(a => !a.StartsWith("/reference:", StringComparison.Ordinal) && !(a.StartsWith("/analyzer:", StringComparison.Ordinal) && a.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase))).ToList(); - cscOnlyRefArgs.Should().NotBeEmpty( - "framework references should be resolved from FrameworkList.xml"); - cscOnlyRefArgs.Should().BeEquivalentTo(msbuildRefArgs, - "the generated file might be outdated, run this test locally to regenerate it"); - cscOnlyAnalyzerArgs.Should().NotBeEmpty( - "framework analyzers should be resolved from FrameworkList.xml"); - cscOnlyAnalyzerArgs.Should().BeEquivalentTo(msbuildAnalyzerArgs, - "the generated file might be outdated, run this test locally to regenerate it"); - cscOnlyOtherArgs.Should().Equal(msbuildOtherArgs, - "the generated file might be outdated, run this test locally to regenerate it"); - - static CompilerCall FindCompilerCall(string binaryLogPath) - { - using var reader = BinaryLogReader.Create(binaryLogPath); - return reader.ReadAllCompilerCalls().Should().ContainSingle().Subject; - } - - static string NormalizePathArg(string arg) - { - return CSharpCompilerCommand.IsPathOption(arg, out int colonIndex) - ? string.Concat(arg.AsSpan(0, colonIndex + 1), NormalizePath(arg.Substring(colonIndex + 1))) - : NormalizePath(arg); - } - - static string NormalizePath(string path) - { - return PathUtility.GetPathWithForwardSlashes(TestPathUtility.ResolveTempPrefixLink(path)); - } - - static string RemoveQuotes(string arg) - { - return arg.Replace("\"", string.Empty); - } - - static string? GetGeneratedMethodName(string assetFileName) - { - return assetFileName switch - { - $".NETCoreApp,Version=v{ToolsetInfo.CurrentTargetFrameworkVersion}.AssemblyAttributes.cs" => "AssemblyAttributes", - $"{fileName}.GlobalUsings.g.cs" => "GlobalUsings", - $"{fileName}.AssemblyInfo.cs" => "AssemblyInfo", - $"{fileName}.GeneratedMSBuildEditorConfig.editorconfig" => "GeneratedMSBuildEditorConfig", - $"{programName}{FileNameSuffixes.RuntimeConfigJson}" => "RuntimeConfig", - _ => null, - }; - } - } - - /// - /// Verifies that csc-only runs emit auxiliary files equivalent to msbuild-based runs. - /// - [Theory] - [InlineData("Program.cs")] - [InlineData("test.cs")] - [InlineData("noext")] - public void CscVsMSBuild(string fileName) - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - string entryPointPath = Path.Join(testInstance.Path, fileName); - File.WriteAllText(entryPointPath, $""" - #!/test - {s_program} - """); - - string programName = Path.GetFileNameWithoutExtension(fileName); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(entryPointPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - var artifactsBackupDir = Path.ChangeExtension(artifactsDir, ".bak"); - if (Directory.Exists(artifactsBackupDir)) Directory.Delete(artifactsBackupDir, recursive: true); - - // Build using CSC. - new DotnetCommand(Log, "run", fileName, "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($""" - {CliCommandStrings.NoBinaryLogBecauseRunningJustCsc} - Hello from {programName} - """); - - // Backup the artifacts directory. - Directory.Move(artifactsDir, artifactsBackupDir); - - // Build using MSBuild. - new DotnetCommand(Log, "run", fileName, "-bl", "--no-cache") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($"Hello from {programName}"); - - // Check that files generated by MSBuild and CSC-only runs are equivalent. - var cscOnlyFiles = Directory.EnumerateFiles(artifactsBackupDir, "*", SearchOption.AllDirectories) - .Where(f => - Path.GetDirectoryName(f) != artifactsBackupDir && // exclude top-level marker files - Path.GetFileName(f) != programName && // binary on unix - Path.GetExtension(f) is not (".dll" or ".exe" or ".pdb")); // other binaries - bool hasErrors = false; - foreach (var cscOnlyFile in cscOnlyFiles) - { - var relativePath = Path.GetRelativePath(relativeTo: artifactsBackupDir, path: cscOnlyFile); - var msbuildFile = Path.Join(artifactsDir, relativePath); - - if (!File.Exists(msbuildFile)) - { - throw new InvalidOperationException($"File exists in CSC-only run but not in MSBuild run: {cscOnlyFile}"); - } - - var cscOnlyFileText = File.ReadAllText(cscOnlyFile); - var msbuildFileText = File.ReadAllText(msbuildFile); - if (cscOnlyFileText.ReplaceLineEndings() != msbuildFileText.ReplaceLineEndings()) - { - Log.WriteLine($"File differs between MSBuild and CSC-only runs (if this is expected, run test '{nameof(CscArguments)}' locally to re-generate the template): {cscOnlyFile}"); - const int limit = 3_000; - if (cscOnlyFileText.Length < limit && msbuildFileText.Length < limit) - { - Log.WriteLine("MSBuild file content:"); - Log.WriteLine(msbuildFileText); - Log.WriteLine("CSC-only file content:"); - Log.WriteLine(cscOnlyFileText); - } - else - { - Log.WriteLine($"MSBuild file size: {msbuildFileText.Length} chars"); - Log.WriteLine($"CSC-only file size: {cscOnlyFileText.Length} chars"); - } - hasErrors = true; - } - } - hasErrors.Should().BeFalse("some file contents do not match, see the test output for details"); - } - - [Fact] - public void UpToDate() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.WriteLine("Hello v1"); - """); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(Path.Join(testInstance.Path, "Program.cs")); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "Hello v1"); - - Build(testInstance, BuildLevel.None, expectedOutput: "Hello v1"); - - Build(testInstance, BuildLevel.None, expectedOutput: "Hello v1"); - - // Change the source file (a rebuild is necessary). - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - Build(testInstance, BuildLevel.Csc); - - Build(testInstance, BuildLevel.None); - - // Change an unrelated source file (no rebuild necessary). - File.WriteAllText(Path.Join(testInstance.Path, "Program2.cs"), "test"); - - Build(testInstance, BuildLevel.None); - - // Add an implicit build file (a rebuild is necessary). - string buildPropsFile = Path.Join(testInstance.Path, "Directory.Build.props"); - File.WriteAllText(buildPropsFile, """ - - - $(DefineConstants);CUSTOM_DEFINE - - - """); - - Build(testInstance, BuildLevel.All, expectedOutput: """ - Hello from Program - Custom define - """); - - Build(testInstance, BuildLevel.None, expectedOutput: """ - Hello from Program - Custom define - """); - - // Change the implicit build file (a rebuild is necessary). - string importedFile = Path.Join(testInstance.Path, "Settings.props"); - File.WriteAllText(importedFile, """ - - - """); - File.WriteAllText(buildPropsFile, """ - - - - """); - - Build(testInstance, BuildLevel.All); - - // Change the imported build file (this is not recognized). - File.WriteAllText(importedFile, """ - - - $(DefineConstants);CUSTOM_DEFINE - - - """); - - Build(testInstance, BuildLevel.None); - - // Force rebuild. - Build(testInstance, BuildLevel.All, args: ["--no-cache"], expectedOutput: """ - Hello from Program - Custom define - """); - - // Remove an implicit build file (a rebuild is necessary). - File.Delete(buildPropsFile); - Build(testInstance, BuildLevel.Csc); - - // Force rebuild. - Build(testInstance, BuildLevel.All, args: ["--no-cache"]); - - Build(testInstance, BuildLevel.None); - - // Pass argument (no rebuild necessary). - Build(testInstance, BuildLevel.None, args: ["--", "test-arg"], expectedOutput: """ - echo args:test-arg - Hello from Program - """); - - // Change config (a rebuild is necessary). - Build(testInstance, BuildLevel.All, args: ["-c", "Release"], expectedOutput: """ - Hello from Program - Release config - """); - - // Keep changed config (no rebuild necessary). - Build(testInstance, BuildLevel.None, args: ["-c", "Release"], expectedOutput: """ - Hello from Program - Release config - """); - - // Change config back (a rebuild is necessary). - Build(testInstance, BuildLevel.Csc); - - // Build with a failure. - new DotnetCommand(Log, ["run", "Program.cs", "-p:LangVersion=Invalid"]) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining("error CS1617"); // Invalid option 'Invalid' for /langversion. - - // A rebuild is necessary since the last build failed. - Build(testInstance, BuildLevel.Csc); - } - - private void Build( - TestDirectory testInstance, - BuildLevel expectedLevel, - ReadOnlySpan args = default, - string expectedOutput = "Hello from Program", - string programFileName = "Program.cs", - string? workDir = null, - Func? customizeCommand = null) - { - string prefix = expectedLevel switch - { - BuildLevel.None => CliCommandStrings.NoBinaryLogBecauseUpToDate + Environment.NewLine, - BuildLevel.Csc => CliCommandStrings.NoBinaryLogBecauseRunningJustCsc + Environment.NewLine, - BuildLevel.All => string.Empty, - _ => throw new ArgumentOutOfRangeException(paramName: nameof(expectedLevel)), - }; - - var command = new DotnetCommand(Log, ["run", programFileName, "-bl", .. args]) - .WithWorkingDirectory(workDir ?? testInstance.Path); - - if (customizeCommand != null) - { - command = customizeCommand(command); - } - - command.Execute() - .Should().Pass() - .And.HaveStdOut(prefix + expectedOutput); - - var binlogs = new DirectoryInfo(workDir ?? testInstance.Path) - .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly); - - binlogs.Select(f => f.Name) - .Should().BeEquivalentTo( - expectedLevel switch - { - BuildLevel.None or BuildLevel.Csc => [], - BuildLevel.All => ["msbuild.binlog"], - _ => throw new ArgumentOutOfRangeException(paramName: nameof(expectedLevel), message: expectedLevel.ToString()), - }); - - foreach (var binlog in binlogs) - { - binlog.Delete(); - } - } - - [Fact] - public void UpToDate_InvalidOptions() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "run", "Program.cs", "--no-cache", "--no-build") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdErrContaining(string.Format(CliCommandStrings.CannotCombineOptions, "--no-cache", "--no-build")); - } - - /// - /// optimization should see through symlinks. - /// See . - /// - [Fact] - public void UpToDate_SymbolicLink() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var originalPath = Path.Join(testInstance.Path, "original.cs"); - var code = """ - #!/usr/bin/env dotnet - Console.WriteLine("v1"); - """; - var utf8NoBom = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); - File.WriteAllText(originalPath, code, utf8NoBom); - - var programFileName = "linked"; - var programPath = Path.Join(testInstance.Path, programFileName); - - File.CreateSymbolicLink(path: programPath, pathToTarget: originalPath); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "v1", programFileName: programFileName); - - Build(testInstance, BuildLevel.None, expectedOutput: "v1", programFileName: programFileName); - - code = code.Replace("v1", "v2"); - File.WriteAllText(originalPath, code, utf8NoBom); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", programFileName: programFileName); - } - - /// - /// Similar to but with a chain of symlinks. - /// - [Fact] - public void UpToDate_SymbolicLink2() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var originalPath = Path.Join(testInstance.Path, "original.cs"); - var code = """ - #!/usr/bin/env dotnet - Console.WriteLine("v1"); - """; - var utf8NoBom = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); - File.WriteAllText(originalPath, code, utf8NoBom); - - var intermediateFileName = "linked1"; - var intermediatePath = Path.Join(testInstance.Path, intermediateFileName); - - File.CreateSymbolicLink(path: intermediatePath, pathToTarget: originalPath); - - var programFileName = "linked2"; - var programPath = Path.Join(testInstance.Path, programFileName); - - File.CreateSymbolicLink(path: programPath, pathToTarget: intermediatePath); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "v1", programFileName: programFileName); - - Build(testInstance, BuildLevel.None, expectedOutput: "v1", programFileName: programFileName); - - code = code.Replace("v1", "v2"); - File.WriteAllText(originalPath, code, utf8NoBom); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", programFileName: programFileName); - } - - /// - /// optimization currently does not support #:project references and hence is disabled if those are present. - /// See . - /// - [Fact] - public void UpToDate_ProjectReferences() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var libDir = Path.Join(testInstance.Path, "Lib"); - Directory.CreateDirectory(libDir); - - File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" - - - {ToolsetInfo.CurrentTargetFramework} - - - """); - - var libPath = Path.Join(libDir, "Lib.cs"); - var libCode = """ - namespace Lib; - public class LibClass - { - public static string GetMessage() => "Hello from Lib v1"; - } - """; - File.WriteAllText(libPath, libCode); - - var appDir = Path.Join(testInstance.Path, "App"); - Directory.CreateDirectory(appDir); - - var code = """ - #:project ../Lib - Console.WriteLine("v1 " + Lib.LibClass.GetMessage()); - """; - - var programPath = Path.Join(appDir, "Program.cs"); - File.WriteAllText(programPath, code); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var programFileName = "App/Program.cs"; - - Build(testInstance, BuildLevel.All, expectedOutput: "v1 Hello from Lib v1", programFileName: programFileName); - - // We cannot detect changes in referenced projects, so we always rebuild. - Build(testInstance, BuildLevel.All, expectedOutput: "v1 Hello from Lib v1", programFileName: programFileName); - - libCode = libCode.Replace("v1", "v2"); - File.WriteAllText(libPath, libCode); - - Build(testInstance, BuildLevel.All, expectedOutput: "v1 Hello from Lib v2", programFileName: programFileName); - } - - /// - /// optimization currently does not support #:ref references and hence is disabled if those are present. - /// Analogous to . - /// - [Fact] - public void UpToDate_RefDirectives() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - var libPath = Path.Join(testInstance.Path, "lib.cs"); - var libCode = """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "v1"; - } - """; - File.WriteAllText(libPath, libCode); - - var programCode = """ - #:ref lib.cs - Console.WriteLine("Hello " + MyLib.Greeter.Greet()); - """; - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, programCode); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "Hello v1"); - - // We cannot detect changes in referenced files, so we always rebuild. - Build(testInstance, BuildLevel.All, expectedOutput: "Hello v1"); - - libCode = libCode.Replace("v1", "v2"); - File.WriteAllText(libPath, libCode); - - Build(testInstance, BuildLevel.All, expectedOutput: "Hello v2"); - } - - /// - /// optimization considers default items. - /// Also tests optimization. - /// (We cannot test because that optimization doesn't support neither #:property nor #:sdk which we need to enable default items.) - /// See . - /// - [Theory, CombinatorialData] - public void UpToDate_DefaultItems(bool optOut) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var code = $""" - {(optOut ? "#:property FileBasedProgramCanSkipMSBuild=false" : "")} - #:property EnableDefaultEmbeddedResourceItems=true - {s_programReadingEmbeddedResource} - """; - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), code); - - Build(testInstance, BuildLevel.All, expectedOutput: "Resource not found"); - - File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx); - - if (!optOut) - { - // Adding a default item is currently not recognized (https://github.com/dotnet/sdk/issues/50912). - Build(testInstance, BuildLevel.None, expectedOutput: "Resource not found"); - Build(testInstance, BuildLevel.All, args: ["--no-cache"], expectedOutput: "[MyString, TestValue]"); - } - else - { - Build(testInstance, BuildLevel.All, expectedOutput: "[MyString, TestValue]"); - } - - // Update the RESX file. - File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx.Replace("TestValue", "UpdatedValue")); - - Build(testInstance, BuildLevel.All, expectedOutput: "[MyString, UpdatedValue]"); - - // Update the C# file. - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), "//v2\n" + code); - - Build(testInstance, optOut ? BuildLevel.All : BuildLevel.Csc, expectedOutput: "[MyString, UpdatedValue]"); - - // Update the RESX file again (to verify the CSC only compilation didn't corrupt the list of additional files in the cache). - File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx.Replace("TestValue", "UpdatedValue2")); - - Build(testInstance, BuildLevel.All, expectedOutput: "[MyString, UpdatedValue2]"); - } - - /// - /// Similar to but for .razor files instead of .resx files. - /// - [Fact] - public void UpToDate_DefaultItems_Razor() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programFileName = "MyRazorApp.cs"; - File.WriteAllText(Path.Join(testInstance.Path, programFileName), """ - #:sdk Microsoft.NET.Sdk.Web - _ = new MyRazorApp.MyCoolApp(); - Console.WriteLine("Hello from Program"); - """); - - var razorFilePath = Path.Join(testInstance.Path, "MyCoolApp.razor"); - File.WriteAllText(razorFilePath, ""); - - Build(testInstance, BuildLevel.All, programFileName: programFileName); - - Build(testInstance, BuildLevel.None, programFileName: programFileName); - - File.Delete(razorFilePath); - - new DotnetCommand(Log, "run", programFileName) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - // error CS0246: The type or namespace name 'MyRazorApp' could not be found - .And.HaveStdOutContaining("error CS0246"); - } - - [Fact] - public void CscOnly() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.WriteLine("v1"); - """); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(Path.Join(testInstance.Path, "Program.cs")); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v1"); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.WriteLine("v2"); - #if !DEBUG - Console.WriteLine("Release config"); - #endif - """); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2"); - - // Customizing a property forces MSBuild to be used. - Build(testInstance, BuildLevel.All, args: ["-c", "Release"], expectedOutput: """ - v2 - Release config - """); - } - - [Fact] - public void CscOnly_CompilationDiagnostics() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - string x = null; - Console.WriteLine("ran" + x); - """); - - new DotnetCommand(Log, "run", "Program.cs", "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) - // warning CS8600: Converting null literal or possible null value to non-nullable type. - .And.HaveStdOutContaining("warning CS8600") - .And.HaveStdOutContaining("ran"); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.Write - """); - - new DotnetCommand(Log, "run", "Program.cs", "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) - // error CS1002: ; expected - .And.HaveStdOutContaining("error CS1002") - .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); - } - - /// - /// Checks that the DOTNET_ROOT env var is set the same in csc mode as in msbuild mode. - /// - [Fact] - public void CscOnly_DotNetRoot() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - foreach (var entry in Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process) - .Cast() - .Where(e => ((string)e.Key).StartsWith("DOTNET_ROOT"))) - { - Console.WriteLine($"{entry.Key}={entry.Value}"); - } - """); - - var expectedDotNetRoot = SdkTestContext.Current.ToolsetUnderTest.DotNetRoot; - - var cscResult = new DotnetCommand(Log, "run", "Program.cs", "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute(); - - cscResult.Should().Pass() - .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) - .And.HaveStdOutContaining("DOTNET_ROOT") - .And.HaveStdOutContaining($"={expectedDotNetRoot}"); - - // Add an implicit build file to force use of msbuild instead of csc. - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), ""); - - var msbuildResult = new DotnetCommand(Log, "run", "Program.cs", "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute(); - - msbuildResult.Should().Pass() - .And.NotHaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) - .And.HaveStdOutContaining("DOTNET_ROOT") - .And.HaveStdOutContaining($"={expectedDotNetRoot}"); - - // The set of DOTNET_ROOT env vars should be the same in both cases. - var cscVars = cscResult.StdOut! - .Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries) - .Where(line => line.StartsWith("DOTNET_ROOT")); - var msbuildVars = msbuildResult.StdOut! - .Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries) - .Where(line => line.StartsWith("DOTNET_ROOT")); - cscVars.Should().BeEquivalentTo(msbuildVars); - } - - /// - /// In CSC-only mode, the SDK needs to manually create intermediate files - /// like GlobalUsings.g.cs which are normally generated by MSBuild targets. - /// This tests the SDK recreates the files when they are outdated. - /// - [Fact] - public void CscOnly_IntermediateFiles() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Expression> e = () => 1 + 1; - Console.WriteLine(e); - """); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(Path.Join(testInstance.Path, "Program.cs")); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), ""); - - new DotnetCommand(Log, "run", "Program.cs", "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - // error CS0246: The type or namespace name 'Expression<>' could not be found - .And.HaveStdOutContaining("error CS0246"); - - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - - - - """); - - Build(testInstance, BuildLevel.All, expectedOutput: "() => 2"); - - File.Delete(Path.Join(testInstance.Path, "Directory.Build.props")); - - new DotnetCommand(Log, "run", "Program.cs", "-bl") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) - // error CS0246: The type or namespace name 'Expression<>' could not be found - .And.HaveStdOutContaining("error CS0246"); - } - - /// - /// If a file from a NuGet package (which would be used by CSC-only build) does not exist, full MSBuild should be used instead. - /// - [Fact] - public void CscOnly_NotRestored() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(Path.Join(testInstance.Path, "Program.cs")); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "run", "Program.cs", "-bl", "--no-restore") - .WithEnvironmentVariable("NUGET_PACKAGES", Path.Join(testInstance.Path, "packages")) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - // error NETSDK1004: Assets file '...\obj\project.assets.json' not found. Run a NuGet package restore to generate this file. - .And.HaveStdOutContaining("NETSDK1004"); - - new DotnetCommand(Log, "run", "Program.cs", "-bl") - .WithEnvironmentVariable("NUGET_PACKAGES", Path.Join(testInstance.Path, "packages")) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from Program"); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.WriteLine("v2"); - """); - - new DotnetCommand(Log, "run", "Program.cs", "-bl") - .WithEnvironmentVariable("NUGET_PACKAGES", Path.Join(testInstance.Path, "packages")) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($""" - {CliCommandStrings.NoBinaryLogBecauseRunningJustCsc} - v2 - """); - } - - [Fact] - public void CscOnly_SpacesInPath() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - var programFileName = "Program with spaces.cs"; - var programPath = Path.Join(testInstance.Path, programFileName); - - File.WriteAllText(programPath, """ - Console.WriteLine("v1"); - """); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v1", programFileName: programFileName); - } - - [Fact] // https://github.com/dotnet/sdk/issues/50778 - public void CscOnly_Args() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, s_program); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.Csc, args: ["test", "args"], expectedOutput: """ - echo args:test;args - Hello from Program - """); - } - - /// - /// Combination of and . - /// - [Fact] - public void CscOnly_SymbolicLink() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - var originalPath = Path.Join(testInstance.Path, "original.cs"); - var code = """ - #!/usr/bin/env dotnet - Console.WriteLine("v1"); - """; - var utf8NoBom = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); - File.WriteAllText(originalPath, code, utf8NoBom); - - var programFileName = "linked"; - var programPath = Path.Join(testInstance.Path, programFileName); - - File.CreateSymbolicLink(path: programPath, pathToTarget: originalPath); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v1", programFileName: programFileName); - - Build(testInstance, BuildLevel.None, expectedOutput: "v1", programFileName: programFileName); - - code = code.Replace("v1", "v2"); - File.WriteAllText(originalPath, code, utf8NoBom); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", programFileName: programFileName); - } - - /// - /// Tests an optimization which remembers CSC args from prior MSBuild runs and can skip subsequent MSBuild invocations and call CSC directly. - /// This optimization kicks in when the file has some #: directives (then the simpler "hard-coded CSC args" optimization cannot be used). - /// - [Fact] - public void CscOnly_AfterMSBuild() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - var code = """ - #:property Configuration=Release - Console.Write("v1 "); - #if !DEBUG - Console.Write("Release"); - #endif - """; - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - - File.WriteAllText(programPath, code); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "v1 Release"); - - Build(testInstance, BuildLevel.None, expectedOutput: "v1 Release"); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2 Release"); - - code = code.Replace("v2", "v3"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v3 Release"); - - // Customizing a property forces MSBuild to be used. - code = code.Replace("Configuration=Release", "Configuration=Debug"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.All, expectedOutput: "v3 "); - - // This MSBuild will skip CoreBuild but we still need to preserve CSC args so the next build can be CSC-only. - Build(testInstance, BuildLevel.All, ["--no-cache"], expectedOutput: "v3 "); - - code = code.Replace("v3", "v4"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v4 "); - - // Customizing a property on the command-line forces MSBuild to be used. - Build(testInstance, BuildLevel.All, args: ["-c", "Release"], expectedOutput: "v4 Release"); - - Build(testInstance, BuildLevel.All, expectedOutput: "v4 "); - } - - /// - /// See . - /// - [Fact] - public void CscOnly_AfterMSBuild_SpacesInPath() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - var code = """ - #:property Configuration=Release - Console.Write("v1 "); - #if !DEBUG - Console.Write("Release"); - #endif - """; - - var programFileName = "Program with spaces.cs"; - var programPath = Path.Join(testInstance.Path, programFileName); - - File.WriteAllText(programPath, code); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "v1 Release", programFileName: programFileName); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2 Release", programFileName: programFileName); - } - - /// - /// Testing optimization . - /// When compilation fails, the obj dll should not be copied to bin directory. - /// This prevents spurious errors if the dll file was not even produced by roslyn due to compilation errors. - /// - [Fact] - public void CscOnly_AfterMSBuild_CompilationFailure_NoCopyToBin() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - // First, create a valid program and build it successfully - var programPath = Path.Join(testInstance.Path, "Program.cs"); - var code = """ - #:property PublishAot=false - Console.WriteLine("version 1"); - """; - File.WriteAllText(programPath, code); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "version 1"); - - // Verify that the dlls were created - var objDll = Path.Join(artifactsDir, "obj", "debug", "Program.dll"); - new FileInfo(objDll).Should().Exist(); - var binDll = Path.Join(artifactsDir, "bin", "debug", "Program.dll"); - new FileInfo(binDll).Should().Exist(); - - // Delete the dlls - File.Delete(objDll); - File.Delete(binDll); - - // Write invalid code that causes compilation to fail - code = code + "\n#error my custom error"; - File.WriteAllText(programPath, code); - - // Try to build the invalid code - new DotnetCommand(Log, "run", "-bl", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Fail() - .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) - .And.HaveStdOutContaining("my custom error") - .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); - - new FileInfo(objDll).Should().NotExist(); - new FileInfo(binDll).Should().NotExist(); - } - - /// - /// See . - /// - [Fact] - public void CscOnly_AfterMSBuild_Args() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - - var code = $""" - #:property Configuration=Release - {s_program} - """; - - File.WriteAllText(programPath, code); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, args: ["test", "args"], expectedOutput: """ - echo args:test;args - Hello from Program - Release config - """); - - code = code.Replace("Hello", "Hi"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.Csc, args: ["test", "args"], expectedOutput: """ - echo args:test;args - Hi from Program - Release config - """); - } - - /// - /// See . - /// If hard links are enabled, the bin/app.dll and obj/app.dll files are going to be the same, - /// so our "copy obj to bin" logic must account for that. - /// - [Fact] - public void CscOnly_AfterMSBuild_HardLinks() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - - var code = $""" - #:property CreateHardLinksForCopyFilesToOutputDirectoryIfPossible=true - #:property CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible=true - {s_program} - """; - - File.WriteAllText(programPath, code); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All); - - code = code.Replace("Hello", "Hi"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "Hi from Program"); - } - - /// - /// Combination of and . - /// - [Fact] - public void CscOnly_AfterMSBuild_SymbolicLink() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - var originalPath = Path.Join(testInstance.Path, "original.cs"); - var code = """ - #!/usr/bin/env dotnet - #:property Configuration=Release - Console.WriteLine("v1"); - """; - var utf8NoBom = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); - File.WriteAllText(originalPath, code, utf8NoBom); - - var programFileName = "linked"; - var programPath = Path.Join(testInstance.Path, programFileName); - - File.CreateSymbolicLink(path: programPath, pathToTarget: originalPath); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "v1", programFileName: programFileName); - - code = code.Replace("v1", "v2"); - File.WriteAllText(originalPath, code, utf8NoBom); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", programFileName: programFileName); - } - - /// - /// Interaction of optimization and Directory.Build.props file. - /// - [Theory, CombinatorialData] - public void CscOnly_AfterMSBuild_DirectoryBuildProps(bool touch1, bool touch2) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var propsPath = Path.Join(testInstance.Path, "Directory.Build.props"); - var propsContent = """ - - - CustomAssemblyName - - - """; - File.WriteAllText(propsPath, propsContent); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - var programVersion = 0; - void WriteProgramContent() - { - programVersion++; - - // #: directive ensures we get CscOnly_AfterMSBuild optimization instead of CscOnly. - File.WriteAllText(programPath, $""" - #:property Configuration=Debug - Console.WriteLine("v{programVersion} " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name); - """); - } - WriteProgramContent(); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: $"v{programVersion} CustomAssemblyName"); - - File.Delete(propsPath); - - if (touch1) WriteProgramContent(); - - Build(testInstance, BuildLevel.All, expectedOutput: $"v{programVersion} Program"); - - File.WriteAllText(propsPath, propsContent); - - if (touch2) WriteProgramContent(); - - Build(testInstance, BuildLevel.All, expectedOutput: $"v{programVersion} CustomAssemblyName"); - } - - /// - /// See . - /// This optimization currently does not support #:project references and hence is disabled if those are present. - /// - [Fact] - public void CscOnly_AfterMSBuild_ProjectReferences() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var libDir = Path.Join(testInstance.Path, "Lib"); - Directory.CreateDirectory(libDir); - - File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" - - - {ToolsetInfo.CurrentTargetFramework} - - - """); - - var libPath = Path.Join(libDir, "Lib.cs"); - var libCode = """ - namespace Lib; - public class LibClass - { - public static string GetMessage() => "Hello from Lib v1"; - } - """; - File.WriteAllText(libPath, libCode); - - var appDir = Path.Join(testInstance.Path, "App"); - Directory.CreateDirectory(appDir); - - var code = """ - #:project ../Lib - Console.WriteLine("v1 " + Lib.LibClass.GetMessage()); - """; - - var programPath = Path.Join(appDir, "Program.cs"); - File.WriteAllText(programPath, code); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var programFileName = "App/Program.cs"; - - Build(testInstance, BuildLevel.All, expectedOutput: "v1 Hello from Lib v1", programFileName: programFileName); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - libCode = libCode.Replace("v1", "v2"); - File.WriteAllText(libPath, libCode); - - // Cannot use CSC because we cannot detect updates in the referenced project. - Build(testInstance, BuildLevel.All, expectedOutput: "v2 Hello from Lib v2", programFileName: programFileName); - } - - /// - /// See . - /// This optimization currently does not support #:ref references and hence is disabled if those are present. - /// Analogous to . - /// - [Fact] - public void CscOnly_AfterMSBuild_RefDirectives() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - EnableRefDirective(testInstance); - - var libPath = Path.Join(testInstance.Path, "lib.cs"); - var libCode = """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "v1"; - } - """; - File.WriteAllText(libPath, libCode); - - var programCode = """ - #:ref lib.cs - Console.WriteLine("Hello " + MyLib.Greeter.Greet()); - """; - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, programCode); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "Hello v1"); - - programCode = programCode.Replace("Hello", "Hi"); - File.WriteAllText(programPath, programCode); - - libCode = libCode.Replace("v1", "v2"); - File.WriteAllText(libPath, libCode); - - // Cannot use CSC because we cannot detect updates in the referenced file. - Build(testInstance, BuildLevel.All, expectedOutput: "Hi v2"); - } - - /// - /// See . - /// If users have more complex build customizations, they can opt out of the optimization. - /// - [Theory, CombinatorialData] - public void CscOnly_AfterMSBuild_OptOut(bool canSkipMSBuild, bool inDirectoryBuildProps) - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - const string propertyName = VirtualProjectBuildingCommand.FileBasedProgramCanSkipMSBuild; - - if (inDirectoryBuildProps) - { - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" - - - <{propertyName}>{canSkipMSBuild} - - - """); - } - - var code = $""" - #:property Configuration=Release - {(inDirectoryBuildProps ? "" : $"#:property {propertyName}={canSkipMSBuild}")} - Console.Write("v1 "); - #if !DEBUG - Console.Write("Release"); - #endif - """; - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, code); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "v1 Release"); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - Build(testInstance, canSkipMSBuild ? BuildLevel.Csc : BuildLevel.All, expectedOutput: "v2 Release"); - } - - /// - /// See . - /// - [Fact] - public void CscOnly_AfterMSBuild_AuxiliaryFilesNotReused() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - var code = """ - #:property Configuration=Release - Console.Write("v1 "); - #if !DEBUG - Console.Write("Release"); - #endif - """; - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, code); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - Build(testInstance, BuildLevel.All, expectedOutput: "v1 Release"); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - // Reusing CSC args from previous run here. - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2 Release"); - - code = code.Replace("v2", "v3"); - code = code.Replace("#:property Configuration=Release", ""); - File.WriteAllText(programPath, code); - - // Using built-in CSC args here (cannot reuse auxiliary files like csc.rsp here). - Build(testInstance, BuildLevel.Csc, expectedOutput: "v3 "); - } - - /// - /// Verifies that csc.rsp is written to disk after a full MSBuild build, - /// so that IDEs can read it to create a virtual project. - /// - [Fact] - public void MSBuild_WritesCscRsp() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, """ - #:property Configuration=Release - Console.Write("Hello"); - """); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - // A build directive forces a full MSBuild build. - Build(testInstance, BuildLevel.All, expectedOutput: "Hello"); - - // csc.rsp should be written to disk after a full MSBuild build. - var rspPath = Path.Join(artifactsDir, "csc.rsp"); - File.Exists(rspPath).Should().BeTrue("csc.rsp should be written after a full MSBuild build"); - File.ReadAllLines(rspPath).Should().NotBeEmpty("csc.rsp should contain compiler arguments"); - } - - /// - /// Verifies that csc.rsp is written to disk after dotnet build file.cs, - /// so that IDEs can read it to create a virtual project. - /// - [Fact] - public void DotnetBuild_WritesCscRsp() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, """ - Console.Write("Hello"); - """); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - new DotnetCommand(Log, "build", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass(); - - // csc.rsp should be written to disk after dotnet build. - var rspPath = Path.Join(artifactsDir, "csc.rsp"); - File.Exists(rspPath).Should().BeTrue("csc.rsp should be written after dotnet build file.cs"); - File.ReadAllLines(rspPath).Should().NotBeEmpty("csc.rsp should contain compiler arguments"); - } - - /// - /// Testing optimization when the NuGet cache is cleared between builds. - /// See . - /// - [Fact] - public void CscOnly_NuGetCacheCleared() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - var code = """ - Console.Write("v1"); - """; - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, code); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var packageDir = Path.Join(testInstance.Path, "packages"); - TestCommand CustomizeCommand(TestCommand command) => command.WithEnvironmentVariable("NUGET_PACKAGES", packageDir); - - Assert.False(Directory.Exists(packageDir)); - - // Ensure the packages exist first. - Build(testInstance, BuildLevel.All, expectedOutput: "v1", customizeCommand: CustomizeCommand); - - Assert.True(Directory.Exists(packageDir)); - - // Now clear the build outputs (but not packages) to verify CSC is used even from "first run". - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", customizeCommand: CustomizeCommand); - - code = code.Replace("v2", "v3"); - File.WriteAllText(programPath, code); - - // Clear NuGet cache. - Directory.Delete(packageDir, recursive: true); - Assert.False(Directory.Exists(packageDir)); - - Build(testInstance, BuildLevel.All, expectedOutput: "v3", customizeCommand: CustomizeCommand); - - Assert.True(Directory.Exists(packageDir)); - } - - /// - /// Combination of and . - /// - [Fact] - public void CscOnly_AfterMSBuild_NuGetCacheCleared() - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); - - var code = """ - #:property PublishAot=false - #:package System.CommandLine@2.0.0-beta4.22272.1 - new System.CommandLine.RootCommand("v1"); - Console.WriteLine("v1"); - """; - - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, code); - - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var packageDir = Path.Join(testInstance.Path, "packages"); - TestCommand CustomizeCommand(TestCommand command) => command.WithEnvironmentVariable("NUGET_PACKAGES", packageDir); - - Assert.False(Directory.Exists(packageDir)); - - Build(testInstance, BuildLevel.All, expectedOutput: "v1", customizeCommand: CustomizeCommand); - - Assert.True(Directory.Exists(packageDir)); - - code = code.Replace("v1", "v2"); - File.WriteAllText(programPath, code); - - Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", customizeCommand: CustomizeCommand); - - code = code.Replace("v2", "v3"); - File.WriteAllText(programPath, code); - - // Clear NuGet cache. - Directory.Delete(packageDir, recursive: true); - Assert.False(Directory.Exists(packageDir)); - - Build(testInstance, BuildLevel.All, expectedOutput: "v3", customizeCommand: CustomizeCommand); - - Assert.True(Directory.Exists(packageDir)); - } - - private static string ToJson(string s) => JsonSerializer.Serialize(s); - - /// - /// Simplifies using interpolated raw strings with nested JSON, - /// e.g, in $$"""{x:{y:1}}""", the }} would result in an error. - /// - private const string nop = ""; - - [Fact] - public void Api() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, """ - #!/program - #:sdk Microsoft.NET.Sdk - #:sdk Aspire.AppHost.Sdk@9.1.0 - #:property TargetFramework=net5.0 - #:package System.CommandLine@2.0.0-beta4.22272.1 - #:property LangVersion=preview - Console.WriteLine(); - """); - - var projectPath = VirtualProjectBuilder.GetVirtualProjectPath(programPath); - new DotnetCommand(Log, "run-api") - .WithStandardInput($$""" - {"$type":"GetProject","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":"/artifacts"} - """) - .Execute() - .Should().Pass() - .And.HaveStdOut($$""" - {"$type":"Project","Version":1,"Content":{{ToJson($""" - - - - false - /artifacts - Program - $(AssemblyName) - artifacts/$(AssemblyName) - artifacts/$(AssemblyName) - true - {programPath} - .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content - false - true - Exe - {ToolsetInfo.CurrentTargetFramework} - enable - enable - true - true - - - - - - - - - - - net5.0 - preview - false - $(Features);FileBasedProgram - - - - - - - - - - - - - - - - - - - - - """)}},"ProjectPath":{{ToJson(projectPath)}},"Diagnostics":[]} - """); - } - - /// - /// Directives should be evaluated before the project for run-api is constructed. - /// - [Fact] - public void Api_Evaluation() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var programPath = Path.Join(testInstance.Path, "A.cs"); - File.WriteAllText(programPath, """ - #:property P1=cs - #:include B.$(P1) - Console.WriteLine(); - """); - - var bPath = Path.Join(testInstance.Path, "B.cs"); - File.WriteAllText(bPath, ""); - - var projectPath = VirtualProjectBuilder.GetVirtualProjectPath(programPath); - new DotnetCommand(Log, "run-api") - .WithStandardInput($$""" - {"$type":"GetProject","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":"/artifacts"} - """) - .Execute() - .Should().Pass() - .And.HaveStdOut($$""" - {"$type":"Project","Version":1,"Content":{{ToJson($""" - - - - false - /artifacts - A - $(AssemblyName) - artifacts/$(AssemblyName) - artifacts/$(AssemblyName) - true - {programPath} - .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content - false - true - false - false - Exe - {ToolsetInfo.CurrentTargetFramework} - enable - enable - true - true - - - - - - - - - - cs - false - $(Features);FileBasedProgram - - - - - - - - - - - - - - - - - - - - """)}},"ProjectPath":{{ToJson(projectPath)}},"Diagnostics":[]} - """); - } - - [Fact] - public void Api_Diagnostic_01() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, """ - Console.WriteLine(); - #:property LangVersion=preview - """); - - var projectPath = VirtualProjectBuilder.GetVirtualProjectPath(programPath); - new DotnetCommand(Log, "run-api") - .WithStandardInput($$""" - {"$type":"GetProject","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":"/artifacts"} - """) - .Execute() - .Should().Pass() - .And.HaveStdOut($$""" - {"$type":"Project","Version":1,"Content":{{ToJson($""" - - - - false - /artifacts - Program - $(AssemblyName) - artifacts/$(AssemblyName) - artifacts/$(AssemblyName) - true - {programPath} - .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content - false - true - false - false - Exe - {ToolsetInfo.CurrentTargetFramework} - enable - enable - true - true - - - - - - - - - - false - $(Features);FileBasedProgram - - - - - - - - - - - - - - - - """)}},"ProjectPath":{{ToJson(projectPath)}},"Diagnostics": - [{"Location":{ - "Path":{{ToJson(programPath)}}, - "Span":{"Start":{"Line":1,"Character":0},"End":{"Line":1,"Character":30}{{nop}}}{{nop}}}, - "Message":{{ToJson(FileBasedProgramsResources.CannotConvertDirective)}}}]} - """.ReplaceLineEndings("")); - } - - [Fact] - public void Api_Diagnostic_02() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, """ - #:unknown directive - Console.WriteLine(); - """); - - var projectPath = VirtualProjectBuilder.GetVirtualProjectPath(programPath); - new DotnetCommand(Log, "run-api") - .WithStandardInput($$""" - {"$type":"GetProject","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":"/artifacts"} - """) - .Execute() - .Should().Pass() - .And.HaveStdOut($$""" - {"$type":"Project","Version":1,"Content":{{ToJson($""" - - - - false - /artifacts - Program - $(AssemblyName) - artifacts/$(AssemblyName) - artifacts/$(AssemblyName) - true - {programPath} - .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content - false - true - false - false - Exe - {ToolsetInfo.CurrentTargetFramework} - enable - enable - true - true - - - - - - - - - - false - $(Features);FileBasedProgram - - - - - - - - - - - - - - - - """)}},"ProjectPath":{{ToJson(projectPath)}},"Diagnostics": - [{"Location":{ - "Path":{{ToJson(programPath)}}, - "Span":{"Start":{"Line":0,"Character":0},"End":{"Line":1,"Character":0}{{nop}}}{{nop}}}, - "Message":{{ToJson(string.Format(FileBasedProgramsResources.UnrecognizedDirective, "unknown"))}}}]} - """.ReplaceLineEndings("")); - } - - [Fact] - public void Api_Error() - { - new DotnetCommand(Log, "run-api") - .WithStandardInput(""" - {"$type":"Unknown1"} - {"$type":"Unknown2"} - """) - .Execute() - .Should().Pass() - .And.HaveStdOutContaining(""" - {"$type":"Error","Version":1,"Message": - """) - .And.HaveStdOutContaining("Unknown1") - .And.HaveStdOutContaining("Unknown2"); - } - - [Fact] - public void Api_RunCommand() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var programPath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(programPath, """ - Console.WriteLine(); - """); - - string artifactsPath = OperatingSystem.IsWindows() ? @"C:\artifacts" : "/artifacts"; - string executablePath = OperatingSystem.IsWindows() ? @"C:\artifacts\bin\debug\Program.exe" : "/artifacts/bin/debug/Program"; - new DotnetCommand(Log, "run-api") - // The command outputs only _custom_ environment variables (not inherited ones), - // so make sure we don't pass DOTNET_ROOT_* so we can assert that it is set by the run command. - .WithEnvironmentVariable("DOTNET_ROOT", string.Empty) - .WithEnvironmentVariable($"DOTNET_ROOT_{RuntimeInformation.OSArchitecture.ToString().ToUpperInvariant()}", string.Empty) - .WithStandardInput($$""" - {"$type":"GetRunCommand","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":{{ToJson(artifactsPath)}}} - """) - .Execute() - .Should().Pass() - // DOTNET_ROOT environment variable is platform dependent so we don't verify it fully for simplicity - .And.HaveStdOutContaining($$""" - {"$type":"RunCommand","Version":1,"ExecutablePath":{{ToJson(executablePath)}},"CommandLineArguments":"","WorkingDirectory":"","EnvironmentVariables":{"DOTNET_ROOT - """); - } - - [Fact] - public void Api_VirtualProjectBuilder_CreateProjectRootElement() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - var libDir = Path.Join(testInstance.Path, "Lib"); - Directory.CreateDirectory(libDir); - - File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" - - - {ToolsetInfo.CurrentTargetFramework} - - - """); - - File.WriteAllText(Path.Join(libDir, "Lib.cs"), """ - namespace Lib; - public class LibClass - { - public static string GetMessage() => "Hello from Lib"; - } - """); - - var appDir = Path.Join(testInstance.Path, "App"); - Directory.CreateDirectory(appDir); - - var appPath = Path.Join(appDir, "Program.cs"); - File.WriteAllText(appPath, """ - #:project ../$(LibProjectName) - #:property LibProjectName=Lib - Console.WriteLine(Lib.LibClass.GetMessage()); - """); - - using var projectCollection = new ProjectCollection(); - var projectRootElement = NuGetVirtualProjectBuilder.Instance.CreateProjectRootElement(appPath, projectCollection); - - var xml = projectRootElement.RawXml; - Log.WriteLine(xml); - - xml.Should() - // directives are evaluated - .Contain("""""".Replace('\\', Path.DirectorySeparatorChar)) - // it's the virtual project - .And.Contain("true") - // correct target framework is used - .And.Contain($"{ToolsetInfo.CurrentTargetFramework}"); - - projectRootElement.FullPath.Should().Be(VirtualProjectBuilder.GetVirtualProjectPath(appPath)); - } - - [Theory, CombinatorialData] - public void EntryPointFilePath(bool cscOnly) - { - var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: cscOnly ? OutOfTreeBaseDirectory : null); - var filePath = Path.Join(testInstance.Path, "Program.cs"); - File.WriteAllText(filePath, """" - var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; - Console.WriteLine($"""EntryPointFilePath: {entryPointFilePath}"""); - """"); - - // Remove artifacts from possible previous runs of this test. - var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(filePath); - if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); - - var prefix = cscOnly - ? CliCommandStrings.NoBinaryLogBecauseRunningJustCsc + Environment.NewLine - : string.Empty; - - new DotnetCommand(Log, "run", "-bl", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(prefix + $"EntryPointFilePath: {filePath}"); - } - - [Fact] - public void EntryPointFileDirectoryPath() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """" - var entryPointFileDirectoryPath = AppContext.GetData("EntryPointFileDirectoryPath") as string; - Console.WriteLine($"""EntryPointFileDirectoryPath: {entryPointFileDirectoryPath}"""); - """"); - - new DotnetCommand(Log, "run", "Program.cs") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($"EntryPointFileDirectoryPath: {testInstance.Path}"); - } - - [Fact] - public void EntryPointFilePath_WithRelativePath() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var fileName = "Program.cs"; - File.WriteAllText(Path.Join(testInstance.Path, fileName), """ - var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; - Console.WriteLine($"EntryPointFilePath: {entryPointFilePath}"); - """); - - var relativePath = Path.GetRelativePath(Directory.GetCurrentDirectory(), Path.Join(testInstance.Path, fileName)); - new DotnetCommand(Log, "run", relativePath) - .WithWorkingDirectory(Directory.GetCurrentDirectory()) - .Execute() - .Should().Pass() - .And.HaveStdOut($"EntryPointFilePath: {Path.GetFullPath(relativePath)}"); - } - - [Fact] - public void EntryPointFilePath_WithSpacesInPath() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var dirWithSpaces = Path.Join(testInstance.Path, "dir with spaces"); - Directory.CreateDirectory(dirWithSpaces); - var filePath = Path.Join(dirWithSpaces, "Program.cs"); - File.WriteAllText(filePath, """ - var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; - Console.WriteLine($"EntryPointFilePath: {entryPointFilePath}"); - """); - - new DotnetCommand(Log, "run", filePath) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($"EntryPointFilePath: {filePath}"); - } - - [Fact] - public void EntryPointFileDirectoryPath_WithDotSlash() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var fileName = "Program.cs"; - File.WriteAllText(Path.Join(testInstance.Path, fileName), """ - var entryPointFileDirectoryPath = AppContext.GetData("EntryPointFileDirectoryPath") as string; - Console.WriteLine($"EntryPointFileDirectoryPath: {entryPointFileDirectoryPath}"); - """); - - new DotnetCommand(Log, "run", $"./{fileName}") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($"EntryPointFileDirectoryPath: {testInstance.Path}"); - } - - [Fact] - public void EntryPointFilePath_WithUnicodeCharacters() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var unicodeFileName = "Программа.cs"; - var filePath = Path.Join(testInstance.Path, unicodeFileName); - File.WriteAllText(filePath, """ - var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; - Console.WriteLine($"EntryPointFilePath: {entryPointFilePath}"); - """); - - new DotnetCommand(Log, "run", unicodeFileName) - .WithWorkingDirectory(testInstance.Path) - .WithStandardOutputEncoding(Encoding.UTF8) - .Execute() - .Should().Pass() - .And.HaveStdOut($"EntryPointFilePath: {filePath}"); - } - - [Fact] - public void EntryPointFilePath_SymbolicLink() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - var fileName = "Program.cs"; - var programPath = Path.Join(testInstance.Path, fileName); - File.WriteAllText(programPath, """ - #!/usr/bin/env dotnet - var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; - Console.WriteLine($"EntryPointFilePath: {entryPointFilePath}"); - """); - - new DotnetCommand(Log, "run", fileName) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($"EntryPointFilePath: {programPath}"); - - var linkName = "linked"; - var linkPath = Path.Join(testInstance.Path, linkName); - File.CreateSymbolicLink(linkPath, programPath); - - new DotnetCommand(Log, "run", linkName) - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut($"EntryPointFilePath: {linkPath}"); - } - - [Fact] - public void MSBuildGet_Simple() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - new DotnetCommand(Log, "build", "Program.cs", "-getProperty:TargetFramework") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut(ToolsetInfo.CurrentTargetFramework); - } - - /// - /// Check that -get commands work the same in project-based and file-based apps. - /// - [Theory] - [InlineData(true, "build", "--getProperty:TargetFramework;Configuration")] - [InlineData(true, "build", "--getItem:MyItem", "--getProperty:MyProperty")] - [InlineData(true, "build", "--getItem:MyItem", "--getProperty:MyProperty", "-t:MyTarget")] - [InlineData(true, "build", "--getItem:MyItem", "--getProperty:MyProperty", "--getTargetResult:MyTarget")] - [InlineData(true, "build", "/getProperty:TargetFramework")] - [InlineData(true, "build", "/getProperty:TargetFramework", "-p:LangVersion=wrong")] // evaluated only, so no failure - [InlineData(false, "build", "/getProperty:TargetFramework", "-t:Build", "-p:LangVersion=wrong")] // fails with build error but still outputs info - [InlineData(true, "build", "-getProperty:Configuration", "-getResultOutputFile:out.txt")] - [InlineData(true, "build", "-getProperty:OutputType,Configuration", "-getResultOutputFile:out1.txt", "-getResultOutputFile:out2.txt")] - [InlineData(true, "run", "-getProperty:Configuration")] // not supported, the arg is passed through to the app - [InlineData(true, "restore", "-getProperty:Configuration")] - [InlineData(true, "publish", "-getProperty:OutputType", "-p:PublishAot=false")] - [InlineData(true, "pack", "-getProperty:OutputType", "-p:PublishAot=false")] - [InlineData(true, "clean", "-getProperty:Configuration")] - public void MSBuildGet_Consistent(bool success, string subcommand, params string[] args) - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); - - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ - - - - - - - - MyValue - - - - """); - - var fileBasedResult = new DotnetCommand(Log, [subcommand, "Program.cs", .. args]) - .WithWorkingDirectory(testInstance.Path) - .Execute(); - - var fileBasedFiles = ReadFiles(); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.csproj"), s_consoleProject); - - var projectBasedResult = new DotnetCommand(Log, [subcommand, .. args]) - .WithWorkingDirectory(testInstance.Path) - .Execute(); - - var projectBasedFiles = ReadFiles(); - - fileBasedResult.StdOut.Should().Be(projectBasedResult.StdOut); - fileBasedResult.StdErr!.Replace("Program.cs.csproj", "Program.csproj").Should().Be(projectBasedResult.StdErr); - fileBasedResult.ExitCode.Should().Be(projectBasedResult.ExitCode).And.Be(success ? 0 : 1); - fileBasedFiles.Should().Equal(projectBasedFiles); - - Dictionary ReadFiles() - { - var result = new DirectoryInfo(testInstance.Path) - .EnumerateFiles() - .ExceptBy(["Program.cs", "Directory.Build.props", "Program.csproj"], f => f.Name) - .ToDictionary(f => f.Name, f => File.ReadAllText(f.FullName)); - - foreach (var (file, text) in result) - { - Log.WriteLine($"File '{file}':"); - Log.WriteLine(text); - File.Delete(Path.Join(testInstance.Path, file)); - } - - return result; - } - } - - /// - /// Regression test for https://github.com/dotnet/sdk/issues/52714. - /// The virtual project's must survive GC - /// even after being evicted from MSBuild's strong cache (LRU of size N). - /// We force eviction via MSBUILDPROJECTROOTELEMENTCACHESIZE=1 - /// and trigger GC via an inline task during NuGet restore. - /// Without the fix (strong reference in VirtualProjectBuilder._projectRootElement), - /// this fails with MSB4025 "The project file could not be loaded". - /// - [Fact] - public void VirtualProject_SurvivesGCDuringRestore() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - Console.WriteLine("Hello from virtual project"); - """); - - // Directory.Build.targets that forces GC during restore, - // after SDK imports have already evicted the virtual PRE from the strong cache. - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ - - - - - - - - <_ForceGCTask /> - - - """); - - new DotnetCommand(Log, "run", "--no-cache", "Program.cs") - // A cache size of 1 ensures the virtual PRE is evicted from the strong cache - // as soon as any SDK .targets/.props file is loaded during evaluation. - .WithEnvironmentVariable("MSBUILDPROJECTROOTELEMENTCACHESIZE", "1") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from virtual project"); - } - - /// - /// Same as but for #:ref referenced projects. - /// The referenced project's must also survive GC. - /// - [Fact] - public void VirtualProject_SurvivesGCDuringRestore_RefDirective() - { - var testInstance = _testAssetsManager.CreateTestDirectory(); - - File.WriteAllText(Path.Join(testInstance.Path, "Lib.cs"), """ - #:property OutputType=Library - namespace MyLib; - public static class Greeter - { - public static string Greet() => "Hello from ref"; - } - """); - - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ - #:ref Lib.cs - Console.WriteLine(MyLib.Greeter.Greet()); - """); - - // Directory.Build.targets that forces GC during restore, - // after SDK imports have already evicted the virtual PRE from the strong cache. - File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ - - - - - - - - <_ForceGCTask /> - - - """); - - new DotnetCommand(Log, "run", "--no-cache", "Program.cs") - // A cache size of 1 ensures the virtual PRE is evicted from the strong cache - // as soon as any SDK .targets/.props file is loaded during evaluation. - .WithEnvironmentVariable("MSBUILDPROJECTROOTELEMENTCACHESIZE", "1") - .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") - .WithWorkingDirectory(testInstance.Path) - .Execute() - .Should().Pass() - .And.HaveStdOut("Hello from ref"); - } -} diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildCommands.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildCommands.cs new file mode 100644 index 000000000000..2e4d17f9d313 --- /dev/null +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildCommands.cs @@ -0,0 +1,924 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Runtime.Versioning; +using Microsoft.DotNet.Cli.Commands; +using Microsoft.DotNet.Cli.Utils; +using Microsoft.DotNet.FileBasedPrograms; +using Microsoft.DotNet.ProjectTools; + +namespace Microsoft.DotNet.Cli.Run.Tests; + +public sealed class RunFileTests_BuildCommands(ITestOutputHelper log) : RunFileTestBase(log) +{ + + [Fact] + public void Restore_NonExistentPackage() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, """ + #:package Microsoft.ThisPackageDoesNotExist@1.0.0 + Console.WriteLine(); + """); + + new DotnetCommand(Log, "restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("Program.cs.csproj : error NU1101"); + } + + [Fact] + public void NoRestore_01() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + // It is an error when never restored before. + new DotnetCommand(Log, "run", "--no-restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("NETSDK1004"); // error NETSDK1004: Assets file '...\obj\project.assets.json' not found. Run a NuGet package restore to generate this file. + + // Run restore. + new DotnetCommand(Log, "restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // --no-restore works. + new DotnetCommand(Log, "run", "--no-restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + } + + [Fact] + public void NoRestore_02() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + // It is an error when never restored before. + new DotnetCommand(Log, "build", "--no-restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("NETSDK1004"); // error NETSDK1004: Assets file '...\obj\project.assets.json' not found. Run a NuGet package restore to generate this file. + + // Run restore. + new DotnetCommand(Log, "restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // --no-restore works. + new DotnetCommand(Log, "build", "--no-restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run", "--no-build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + } + + [Fact] + public void Restore_StaticGraph_Implicit() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + true + + + """); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, "Console.WriteLine();"); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + } + + [Fact] + public void Restore_StaticGraph_Explicit() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, """ + #:property RestoreUseStaticGraphEvaluation=true + Console.WriteLine(); + """); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "restore", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr(DirectiveError(programFile, 1, FileBasedProgramsResources.StaticGraphRestoreNotSupported)); + } + + [Fact] + public void NoBuild_01() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + // It is an error when never built before. + new DotnetCommand(Log, "run", "--no-build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining("An error occurred trying to start process"); + + // Now build it. + new DotnetCommand(Log, "build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // Changing the program has no effect when it is not built. + File.WriteAllText(programFile, """Console.WriteLine("Changed");"""); + new DotnetCommand(Log, "run", "--no-build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + // The change has an effect when built again. + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Changed"); + } + + [Fact] + public void NoBuild_02() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + // It is an error when never built before. + new DotnetCommand(Log, "run", "--no-build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining("An error occurred trying to start process"); + + // Now build it. + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + // Changing the program has no effect when it is not built. + File.WriteAllText(programFile, """Console.WriteLine("Changed");"""); + new DotnetCommand(Log, "run", "--no-build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + // The change has an effect when built again. + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Changed"); + } + + [Fact] + public void Build_Library() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "lib.cs"); + File.WriteAllText(programFile, """ + #:property OutputType=Library + class C; + """); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "build", "lib.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run", "lib.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr(string.Format(CliCommandStrings.RunCommandExceptionUnableToRun, + VirtualProjectBuilder.GetVirtualProjectPath(programFile), + ToolsetInfo.CurrentTargetFrameworkVersion, + "Library")); + } + + [Fact] + public void Build_Library_MultiTarget() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "lib.cs"); + File.WriteAllText(programFile, $""" + #:property OutputType=Library + #:property PublishAot=false + #:property LangVersion=preview + #:property TargetFramework= + #:property TargetFrameworks=netstandard2.0;{ToolsetInfo.CurrentTargetFramework} + class C; + """); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "build", "lib.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run", "lib.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute("--no-interactive") + .Should().Fail() + .And.HaveStdErrContaining(string.Format(CliCommandStrings.RunCommandExceptionUnableToRunSpecifyFramework, "--framework")); + + new DotnetCommand(Log, "run", "lib.cs", "--framework", ToolsetInfo.CurrentTargetFramework) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr(string.Format(CliCommandStrings.RunCommandExceptionUnableToRun, + VirtualProjectBuilder.GetVirtualProjectPath(programFile), + ToolsetInfo.CurrentTargetFrameworkVersion, + "Library")); + } + + [Fact] + public void Build_Module() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "module.cs"); + File.WriteAllText(programFile, """ + #:property OutputType=Module + #:property ProduceReferenceAssembly=false + class C; + """); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "build", "module.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run", "module.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr(string.Format(CliCommandStrings.RunCommandExceptionUnableToRun, + VirtualProjectBuilder.GetVirtualProjectPath(programFile), + ToolsetInfo.CurrentTargetFrameworkVersion, + "Module")); + } + + [Fact] + public void Build_WinExe() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "winexe.cs"); + File.WriteAllText(programFile, """ + #:property OutputType=WinExe + Console.WriteLine("Hello WinExe"); + """); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "build", "winexe.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run", "winexe.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello WinExe"); + } + + [Fact] + public void Build_Exe() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "exe.cs"); + File.WriteAllText(programFile, """ + #:property OutputType=Exe + Console.WriteLine("Hello Exe"); + """); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "build", "exe.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run", "exe.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello Exe"); + } + + [Fact] + public void Build_Exe_MultiTarget() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "exe.cs"); + File.WriteAllText(programFile, $""" + #:property OutputType=Exe + #:property PublishAot=false + #:property LangVersion=preview + #:property TargetFramework= + #:property TargetFrameworks=netstandard2.0;{ToolsetInfo.CurrentTargetFramework} + Console.WriteLine("Hello Exe"); + """); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "build", "exe.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run", "exe.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format(CliCommandStrings.RunCommandExceptionUnableToRunSpecifyFramework, "--framework")); + + new DotnetCommand(Log, "run", "exe.cs", "--framework", ToolsetInfo.CurrentTargetFramework) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello Exe"); + } + + [Fact] + public void Build_AppContainerExe() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "appcontainerexe.cs"); + File.WriteAllText(programFile, """ + #:property OutputType=AppContainerExe + Console.WriteLine("Hello AppContainerExe"); + """); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "build", "appcontainerexe.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run", "appcontainerexe.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr(string.Format(CliCommandStrings.RunCommandExceptionUnableToRun, + VirtualProjectBuilder.GetVirtualProjectPath(programFile), + ToolsetInfo.CurrentTargetFrameworkVersion, + "AppContainerExe")); + } + + [Fact] + public void Publish() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var publishDir = Path.Join(testInstance.Path, "artifacts"); + if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); + + new DotnetCommand(Log, "publish", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(publishDir).Sub("Program") + .Should().Exist() + .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app + + new RunExeCommand(Log, Path.Join(publishDir, "Program", $"Program{Constants.ExeSuffix}")) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + Hello from Program + Release config + """); + } + + [Fact] + public void PublishWithCustomTarget() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var publishDir = Path.Join(testInstance.Path, "artifacts"); + if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); + + new DotnetCommand(Log, "publish", "Program.cs", "-t", "ComputeContainerConfig", "-p", "PublishAot=false", "--use-current-runtime") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + var appBinaryName = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "Program.exe" : "Program"; + new DirectoryInfo(publishDir).Sub("Program") + .Should().Exist() + .And.HaveFiles([ + appBinaryName, + "Program.deps.json", + "Program.runtimeconfig.json" + ]); + } + + [Fact] + public void Publish_WithJson() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, """ + #:sdk Microsoft.NET.Sdk.Web + Console.WriteLine(File.ReadAllText("config.json")); + """); + + File.WriteAllText(Path.Join(testInstance.Path, "config.json"), """ + { "MyKey": "MyValue" } + """); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var publishDir = Path.Join(testInstance.Path, "artifacts"); + if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); + + new DotnetCommand(Log, "publish", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(publishDir).Sub("Program") + .Should().Exist() + .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly) // no deps.json file for AOT-published app + .And.HaveFile("config.json"); // the JSON is included as content and hence copied + } + + [Fact] + public void Publish_Options() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var publishDir = Path.Join(testInstance.Path, "artifacts"); + if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); + + new DotnetCommand(Log, "publish", "Program.cs", "-c", "Debug", "-p:PublishAot=false", "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(publishDir).Sub("Program") + .Should().Exist() + .And.HaveFile("Program.deps.json"); + + new DirectoryInfo(testInstance.Path).File("msbuild.binlog").Should().Exist(); + } + + [Fact] + public void Publish_PublishDir_IncludesFileName() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "MyCustomProgram.cs"); + File.WriteAllText(programFile, s_program); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var publishDir = Path.Join(testInstance.Path, "artifacts"); + if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); + + new DotnetCommand(Log, "publish", "MyCustomProgram.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(publishDir).Sub("MyCustomProgram") + .Should().Exist() + .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app + } + + [Fact] + public void Publish_PublishDir_CommandLine() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + var customPublishDir = Path.Join(testInstance.Path, "custom-publish"); + if (Directory.Exists(customPublishDir)) Directory.Delete(customPublishDir, recursive: true); + + new DotnetCommand(Log, "publish", "Program.cs", $"/p:PublishDir={customPublishDir}") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(customPublishDir) + .Should().Exist() + .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app + } + + [Fact] + public void Publish_PublishDir_PropertyDirective() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + var publishDir = Path.Join(testInstance.Path, "directive-publish"); + File.WriteAllText(programFile, $""" + #:property PublishDir={publishDir} + {s_program} + """); + + if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); + + new DotnetCommand(Log, "publish", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(publishDir) + .Should().Exist() + .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app + } + + [Fact] + public void Publish_In_SubDir() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var subDir = Directory.CreateDirectory(Path.Combine(testInstance.Path, "subdir")); + + var programFile = Path.Join(subDir.FullName, "Program.cs"); + File.WriteAllText(programFile, s_program); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var publishDir = Path.Join(subDir.FullName, "artifacts"); + if (Directory.Exists(publishDir)) Directory.Delete(publishDir, recursive: true); + + new DotnetCommand(Log, "publish", "./subdir/Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(testInstance.Path).Sub("subdir").Sub("artifacts").Sub("Program") + .Should().Exist() + .And.NotHaveFilesMatching("*.deps.json", SearchOption.TopDirectoryOnly); // no deps.json file for AOT-published app + } + + [Fact] + public void Pack() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "MyFileBasedTool.cs"); + File.WriteAllText(programFile, """ + Console.WriteLine($"Hello; EntryPointFilePath set? {AppContext.GetData("EntryPointFilePath") is string}"); + #if !DEBUG + Console.WriteLine("Release config"); + #endif + """); + + // Run unpacked. + new DotnetCommand(Log, "run", "MyFileBasedTool.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello; EntryPointFilePath set? True"); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var outputDir = Path.Join(testInstance.Path, "artifacts"); + if (Directory.Exists(outputDir)) Directory.Delete(outputDir, recursive: true); + + // Pack. + new DotnetCommand(Log, "pack", "MyFileBasedTool.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + var packageDir = new DirectoryInfo(outputDir).Sub("MyFileBasedTool"); + packageDir.File("MyFileBasedTool.1.0.0.nupkg").Should().Exist(); + new DirectoryInfo(artifactsDir).Sub("package").Should().NotExist(); + + // Run the packed tool. + new DotnetCommand(Log, "tool", "exec", "MyFileBasedTool", "--yes", "--add-source", packageDir.FullName) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining(""" + Hello; EntryPointFilePath set? False + Release config + """); + } + + [Fact] + public void Pack_CustomPath() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "MyFileBasedTool.cs"); + File.WriteAllText(programFile, """ + #:property PackageOutputPath=custom + Console.WriteLine($"Hello; EntryPointFilePath set? {AppContext.GetData("EntryPointFilePath") is string}"); + """); + + // Run unpacked. + new DotnetCommand(Log, "run", "MyFileBasedTool.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello; EntryPointFilePath set? True"); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var outputDir = Path.Join(testInstance.Path, "custom"); + if (Directory.Exists(outputDir)) Directory.Delete(outputDir, recursive: true); + + // Pack. + new DotnetCommand(Log, "pack", "MyFileBasedTool.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(outputDir).File("MyFileBasedTool.1.0.0.nupkg").Should().Exist(); + new DirectoryInfo(artifactsDir).Sub("package").Should().NotExist(); + + // Run the packed tool. + new DotnetCommand(Log, "tool", "exec", "MyFileBasedTool", "--yes", "--add-source", outputDir) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining("Hello; EntryPointFilePath set? False"); + } + + [Fact] + public void Clean() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + var artifactsDir = new DirectoryInfo(VirtualProjectBuilder.GetArtifactsPath(programFile)); + artifactsDir.Should().HaveFiles(["build-start.cache", "build-success.cache"]); + + var dllFile = artifactsDir.File("bin/debug/Program.dll"); + dllFile.Should().Exist(); + + new DotnetCommand(Log, "clean", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + artifactsDir.EnumerateFiles().Should().BeEmpty(); + + dllFile.Refresh(); + dllFile.Should().NotExist(); + } + + [PlatformSpecificFact(TestPlatforms.AnyUnix), UnsupportedOSPlatform("windows")] + public void ArtifactsDirectory_Permissions() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programFile); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(artifactsDir).UnixFileMode + .Should().Be(UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute, artifactsDir); + + // Re-create directory with incorrect permissions. + Directory.Delete(artifactsDir, recursive: true); + Directory.CreateDirectory(artifactsDir, UnixFileMode.GroupRead | UnixFileMode.GroupWrite | UnixFileMode.GroupExecute); + var actualMode = new DirectoryInfo(artifactsDir).UnixFileMode + .Should().NotBe(UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute, artifactsDir).And.Subject; + + new DotnetCommand(Log, "build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining("build-start.cache"); // Unhandled exception: Access to the path '.../build-start.cache' is denied. + + // Build shouldn't have changed the permissions. + new DirectoryInfo(artifactsDir).UnixFileMode + .Should().Be(actualMode, artifactsDir); + } + + [Theory, CombinatorialData] + public void LaunchProfile( + bool cscOnly, + [CombinatorialValues("Properties/launchSettings.json", "Program.run.json")] string relativePath) + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: cscOnly ? OutOfTreeBaseDirectory : null); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program + """ + + Console.WriteLine($"Message: '{Environment.GetEnvironmentVariable("Message")}'"); + """); + var fullPath = Path.Join(testInstance.Path, relativePath); + Directory.CreateDirectory(Path.GetDirectoryName(fullPath)!); + File.WriteAllText(fullPath, s_launchSettings); + + var prefix = cscOnly + ? CliCommandStrings.NoBinaryLogBecauseRunningJustCsc + Environment.NewLine + : string.Empty; + + new DotnetCommand(Log, "run", "-bl", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining(prefix + """ + Hello from Program + Message: 'TestProfileMessage1' + """); + + prefix = CliCommandStrings.NoBinaryLogBecauseUpToDate + Environment.NewLine; + + new DotnetCommand(Log, "run", "-bl", "--no-launch-profile", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(prefix + """ + Hello from Program + Message: '' + """); + + new DotnetCommand(Log, "run", "-bl", "-lp", "TestProfile2", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining(prefix + """ + Hello from Program + Message: 'TestProfileMessage2' + """); + } + + /// + /// Properties/launchSettings.json takes precedence over Program.run.json. + /// + [Fact] + public void LaunchProfile_Precedence() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program + """ + + Console.WriteLine($"Message: '{Environment.GetEnvironmentVariable("Message")}'"); + """); + Directory.CreateDirectory(Path.Join(testInstance.Path, "Properties")); + string launchSettings = Path.Join(testInstance.Path, "Properties", "launchSettings.json"); + File.WriteAllText(launchSettings, s_launchSettings.Replace("TestProfileMessage", "PropertiesLaunchSettingsJson")); + string runJson = Path.Join(testInstance.Path, "Program.run.json"); + File.WriteAllText(runJson, s_launchSettings.Replace("TestProfileMessage", "ProgramRunJson")); + + new DotnetCommand(Log, "run", "--no-launch-profile", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + Hello from Program + Message: '' + """); + + // quiet runs here so that launch-profile usage messages don't impact test assertions + new DotnetCommand(Log, "run", "-v", "q", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($""" + {string.Format(CliCommandStrings.RunCommandWarningRunJsonNotUsed, runJson, launchSettings)} + Hello from Program + Message: 'PropertiesLaunchSettingsJson1' + """); + + new DotnetCommand(Log, "run", "-v", "q", "-lp", "TestProfile2", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($""" + {string.Format(CliCommandStrings.RunCommandWarningRunJsonNotUsed, runJson, launchSettings)} + Hello from Program + Message: 'PropertiesLaunchSettingsJson2' + """); + } + + /// + /// Each file-based app in a folder can have separate launch profile. + /// + [Fact] + public void LaunchProfile_Multiple() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var source = s_program + """ + + Console.WriteLine($"Message: '{Environment.GetEnvironmentVariable("Message")}'"); + """; + File.WriteAllText(Path.Join(testInstance.Path, "First.cs"), source); + File.WriteAllText(Path.Join(testInstance.Path, "First.run.json"), s_launchSettings.Replace("TestProfileMessage", "First")); + File.WriteAllText(Path.Join(testInstance.Path, "Second.cs"), source); + File.WriteAllText(Path.Join(testInstance.Path, "Second.run.json"), s_launchSettings.Replace("TestProfileMessage", "Second")); + + // do these runs with quiet verbosity so that default run output doesn't impact the tests + new DotnetCommand(Log, "run", "-v", "q", "First.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + Hello from First + Message: 'First1' + """); + + new DotnetCommand(Log, "run", "-v", "q", "Second.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + Hello from Second + Message: 'Second1' + """); + } +} diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildOptions.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildOptions.cs new file mode 100644 index 000000000000..f1a4d77ee519 --- /dev/null +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildOptions.cs @@ -0,0 +1,1007 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.Build.Framework; +using Microsoft.Build.Logging.StructuredLogger; +using Microsoft.DotNet.Cli.Commands; +using Microsoft.DotNet.Cli.Commands.Run; +using Microsoft.DotNet.ProjectTools; + +namespace Microsoft.DotNet.Cli.Run.Tests; + +public sealed class RunFileTests_BuildOptions(ITestOutputHelper log) : RunFileTestBase(log) +{ + + /// + /// Main method is supported just like top-level statements. + /// + [Fact] + public void MainMethod() + { + var testInstance = _testAssetsManager.CopyTestAsset("MSBuildTestApp").WithSource(); + File.Delete(Path.Join(testInstance.Path, "MSBuildTestApp.csproj")); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello World!"); + } + + /// + /// Empty file does not contain entry point, so that's an error. + /// + [Fact] + public void EmptyFile() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), string.Empty); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error CS5001:"); // Program does not contain a static 'Main' method suitable for an entry point + } + + /// + /// See . + /// + [Theory, CombinatorialData] + public void WorkingDirectory(bool cscOnly) + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: cscOnly ? OutOfTreeBaseDirectory : null); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + + var code = """ + Console.WriteLine("v1"); + Console.WriteLine(Environment.CurrentDirectory); + Console.WriteLine(Directory.GetCurrentDirectory()); + Console.WriteLine(new DirectoryInfo(".").FullName); + Console.WriteLine(AppContext.GetData("EntryPointFileDirectoryPath")); + """; + + File.WriteAllText(programPath, code); + + var tempDir = Directory.CreateTempSubdirectory(); + var workDir = TestPathUtility.ResolveTempPrefixLink(tempDir.FullName).TrimEnd(Path.DirectorySeparatorChar); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, + expectedLevel: cscOnly ? BuildLevel.Csc : BuildLevel.All, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v1", workDir)); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, + expectedLevel: BuildLevel.Csc, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v2", workDir)); + + tempDir.Delete(); + + string GetExpectedOutput(string version, string workDir) => $""" + {version} + {workDir} + {workDir} + {workDir} + {Path.GetDirectoryName(programPath)} + """; + } + + /// + /// Combination of and . + /// + [Fact] + public void WorkingDirectory_CscOnly_AfterMSBuild() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + + var code = """ + #:property Configuration=Release + Console.WriteLine("v1"); + Console.WriteLine(Environment.CurrentDirectory); + Console.WriteLine(Directory.GetCurrentDirectory()); + Console.WriteLine(new DirectoryInfo(".").FullName); + Console.WriteLine(AppContext.GetData("EntryPointFileDirectoryPath")); + """; + + File.WriteAllText(programPath, code); + + var tempDir = Directory.CreateTempSubdirectory(); + var workDir = TestPathUtility.ResolveTempPrefixLink(tempDir.FullName).TrimEnd(Path.DirectorySeparatorChar); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, + expectedLevel: BuildLevel.All, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v1", workDir)); + + Build(testInstance, + expectedLevel: BuildLevel.None, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v1", workDir)); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, + expectedLevel: BuildLevel.Csc, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v2", workDir)); + + // Can be overridden with a #:property. + var workDir2 = Path.Join(testInstance.Path, "dir2"); + Directory.CreateDirectory(workDir2); + code = $""" + #:property RunWorkingDirectory={workDir2} + {code} + """; + File.WriteAllText(programPath, code); + + Build(testInstance, + expectedLevel: BuildLevel.All, + programFileName: programPath, + workDir: workDir, + expectedOutput: GetExpectedOutput("v2", workDir2)); + + tempDir.Delete(); + + string GetExpectedOutput(string version, string workDir) => $""" + {version} + {workDir} + {workDir} + {workDir} + {Path.GetDirectoryName(programPath)} + """; + } + + /// + /// Implicit build files have an effect. + /// + [Fact] + public void DirectoryBuildProps() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + TestName + + + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from TestName"); + } + + /// + /// Implicit build files are taken from the folder of the symbolic link itself, not its target. + /// This is equivalent to the behavior of symlinked project files. + /// See . + /// + [Fact] + public void DirectoryBuildProps_SymbolicLink() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var dir1 = Path.Join(testInstance.Path, "dir1"); + Directory.CreateDirectory(dir1); + + var originalPath = Path.Join(dir1, "original.cs"); + File.WriteAllText(originalPath, s_program); + + File.WriteAllText(Path.Join(dir1, "Directory.Build.props"), """ + + + OriginalAssemblyName + + + """); + + var dir2 = Path.Join(testInstance.Path, "dir2"); + Directory.CreateDirectory(dir2); + + var programFileName = "linked.cs"; + var programPath = Path.Join(dir2, programFileName); + + File.CreateSymbolicLink(path: programPath, pathToTarget: originalPath); + + File.WriteAllText(Path.Join(dir2, "Directory.Build.props"), """ + + + LinkedAssemblyName + + + """); + + new DotnetCommand(Log, "run", programFileName) + .WithWorkingDirectory(dir2) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from LinkedAssemblyName"); + + // Removing the Directory.Build.props should be detected by up-to-date check. + File.Delete(Path.Join(dir2, "Directory.Build.props")); + + new DotnetCommand(Log, "run", programFileName) + .WithWorkingDirectory(dir2) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from linked"); + } + + /// + /// Overriding default (implicit) properties of file-based apps via implicit build files. + /// + [Fact] + public void DefaultProps_DirectoryBuildProps() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine("Hi"); + """); + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + disable + + + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + // error CS0103: The name 'Console' does not exist in the current context + .And.HaveStdOutContaining("error CS0103"); + + // Converting to a project should not change the behavior. + + new DotnetCommand(Log, "project", "convert", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run") + .WithWorkingDirectory(Path.Join(testInstance.Path, "Program")) + .Execute() + .Should().Fail() + // error CS0103: The name 'Console' does not exist in the current context + .And.HaveStdOutContaining("error CS0103"); + } + + /// + /// Overriding default (implicit) properties of file-based apps from custom SDKs. + /// + [Fact] + public void DefaultProps_CustomSdk() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var sdkDir = Path.Join(testInstance.Path, "MySdk"); + Directory.CreateDirectory(sdkDir); + File.WriteAllText(Path.Join(sdkDir, "Sdk.props"), """ + + + disable + + + """); + File.WriteAllText(Path.Join(sdkDir, "Sdk.targets"), """ + + """); + File.WriteAllText(Path.Join(sdkDir, "MySdk.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + MSBuildSdk + false + + + + + + """); + + new DotnetCommand(Log, "pack") + .WithWorkingDirectory(sdkDir) + .Execute() + .Should().Pass(); + + var appDir = Path.Join(testInstance.Path, "app"); + Directory.CreateDirectory(appDir); + File.WriteAllText(Path.Join(appDir, "NuGet.config"), $""" + + + + + + + """); + File.WriteAllText(Path.Join(appDir, "Program.cs"), """ + #:sdk Microsoft.NET.Sdk + #:sdk MySdk@1.0.0 + Console.WriteLine("Hi"); + """); + + // Use custom package cache to avoid reuse of the custom SDK packed by previous test runs. + var packagesDir = Path.Join(testInstance.Path, ".packages"); + + new DotnetCommand(Log, "run", "Program.cs") + .WithEnvironmentVariable("NUGET_PACKAGES", packagesDir) + .WithWorkingDirectory(appDir) + .Execute() + .Should().Fail() + // error CS0103: The name 'Console' does not exist in the current context + .And.HaveStdOutContaining("error CS0103"); + + // Converting to a project should not change the behavior. + + new DotnetCommand(Log, "project", "convert", "Program.cs") + .WithEnvironmentVariable("NUGET_PACKAGES", packagesDir) + .WithWorkingDirectory(appDir) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "run") + .WithEnvironmentVariable("NUGET_PACKAGES", packagesDir) + .WithWorkingDirectory(Path.Join(appDir, "Program")) + .Execute() + .Should().Fail() + // error CS0103: The name 'Console' does not exist in the current context + .And.HaveStdOutContaining("error CS0103"); + } + + [Fact] + public void ComputeRunArguments_Success() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ + + + + $(RunArguments) extended + + + + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:extended + Hello from Program + """); + } + + [Fact] + public void ComputeRunArguments_Failure() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ + + + + + + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining(""" + MYAPP001: Custom error + """) + .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); + } + + /// + /// Command-line arguments should be passed through. + /// + [Theory] + [InlineData("other;args", "other;args")] + [InlineData("--;other;args", "other;args")] + [InlineData("--appArg", "--appArg")] + [InlineData("-c;Debug;--xyz", "--xyz")] + public void Arguments_PassThrough(string input, string output) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, ["run", "Program.cs", .. input.Split(';')]) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($""" + echo args:{output} + Hello from Program + """); + } + + /// + /// dotnet run --unknown-arg file.cs fallbacks to normal dotnet run behavior. + /// + [Fact] + public void Arguments_Unrecognized() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, ["run", "--arg", "Program.cs"]) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandExceptionNoProjects, + testInstance.Path, + "--project")); + } + + /// + /// dotnet run --some-known-arg file.cs is supported. + /// + [Theory, CombinatorialData] + public void Arguments_Recognized(bool beforeFile) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + string[] args = beforeFile + ? ["run", "-c", "Release", "Program.cs", "more", "args"] + : ["run", "Program.cs", "-c", "Release", "more", "args"]; + + new DotnetCommand(Log, args) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:more;args + Hello from Program + Release config + """); + } + + /// + /// dotnet run -bl file.cs produces a binary log. + /// + [Theory, CombinatorialData] + public void BinaryLog_Run(bool beforeFile) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + string[] args = beforeFile + ? ["-bl", "Program.cs"] + : ["Program.cs", "-bl"]; + + new DotnetCommand(Log, ["run", "--no-cache", .. args]) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + new DirectoryInfo(testInstance.Path) + .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) + .Select(f => f.Name) + .Should().BeEquivalentTo(["msbuild.binlog"]); + } + + [Theory, CombinatorialData] + public void BinaryLog_Build([CombinatorialValues("restore", "build")] string command, bool beforeFile) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + string[] args = beforeFile + ? [command, "-bl", "Program.cs"] + : [command, "Program.cs", "-bl"]; + + new DotnetCommand(Log, args) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(testInstance.Path) + .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) + .Select(f => f.Name) + .Should().BeEquivalentTo(["msbuild.binlog"]); + } + + [Theory] + [InlineData("-bl")] + [InlineData("-BL")] + [InlineData("-bl:msbuild.binlog")] + [InlineData("/bl")] + [InlineData("/bl:msbuild.binlog")] + [InlineData("--binaryLogger")] + [InlineData("--binaryLogger:msbuild.binlog")] + [InlineData("-bl:another.binlog")] + public void BinaryLog_ArgumentForms(string arg) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "run", "--no-cache", "Program.cs", arg) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + var fileName = arg.Split(':', 2) is [_, { Length: > 0 } value] ? Path.GetFileNameWithoutExtension(value) : "msbuild"; + + new DirectoryInfo(testInstance.Path) + .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) + .Select(f => f.Name) + .Should().BeEquivalentTo([$"{fileName}.binlog"]); + } + + [Fact] + public void BinaryLog_Multiple() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "run", "--no-cache", "Program.cs", "-bl:one.binlog", "two.binlog", "/bl:three.binlog") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:two.binlog + Hello from Program + """); + + new DirectoryInfo(testInstance.Path) + .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) + .Select(f => f.Name) + .Should().BeEquivalentTo(["three.binlog"]); + } + + [Fact] + public void BinaryLog_WrongExtension() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "run", "Program.cs", "-bl:test.test") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining("test.test"); // Invalid binary logger parameter(s): "test.test" + + new DirectoryInfo(testInstance.Path) + .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) + .Select(f => f.Name) + .Should().BeEmpty(); + } + + /// + /// dotnet run file.cs should not produce a binary log. + /// + [Fact] + public void BinaryLog_NotSpecified() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + new DirectoryInfo(testInstance.Path) + .EnumerateFiles("*.binlog", SearchOption.TopDirectoryOnly) + .Select(f => f.Name) + .Should().BeEmpty(); + } + + /// + /// Binary logs from our in-memory projects should have evaluation data. + /// + [Fact] + public void BinaryLog_EvaluationData() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "run", "--no-cache", "Program.cs", "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + string binaryLogPath = Path.Join(testInstance.Path, "msbuild.binlog"); + new FileInfo(binaryLogPath).Should().Exist(); + + // There should be exactly three - two for restore, one for build. + VerifyBinLogEvaluationDataCount(binaryLogPath, expectedCount: 3); + } + + /// + /// Binary logs from our in-memory projects should have evaluation data. + /// + [Fact] + public void BinaryLog_EvaluationData_MultiFile() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), + $""" + #!/usr/bin/env dotnet + #:include *.cs + {s_programDependingOnUtil} + """); + + var utilPath = Path.Join(testInstance.Path, "Util.cs"); + File.WriteAllText(utilPath, s_util); + + new DotnetCommand(Log, "run", "--no-cache", "Program.cs", "-bl:first.binlog") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, String from Util"); + + string binaryLogPath = Path.Join(testInstance.Path, "first.binlog"); + new FileInfo(binaryLogPath).Should().Exist(); + + // There should be exactly four - two for restore and one for build as usual, plus one for initial directive evaluation. + var expectedCount = 4; + VerifyBinLogEvaluationDataCount(binaryLogPath, expectedCount: expectedCount); + + File.WriteAllText(utilPath, s_util.Replace("String from Util", "v2")); + + new DotnetCommand(Log, "run", "Program.cs", "-bl:second.binlog") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, v2"); + + binaryLogPath = Path.Join(testInstance.Path, "second.binlog"); + new FileInfo(binaryLogPath).Should().Exist(); + + // After rebuild, there should be the same number of evaluations. + VerifyBinLogEvaluationDataCount(binaryLogPath, expectedCount: expectedCount); + } + + /// + /// If we skip build due to up-to-date check, no binlog should be created. + /// + [Fact] + public void BinaryLog_EvaluationData_UpToDate() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, s_program); + + var expectedOutput = "Hello from Program"; + + new DotnetCommand(Log, "run", "--no-cache", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + string binaryLogPath = Path.Join(testInstance.Path, "msbuild.binlog"); + new FileInfo(binaryLogPath).Should().NotExist(); + + new DotnetCommand(Log, "run", "Program.cs", "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($""" + {CliCommandStrings.NoBinaryLogBecauseUpToDate} + {expectedOutput} + """); + + new FileInfo(binaryLogPath).Should().NotExist(); + } + + [Theory, CombinatorialData] + public void TerminalLogger(bool on) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + var result = new DotnetCommand(Log, "run", "Program.cs", "--no-cache") + .WithWorkingDirectory(testInstance.Path) + .WithEnvironmentVariable("MSBUILDTERMINALLOGGER", on ? "on" : "off") + .Execute() + .Should().Pass() + .And.HaveStdOutContaining("Hello from Program"); + + const string terminalLoggerSubstring = "\x1b"; + if (on) + { + result.And.HaveStdOutContaining(terminalLoggerSubstring); + } + else + { + result.And.NotHaveStdOutContaining(terminalLoggerSubstring); + } + } + + [Fact] + public void Verbosity_Run() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + new DotnetCommand(Log, "run", "Program.cs", "--no-cache") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + // no additional build messages + .And.HaveStdOut("Hello from Program") + .And.NotHaveStdOutContaining("Program.dll") + .And.NotHaveStdErr(); + } + + [Fact] // https://github.com/dotnet/sdk/issues/50227 + public void Verbosity_Build() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFile = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programFile, s_program); + + new DotnetCommand(Log, "build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + // should print path to the built DLL + .And.HaveStdOutContaining("Program.dll"); + } + + [Fact] + public void Verbosity_CompilationDiagnostics() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + string x = null; + Console.WriteLine("ran" + x); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + // warning CS8600: Converting null literal or possible null value to non-nullable type. + .And.HaveStdOutContaining("warning CS8600") + .And.HaveStdOutContaining("ran"); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.Write + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + // error CS1002: ; expected + .And.HaveStdOutContaining("error CS1002") + .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); + } + + [Fact] + public void MissingShebangWarning() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + // Single-file program without shebang should NOT produce CA2266 + // (the warning only fires when there are multiple files via #:include). + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine("hello"); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdOutContaining("CA2266") + .And.HaveStdOutContaining("hello"); + + // Included file without shebang should not produce CA2266. + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), """ + class Util { public static string Greet() => "hello"; } + """); + + // Entry point with shebang and #:include — no warning. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #!/usr/bin/env dotnet + #:include Util.cs + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdOutContaining("CA2266") + .And.HaveStdOutContaining("hello"); + + // Entry point without shebang and #:include — CA2266 warning expected. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:include Util.cs + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining("warning CA2266") + .And.HaveStdOutContaining("hello"); + + // CA2266 can be suppressed via NoWarn. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:property NoWarn=CA2266 + #:include Util.cs + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdOutContaining("CA2266") + .And.HaveStdOutContaining("hello"); + } + + [Fact] + public void MissingShebangWarning_CompileItemFromDirectoryBuildProps() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + // Directory.Build.props adds a Compile item, effectively making + // the compilation multi-file (same as #:include). + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), """ + class Util { public static string Greet() => "hello"; } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + + + + """); + + // Entry point without shebang — CA2266 warning expected + // because Directory.Build.props added another Compile item. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining("warning CA2266") + .And.HaveStdOutContaining("hello"); + + // Adding shebang resolves the warning. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #!/usr/bin/env dotnet + Console.WriteLine(Util.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("hello"); + } + + /// + /// File-based projects using the default SDK do not include embedded resources by default. + /// + [Fact] + public void EmbeddedResource() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_programReadingEmbeddedResource); + File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx); + + // By default, with the default SDK, embedded resources are not included. + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + Resource not found + """); + + // This behavior can be overridden to enable embedded resources. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #:property EnableDefaultEmbeddedResourceItems=true + {s_programReadingEmbeddedResource} + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + [MyString, TestValue] + """); + + // When using a non-default SDK, embedded resources are included by default. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #:sdk Microsoft.NET.Sdk.Web + {s_programReadingEmbeddedResource} + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + [MyString, TestValue] + """); + + // When using the default SDK explicitly, embedded resources are not included. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #:sdk Microsoft.NET.Sdk + {s_programReadingEmbeddedResource} + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + Resource not found + """); + } + + /// + /// Scripts in repo root should not include .resx files. + /// Part of . + /// + [Theory, CombinatorialData] + public void EmbeddedResource_AlongsideProj([CombinatorialValues("sln", "slnx", "csproj", "vbproj", "shproj", "proj")] string ext) + { + bool considered = ext is "sln" or "slnx" or "csproj"; + + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #:property EnableDefaultEmbeddedResourceItems=true + {s_programReadingEmbeddedResource} + """); + File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx); + File.WriteAllText(Path.Join(testInstance.Path, $"repo.{ext}"), ""); + + // Up-to-date check currently doesn't support default items, so we need to pass --no-cache + // otherwise other runs of this test theory might cause outdated results. + new DotnetCommand(Log, "run", "--no-cache", "--file", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(considered ? "Resource not found" : "[MyString, TestValue]"); + } +} diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_CscOnlyAndApi.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_CscOnlyAndApi.cs new file mode 100644 index 000000000000..54b265c2350f --- /dev/null +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_CscOnlyAndApi.cs @@ -0,0 +1,2574 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Text.Json; +using Basic.CompilerLog.Util; +using Microsoft.Build.Evaluation; +using Microsoft.CodeAnalysis; +using Microsoft.DotNet.Cli.Commands; +using Microsoft.DotNet.Cli.Commands.NuGet; +using Microsoft.DotNet.Cli.Commands.Run; +using Microsoft.DotNet.Cli.Utils; +using Microsoft.DotNet.FileBasedPrograms; +using Microsoft.DotNet.ProjectTools; + +namespace Microsoft.DotNet.Cli.Run.Tests; + +public sealed class RunFileTests_CscOnlyAndApi(ITestOutputHelper log) : RunFileTestBase(log) +{ + + /// + /// Verifies that msbuild-based runs use CSC args equivalent to csc-only runs. + /// Can regenerate CSC arguments template in . + /// + [Fact] + public void CscArguments() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + const string programName = "TestProgram"; + const string fileName = $"{programName}.cs"; + string entryPointPath = Path.Join(testInstance.Path, fileName); + File.WriteAllText(entryPointPath, s_program); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(entryPointPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + // Build using MSBuild. + new DotnetCommand(Log, "run", fileName, "-bl", "--no-cache") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($"Hello from {programName}"); + + // Find the csc args used by the build. + var msbuildCall = FindCompilerCall(Path.Join(testInstance.Path, "msbuild.binlog")); + var msbuildCallArgs = msbuildCall.GetArguments(); + var msbuildCallArgsString = ArgumentEscaper.EscapeAndConcatenateArgArrayForProcessStart(msbuildCallArgs); + + // Generate argument template code. + string sdkPath = NormalizePath(SdkTestContext.Current.ToolsetUnderTest.SdkFolderUnderTest); + string dotNetRootPath = NormalizePath(SdkTestContext.Current.ToolsetUnderTest.DotNetRoot); + string nuGetCachePath = NormalizePath(SdkTestContext.Current.NuGetCachePath!); + string artifactsDirNormalized = NormalizePath(artifactsDir); + string objPath = $"{artifactsDirNormalized}/obj/debug"; + string entryPointPathNormalized = NormalizePath(entryPointPath); + var msbuildArgsToVerify = new List(); + var nuGetPackageFilePaths = new List(); + bool referenceSpreadInserted = false; + bool analyzerSpreadInserted = false; + const string NetCoreAppRefPackPath = "packs/Microsoft.NETCore.App.Ref/"; + var code = new StringBuilder(); + code.AppendLine($$""" + // Licensed to the .NET Foundation under one or more agreements. + // The .NET Foundation licenses this file to you under the MIT license. + + using System.Text.Json; + + namespace Microsoft.DotNet.Cli.Commands.Run; + + // Generated by test `{{nameof(RunFileTests_CscOnlyAndApi)}}.{{nameof(CscArguments)}}`. + partial class CSharpCompilerCommand + { + private IEnumerable GetCscArguments( + string objDir, + string binDir) + { + return + [ + """); + foreach (var arg in msbuildCallArgs) + { + // This option needs to be passed on the command line, not in an RSP file. + if (arg is "/noconfig") + { + continue; + } + + // We don't need to generate a ref assembly. + if (arg.StartsWith("/refout:", StringComparison.Ordinal)) + { + continue; + } + + // There should be no source link arguments. + if (arg.StartsWith("/sourcelink:", StringComparison.Ordinal)) + { + Assert.Fail($"Unexpected source link argument: {arg}"); + } + + // PreferredUILang is normally not set by default but can be in builds, so ignore it. + if (arg.StartsWith("/preferreduilang:", StringComparison.Ordinal)) + { + continue; + } + + bool needsInterpolation = false; + bool fromNuGetPackage = false; + + // Normalize slashes in paths. + string rewritten = NormalizePathArg(arg); + + // Remove quotes. + rewritten = RemoveQuotes(rewritten); + + string msbuildArgToVerify = rewritten; + + // Use variable SDK path. + if (rewritten.Contains(sdkPath, StringComparison.OrdinalIgnoreCase)) + { + rewritten = rewritten.Replace(sdkPath, "{SdkPath}", StringComparison.OrdinalIgnoreCase); + needsInterpolation = true; + } + + // Use variable .NET root path. + if (rewritten.Contains(dotNetRootPath, StringComparison.OrdinalIgnoreCase)) + { + rewritten = rewritten.Replace(dotNetRootPath, "{DotNetRootPath}", StringComparison.OrdinalIgnoreCase); + needsInterpolation = true; + } + + // Use variable NuGet cache path. + if (rewritten.Contains(nuGetCachePath, StringComparison.OrdinalIgnoreCase)) + { + rewritten = rewritten.Replace(nuGetCachePath, "{NuGetCachePath}", StringComparison.OrdinalIgnoreCase); + needsInterpolation = true; + fromNuGetPackage = true; + } + + // Use variable intermediate dir path. + if (rewritten.Contains(objPath, StringComparison.OrdinalIgnoreCase)) + { + // We want to emit the resulting DLL directly into the bin folder. + bool isOut = arg.StartsWith("/out", StringComparison.Ordinal); + string replacement = isOut ? "{binDir}" : "{objDir}"; + + if (isOut) + { + msbuildArgToVerify = msbuildArgToVerify.Replace("/obj/", "/bin/", StringComparison.OrdinalIgnoreCase); + } + + rewritten = rewritten.Replace(objPath, replacement, StringComparison.OrdinalIgnoreCase); + needsInterpolation = true; + } + + // Use variable file path. + if (rewritten.Contains(entryPointPathNormalized, StringComparison.OrdinalIgnoreCase)) + { + rewritten = rewritten.Replace(entryPointPathNormalized, "{" + nameof(CSharpCompilerCommand.EntryPointFileFullPath) + "}", StringComparison.OrdinalIgnoreCase); + needsInterpolation = true; + } + + // Use variable file name. + if (rewritten.Contains(fileName, StringComparison.OrdinalIgnoreCase)) + { + rewritten = rewritten.Replace(fileName, "{FileName}", StringComparison.OrdinalIgnoreCase); + needsInterpolation = true; + } + + // Use variable program name. + if (rewritten.Contains(programName, StringComparison.OrdinalIgnoreCase)) + { + rewritten = rewritten.Replace(programName, "{FileNameWithoutExtension}", StringComparison.OrdinalIgnoreCase); + needsInterpolation = true; + } + + // Use variable runtime version. + if (rewritten.Contains(CSharpCompilerCommand.RuntimeVersion, StringComparison.OrdinalIgnoreCase)) + { + rewritten = rewritten.Replace(CSharpCompilerCommand.RuntimeVersion, "{" + nameof(CSharpCompilerCommand.RuntimeVersion) + "}", StringComparison.OrdinalIgnoreCase); + needsInterpolation = true; + } + + // Ignore `/analyzerconfig` which is not variable (so it comes from the machine or sdk repo). + if (!needsInterpolation && arg.StartsWith("/analyzerconfig", StringComparison.Ordinal)) + { + continue; + } + + // Use GetFrameworkReferenceArguments() for framework references instead of hard-coding them. + if (arg.StartsWith("/reference:", StringComparison.Ordinal)) + { + if (!referenceSpreadInserted) + { + code.AppendLine(""" + .. GetFrameworkReferenceArguments(), + """); + referenceSpreadInserted = true; + } + + msbuildArgsToVerify.Add(msbuildArgToVerify); + continue; + } + + // Use GetFrameworkAnalyzerArguments() for targeting-pack analyzers instead of hard-coding them. + if (arg.StartsWith("/analyzer:", StringComparison.Ordinal) + && rewritten.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase)) + { + if (!analyzerSpreadInserted) + { + code.AppendLine(""" + .. GetFrameworkAnalyzerArguments(), + """); + analyzerSpreadInserted = true; + } + + msbuildArgsToVerify.Add(msbuildArgToVerify); + continue; + } + + string prefix = needsInterpolation ? "$" : string.Empty; + + code.AppendLine($""" + {prefix}"{rewritten}", + """); + + msbuildArgsToVerify.Add(msbuildArgToVerify); + + if (fromNuGetPackage) + { + nuGetPackageFilePaths.Add(CSharpCompilerCommand.IsPathOption(rewritten, out int colonIndex) + ? rewritten.Substring(colonIndex + 1) + : rewritten); + } + } + code.AppendLine(""" + ]; + } + + /// + /// Files that come from referenced NuGet packages (e.g., analyzers for NativeAOT) need to be checked specially (if they don't exist, MSBuild needs to run). + /// + public static IEnumerable GetPathsOfCscInputsFromNuGetCache() + { + return + [ + """); + foreach (var nuGetPackageFilePath in nuGetPackageFilePaths) + { + code.AppendLine($""" + $"{nuGetPackageFilePath}", + """); + } + code.AppendLine(""" + ]; + } + """); + + // Generate file content templates. + var baseDirectory = TestPathUtility.ResolveTempPrefixLink(Path.GetDirectoryName(entryPointPath)!); + var replacements = new List<(string, string)> + { + (TestPathUtility.ResolveTempPrefixLink(entryPointPath), nameof(CSharpCompilerCommand.EntryPointFileFullPath)), + (baseDirectory + Path.DirectorySeparatorChar, nameof(CSharpCompilerCommand.BaseDirectoryWithTrailingSeparator)), + (baseDirectory, nameof(CSharpCompilerCommand.BaseDirectory)), + (programName, nameof(CSharpCompilerCommand.FileNameWithoutExtension)), + (CSharpCompilerCommand.TargetFrameworkVersion, nameof(CSharpCompilerCommand.TargetFrameworkVersion)), + (CSharpCompilerCommand.TargetFramework, nameof(CSharpCompilerCommand.TargetFramework)), + (CSharpCompilerCommand.DefaultRuntimeVersion, nameof(CSharpCompilerCommand.DefaultRuntimeVersion)), + }; + var emittedFiles = Directory.EnumerateFiles(artifactsDir, "*", SearchOption.AllDirectories).Order(); + foreach (var emittedFile in emittedFiles) + { + var emittedFileName = Path.GetFileName(emittedFile); + var generatedMethodName = GetGeneratedMethodName(emittedFileName); + if (generatedMethodName is null) + { + Log.WriteLine($"Skipping unrecognized file '{emittedFile}'."); + continue; + } + + var emittedFileContent = File.ReadAllText(emittedFile); + + string interpolatedString = emittedFileContent; + string interpolationPrefix; + + if (emittedFileName.EndsWith(".json", StringComparison.Ordinal)) + { + interpolationPrefix = "$$"; + foreach (var (key, value) in replacements) + { + interpolatedString = interpolatedString.Replace(JsonSerializer.Serialize(key), "{{JsonSerializer.Serialize(" + value + ")}}"); + } + } + else + { + interpolationPrefix = "$"; + foreach (var (key, value) in replacements) + { + interpolatedString = interpolatedString.Replace(key, "{" + value + "}"); + } + } + + if (interpolatedString == emittedFileContent) + { + interpolationPrefix = ""; + } + + code.AppendLine($$"""" + + private string Get{{generatedMethodName}}Content() + { + return {{interpolationPrefix}}""" + {{interpolatedString}} + """; + } + """"); + } + + code.AppendLine(""" + } + """); + + // Save the code. + var codeFolder = new DirectoryInfo(Path.Join( + SdkTestContext.Current.ToolsetUnderTest.RepoRoot, + "src", "Cli", "dotnet", "Commands", "Run")); + var nonGeneratedFile = codeFolder.File("CSharpCompilerCommand.cs"); + if (!nonGeneratedFile.Exists) + { + Log.WriteLine($"Skipping code generation because file does not exist: {nonGeneratedFile.FullName}"); + } + else + { + var codeFilePath = codeFolder.File("CSharpCompilerCommand.Generated.cs"); + var existingText = codeFilePath.Exists ? File.ReadAllText(codeFilePath.FullName) : string.Empty; + var newText = code.ToString(); + if (existingText != newText) + { + Log.WriteLine($"{codeFilePath.FullName} needs to be updated:"); + Log.WriteLine(newText); + if (Env.GetEnvironmentVariableAsBool("CI")) + { + throw new InvalidOperationException($"Not updating file in CI: {codeFilePath.FullName}"); + } + else + { + File.WriteAllText(codeFilePath.FullName, newText); + throw new InvalidOperationException($"File outdated, commit the changes: {codeFilePath.FullName}"); + } + } + } + + // Build using CSC. + Directory.Delete(artifactsDir, recursive: true); + new DotnetCommand(Log, "run", fileName, "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($""" + {CliCommandStrings.NoBinaryLogBecauseRunningJustCsc} + Hello from {programName} + """); + + // Read args from csc.rsp file. + var rspFilePath = Path.Join(artifactsDir, "csc.rsp"); + var cscOnlyCallArgs = File.ReadAllLines(rspFilePath); + var cscOnlyCallArgsString = string.Join(' ', cscOnlyCallArgs); + + // Check that csc args between MSBuild run and CSC-only run are equivalent. + var normalizedCscOnlyArgs = cscOnlyCallArgs + .Select(static a => NormalizePathArg(RemoveQuotes(a))) + .ToList(); + Log.WriteLine("CSC-only args:"); + Log.WriteLine(string.Join(Environment.NewLine, normalizedCscOnlyArgs)); + Log.WriteLine("MSBuild args:"); + Log.WriteLine(string.Join(Environment.NewLine, msbuildArgsToVerify)); + + // References and targeting-pack analyzers may be in a different order (FrameworkList.xml vs. MSBuild), + // so compare them as sets. All other args must be in the same order. + var cscOnlyRefArgs = normalizedCscOnlyArgs.Where(static a => a.StartsWith("/reference:", StringComparison.Ordinal)).ToList(); + var cscOnlyAnalyzerArgs = normalizedCscOnlyArgs.Where(a => a.StartsWith("/analyzer:", StringComparison.Ordinal) && a.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase)).ToList(); + var cscOnlyOtherArgs = normalizedCscOnlyArgs.Where(a => !a.StartsWith("/reference:", StringComparison.Ordinal) && !(a.StartsWith("/analyzer:", StringComparison.Ordinal) && a.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase))).ToList(); + var msbuildRefArgs = msbuildArgsToVerify.Where(static a => a.StartsWith("/reference:", StringComparison.Ordinal)).ToList(); + var msbuildAnalyzerArgs = msbuildArgsToVerify.Where(a => a.StartsWith("/analyzer:", StringComparison.Ordinal) && a.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase)).ToList(); + var msbuildOtherArgs = msbuildArgsToVerify.Where(a => !a.StartsWith("/reference:", StringComparison.Ordinal) && !(a.StartsWith("/analyzer:", StringComparison.Ordinal) && a.Contains(NetCoreAppRefPackPath, StringComparison.OrdinalIgnoreCase))).ToList(); + cscOnlyRefArgs.Should().NotBeEmpty( + "framework references should be resolved from FrameworkList.xml"); + cscOnlyRefArgs.Should().BeEquivalentTo(msbuildRefArgs, + "the generated file might be outdated, run this test locally to regenerate it"); + cscOnlyAnalyzerArgs.Should().NotBeEmpty( + "framework analyzers should be resolved from FrameworkList.xml"); + cscOnlyAnalyzerArgs.Should().BeEquivalentTo(msbuildAnalyzerArgs, + "the generated file might be outdated, run this test locally to regenerate it"); + cscOnlyOtherArgs.Should().Equal(msbuildOtherArgs, + "the generated file might be outdated, run this test locally to regenerate it"); + + static CompilerCall FindCompilerCall(string binaryLogPath) + { + using var reader = BinaryLogReader.Create(binaryLogPath); + return reader.ReadAllCompilerCalls().Should().ContainSingle().Subject; + } + + static string NormalizePathArg(string arg) + { + return CSharpCompilerCommand.IsPathOption(arg, out int colonIndex) + ? string.Concat(arg.AsSpan(0, colonIndex + 1), NormalizePath(arg.Substring(colonIndex + 1))) + : NormalizePath(arg); + } + + static string NormalizePath(string path) + { + return PathUtility.GetPathWithForwardSlashes(TestPathUtility.ResolveTempPrefixLink(path)); + } + + static string RemoveQuotes(string arg) + { + return arg.Replace("\"", string.Empty); + } + + static string? GetGeneratedMethodName(string assetFileName) + { + return assetFileName switch + { + $".NETCoreApp,Version=v{ToolsetInfo.CurrentTargetFrameworkVersion}.AssemblyAttributes.cs" => "AssemblyAttributes", + $"{fileName}.GlobalUsings.g.cs" => "GlobalUsings", + $"{fileName}.AssemblyInfo.cs" => "AssemblyInfo", + $"{fileName}.GeneratedMSBuildEditorConfig.editorconfig" => "GeneratedMSBuildEditorConfig", + $"{programName}{FileNameSuffixes.RuntimeConfigJson}" => "RuntimeConfig", + _ => null, + }; + } + } + + /// + /// Verifies that csc-only runs emit auxiliary files equivalent to msbuild-based runs. + /// + [Theory] + [InlineData("Program.cs")] + [InlineData("test.cs")] + [InlineData("noext")] + public void CscVsMSBuild(string fileName) + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + string entryPointPath = Path.Join(testInstance.Path, fileName); + File.WriteAllText(entryPointPath, $""" + #!/test + {s_program} + """); + + string programName = Path.GetFileNameWithoutExtension(fileName); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(entryPointPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + var artifactsBackupDir = Path.ChangeExtension(artifactsDir, ".bak"); + if (Directory.Exists(artifactsBackupDir)) Directory.Delete(artifactsBackupDir, recursive: true); + + // Build using CSC. + new DotnetCommand(Log, "run", fileName, "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($""" + {CliCommandStrings.NoBinaryLogBecauseRunningJustCsc} + Hello from {programName} + """); + + // Backup the artifacts directory. + Directory.Move(artifactsDir, artifactsBackupDir); + + // Build using MSBuild. + new DotnetCommand(Log, "run", fileName, "-bl", "--no-cache") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($"Hello from {programName}"); + + // Check that files generated by MSBuild and CSC-only runs are equivalent. + var cscOnlyFiles = Directory.EnumerateFiles(artifactsBackupDir, "*", SearchOption.AllDirectories) + .Where(f => + Path.GetDirectoryName(f) != artifactsBackupDir && // exclude top-level marker files + Path.GetFileName(f) != programName && // binary on unix + Path.GetExtension(f) is not (".dll" or ".exe" or ".pdb")); // other binaries + bool hasErrors = false; + foreach (var cscOnlyFile in cscOnlyFiles) + { + var relativePath = Path.GetRelativePath(relativeTo: artifactsBackupDir, path: cscOnlyFile); + var msbuildFile = Path.Join(artifactsDir, relativePath); + + if (!File.Exists(msbuildFile)) + { + throw new InvalidOperationException($"File exists in CSC-only run but not in MSBuild run: {cscOnlyFile}"); + } + + var cscOnlyFileText = File.ReadAllText(cscOnlyFile); + var msbuildFileText = File.ReadAllText(msbuildFile); + if (cscOnlyFileText.ReplaceLineEndings() != msbuildFileText.ReplaceLineEndings()) + { + Log.WriteLine($"File differs between MSBuild and CSC-only runs (if this is expected, run test '{nameof(CscArguments)}' locally to re-generate the template): {cscOnlyFile}"); + const int limit = 3_000; + if (cscOnlyFileText.Length < limit && msbuildFileText.Length < limit) + { + Log.WriteLine("MSBuild file content:"); + Log.WriteLine(msbuildFileText); + Log.WriteLine("CSC-only file content:"); + Log.WriteLine(cscOnlyFileText); + } + else + { + Log.WriteLine($"MSBuild file size: {msbuildFileText.Length} chars"); + Log.WriteLine($"CSC-only file size: {cscOnlyFileText.Length} chars"); + } + hasErrors = true; + } + } + hasErrors.Should().BeFalse("some file contents do not match, see the test output for details"); + } + + [Fact] + public void UpToDate() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine("Hello v1"); + """); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(Path.Join(testInstance.Path, "Program.cs")); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "Hello v1"); + + Build(testInstance, BuildLevel.None, expectedOutput: "Hello v1"); + + Build(testInstance, BuildLevel.None, expectedOutput: "Hello v1"); + + // Change the source file (a rebuild is necessary). + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + Build(testInstance, BuildLevel.Csc); + + Build(testInstance, BuildLevel.None); + + // Change an unrelated source file (no rebuild necessary). + File.WriteAllText(Path.Join(testInstance.Path, "Program2.cs"), "test"); + + Build(testInstance, BuildLevel.None); + + // Add an implicit build file (a rebuild is necessary). + string buildPropsFile = Path.Join(testInstance.Path, "Directory.Build.props"); + File.WriteAllText(buildPropsFile, """ + + + $(DefineConstants);CUSTOM_DEFINE + + + """); + + Build(testInstance, BuildLevel.All, expectedOutput: """ + Hello from Program + Custom define + """); + + Build(testInstance, BuildLevel.None, expectedOutput: """ + Hello from Program + Custom define + """); + + // Change the implicit build file (a rebuild is necessary). + string importedFile = Path.Join(testInstance.Path, "Settings.props"); + File.WriteAllText(importedFile, """ + + + """); + File.WriteAllText(buildPropsFile, """ + + + + """); + + Build(testInstance, BuildLevel.All); + + // Change the imported build file (this is not recognized). + File.WriteAllText(importedFile, """ + + + $(DefineConstants);CUSTOM_DEFINE + + + """); + + Build(testInstance, BuildLevel.None); + + // Force rebuild. + Build(testInstance, BuildLevel.All, args: ["--no-cache"], expectedOutput: """ + Hello from Program + Custom define + """); + + // Remove an implicit build file (a rebuild is necessary). + File.Delete(buildPropsFile); + Build(testInstance, BuildLevel.Csc); + + // Force rebuild. + Build(testInstance, BuildLevel.All, args: ["--no-cache"]); + + Build(testInstance, BuildLevel.None); + + // Pass argument (no rebuild necessary). + Build(testInstance, BuildLevel.None, args: ["--", "test-arg"], expectedOutput: """ + echo args:test-arg + Hello from Program + """); + + // Change config (a rebuild is necessary). + Build(testInstance, BuildLevel.All, args: ["-c", "Release"], expectedOutput: """ + Hello from Program + Release config + """); + + // Keep changed config (no rebuild necessary). + Build(testInstance, BuildLevel.None, args: ["-c", "Release"], expectedOutput: """ + Hello from Program + Release config + """); + + // Change config back (a rebuild is necessary). + Build(testInstance, BuildLevel.Csc); + + // Build with a failure. + new DotnetCommand(Log, ["run", "Program.cs", "-p:LangVersion=Invalid"]) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error CS1617"); // Invalid option 'Invalid' for /langversion. + + // A rebuild is necessary since the last build failed. + Build(testInstance, BuildLevel.Csc); + } + + [Fact] + public void UpToDate_InvalidOptions() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "run", "Program.cs", "--no-cache", "--no-build") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format(CliCommandStrings.CannotCombineOptions, "--no-cache", "--no-build")); + } + + /// + /// optimization should see through symlinks. + /// See . + /// + [Fact] + public void UpToDate_SymbolicLink() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var originalPath = Path.Join(testInstance.Path, "original.cs"); + var code = """ + #!/usr/bin/env dotnet + Console.WriteLine("v1"); + """; + var utf8NoBom = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); + File.WriteAllText(originalPath, code, utf8NoBom); + + var programFileName = "linked"; + var programPath = Path.Join(testInstance.Path, programFileName); + + File.CreateSymbolicLink(path: programPath, pathToTarget: originalPath); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "v1", programFileName: programFileName); + + Build(testInstance, BuildLevel.None, expectedOutput: "v1", programFileName: programFileName); + + code = code.Replace("v1", "v2"); + File.WriteAllText(originalPath, code, utf8NoBom); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", programFileName: programFileName); + } + + /// + /// Similar to but with a chain of symlinks. + /// + [Fact] + public void UpToDate_SymbolicLink2() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var originalPath = Path.Join(testInstance.Path, "original.cs"); + var code = """ + #!/usr/bin/env dotnet + Console.WriteLine("v1"); + """; + var utf8NoBom = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); + File.WriteAllText(originalPath, code, utf8NoBom); + + var intermediateFileName = "linked1"; + var intermediatePath = Path.Join(testInstance.Path, intermediateFileName); + + File.CreateSymbolicLink(path: intermediatePath, pathToTarget: originalPath); + + var programFileName = "linked2"; + var programPath = Path.Join(testInstance.Path, programFileName); + + File.CreateSymbolicLink(path: programPath, pathToTarget: intermediatePath); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "v1", programFileName: programFileName); + + Build(testInstance, BuildLevel.None, expectedOutput: "v1", programFileName: programFileName); + + code = code.Replace("v1", "v2"); + File.WriteAllText(originalPath, code, utf8NoBom); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", programFileName: programFileName); + } + + /// + /// optimization currently does not support #:project references and hence is disabled if those are present. + /// See . + /// + [Fact] + public void UpToDate_ProjectReferences() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libDir = Path.Join(testInstance.Path, "Lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + + + """); + + var libPath = Path.Join(libDir, "Lib.cs"); + var libCode = """ + namespace Lib; + public class LibClass + { + public static string GetMessage() => "Hello from Lib v1"; + } + """; + File.WriteAllText(libPath, libCode); + + var appDir = Path.Join(testInstance.Path, "App"); + Directory.CreateDirectory(appDir); + + var code = """ + #:project ../Lib + Console.WriteLine("v1 " + Lib.LibClass.GetMessage()); + """; + + var programPath = Path.Join(appDir, "Program.cs"); + File.WriteAllText(programPath, code); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var programFileName = "App/Program.cs"; + + Build(testInstance, BuildLevel.All, expectedOutput: "v1 Hello from Lib v1", programFileName: programFileName); + + // We cannot detect changes in referenced projects, so we always rebuild. + Build(testInstance, BuildLevel.All, expectedOutput: "v1 Hello from Lib v1", programFileName: programFileName); + + libCode = libCode.Replace("v1", "v2"); + File.WriteAllText(libPath, libCode); + + Build(testInstance, BuildLevel.All, expectedOutput: "v1 Hello from Lib v2", programFileName: programFileName); + } + + /// + /// optimization currently does not support #:ref references and hence is disabled if those are present. + /// Analogous to . + /// + [Fact] + public void UpToDate_RefDirectives() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + var libPath = Path.Join(testInstance.Path, "lib.cs"); + var libCode = """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "v1"; + } + """; + File.WriteAllText(libPath, libCode); + + var programCode = """ + #:ref lib.cs + Console.WriteLine("Hello " + MyLib.Greeter.Greet()); + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, programCode); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello v1"); + + // We cannot detect changes in referenced files, so we always rebuild. + Build(testInstance, BuildLevel.All, expectedOutput: "Hello v1"); + + libCode = libCode.Replace("v1", "v2"); + File.WriteAllText(libPath, libCode); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello v2"); + } + + /// + /// optimization considers default items. + /// Also tests optimization. + /// (We cannot test because that optimization doesn't support neither #:property nor #:sdk which we need to enable default items.) + /// See . + /// + [Theory, CombinatorialData] + public void UpToDate_DefaultItems(bool optOut) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var code = $""" + {(optOut ? "#:property FileBasedProgramCanSkipMSBuild=false" : "")} + #:property EnableDefaultEmbeddedResourceItems=true + {s_programReadingEmbeddedResource} + """; + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), code); + + Build(testInstance, BuildLevel.All, expectedOutput: "Resource not found"); + + File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx); + + if (!optOut) + { + // Adding a default item is currently not recognized (https://github.com/dotnet/sdk/issues/50912). + Build(testInstance, BuildLevel.None, expectedOutput: "Resource not found"); + Build(testInstance, BuildLevel.All, args: ["--no-cache"], expectedOutput: "[MyString, TestValue]"); + } + else + { + Build(testInstance, BuildLevel.All, expectedOutput: "[MyString, TestValue]"); + } + + // Update the RESX file. + File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx.Replace("TestValue", "UpdatedValue")); + + Build(testInstance, BuildLevel.All, expectedOutput: "[MyString, UpdatedValue]"); + + // Update the C# file. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), "//v2\n" + code); + + Build(testInstance, optOut ? BuildLevel.All : BuildLevel.Csc, expectedOutput: "[MyString, UpdatedValue]"); + + // Update the RESX file again (to verify the CSC only compilation didn't corrupt the list of additional files in the cache). + File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx.Replace("TestValue", "UpdatedValue2")); + + Build(testInstance, BuildLevel.All, expectedOutput: "[MyString, UpdatedValue2]"); + } + + /// + /// Similar to but for .razor files instead of .resx files. + /// + [Fact] + public void UpToDate_DefaultItems_Razor() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programFileName = "MyRazorApp.cs"; + File.WriteAllText(Path.Join(testInstance.Path, programFileName), """ + #:sdk Microsoft.NET.Sdk.Web + _ = new MyRazorApp.MyCoolApp(); + Console.WriteLine("Hello from Program"); + """); + + var razorFilePath = Path.Join(testInstance.Path, "MyCoolApp.razor"); + File.WriteAllText(razorFilePath, ""); + + Build(testInstance, BuildLevel.All, programFileName: programFileName); + + Build(testInstance, BuildLevel.None, programFileName: programFileName); + + File.Delete(razorFilePath); + + new DotnetCommand(Log, "run", programFileName) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + // error CS0246: The type or namespace name 'MyRazorApp' could not be found + .And.HaveStdOutContaining("error CS0246"); + } + + [Fact] + public void CscOnly() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine("v1"); + """); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(Path.Join(testInstance.Path, "Program.cs")); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v1"); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine("v2"); + #if !DEBUG + Console.WriteLine("Release config"); + #endif + """); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2"); + + // Customizing a property forces MSBuild to be used. + Build(testInstance, BuildLevel.All, args: ["-c", "Release"], expectedOutput: """ + v2 + Release config + """); + } + + [Fact] + public void CscOnly_CompilationDiagnostics() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + string x = null; + Console.WriteLine("ran" + x); + """); + + new DotnetCommand(Log, "run", "Program.cs", "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) + // warning CS8600: Converting null literal or possible null value to non-nullable type. + .And.HaveStdOutContaining("warning CS8600") + .And.HaveStdOutContaining("ran"); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.Write + """); + + new DotnetCommand(Log, "run", "Program.cs", "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) + // error CS1002: ; expected + .And.HaveStdOutContaining("error CS1002") + .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); + } + + /// + /// Checks that the DOTNET_ROOT env var is set the same in csc mode as in msbuild mode. + /// + [Fact] + public void CscOnly_DotNetRoot() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + foreach (var entry in Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process) + .Cast() + .Where(e => ((string)e.Key).StartsWith("DOTNET_ROOT"))) + { + Console.WriteLine($"{entry.Key}={entry.Value}"); + } + """); + + var expectedDotNetRoot = SdkTestContext.Current.ToolsetUnderTest.DotNetRoot; + + var cscResult = new DotnetCommand(Log, "run", "Program.cs", "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute(); + + cscResult.Should().Pass() + .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) + .And.HaveStdOutContaining("DOTNET_ROOT") + .And.HaveStdOutContaining($"={expectedDotNetRoot}"); + + // Add an implicit build file to force use of msbuild instead of csc. + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), ""); + + var msbuildResult = new DotnetCommand(Log, "run", "Program.cs", "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute(); + + msbuildResult.Should().Pass() + .And.NotHaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) + .And.HaveStdOutContaining("DOTNET_ROOT") + .And.HaveStdOutContaining($"={expectedDotNetRoot}"); + + // The set of DOTNET_ROOT env vars should be the same in both cases. + var cscVars = cscResult.StdOut! + .Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries) + .Where(line => line.StartsWith("DOTNET_ROOT")); + var msbuildVars = msbuildResult.StdOut! + .Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries) + .Where(line => line.StartsWith("DOTNET_ROOT")); + cscVars.Should().BeEquivalentTo(msbuildVars); + } + + /// + /// In CSC-only mode, the SDK needs to manually create intermediate files + /// like GlobalUsings.g.cs which are normally generated by MSBuild targets. + /// This tests the SDK recreates the files when they are outdated. + /// + [Fact] + public void CscOnly_IntermediateFiles() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Expression> e = () => 1 + 1; + Console.WriteLine(e); + """); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(Path.Join(testInstance.Path, "Program.cs")); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), ""); + + new DotnetCommand(Log, "run", "Program.cs", "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + // error CS0246: The type or namespace name 'Expression<>' could not be found + .And.HaveStdOutContaining("error CS0246"); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + + + + """); + + Build(testInstance, BuildLevel.All, expectedOutput: "() => 2"); + + File.Delete(Path.Join(testInstance.Path, "Directory.Build.props")); + + new DotnetCommand(Log, "run", "Program.cs", "-bl") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) + // error CS0246: The type or namespace name 'Expression<>' could not be found + .And.HaveStdOutContaining("error CS0246"); + } + + /// + /// If a file from a NuGet package (which would be used by CSC-only build) does not exist, full MSBuild should be used instead. + /// + [Fact] + public void CscOnly_NotRestored() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(Path.Join(testInstance.Path, "Program.cs")); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "run", "Program.cs", "-bl", "--no-restore") + .WithEnvironmentVariable("NUGET_PACKAGES", Path.Join(testInstance.Path, "packages")) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + // error NETSDK1004: Assets file '...\obj\project.assets.json' not found. Run a NuGet package restore to generate this file. + .And.HaveStdOutContaining("NETSDK1004"); + + new DotnetCommand(Log, "run", "Program.cs", "-bl") + .WithEnvironmentVariable("NUGET_PACKAGES", Path.Join(testInstance.Path, "packages")) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine("v2"); + """); + + new DotnetCommand(Log, "run", "Program.cs", "-bl") + .WithEnvironmentVariable("NUGET_PACKAGES", Path.Join(testInstance.Path, "packages")) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($""" + {CliCommandStrings.NoBinaryLogBecauseRunningJustCsc} + v2 + """); + } + + [Fact] + public void CscOnly_SpacesInPath() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + var programFileName = "Program with spaces.cs"; + var programPath = Path.Join(testInstance.Path, programFileName); + + File.WriteAllText(programPath, """ + Console.WriteLine("v1"); + """); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v1", programFileName: programFileName); + } + + [Fact] // https://github.com/dotnet/sdk/issues/50778 + public void CscOnly_Args() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, s_program); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.Csc, args: ["test", "args"], expectedOutput: """ + echo args:test;args + Hello from Program + """); + } + + /// + /// Combination of and . + /// + [Fact] + public void CscOnly_SymbolicLink() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + var originalPath = Path.Join(testInstance.Path, "original.cs"); + var code = """ + #!/usr/bin/env dotnet + Console.WriteLine("v1"); + """; + var utf8NoBom = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); + File.WriteAllText(originalPath, code, utf8NoBom); + + var programFileName = "linked"; + var programPath = Path.Join(testInstance.Path, programFileName); + + File.CreateSymbolicLink(path: programPath, pathToTarget: originalPath); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v1", programFileName: programFileName); + + Build(testInstance, BuildLevel.None, expectedOutput: "v1", programFileName: programFileName); + + code = code.Replace("v1", "v2"); + File.WriteAllText(originalPath, code, utf8NoBom); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", programFileName: programFileName); + } + + /// + /// Tests an optimization which remembers CSC args from prior MSBuild runs and can skip subsequent MSBuild invocations and call CSC directly. + /// This optimization kicks in when the file has some #: directives (then the simpler "hard-coded CSC args" optimization cannot be used). + /// + [Fact] + public void CscOnly_AfterMSBuild() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + var code = """ + #:property Configuration=Release + Console.Write("v1 "); + #if !DEBUG + Console.Write("Release"); + #endif + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + + File.WriteAllText(programPath, code); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "v1 Release"); + + Build(testInstance, BuildLevel.None, expectedOutput: "v1 Release"); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2 Release"); + + code = code.Replace("v2", "v3"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v3 Release"); + + // Customizing a property forces MSBuild to be used. + code = code.Replace("Configuration=Release", "Configuration=Debug"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.All, expectedOutput: "v3 "); + + // This MSBuild will skip CoreBuild but we still need to preserve CSC args so the next build can be CSC-only. + Build(testInstance, BuildLevel.All, ["--no-cache"], expectedOutput: "v3 "); + + code = code.Replace("v3", "v4"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v4 "); + + // Customizing a property on the command-line forces MSBuild to be used. + Build(testInstance, BuildLevel.All, args: ["-c", "Release"], expectedOutput: "v4 Release"); + + Build(testInstance, BuildLevel.All, expectedOutput: "v4 "); + } + + /// + /// See . + /// + [Fact] + public void CscOnly_AfterMSBuild_SpacesInPath() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + var code = """ + #:property Configuration=Release + Console.Write("v1 "); + #if !DEBUG + Console.Write("Release"); + #endif + """; + + var programFileName = "Program with spaces.cs"; + var programPath = Path.Join(testInstance.Path, programFileName); + + File.WriteAllText(programPath, code); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "v1 Release", programFileName: programFileName); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2 Release", programFileName: programFileName); + } + + /// + /// Testing optimization . + /// When compilation fails, the obj dll should not be copied to bin directory. + /// This prevents spurious errors if the dll file was not even produced by roslyn due to compilation errors. + /// + [Fact] + public void CscOnly_AfterMSBuild_CompilationFailure_NoCopyToBin() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + // First, create a valid program and build it successfully + var programPath = Path.Join(testInstance.Path, "Program.cs"); + var code = """ + #:property PublishAot=false + Console.WriteLine("version 1"); + """; + File.WriteAllText(programPath, code); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "version 1"); + + // Verify that the dlls were created + var objDll = Path.Join(artifactsDir, "obj", "debug", "Program.dll"); + new FileInfo(objDll).Should().Exist(); + var binDll = Path.Join(artifactsDir, "bin", "debug", "Program.dll"); + new FileInfo(binDll).Should().Exist(); + + // Delete the dlls + File.Delete(objDll); + File.Delete(binDll); + + // Write invalid code that causes compilation to fail + code = code + "\n#error my custom error"; + File.WriteAllText(programPath, code); + + // Try to build the invalid code + new DotnetCommand(Log, "run", "-bl", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining(CliCommandStrings.NoBinaryLogBecauseRunningJustCsc) + .And.HaveStdOutContaining("my custom error") + .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); + + new FileInfo(objDll).Should().NotExist(); + new FileInfo(binDll).Should().NotExist(); + } + + /// + /// See . + /// + [Fact] + public void CscOnly_AfterMSBuild_Args() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + + var code = $""" + #:property Configuration=Release + {s_program} + """; + + File.WriteAllText(programPath, code); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, args: ["test", "args"], expectedOutput: """ + echo args:test;args + Hello from Program + Release config + """); + + code = code.Replace("Hello", "Hi"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.Csc, args: ["test", "args"], expectedOutput: """ + echo args:test;args + Hi from Program + Release config + """); + } + + /// + /// See . + /// If hard links are enabled, the bin/app.dll and obj/app.dll files are going to be the same, + /// so our "copy obj to bin" logic must account for that. + /// + [Fact] + public void CscOnly_AfterMSBuild_HardLinks() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + + var code = $""" + #:property CreateHardLinksForCopyFilesToOutputDirectoryIfPossible=true + #:property CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible=true + {s_program} + """; + + File.WriteAllText(programPath, code); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All); + + code = code.Replace("Hello", "Hi"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "Hi from Program"); + } + + /// + /// Combination of and . + /// + [Fact] + public void CscOnly_AfterMSBuild_SymbolicLink() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + var originalPath = Path.Join(testInstance.Path, "original.cs"); + var code = """ + #!/usr/bin/env dotnet + #:property Configuration=Release + Console.WriteLine("v1"); + """; + var utf8NoBom = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); + File.WriteAllText(originalPath, code, utf8NoBom); + + var programFileName = "linked"; + var programPath = Path.Join(testInstance.Path, programFileName); + + File.CreateSymbolicLink(path: programPath, pathToTarget: originalPath); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "v1", programFileName: programFileName); + + code = code.Replace("v1", "v2"); + File.WriteAllText(originalPath, code, utf8NoBom); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", programFileName: programFileName); + } + + /// + /// Interaction of optimization and Directory.Build.props file. + /// + [Theory, CombinatorialData] + public void CscOnly_AfterMSBuild_DirectoryBuildProps(bool touch1, bool touch2) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var propsPath = Path.Join(testInstance.Path, "Directory.Build.props"); + var propsContent = """ + + + CustomAssemblyName + + + """; + File.WriteAllText(propsPath, propsContent); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + var programVersion = 0; + void WriteProgramContent() + { + programVersion++; + + // #: directive ensures we get CscOnly_AfterMSBuild optimization instead of CscOnly. + File.WriteAllText(programPath, $""" + #:property Configuration=Debug + Console.WriteLine("v{programVersion} " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name); + """); + } + WriteProgramContent(); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: $"v{programVersion} CustomAssemblyName"); + + File.Delete(propsPath); + + if (touch1) WriteProgramContent(); + + Build(testInstance, BuildLevel.All, expectedOutput: $"v{programVersion} Program"); + + File.WriteAllText(propsPath, propsContent); + + if (touch2) WriteProgramContent(); + + Build(testInstance, BuildLevel.All, expectedOutput: $"v{programVersion} CustomAssemblyName"); + } + + /// + /// See . + /// This optimization currently does not support #:project references and hence is disabled if those are present. + /// + [Fact] + public void CscOnly_AfterMSBuild_ProjectReferences() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libDir = Path.Join(testInstance.Path, "Lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + + + """); + + var libPath = Path.Join(libDir, "Lib.cs"); + var libCode = """ + namespace Lib; + public class LibClass + { + public static string GetMessage() => "Hello from Lib v1"; + } + """; + File.WriteAllText(libPath, libCode); + + var appDir = Path.Join(testInstance.Path, "App"); + Directory.CreateDirectory(appDir); + + var code = """ + #:project ../Lib + Console.WriteLine("v1 " + Lib.LibClass.GetMessage()); + """; + + var programPath = Path.Join(appDir, "Program.cs"); + File.WriteAllText(programPath, code); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var programFileName = "App/Program.cs"; + + Build(testInstance, BuildLevel.All, expectedOutput: "v1 Hello from Lib v1", programFileName: programFileName); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + libCode = libCode.Replace("v1", "v2"); + File.WriteAllText(libPath, libCode); + + // Cannot use CSC because we cannot detect updates in the referenced project. + Build(testInstance, BuildLevel.All, expectedOutput: "v2 Hello from Lib v2", programFileName: programFileName); + } + + /// + /// See . + /// This optimization currently does not support #:ref references and hence is disabled if those are present. + /// Analogous to . + /// + [Fact] + public void CscOnly_AfterMSBuild_RefDirectives() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + var libPath = Path.Join(testInstance.Path, "lib.cs"); + var libCode = """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "v1"; + } + """; + File.WriteAllText(libPath, libCode); + + var programCode = """ + #:ref lib.cs + Console.WriteLine("Hello " + MyLib.Greeter.Greet()); + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, programCode); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello v1"); + + programCode = programCode.Replace("Hello", "Hi"); + File.WriteAllText(programPath, programCode); + + libCode = libCode.Replace("v1", "v2"); + File.WriteAllText(libPath, libCode); + + // Cannot use CSC because we cannot detect updates in the referenced file. + Build(testInstance, BuildLevel.All, expectedOutput: "Hi v2"); + } + + /// + /// See . + /// If users have more complex build customizations, they can opt out of the optimization. + /// + [Theory, CombinatorialData] + public void CscOnly_AfterMSBuild_OptOut(bool canSkipMSBuild, bool inDirectoryBuildProps) + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + const string propertyName = VirtualProjectBuildingCommand.FileBasedProgramCanSkipMSBuild; + + if (inDirectoryBuildProps) + { + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{propertyName}>{canSkipMSBuild} + + + """); + } + + var code = $""" + #:property Configuration=Release + {(inDirectoryBuildProps ? "" : $"#:property {propertyName}={canSkipMSBuild}")} + Console.Write("v1 "); + #if !DEBUG + Console.Write("Release"); + #endif + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, code); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "v1 Release"); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, canSkipMSBuild ? BuildLevel.Csc : BuildLevel.All, expectedOutput: "v2 Release"); + } + + /// + /// See . + /// + [Fact] + public void CscOnly_AfterMSBuild_AuxiliaryFilesNotReused() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + var code = """ + #:property Configuration=Release + Console.Write("v1 "); + #if !DEBUG + Console.Write("Release"); + #endif + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, code); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + Build(testInstance, BuildLevel.All, expectedOutput: "v1 Release"); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + // Reusing CSC args from previous run here. + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2 Release"); + + code = code.Replace("v2", "v3"); + code = code.Replace("#:property Configuration=Release", ""); + File.WriteAllText(programPath, code); + + // Using built-in CSC args here (cannot reuse auxiliary files like csc.rsp here). + Build(testInstance, BuildLevel.Csc, expectedOutput: "v3 "); + } + + /// + /// Verifies that csc.rsp is written to disk after a full MSBuild build, + /// so that IDEs can read it to create a virtual project. + /// + [Fact] + public void MSBuild_WritesCscRsp() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, """ + #:property Configuration=Release + Console.Write("Hello"); + """); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + // A build directive forces a full MSBuild build. + Build(testInstance, BuildLevel.All, expectedOutput: "Hello"); + + // csc.rsp should be written to disk after a full MSBuild build. + var rspPath = Path.Join(artifactsDir, "csc.rsp"); + File.Exists(rspPath).Should().BeTrue("csc.rsp should be written after a full MSBuild build"); + File.ReadAllLines(rspPath).Should().NotBeEmpty("csc.rsp should contain compiler arguments"); + } + + /// + /// Verifies that csc.rsp is written to disk after dotnet build file.cs, + /// so that IDEs can read it to create a virtual project. + /// + [Fact] + public void DotnetBuild_WritesCscRsp() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, """ + Console.Write("Hello"); + """); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + new DotnetCommand(Log, "build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // csc.rsp should be written to disk after dotnet build. + var rspPath = Path.Join(artifactsDir, "csc.rsp"); + File.Exists(rspPath).Should().BeTrue("csc.rsp should be written after dotnet build file.cs"); + File.ReadAllLines(rspPath).Should().NotBeEmpty("csc.rsp should contain compiler arguments"); + } + + /// + /// Testing optimization when the NuGet cache is cleared between builds. + /// See . + /// + [Fact] + public void CscOnly_NuGetCacheCleared() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + var code = """ + Console.Write("v1"); + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, code); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var packageDir = Path.Join(testInstance.Path, "packages"); + TestCommand CustomizeCommand(TestCommand command) => command.WithEnvironmentVariable("NUGET_PACKAGES", packageDir); + + Assert.False(Directory.Exists(packageDir)); + + // Ensure the packages exist first. + Build(testInstance, BuildLevel.All, expectedOutput: "v1", customizeCommand: CustomizeCommand); + + Assert.True(Directory.Exists(packageDir)); + + // Now clear the build outputs (but not packages) to verify CSC is used even from "first run". + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", customizeCommand: CustomizeCommand); + + code = code.Replace("v2", "v3"); + File.WriteAllText(programPath, code); + + // Clear NuGet cache. + Directory.Delete(packageDir, recursive: true); + Assert.False(Directory.Exists(packageDir)); + + Build(testInstance, BuildLevel.All, expectedOutput: "v3", customizeCommand: CustomizeCommand); + + Assert.True(Directory.Exists(packageDir)); + } + + /// + /// Combination of and . + /// + [Fact] + public void CscOnly_AfterMSBuild_NuGetCacheCleared() + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: OutOfTreeBaseDirectory); + + var code = """ + #:property PublishAot=false + #:package System.CommandLine@2.0.0-beta4.22272.1 + new System.CommandLine.RootCommand("v1"); + Console.WriteLine("v1"); + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, code); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var packageDir = Path.Join(testInstance.Path, "packages"); + TestCommand CustomizeCommand(TestCommand command) => command.WithEnvironmentVariable("NUGET_PACKAGES", packageDir); + + Assert.False(Directory.Exists(packageDir)); + + Build(testInstance, BuildLevel.All, expectedOutput: "v1", customizeCommand: CustomizeCommand); + + Assert.True(Directory.Exists(packageDir)); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.Csc, expectedOutput: "v2", customizeCommand: CustomizeCommand); + + code = code.Replace("v2", "v3"); + File.WriteAllText(programPath, code); + + // Clear NuGet cache. + Directory.Delete(packageDir, recursive: true); + Assert.False(Directory.Exists(packageDir)); + + Build(testInstance, BuildLevel.All, expectedOutput: "v3", customizeCommand: CustomizeCommand); + + Assert.True(Directory.Exists(packageDir)); + } + + private static string ToJson(string s) => JsonSerializer.Serialize(s); + + /// + /// Simplifies using interpolated raw strings with nested JSON, + /// e.g, in $$"""{x:{y:1}}""", the }} would result in an error. + /// + private const string nop = ""; + + [Fact] + public void Api() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, """ + #!/program + #:sdk Microsoft.NET.Sdk + #:sdk Aspire.AppHost.Sdk@9.1.0 + #:property TargetFramework=net5.0 + #:package System.CommandLine@2.0.0-beta4.22272.1 + #:property LangVersion=preview + Console.WriteLine(); + """); + + var projectPath = VirtualProjectBuilder.GetVirtualProjectPath(programPath); + new DotnetCommand(Log, "run-api") + .WithStandardInput($$""" + {"$type":"GetProject","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":"/artifacts"} + """) + .Execute() + .Should().Pass() + .And.HaveStdOut($$""" + {"$type":"Project","Version":1,"Content":{{ToJson($""" + + + + false + /artifacts + Program + $(AssemblyName) + artifacts/$(AssemblyName) + artifacts/$(AssemblyName) + true + {programPath} + .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content + false + true + Exe + {ToolsetInfo.CurrentTargetFramework} + enable + enable + true + true + + + + + + + + + + + net5.0 + preview + false + $(Features);FileBasedProgram + + + + + + + + + + + + + + + + + + + + + """)}},"ProjectPath":{{ToJson(projectPath)}},"Diagnostics":[]} + """); + } + + /// + /// Directives should be evaluated before the project for run-api is constructed. + /// + [Fact] + public void Api_Evaluation() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "A.cs"); + File.WriteAllText(programPath, """ + #:property P1=cs + #:include B.$(P1) + Console.WriteLine(); + """); + + var bPath = Path.Join(testInstance.Path, "B.cs"); + File.WriteAllText(bPath, ""); + + var projectPath = VirtualProjectBuilder.GetVirtualProjectPath(programPath); + new DotnetCommand(Log, "run-api") + .WithStandardInput($$""" + {"$type":"GetProject","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":"/artifacts"} + """) + .Execute() + .Should().Pass() + .And.HaveStdOut($$""" + {"$type":"Project","Version":1,"Content":{{ToJson($""" + + + + false + /artifacts + A + $(AssemblyName) + artifacts/$(AssemblyName) + artifacts/$(AssemblyName) + true + {programPath} + .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content + false + true + false + false + Exe + {ToolsetInfo.CurrentTargetFramework} + enable + enable + true + true + + + + + + + + + + cs + false + $(Features);FileBasedProgram + + + + + + + + + + + + + + + + + + + + """)}},"ProjectPath":{{ToJson(projectPath)}},"Diagnostics":[]} + """); + } + + [Fact] + public void Api_Diagnostic_01() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, """ + Console.WriteLine(); + #:property LangVersion=preview + """); + + var projectPath = VirtualProjectBuilder.GetVirtualProjectPath(programPath); + new DotnetCommand(Log, "run-api") + .WithStandardInput($$""" + {"$type":"GetProject","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":"/artifacts"} + """) + .Execute() + .Should().Pass() + .And.HaveStdOut($$""" + {"$type":"Project","Version":1,"Content":{{ToJson($""" + + + + false + /artifacts + Program + $(AssemblyName) + artifacts/$(AssemblyName) + artifacts/$(AssemblyName) + true + {programPath} + .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content + false + true + false + false + Exe + {ToolsetInfo.CurrentTargetFramework} + enable + enable + true + true + + + + + + + + + + false + $(Features);FileBasedProgram + + + + + + + + + + + + + + + + """)}},"ProjectPath":{{ToJson(projectPath)}},"Diagnostics": + [{"Location":{ + "Path":{{ToJson(programPath)}}, + "Span":{"Start":{"Line":1,"Character":0},"End":{"Line":1,"Character":30}{{nop}}}{{nop}}}, + "Message":{{ToJson(FileBasedProgramsResources.CannotConvertDirective)}}}]} + """.ReplaceLineEndings("")); + } + + [Fact] + public void Api_Diagnostic_02() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, """ + #:unknown directive + Console.WriteLine(); + """); + + var projectPath = VirtualProjectBuilder.GetVirtualProjectPath(programPath); + new DotnetCommand(Log, "run-api") + .WithStandardInput($$""" + {"$type":"GetProject","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":"/artifacts"} + """) + .Execute() + .Should().Pass() + .And.HaveStdOut($$""" + {"$type":"Project","Version":1,"Content":{{ToJson($""" + + + + false + /artifacts + Program + $(AssemblyName) + artifacts/$(AssemblyName) + artifacts/$(AssemblyName) + true + {programPath} + .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content + false + true + false + false + Exe + {ToolsetInfo.CurrentTargetFramework} + enable + enable + true + true + + + + + + + + + + false + $(Features);FileBasedProgram + + + + + + + + + + + + + + + + """)}},"ProjectPath":{{ToJson(projectPath)}},"Diagnostics": + [{"Location":{ + "Path":{{ToJson(programPath)}}, + "Span":{"Start":{"Line":0,"Character":0},"End":{"Line":1,"Character":0}{{nop}}}{{nop}}}, + "Message":{{ToJson(string.Format(FileBasedProgramsResources.UnrecognizedDirective, "unknown"))}}}]} + """.ReplaceLineEndings("")); + } + + [Fact] + public void Api_Error() + { + new DotnetCommand(Log, "run-api") + .WithStandardInput(""" + {"$type":"Unknown1"} + {"$type":"Unknown2"} + """) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining(""" + {"$type":"Error","Version":1,"Message": + """) + .And.HaveStdOutContaining("Unknown1") + .And.HaveStdOutContaining("Unknown2"); + } + + [Fact] + public void Api_RunCommand() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, """ + Console.WriteLine(); + """); + + string artifactsPath = OperatingSystem.IsWindows() ? @"C:\artifacts" : "/artifacts"; + string executablePath = OperatingSystem.IsWindows() ? @"C:\artifacts\bin\debug\Program.exe" : "/artifacts/bin/debug/Program"; + new DotnetCommand(Log, "run-api") + // The command outputs only _custom_ environment variables (not inherited ones), + // so make sure we don't pass DOTNET_ROOT_* so we can assert that it is set by the run command. + .WithEnvironmentVariable("DOTNET_ROOT", string.Empty) + .WithEnvironmentVariable($"DOTNET_ROOT_{RuntimeInformation.OSArchitecture.ToString().ToUpperInvariant()}", string.Empty) + .WithStandardInput($$""" + {"$type":"GetRunCommand","EntryPointFileFullPath":{{ToJson(programPath)}},"ArtifactsPath":{{ToJson(artifactsPath)}}} + """) + .Execute() + .Should().Pass() + // DOTNET_ROOT environment variable is platform dependent so we don't verify it fully for simplicity + .And.HaveStdOutContaining($$""" + {"$type":"RunCommand","Version":1,"ExecutablePath":{{ToJson(executablePath)}},"CommandLineArguments":"","WorkingDirectory":"","EnvironmentVariables":{"DOTNET_ROOT + """); + } + + [Fact] + public void Api_VirtualProjectBuilder_CreateProjectRootElement() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libDir = Path.Join(testInstance.Path, "Lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + + + """); + + File.WriteAllText(Path.Join(libDir, "Lib.cs"), """ + namespace Lib; + public class LibClass + { + public static string GetMessage() => "Hello from Lib"; + } + """); + + var appDir = Path.Join(testInstance.Path, "App"); + Directory.CreateDirectory(appDir); + + var appPath = Path.Join(appDir, "Program.cs"); + File.WriteAllText(appPath, """ + #:project ../$(LibProjectName) + #:property LibProjectName=Lib + Console.WriteLine(Lib.LibClass.GetMessage()); + """); + + using var projectCollection = new ProjectCollection(); + var projectRootElement = NuGetVirtualProjectBuilder.Instance.CreateProjectRootElement(appPath, projectCollection); + + var xml = projectRootElement.RawXml; + Log.WriteLine(xml); + + xml.Should() + // directives are evaluated + .Contain("""""".Replace('\\', Path.DirectorySeparatorChar)) + // it's the virtual project + .And.Contain("true") + // correct target framework is used + .And.Contain($"{ToolsetInfo.CurrentTargetFramework}"); + + projectRootElement.FullPath.Should().Be(VirtualProjectBuilder.GetVirtualProjectPath(appPath)); + } + + [Theory, CombinatorialData] + public void EntryPointFilePath(bool cscOnly) + { + var testInstance = _testAssetsManager.CreateTestDirectory(baseDirectory: cscOnly ? OutOfTreeBaseDirectory : null); + var filePath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(filePath, """" + var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; + Console.WriteLine($"""EntryPointFilePath: {entryPointFilePath}"""); + """"); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(filePath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var prefix = cscOnly + ? CliCommandStrings.NoBinaryLogBecauseRunningJustCsc + Environment.NewLine + : string.Empty; + + new DotnetCommand(Log, "run", "-bl", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(prefix + $"EntryPointFilePath: {filePath}"); + } + + [Fact] + public void EntryPointFileDirectoryPath() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """" + var entryPointFileDirectoryPath = AppContext.GetData("EntryPointFileDirectoryPath") as string; + Console.WriteLine($"""EntryPointFileDirectoryPath: {entryPointFileDirectoryPath}"""); + """"); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($"EntryPointFileDirectoryPath: {testInstance.Path}"); + } + + [Fact] + public void EntryPointFilePath_WithRelativePath() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var fileName = "Program.cs"; + File.WriteAllText(Path.Join(testInstance.Path, fileName), """ + var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; + Console.WriteLine($"EntryPointFilePath: {entryPointFilePath}"); + """); + + var relativePath = Path.GetRelativePath(Directory.GetCurrentDirectory(), Path.Join(testInstance.Path, fileName)); + new DotnetCommand(Log, "run", relativePath) + .WithWorkingDirectory(Directory.GetCurrentDirectory()) + .Execute() + .Should().Pass() + .And.HaveStdOut($"EntryPointFilePath: {Path.GetFullPath(relativePath)}"); + } + + [Fact] + public void EntryPointFilePath_WithSpacesInPath() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var dirWithSpaces = Path.Join(testInstance.Path, "dir with spaces"); + Directory.CreateDirectory(dirWithSpaces); + var filePath = Path.Join(dirWithSpaces, "Program.cs"); + File.WriteAllText(filePath, """ + var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; + Console.WriteLine($"EntryPointFilePath: {entryPointFilePath}"); + """); + + new DotnetCommand(Log, "run", filePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($"EntryPointFilePath: {filePath}"); + } + + [Fact] + public void EntryPointFileDirectoryPath_WithDotSlash() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var fileName = "Program.cs"; + File.WriteAllText(Path.Join(testInstance.Path, fileName), """ + var entryPointFileDirectoryPath = AppContext.GetData("EntryPointFileDirectoryPath") as string; + Console.WriteLine($"EntryPointFileDirectoryPath: {entryPointFileDirectoryPath}"); + """); + + new DotnetCommand(Log, "run", $"./{fileName}") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($"EntryPointFileDirectoryPath: {testInstance.Path}"); + } + + [Fact] + public void EntryPointFilePath_WithUnicodeCharacters() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var unicodeFileName = "Программа.cs"; + var filePath = Path.Join(testInstance.Path, unicodeFileName); + File.WriteAllText(filePath, """ + var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; + Console.WriteLine($"EntryPointFilePath: {entryPointFilePath}"); + """); + + new DotnetCommand(Log, "run", unicodeFileName) + .WithWorkingDirectory(testInstance.Path) + .WithStandardOutputEncoding(Encoding.UTF8) + .Execute() + .Should().Pass() + .And.HaveStdOut($"EntryPointFilePath: {filePath}"); + } + + [Fact] + public void EntryPointFilePath_SymbolicLink() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var fileName = "Program.cs"; + var programPath = Path.Join(testInstance.Path, fileName); + File.WriteAllText(programPath, """ + #!/usr/bin/env dotnet + var entryPointFilePath = AppContext.GetData("EntryPointFilePath") as string; + Console.WriteLine($"EntryPointFilePath: {entryPointFilePath}"); + """); + + new DotnetCommand(Log, "run", fileName) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($"EntryPointFilePath: {programPath}"); + + var linkName = "linked"; + var linkPath = Path.Join(testInstance.Path, linkName); + File.CreateSymbolicLink(linkPath, programPath); + + new DotnetCommand(Log, "run", linkName) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut($"EntryPointFilePath: {linkPath}"); + } + + [Fact] + public void MSBuildGet_Simple() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "build", "Program.cs", "-getProperty:TargetFramework") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(ToolsetInfo.CurrentTargetFramework); + } + + /// + /// Check that -get commands work the same in project-based and file-based apps. + /// + [Theory] + [InlineData(true, "build", "--getProperty:TargetFramework;Configuration")] + [InlineData(true, "build", "--getItem:MyItem", "--getProperty:MyProperty")] + [InlineData(true, "build", "--getItem:MyItem", "--getProperty:MyProperty", "-t:MyTarget")] + [InlineData(true, "build", "--getItem:MyItem", "--getProperty:MyProperty", "--getTargetResult:MyTarget")] + [InlineData(true, "build", "/getProperty:TargetFramework")] + [InlineData(true, "build", "/getProperty:TargetFramework", "-p:LangVersion=wrong")] // evaluated only, so no failure + [InlineData(false, "build", "/getProperty:TargetFramework", "-t:Build", "-p:LangVersion=wrong")] // fails with build error but still outputs info + [InlineData(true, "build", "-getProperty:Configuration", "-getResultOutputFile:out.txt")] + [InlineData(true, "build", "-getProperty:OutputType,Configuration", "-getResultOutputFile:out1.txt", "-getResultOutputFile:out2.txt")] + [InlineData(true, "run", "-getProperty:Configuration")] // not supported, the arg is passed through to the app + [InlineData(true, "restore", "-getProperty:Configuration")] + [InlineData(true, "publish", "-getProperty:OutputType", "-p:PublishAot=false")] + [InlineData(true, "pack", "-getProperty:OutputType", "-p:PublishAot=false")] + [InlineData(true, "clean", "-getProperty:Configuration")] + public void MSBuildGet_Consistent(bool success, string subcommand, params string[] args) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + + + + + + MyValue + + + + """); + + var fileBasedResult = new DotnetCommand(Log, [subcommand, "Program.cs", .. args]) + .WithWorkingDirectory(testInstance.Path) + .Execute(); + + var fileBasedFiles = ReadFiles(); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.csproj"), s_consoleProject); + + var projectBasedResult = new DotnetCommand(Log, [subcommand, .. args]) + .WithWorkingDirectory(testInstance.Path) + .Execute(); + + var projectBasedFiles = ReadFiles(); + + fileBasedResult.StdOut.Should().Be(projectBasedResult.StdOut); + fileBasedResult.StdErr!.Replace("Program.cs.csproj", "Program.csproj").Should().Be(projectBasedResult.StdErr); + fileBasedResult.ExitCode.Should().Be(projectBasedResult.ExitCode).And.Be(success ? 0 : 1); + fileBasedFiles.Should().Equal(projectBasedFiles); + + Dictionary ReadFiles() + { + var result = new DirectoryInfo(testInstance.Path) + .EnumerateFiles() + .ExceptBy(["Program.cs", "Directory.Build.props", "Program.csproj"], f => f.Name) + .ToDictionary(f => f.Name, f => File.ReadAllText(f.FullName)); + + foreach (var (file, text) in result) + { + Log.WriteLine($"File '{file}':"); + Log.WriteLine(text); + File.Delete(Path.Join(testInstance.Path, file)); + } + + return result; + } + } + + /// + /// Regression test for https://github.com/dotnet/sdk/issues/52714. + /// The virtual project's must survive GC + /// even after being evicted from MSBuild's strong cache (LRU of size N). + /// We force eviction via MSBUILDPROJECTROOTELEMENTCACHESIZE=1 + /// and trigger GC via an inline task during NuGet restore. + /// Without the fix (strong reference in VirtualProjectBuilder._projectRootElement), + /// this fails with MSB4025 "The project file could not be loaded". + /// + [Fact] + public void VirtualProject_SurvivesGCDuringRestore() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + Console.WriteLine("Hello from virtual project"); + """); + + // Directory.Build.targets that forces GC during restore, + // after SDK imports have already evicted the virtual PRE from the strong cache. + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ + + + + + + + + <_ForceGCTask /> + + + """); + + new DotnetCommand(Log, "run", "--no-cache", "Program.cs") + // A cache size of 1 ensures the virtual PRE is evicted from the strong cache + // as soon as any SDK .targets/.props file is loaded during evaluation. + .WithEnvironmentVariable("MSBUILDPROJECTROOTELEMENTCACHESIZE", "1") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from virtual project"); + } + + /// + /// Same as but for #:ref referenced projects. + /// The referenced project's must also survive GC. + /// + [Fact] + public void VirtualProject_SurvivesGCDuringRestore_RefDirective() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello from ref"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:ref Lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + // Directory.Build.targets that forces GC during restore, + // after SDK imports have already evicted the virtual PRE from the strong cache. + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.targets"), """ + + + + + + + + <_ForceGCTask /> + + + """); + + new DotnetCommand(Log, "run", "--no-cache", "Program.cs") + // A cache size of 1 ensures the virtual PRE is evicted from the strong cache + // as soon as any SDK .targets/.props file is loaded during evaluation. + .WithEnvironmentVariable("MSBUILDPROJECTROOTELEMENTCACHESIZE", "1") + .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from ref"); + } +} diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs new file mode 100644 index 000000000000..e4f228613be1 --- /dev/null +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs @@ -0,0 +1,1686 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Immutable; +using Microsoft.CodeAnalysis.Text; +using Microsoft.DotNet.Cli.Commands; +using Microsoft.DotNet.Cli.Commands.Run; +using Microsoft.DotNet.FileBasedPrograms; +using Microsoft.DotNet.ProjectTools; + +namespace Microsoft.DotNet.Cli.Run.Tests; + +public sealed class RunFileTests_Directives(ITestOutputHelper log) : RunFileTestBase(log) +{ + + [Fact] + public void Define_01() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #if MY_DEFINE + Console.WriteLine("Test output"); + #endif + """); + + new DotnetCommand(Log, "run", "Program.cs", "-p:DefineConstants=MY_DEFINE") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Test output"); + } + + [Fact] + public void Define_02() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #if !MY_DEFINE + Console.WriteLine("Test output"); + #endif + """); + + new DotnetCommand(Log, "run", "Program.cs", "-p:DefineConstants=MY_DEFINE") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error CS5001:"); // Program does not contain a static 'Main' method suitable for an entry point + } + + [Fact] + public void PackageReference() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:package System.CommandLine@2.0.0-beta4.22272.1 + using System.CommandLine; + + var rootCommand = new RootCommand("Sample app for System.CommandLine"); + return await rootCommand.InvokeAsync(args); + """); + + new DotnetCommand(Log, "run", "Program.cs", "--", "--help") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining(""" + Description: + Sample app for System.CommandLine + """); + } + + [Fact] + public void PackageReference_CentralVersion() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Packages.props"), """ + + + true + + + + + + """); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:package System.CommandLine + using System.CommandLine; + + var rootCommand = new RootCommand("Sample app for System.CommandLine"); + return await rootCommand.InvokeAsync(args); + """); + + new DotnetCommand(Log, "run", "Program.cs", "--", "--help") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining(""" + Description: + Sample app for System.CommandLine + """); + } + + // https://github.com/dotnet/sdk/issues/49665 + [PlatformSpecificFact(TestPlatforms.Any & ~TestPlatforms.OSX)] // https://github.com/dotnet/sdk/issues/48990 + public void SdkReference() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:sdk Microsoft.NET.Sdk + #:sdk Aspire.AppHost.Sdk@9.2.1 + #:package Aspire.Hosting.AppHost@9.2.1 + + var builder = DistributedApplication.CreateBuilder(args); + builder.Build().Run(); + """); + + new DotnetCommand(Log, "build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + } + + [Fact] // https://github.com/dotnet/sdk/issues/49797 + public void SdkReference_VersionedSdkFirst() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """ + #:sdk Microsoft.NET.Sdk@9.0.0 + Console.WriteLine(); + """); + + new DotnetCommand(Log, "build", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + } + + [Theory] + [InlineData("../Lib/Lib.csproj")] + [InlineData("../Lib")] + [InlineData(@"..\Lib\Lib.csproj")] + [InlineData(@"..\Lib")] + [InlineData("$(MSBuildProjectDirectory)/../$(LibProjectName)")] + [InlineData(@"$(MSBuildProjectDirectory)/../Lib\$(LibProjectName).csproj")] + public void ProjectReference(string arg) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libDir = Path.Join(testInstance.Path, "Lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + + + """); + + File.WriteAllText(Path.Join(libDir, "Lib.cs"), """ + namespace Lib; + public class LibClass + { + public static string GetMessage() => "Hello from Lib"; + } + """); + + var appDir = Path.Join(testInstance.Path, "App"); + Directory.CreateDirectory(appDir); + + File.WriteAllText(Path.Join(appDir, "Program.cs"), $""" + #:project {arg} + #:property LibProjectName=Lib + Console.WriteLine(Lib.LibClass.GetMessage()); + """); + + var expectedOutput = "Hello from Lib"; + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(appDir) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + // Running from a different working directory shouldn't affect handling of the relative project paths. + new DotnetCommand(Log, "run", "App/Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + } + + [Theory] + [InlineData(null)] + [InlineData("app")] + public void ProjectReference_Errors(string? subdir) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var relativeFilePath = Path.Join(subdir, "Program.cs"); + var filePath = Path.Join(testInstance.Path, relativeFilePath); + Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); + File.WriteAllText(filePath, """ + #:project wrong.csproj + """); + + // Project file does not exist. + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "wrong.csproj")))); + + File.WriteAllText(filePath, """ + #:project dir/ + """); + + // Project directory does not exist. + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); + + Directory.CreateDirectory(Path.Join(testInstance.Path, subdir, "dir")); + + // Directory exists but has no project file. + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.CouldNotFindAnyProjectInDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); + + File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj1.csproj"), ""); + File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj2.csproj"), ""); + + // Directory exists but has multiple project files. + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.MoreThanOneProjectInDirectory, Path.Join(testInstance.Path, subdir, "dir/")))); + + // Malformed MSBuild variable syntax. + File.WriteAllText(filePath, """ + #:project $(Test + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, Path.Join(testInstance.Path, subdir, "$(Test")))); + } + + [Theory] + [InlineData(null)] + [InlineData("app")] + public void ProjectReference_Duplicate(string? subdir) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + var relativeFilePath = Path.Join(subdir, "Program.cs"); + var filePath = Path.Join(testInstance.Path, relativeFilePath); + Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); + Directory.CreateDirectory(Path.Join(testInstance.Path, subdir, "dir")); + File.WriteAllText(Path.Join(testInstance.Path, subdir, "dir", "proj1.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + + + """); + + File.WriteAllText(filePath, """ + #:project dir/ + #:project dir/ + Console.WriteLine("Hello"); + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 2, FileBasedProgramsResources.DuplicateDirective, "#:project dir/")); + + File.WriteAllText(filePath, """ + #:project dir/ + #:project dir/proj1.csproj + Console.WriteLine("Hello"); + """); + + // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate project reference + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello"); + + File.WriteAllText(filePath, """ + #:project dir/ + #:project $(MSBuildProjectDirectory)/dir/ + Console.WriteLine("Hello"); + """); + + // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate project reference + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello"); + } + + [Fact] + public void RefDirective() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet(string name) => $"Hello, {name}!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + Console.WriteLine(MyLib.Greeter.Greet("World")); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, World!"); + } + + [Fact] + public void RefDirective_Subdirectory() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + var libDir = Path.Join(testInstance.Path, "lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "mylib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet(string name) => $"Hello, {name}!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib/mylib.cs + Console.WriteLine(MyLib.Greeter.Greet("World")); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, World!"); + } + + /// + /// Analogous to but for #:ref. + /// + [Theory] + [InlineData(null)] + [InlineData("app")] + public void RefDirective_Errors(string? subdir) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + var relativeFilePath = Path.Join(subdir, "Program.cs"); + var filePath = Path.Join(testInstance.Path, relativeFilePath); + Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); + + // Missing name. + File.WriteAllText(filePath, """ + #:ref + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.MissingDirectiveName, "ref")); + + // File does not exist. + File.WriteAllText(filePath, """ + #:ref nonexistent.cs + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidRefDirective, + string.Format(FileBasedProgramsResources.CouldNotFindRefFile, Path.Join(testInstance.Path, subdir, "nonexistent.cs")))); + } + + /// + /// Verifies that #:ref produces a metadata (assembly) reference, + /// meaning internal members are not accessible unless InternalsVisibleTo is used. + /// + [Fact] + public void RefDirective_InternalsNotAccessible() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class PublicClass + { + public static string PublicMethod() => "public"; + internal static string InternalMethod() => "internal"; + } + internal static class InternalClass + { + public static string Method() => "internal class"; + } + """); + + // Accessing internal member should fail. + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + Console.WriteLine(MyLib.PublicClass.InternalMethod()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error CS"); + + // Accessing public member should succeed. + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + Console.WriteLine(MyLib.PublicClass.PublicMethod()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("public"); + } + + /// + /// Verifies transitive #:ref references work: app.cs → lib1.cs → lib2.cs. + /// + [Fact] + public void RefDirective_Transitive() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib2.cs"), """ + #:property OutputType=Library + namespace Lib2; + public static class Base + { + public static string Value() => "from lib2"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib1.cs"), """ + #:property OutputType=Library + #:ref lib2.cs + namespace Lib1; + public static class Middle + { + public static string Value() => $"from lib1 and {Lib2.Base.Value()}"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib1.cs + Console.WriteLine(Lib1.Middle.Value()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("from lib1 and from lib2"); + } + + /// + /// #:ref with various path formats (forward slashes, backslashes, MSBuild properties, parent dirs). + /// Analogous to . + /// + [Theory] + [InlineData("../Lib/lib.cs")] + [InlineData(@"..\Lib\lib.cs")] + [InlineData("$(MSBuildProjectDirectory)/../$(LibDirName)/lib.cs")] + [InlineData(@"$(MSBuildProjectDirectory)\..\Lib\lib.cs")] + public void RefDirective_PathFormats(string arg) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + var libDir = Path.Join(testInstance.Path, "Lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet(string name) => $"Hello, {name}!"; + } + """); + + var appDir = Path.Join(testInstance.Path, "App"); + Directory.CreateDirectory(appDir); + + File.WriteAllText(Path.Join(appDir, "app.cs"), $""" + #:ref {arg} + #:property LibDirName=Lib + Console.WriteLine(MyLib.Greeter.Greet("World")); + """); + + var expectedOutput = "Hello, World!"; + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(appDir) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + // Running from a different working directory shouldn't affect handling of the relative paths. + new DotnetCommand(Log, "run", "App/app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + } + + /// + /// #:ref duplicate detection. + /// Analogous to . + /// + [Theory] + [InlineData(null)] + [InlineData("app")] + public void RefDirective_Duplicate(string? subdir) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + var relativeFilePath = Path.Join(subdir, "Program.cs"); + var filePath = Path.Join(testInstance.Path, relativeFilePath); + Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); + + File.WriteAllText(Path.Join(testInstance.Path, subdir, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + File.WriteAllText(filePath, """ + #:ref lib.cs + #:ref lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 2, FileBasedProgramsResources.DuplicateDirective, "#:ref lib.cs")); + + File.WriteAllText(filePath, """ + #:ref lib.cs + #:ref ./lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate ref + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello!"); + + File.WriteAllText(filePath, """ + #:ref lib.cs + #:ref $(MSBuildProjectDirectory)/lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + // https://github.com/dotnet/sdk/issues/51139: we should detect the duplicate ref + new DotnetCommand(Log, "run", relativeFilePath) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello!"); + } + + /// + /// #:ref is an experimental feature that must be opted into. + /// Analogous to . + /// + [Fact] + public void RefDirective_FeatureFlag() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libPath = Path.Join(testInstance.Path, "lib.cs"); + File.WriteAllText(libPath, """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, """ + #:ref lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr($""" + {DirectiveError(programPath, 1, Resources.ExperimentalFeatureDisabled, CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective)} + + {CliCommandStrings.RunCommandException} + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello!"); + } + + /// + /// Combining #:ref and #:include in the same file-based app. + /// + [Fact] + public void RefDirective_WithInclude() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #!/usr/bin/env dotnet + #:property OutputType=Library + #:include LibHelper.cs + #:include LibFormatter.cs + namespace MyLib; + public static class Greeter + { + public static string Greet(string name) => LibFormatter.Format(LibHelper.Prefix, name); + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "LibHelper.cs"), """ + namespace MyLib; + public static class LibHelper + { + public static string Prefix => "Hello"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "LibFormatter.cs"), """ + namespace MyLib; + public static class LibFormatter + { + public static string Format(string prefix, string name) => $"{prefix}, {name}!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), """ + static class Util + { + public static string GetName() => "World"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #!/usr/bin/env dotnet + #:ref lib.cs + #:include Util.cs + Console.WriteLine(MyLib.Greeter.Greet(Util.GetName())); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, World!"); + } + + /// + /// A #:ref library can target a different framework (e.g., netstandard2.0) + /// than the referencing app (net10.0). + /// + [Fact] + public void RefDirective_DifferentTargetFramework() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + #:property TargetFramework=netstandard2.0 + #:property LangVersion=latest + #:property ImplicitUsings=disable + #:property PublishAot=false + namespace MyLib; + public static class Greeter + { + #if NETSTANDARD2_0 + public static string Greet() => "Hello from netstandard2.0!"; + #else + public static string Greet() => "Hello from other!"; + #endif + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + #if NET10_0_OR_GREATER + Console.WriteLine("App is net10.0+: " + MyLib.Greeter.Greet()); + #else + Console.WriteLine("App is older: " + MyLib.Greeter.Greet()); + #endif + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("App is net10.0+: Hello from netstandard2.0!"); + } + + /// + /// #:ref *.cs does not expand globs — it looks for a literal file named *.cs. + /// + [Fact] + public void RefDirective_Glob() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + var filePath = Path.Join(testInstance.Path, "app.cs"); + File.WriteAllText(filePath, """ + #:ref *.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(filePath, 1, FileBasedProgramsResources.InvalidRefDirective, + string.Format(FileBasedProgramsResources.CouldNotFindRefFile, Path.Join(testInstance.Path, "*.cs")))); + } + + /// + /// Verifies that cyclic #:ref references (lib1 → lib2 → lib1) do not cause an infinite loop. + /// + [Fact] + public void RefDirective_Cycle() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + EnableRefDirective(testInstance); + + File.WriteAllText(Path.Join(testInstance.Path, "lib1.cs"), """ + #:property OutputType=Library + #:ref lib2.cs + namespace Lib1; + public static class C1 { public static string Get() => "lib1"; } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib2.cs"), """ + #:property OutputType=Library + #:ref lib1.cs + namespace Lib2; + public static class C2 { public static string Get() => "lib2"; } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib1.cs + Console.WriteLine(Lib1.C1.Get()); + """); + + // Should not hang. The cycle is broken by processedFiles deduplication. + // error NU1108: Cycle detected. + // error NU1108: lib1 -> lib2 -> lib1. + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error NU1108"); + } + + /// + /// Two #:include'd files each have #:ref to the same library. + /// The deduplication via processedFiles should ensure the library is only processed once. + /// + [Fact] + public void RefDirective_DuplicateRefFromIncludedFiles() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "helper1.cs"), """ + #:ref lib.cs + static class Helper1 + { + public static string Get() => MyLib.Greeter.Greet(); + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "helper2.cs"), """ + #:ref lib.cs + static class Helper2 + { + public static string Get() => MyLib.Greeter.Greet(); + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #!/usr/bin/env dotnet + #:include helper1.cs + #:include helper2.cs + Console.WriteLine(Helper1.Get() + " " + Helper2.Get()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello! Hello!"); + } + + /// + /// Two #:include'd files in different directories each have #:ref to the same library + /// using different relative paths. Deduplication via processedFiles uses the resolved (absolute) path, + /// so the library is only processed once. + /// + [Fact] + public void RefDirective_DuplicateRefFromIncludedFiles_Subdirectories() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + // lib.cs is in the root directory. + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + // helper1.cs is in sub1/, refers to lib.cs via ../lib.cs. + var sub1 = Path.Join(testInstance.Path, "sub1"); + Directory.CreateDirectory(sub1); + File.WriteAllText(Path.Join(sub1, "helper1.cs"), """ + #:ref ../lib.cs + static class Helper1 + { + public static string Get() => MyLib.Greeter.Greet(); + } + """); + + // helper2.cs is in sub2/nested/, refers to lib.cs via ../../lib.cs (different relative path, same resolved path). + var sub2 = Path.Join(testInstance.Path, "sub2", "nested"); + Directory.CreateDirectory(sub2); + File.WriteAllText(Path.Join(sub2, "helper2.cs"), """ + #:ref ../../lib.cs + static class Helper2 + { + public static string Get() => MyLib.Greeter.Greet(); + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #!/usr/bin/env dotnet + #:include sub1/helper1.cs + #:include sub2/nested/helper2.cs + Console.WriteLine(Helper1.Get() + " " + Helper2.Get()); + """); + + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello! Hello!"); + } + + /// + /// Both #:include and #:ref pointing at the same file. + /// The file ends up both compiled into the current assembly and referenced as a separate assembly. + /// This is expected to produce a compilation error (duplicate type definitions). + /// + [Fact] + public void RefDirective_IncludeAndRefSameFile() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + <{CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective}>true + + + """); + + File.WriteAllText(Path.Join(testInstance.Path, "lib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello!"; + } + """); + + File.WriteAllText(Path.Join(testInstance.Path, "app.cs"), """ + #:ref lib.cs + #:include lib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """); + + // The #:include brings in lib.cs's #:property OutputType=Library, making the app a library. + // error CS8805: Program using top-level statements must be an executable. + new DotnetCommand(Log, "run", "app.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error CS8805"); + } + + [Theory, CombinatorialData] + public void IncludeDirective( + [CombinatorialValues("Util.cs", "**/*.cs", "**/*.$(MyProp1)")] string includePattern, + [CombinatorialValues("", "#:exclude Program.$(MyProp1)")] string additionalDirectives) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet + #:include {includePattern} + {additionalDirectives} + #:property MyProp1=cs + {s_programDependingOnUtil} + """); + + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, String from Util"); + } + + [Fact] + public void IncludeDirective_WorkingDirectory() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var srcDir = Path.Join(testInstance.Path, "src"); + Directory.CreateDirectory(srcDir); + + var a = """ + Console.WriteLine(B.M()); + """; + + File.WriteAllText(Path.Join(srcDir, "A.cs"), $""" + #!/usr/bin/env dotnet + #:include B.cs + {a} + """); + + var b = """ + static class B { public static string M() => "Hello from B"; } + """; + + File.WriteAllText(Path.Join(srcDir, "B.cs"), b); + + var expectedOutput = "Hello from B"; + + new DotnetCommand(Log, "run", "src/A.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + // Convert to a project. + new DotnetCommand(Log, "project", "convert", "src/A.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DirectoryInfo(testInstance.Path) + .Should().HaveSubtree(""" + src/ + src/A.cs + src/A/ + src/A/A.cs + src/A/A.csproj + src/A/B.cs + src/B.cs + """) + .And.HaveFileContent("src/A/A.cs", a) + .And.HaveFileContent("src/A/B.cs", b) + .And.HaveFileContentPattern("src/A/A.csproj", """ + + + + Exe + net10.0 + enable + enable + true + true + A-* + + + + + """); + + // Run the converted project. + new DotnetCommand(Log, "run") + .WithWorkingDirectory(Path.Join(testInstance.Path, "src/A")) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + } + + [Fact] + public void IncludeDirective_Transitive() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + Directory.CreateDirectory(Path.Join(testInstance.Path, "dir1/dir2")); + Directory.CreateDirectory(Path.Join(testInstance.Path, "dir3")); + + var a = """ + B.M(); + """; + + File.WriteAllText(Path.Join(testInstance.Path, "dir1/A.cs"), $""" + #!/usr/bin/env dotnet + #:include dir2/B.cs + {a} + """); + + var b = """ + static class B { public static void M() { C.M(); } } + """; + + File.WriteAllText(Path.Join(testInstance.Path, "dir1/dir2/B.cs"), $""" + #:include ../../dir3/$(P1).cs + #:property P1=C + {b} + """); + + var c = """ + static class C { public static void M() { D.M(); } } + """; + + File.WriteAllText(Path.Join(testInstance.Path, "dir3/C.cs"), $""" + #:include ../$(P1).cs + {c} + """); + + var d = """ + static class D + { + public static void M() + { + var asm = System.Reflection.Assembly.GetExecutingAssembly(); + using var stream = asm.GetManifestResourceStream($"{asm.GetName().Name}.Resources.resources")!; + using var reader = new System.Resources.ResourceReader(stream); + Console.WriteLine(reader.Cast().Single()); + } + } + """; + + File.WriteAllText(Path.Join(testInstance.Path, "C.cs"), $""" + #:include Resources.resx + {d} + """); + + File.WriteAllText(Path.Join(testInstance.Path, "Resources.resx"), s_resx); + + var expectedOutput = "[MyString, TestValue]"; + + new DotnetCommand(Log, "run", "A.cs") + .WithWorkingDirectory(Path.Join(testInstance.Path, "dir1")) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + // Convert to a project. + new DotnetCommand(Log, "project", "convert", "A.cs") + .WithWorkingDirectory(Path.Join(testInstance.Path, "dir1")) + .Execute() + .Should().Pass(); + + new DirectoryInfo(Path.Join(testInstance.Path, "dir1/A")) + .Should().HaveSubtree(""" + A.cs + A.csproj + C.cs + C_2.cs + Resources.resx + dir2/ + dir2/B.cs + """) + .And.HaveFileContent("A.cs", a) + .And.HaveFileContent("dir2/B.cs", b) + .And.HaveFileContent("C.cs", c) + .And.HaveFileContent("C_2.cs", d) + .And.HaveFileContent("Resources.resx", s_resx) + .And.HaveFileContentPattern("A.csproj", """ + + + + Exe + net10.0 + enable + enable + true + true + A-* + C + + + + + """); + + // Run the converted project. + new DotnetCommand(Log, "run") + .WithWorkingDirectory(Path.Join(testInstance.Path, "dir1/A")) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + } + + [Fact] + public void IncludeDirective_FileNotFound() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "A.cs"); + + File.WriteAllText(programPath, """ + #:include B.cs + Console.WriteLine("Hello"); + """); + + new DotnetCommand(Log, "run", "A.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(DirectiveError(programPath, 1, Resources.IncludedFileNotFound, Path.Join(testInstance.Path, "B.cs"))); + } + + /// + /// Combination of optimization and #:include directive. + /// + [Theory] + [InlineData("*")] + [InlineData("$(_Star)")] + [InlineData("Util?")] + public void IncludeDirective_UpToDate_Glob(string glob) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet + #:include {glob}.cs + #:property _Star=* + {s_programDependingOnUtil} + """); + + var utilPath = Path.Join(testInstance.Path, "Util1.cs"); + var utilCode = s_util; + File.WriteAllText(utilPath, utilCode); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var expectedOutput = "Hello, String from Util"; + + Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput); + + Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput); + + utilCode = utilCode.Replace("String from Util", "v2"); + File.WriteAllText(utilPath, utilCode); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello, v2"); + + utilCode = utilCode.Replace("v2", "v3"); + File.WriteAllText(utilPath, utilCode); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello, v3"); + + var util2Path = Path.Join(testInstance.Path, "Util2.cs"); + File.WriteAllText(util2Path, """ + using System.Runtime.CompilerServices; + + file class C + { + [ModuleInitializer] + internal static void Initialize() + { + Console.WriteLine("Hello from Util2"); + } + } + """); + + Build(testInstance, BuildLevel.All, expectedOutput: """ + Hello from Util2 + Hello, v3 + """); + } + + /// + /// Combination of optimization and #:include directive. + /// + [Fact] + public void IncludeDirective_UpToDate_NoGlob() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet + #:include Util.cs + {s_programDependingOnUtil} + """); + + var utilPath = Path.Join(testInstance.Path, "Util.cs"); + var utilCode = s_util; + File.WriteAllText(utilPath, utilCode); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var expectedOutput = "Hello, String from Util"; + + Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput); + + Build(testInstance, BuildLevel.None, expectedOutput: expectedOutput); + + utilCode = utilCode.Replace("String from Util", "v2"); + File.WriteAllText(utilPath, utilCode); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello, v2"); + + utilCode = utilCode.Replace("v2", "v3"); + File.WriteAllText(utilPath, utilCode); + + Build(testInstance, BuildLevel.All, expectedOutput: "Hello, v3"); + + var util2Path = Path.Join(testInstance.Path, "Util2.cs"); + File.WriteAllText(util2Path, """ + using System.Runtime.CompilerServices; + + file class C + { + [ModuleInitializer] + internal static void Initialize() + { + Console.WriteLine("Hello from Util2"); + } + } + """); + + Build(testInstance, BuildLevel.None, expectedOutput: "Hello, v3"); + + Build(testInstance, BuildLevel.All, args: ["--no-cache"], expectedOutput: "Hello, v3"); + } + + /// + /// Combination of test and #:include directive. + /// + [Fact] + public void IncludeDirective_UpToDate_ProjectReference() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libDir = Path.Join(testInstance.Path, "Lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + + + """); + + var libPath = Path.Join(libDir, "Lib.cs"); + var libCode = """ + namespace Lib; + public class LibClass + { + public static string GetMessage() => "Lib(v1)"; + } + """; + File.WriteAllText(libPath, libCode); + + var appDir = Path.Join(testInstance.Path, "App"); + Directory.CreateDirectory(appDir); + + var utilPath = Path.Join(appDir, "Util.cs"); + var utilCode = """ + #:project ../Lib + class UtilClass + { + public static string GetMessage() => "Util(v1) " + Lib.LibClass.GetMessage(); + } + """; + File.WriteAllText(utilPath, utilCode); + + var programPath = Path.Join(appDir, "Program.cs"); + var programCode = """ + #!/usr/bin/env dotnet + #:include Util.cs + Console.WriteLine("Program(v1) " + UtilClass.GetMessage()); + """; + File.WriteAllText(programPath, programCode); + + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + var expectedOutput = "Program(v1) Util(v1) Lib(v1)"; + + Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput, workDir: appDir); + + Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput, workDir: appDir); + + libCode = libCode.Replace("v1", "v2"); + File.WriteAllText(libPath, libCode); + + expectedOutput = "Program(v1) Util(v1) Lib(v2)"; + + Build(testInstance, BuildLevel.All, expectedOutput: expectedOutput, workDir: appDir); + } + + [Fact] + public void IncludeDirective_CustomMapping() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet + #:property FileBasedProgramsItemMapping=.json=Content + #:include *.cs + {s_programDependingOnUtil} + """); + + var utilPath = Path.Join(testInstance.Path, "Util.cs"); + File.WriteAllText(utilPath, s_util); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr($""" + {DirectiveError(programPath, 3, FileBasedProgramsResources.IncludeOrExcludeDirectiveUnknownFileType, "#:include", ".json")} + + {CliCommandStrings.RunCommandException} + """); + + File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet + #:property FileBasedProgramsItemMapping=.cs=Content + #:include *.cs + {s_programDependingOnUtil} + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + // error CS0103: The name 'Util' does not exist in the current context + .And.HaveStdOutContaining("error CS0103"); + + File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet + #:property FileBasedProgramsItemMapping=.cs=Compile + #:include *.cs + {s_programDependingOnUtil} + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, String from Util"); + } + + [Fact] + public void IncludeDirective_CustomMapping_ParseErrors() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, """ + #:property FileBasedProgramsItemMapping=x + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + // error CS5001: Program does not contain a static 'Main' method suitable for an entry point + .And.HaveStdOutContaining("error CS5001"); + + File.WriteAllText(programPath, """ + #:property FileBasedProgramsItemMapping=x + #:include *.* + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr($""" + {DirectiveError(programPath, 1, FileBasedProgramsResources.InvalidIncludeExcludeMappingEntry, "x")} + + {CliCommandStrings.RunCommandException} + """); + + File.WriteAllText(programPath, """ + #:property FileBasedProgramsItemMapping=.=X;y + #:include *.* + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr($""" + {DirectiveError(programPath, 1, FileBasedProgramsResources.InvalidIncludeExcludeMappingExtension, ".", ".=X")} + + {CliCommandStrings.RunCommandException} + """); + + File.WriteAllText(programPath, """ + #:property FileBasedProgramsItemMapping=.cs=;y + #:include *.* + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr($""" + {DirectiveError(programPath, 1, FileBasedProgramsResources.InvalidIncludeExcludeMappingItemType, "", ".cs=")} + + {CliCommandStrings.RunCommandException} + """); + + File.WriteAllText(programPath, """ + #:property FileBasedProgramsItemMapping=.x=X;y + #:include *.* + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErr($""" + {DirectiveError(programPath, 1, FileBasedProgramsResources.InvalidIncludeExcludeMappingEntry, "y")} + + {CliCommandStrings.RunCommandException} + """); + } + + /// + /// Demonstrates that consumers (e.g., IDE) can use the API to create an approximate virtual project without needing to know the full mapping. + /// + [Fact] + public void IncludeDirective_CustomMapping_Api() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + + var code = """ + #:include B.cs + #:include C.proto + Console.WriteLine(); + """; + + var builder = new VirtualProjectBuilder( + entryPointFileFullPath: programPath, + targetFramework: VirtualProjectBuildingCommand.TargetFramework, + sourceText: SourceText.From(code, Encoding.UTF8)); + + var directives = FileLevelDirectiveHelpers.FindDirectives( + builder.EntryPointSourceFile, + reportAllErrors: true, + VirtualProjectBuildingCommand.ThrowingReporter); + + ImmutableArray<(string Extension, string ItemType)> mapping = [(".cs", "Compile")]; + + var evaluatedBuilder = ImmutableArray.CreateBuilder(directives.Length); + + foreach (var directive in directives) + { + if (directive is CSharpDirective.IncludeOrExclude includeOrExcludeDirective) + { + var evaluated = includeOrExcludeDirective.WithDeterminedItemType(ErrorReporters.IgnoringReporter, mapping); + evaluatedBuilder.Add(evaluated); + } + else + { + evaluatedBuilder.Add(directive); + } + } + + var evaluatedDirectives = evaluatedBuilder.DrainToImmutable(); + + var projectWriter = new System.IO.StringWriter(); + VirtualProjectBuilder.WriteProjectFile( + projectWriter, + evaluatedDirectives, + VirtualProjectBuilder.GetDefaultProperties(VirtualProjectBuildingCommand.TargetFrameworkVersion), + isVirtualProject: true, + entryPointFilePath: programPath, + artifactsPath: builder.ArtifactsPath); + + var actualProject = projectWriter.ToString(); + + Log.WriteLine(actualProject); + + actualProject.Should().Contain(""""""); + + actualProject.Should().NotContain(".proto"); + } + + [Fact] + public void IncludeDirective_DefaultMapping_InSync() + { + var parsed = CSharpDirective.IncludeOrExclude.ParseMapping(CSharpDirective.IncludeOrExclude.DefaultMappingString, + sourceFile: default, + VirtualProjectBuildingCommand.ThrowingReporter); + parsed.Should().BeEquivalentTo(CSharpDirective.IncludeOrExclude.DefaultMapping); + } + + [Theory] // https://github.com/dotnet/aspnetcore/issues/63440 + [InlineData(true, null)] + [InlineData(false, null)] + [InlineData(true, "test-id")] + [InlineData(false, "test-id")] + public void UserSecrets(bool useIdArg, string? userSecretsId) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + string code = $""" + #:package Microsoft.Extensions.Configuration.UserSecrets@{CSharpCompilerCommand.RuntimeVersion} + {(userSecretsId is null ? "" : $"#:property UserSecretsId={userSecretsId}")} + + using Microsoft.Extensions.Configuration; + + IConfigurationRoot config = new ConfigurationBuilder() + .AddUserSecrets() + .Build(); + + Console.WriteLine("v1"); + Console.WriteLine(config.GetDebugView()); + """; + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + File.WriteAllText(programPath, code); + + // Remove artifacts from possible previous runs of this test. + var artifactsDir = VirtualProjectBuilder.GetArtifactsPath(programPath); + if (Directory.Exists(artifactsDir)) Directory.Delete(artifactsDir, recursive: true); + + if (useIdArg) + { + if (userSecretsId == null) + { + var result = new DotnetCommand(Log, "build", "-getProperty:UserSecretsId", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute(); + result.Should().Pass(); + userSecretsId = result.StdOut!.Trim(); + } + + new DotnetCommand(Log, "user-secrets", "set", "MySecret", "MyValue", "--id", userSecretsId) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + } + else + { + new DotnetCommand(Log, "user-secrets", "set", "MySecret", "MyValue", "--file", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + } + + Build(testInstance, BuildLevel.All, expectedOutput: """ + v1 + MySecret=MyValue (JsonConfigurationProvider for 'secrets.json' (Optional)) + """); + + code = code.Replace("v1", "v2"); + File.WriteAllText(programPath, code); + + Build(testInstance, BuildLevel.Csc, expectedOutput: """ + v2 + MySecret=MyValue (JsonConfigurationProvider for 'secrets.json' (Optional)) + """); + } +} diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_General.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_General.cs new file mode 100644 index 000000000000..8ed39476b63e --- /dev/null +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_General.cs @@ -0,0 +1,1180 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.DotNet.Cli.Commands; +using Microsoft.DotNet.FileBasedPrograms; + +namespace Microsoft.DotNet.Cli.Run.Tests; + +public sealed class RunFileTests_General(ITestOutputHelper log) : RunFileTestBase(log) +{ + + /// + /// dotnet run file.cs succeeds without a project file. + /// + [Theory] + [InlineData(null, false)] // will be replaced with an absolute path + [InlineData("Program.cs", false)] + [InlineData("./Program.cs", false)] + [InlineData("Program.CS", true)] + public void FilePath(string? path, bool differentCasing) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var programPath = Path.Join(testInstance.Path, "Program.cs"); + + File.WriteAllText(programPath, s_program); + + path ??= programPath; + + var result = new DotnetCommand(Log, "run", path) + .WithWorkingDirectory(testInstance.Path) + .Execute(); + + if (!differentCasing || HasCaseInsensitiveFileSystem) + { + result.Should().Pass() + .And.HaveStdOut("Hello from Program"); + } + else + { + result.Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandExceptionNoProjects, + testInstance.Path, + "--project")); + } + } + + /// + /// dotnet file.cs is equivalent to dotnet run file.cs. + /// + [Fact] + public void FilePath_WithoutRun() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + Hello from Program + """); + + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #:property Configuration=Release + {s_program} + """); + + string expectedOutput = """ + Hello from Program + Release config + """; + + new DotnetCommand(Log, "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + new DotnetCommand(Log, "./Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + new DotnetCommand(Log, $".{Path.DirectorySeparatorChar}Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + new DotnetCommand(Log, Path.Join(testInstance.Path, "Program.cs")) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(expectedOutput); + + new DotnetCommand(Log, "Program.cs", "-c", "Debug") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + Hello from Program + """); + + new DotnetCommand(Log, "Program.cs", "arg1", "arg2") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:arg1;arg2 + Hello from Program + Release config + """); + + new DotnetCommand(Log, "Program.cs", "build") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:build + Hello from Program + Release config + """); + + new DotnetCommand(Log, "Program.cs", "arg1", "arg2") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:arg1;arg2 + Hello from Program + Release config + """); + + // https://github.com/dotnet/sdk/issues/52108 + new DotnetCommand(Log, "Program.cs", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:Program.cs + Hello from Program + Release config + """); + } + + /// + /// Casing of the argument is used for the output binary name. + /// + [Fact] + public void FilePath_DifferentCasing() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + var result = new DotnetCommand(Log, "run", "program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute(); + + if (HasCaseInsensitiveFileSystem) + { + result.Should().Pass() + .And.HaveStdOut("Hello from program"); + } + else + { + result.Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandExceptionNoProjects, + testInstance.Path, + "--project")); + } + } + + /// + /// dotnet run folder/file.cs succeeds without a project file. + /// + [Fact] + public void FilePath_OutsideWorkDir() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + var dirName = Path.GetFileName(testInstance.Path); + + new DotnetCommand(Log, "run", $"{dirName}/Program.cs") + .WithWorkingDirectory(Path.GetDirectoryName(testInstance.Path)!) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + } + + /// + /// dotnet run --project file.cs fails. + /// + [Fact] + public void FilePath_AsProjectArgument() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "run", "--project", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(CliCommandStrings.RunCommandException); + } + + /// + /// Even if there is a file-based app ./build, dotnet build should not execute that. + /// + [Theory] + // error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file. + [InlineData("build", "MSB1003", false)] + // dotnet watch: Could not find a MSBuild project file in '...'. Specify which project to use with the --project option. + [InlineData("watch", "--project", true)] + public void Precedence_BuiltInCommand(string cmd, string error, bool errorInStdErr) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, cmd), """ + #!/usr/bin/env dotnet + Console.WriteLine("hello 1"); + """); + File.WriteAllText(Path.Join(testInstance.Path, $"dotnet-{cmd}"), """ + #!/usr/bin/env dotnet + Console.WriteLine("hello 2"); + """); + + // dotnet build -> built-in command + var failure = new DotnetCommand(Log, cmd) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail(); + + if (errorInStdErr) + { + failure.And.HaveStdErrContaining(error); + } + else + { + failure.And.HaveStdOutContaining(error); + } + + // dotnet ./build -> file-based app + new DotnetCommand(Log, $"./{cmd}") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("hello 1"); + + // dotnet run build -> file-based app + new DotnetCommand(Log, "run", cmd) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("hello 1"); + } + + /// + /// Even if there is a file-based app ./test.dll, dotnet test.dll should not execute that. + /// + [Theory] + [InlineData("test.dll")] + [InlineData("./test.dll")] + public void Precedence_Dll(string arg) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "test.dll"), """ + #!/usr/bin/env dotnet + Console.WriteLine("hello world"); + """); + + // dotnet [./]test.dll -> exec the dll + new DotnetCommand(Log, arg) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + // A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in ... + .And.HaveStdErrContaining("hostpolicy"); + + // dotnet run [./]test.dll -> file-based app + new DotnetCommand(Log, "run", arg) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("hello world"); + } + + // https://github.com/dotnet/sdk/issues/49665 + // Failed to load /private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib, error: dlopen(/private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib, 0x0001): tried: '/private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib' (no such file), '/private/tmp/helix/working/B3F609DC/p/d/shared/Microsoft.NETCore.App/9.0.0/libhostpolicy.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')) + [PlatformSpecificFact(TestPlatforms.Any & ~TestPlatforms.OSX)] + public void Precedence_NuGetTool() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "complog"), """ + #!/usr/bin/env dotnet + Console.WriteLine("hello world"); + """); + + new DotnetCommand(Log, "new", "tool-manifest") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + new DotnetCommand(Log, "tool", "install", "complog@0.7.0") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass(); + + // dotnet complog -> NuGet tool + new DotnetCommand(Log, "complog") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining("complog"); + + // dotnet ./complog -> file-based app + new DotnetCommand(Log, "./complog") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("hello world"); + + // dotnet run complog -> file-based app + new DotnetCommand(Log, "run", "complog") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("hello world"); + } + + /// + /// dotnet run - reads the C# code from stdin. + /// + [Fact] + public void ReadFromStdin() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + new DotnetCommand(Log, "run", "-") + .WithWorkingDirectory(testInstance.Path) + .WithStandardInput(""" + Console.WriteLine("Hello from stdin"); + Console.WriteLine("Read: " + (Console.ReadLine() ?? "null")); + Console.WriteLine("Working directory: " + Environment.CurrentDirectory); + """) + .Execute() + .Should().Pass() + .And.HaveStdOut($""" + Hello from stdin + Read: null + Working directory: {testInstance.Path} + """); + } + + /// + /// Directory.Build.props doesn't have any effect on dotnet run -. + /// + [Fact] + public void ReadFromStdin_BuildProps() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + disable + + + """); + + new DotnetCommand(Log, "run", "-") + .WithWorkingDirectory(testInstance.Path) + .WithStandardInput(""" + Console.WriteLine("Hello from stdin"); + """) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from stdin"); + + new DotnetCommand(Log, "run", "-") + .WithWorkingDirectory(testInstance.Path) + .WithStandardInput(""" + #:property ImplicitUsings=disable + Console.WriteLine("Hello from stdin"); + """) + .Execute() + .Should().Fail() + // error CS0103: The name 'Console' does not exist in the current context + .And.HaveStdOutContaining("error CS0103"); + } + + /// + /// Directory.Build.props doesn't have any effect on dotnet run -. + /// + [Fact] + public void ReadFromStdin_ProjectReference() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libDir = Path.Join(testInstance.Path, "lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "Lib.csproj"), $""" + + + {ToolsetInfo.CurrentTargetFramework} + + + """); + + File.WriteAllText(Path.Join(libDir, "Lib.cs"), """ + namespace Lib; + public class LibClass + { + public static string GetMessage() => "Hello from Lib"; + } + """); + + var appDir = Path.Join(testInstance.Path, "app"); + Directory.CreateDirectory(appDir); + + new DotnetCommand(Log, "run", "-") + .WithWorkingDirectory(appDir) + .WithStandardInput($""" + #:project $(MSBuildStartupDirectory)/../lib + Console.WriteLine(Lib.LibClass.GetMessage()); + """) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Lib"); + + // Relative paths are resolved from the isolated temp directory, hence they don't work. + + var errorParts = DirectiveError("app.cs", 1, FileBasedProgramsResources.InvalidProjectDirective, + string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, "{}")).Split("{}"); + errorParts.Should().HaveCount(2); + + new DotnetCommand(Log, "run", "-") + .WithWorkingDirectory(appDir) + .WithStandardInput($""" + #:project ../lib + Console.WriteLine(Lib.LibClass.GetMessage()); + """) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(errorParts[0]) + .And.HaveStdErrContaining(errorParts[1]); + } + + /// + /// dotnet run - with #:ref uses $(MSBuildStartupDirectory) to resolve paths. + /// Relative paths don't work from stdin since the file is in an isolated temp directory. + /// Analogous to . + /// + [Fact] + public void ReadFromStdin_RefDirective() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + var libDir = Path.Join(testInstance.Path, "lib"); + Directory.CreateDirectory(libDir); + + File.WriteAllText(Path.Join(libDir, "mylib.cs"), """ + #:property OutputType=Library + namespace MyLib; + public static class Greeter + { + public static string Greet() => "Hello from lib!"; + } + """); + + var appDir = Path.Join(testInstance.Path, "app"); + Directory.CreateDirectory(appDir); + + new DotnetCommand(Log, "run", "-") + .WithWorkingDirectory(appDir) + .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") + .WithStandardInput(""" + #:ref $(MSBuildStartupDirectory)/../lib/mylib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from lib!"); + + // Relative paths are resolved from the isolated temp directory, hence they don't work. + + var errorParts = DirectiveError("app.cs", 1, FileBasedProgramsResources.InvalidRefDirective, + string.Format(FileBasedProgramsResources.CouldNotFindRefFile, "{}")).Split("{}"); + errorParts.Should().HaveCount(2); + + new DotnetCommand(Log, "run", "-") + .WithWorkingDirectory(appDir) + .WithEnvironmentVariable(CSharpDirective.Ref.ExperimentalFileBasedProgramEnableRefDirective, "true") + .WithStandardInput(""" + #:ref ../lib/mylib.cs + Console.WriteLine(MyLib.Greeter.Greet()); + """) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(errorParts[0]) + .And.HaveStdErrContaining(errorParts[1]); + } + + [Fact] + public void ReadFromStdin_NoBuild() + { + new DotnetCommand(Log, "run", "-", "--no-build") + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format(CliCommandStrings.InvalidOptionForStdin, "--no-build")); + } + + [Fact] + public void ReadFromStdin_LaunchProfile() + { + new DotnetCommand(Log, "run", "-", "--launch-profile=test") + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format(CliCommandStrings.InvalidOptionForStdin, "--launch-profile")); + } + + /// + /// dotnet run -- - should NOT read the C# file from stdin, + /// the hyphen should be considred an app argument instead since it's after --. + /// + [Fact] + public void ReadFromStdin_AfterDoubleDash() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + new DotnetCommand(Log, "run", "--", "-") + .WithWorkingDirectory(testInstance.Path) + .WithStandardInput("""Console.WriteLine("stdin code");""") + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format(CliCommandStrings.RunCommandExceptionNoProjects, testInstance.Path, "--project")); + } + + /// + /// dotnet run folder without a project file is not supported. + /// + [Theory] + [InlineData(null)] // will be replaced with an absolute path + [InlineData(".")] + [InlineData("../MSBuildTestApp")] + [InlineData("../MSBuildTestApp/")] + public void FolderPath(string? path) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + path ??= testInstance.Path; + + new DotnetCommand(Log, "run", path) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandExceptionNoProjects, + testInstance.Path, + "--project")); + } + + /// + /// dotnet run app.csproj fails if app.csproj does not exist. + /// + [Fact] + public void ProjectPath_DoesNotExist() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, "run", "./App.csproj") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandExceptionNoProjects, + testInstance.Path, + "--project")); + } + + /// + /// dotnet run app.csproj where app.csproj exists + /// runs the project and passes 'app.csproj' as an argument. + /// + [Fact] + public void ProjectPath_Exists() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "./App.csproj") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdErr() + .And.HaveStdOut(""" + echo args:./App.csproj + Hello from App + """); + } + + [Fact] + public void ProjectInCurrentDirectory_NoRunVerb() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + Directory.CreateDirectory(Path.Join(testInstance.Path, "file")); + File.WriteAllText(Path.Join(testInstance.Path, "file", "Program.cs"), s_program); + Directory.CreateDirectory(Path.Join(testInstance.Path, "proj")); + File.WriteAllText(Path.Join(testInstance.Path, "proj", "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "../file/Program.cs") + .WithWorkingDirectory(Path.Join(testInstance.Path, "proj")) + .Execute() + .Should().Pass() + .And.NotHaveStdErr() + .And.HaveStdOut("Hello from Program"); + } + + [Fact] + public void ProjectInCurrentDirectory_FileOption() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + Directory.CreateDirectory(Path.Join(testInstance.Path, "file")); + File.WriteAllText(Path.Join(testInstance.Path, "file", "Program.cs"), s_program); + Directory.CreateDirectory(Path.Join(testInstance.Path, "proj")); + File.WriteAllText(Path.Join(testInstance.Path, "proj", "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "--file", "../file/Program.cs") + .WithWorkingDirectory(Path.Join(testInstance.Path, "proj")) + .Execute() + .Should().Pass() + .And.NotHaveStdErr() + .And.HaveStdOut("Hello from Program"); + } + + /// + /// dotnet run --project App.csproj Program.cs does not warn + /// because --project was explicitly specified. + /// + [Fact] + public void ProjectInCurrentDirectory_ProjectOption_NoWarning() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "--project", "App.csproj", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdErr() + .And.HaveStdOut(""" + echo args:Program.cs + Hello from App + """); + } + + /// + /// dotnet run file.cs in a directory with a project file warns + /// because file.cs is passed as an application argument to the project instead of running as a file-based program. + /// + [Fact] + public void ProjectInCurrentDirectory_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:Program.cs + Hello from App + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, + "Program.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run nonexistent.cs in a directory with a project file warns + /// even though the file does not exist, because the .cs extension suggests it was intended as a file-based program. + /// + [Fact] + public void ProjectInCurrentDirectory_NonExistentCsFile_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "nonexistent.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:nonexistent.cs + Hello from App + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningCsFileArgumentPassedToProject, + "nonexistent.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run -- file.cs in a directory with a project file does not warn + /// because -- signals that the arguments are intentional. + /// + [Fact] + public void ProjectInCurrentDirectory_DoubleDash_NoWarning() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "--", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:Program.cs + Hello from App + """) + .And.NotHaveStdErr(); + } + + /// + /// dotnet run file.cs -- other still warns because file.cs appears before --. + /// + [Fact] + public void ProjectInCurrentDirectory_DoubleDashAfterFile_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "Program.cs", "--", "otherArg") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:Program.cs;otherArg + Hello from App + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, + "Program.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run someArg file.cs in a directory with a project warns + /// when an unrecognized argument prevents file.cs from being treated as a file-based program entry point. + /// + [Fact] + public void ProjectInCurrentDirectory_UnrecognizedArg_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "someArg", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:someArg;Program.cs + Hello from App + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, + "Program.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run -c Release Program.cs in a directory with a project warns because + /// known options like -c don't suppress the warning; only --project, --file, or -- do. + /// + [Fact] + public void ProjectInCurrentDirectory_KnownOption_Warns() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "-c", "Release", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:Program.cs + Hello from App + Release config + """) + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandWarningFileArgumentPassedToProject, + "Program.cs", + Path.Join(testInstance.Path, "App.csproj"))); + } + + /// + /// dotnet run someArg -- file.cs does not warn because the .cs file is after --. + /// + [Fact] + public void ProjectInCurrentDirectory_UnrecognizedArg_DoubleDash_NoWarning() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "someArg", "--", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + echo args:someArg;Program.cs + Hello from App + """) + .And.NotHaveStdErr(); + } + + /// + /// dotnet build someArg Program.cs warns because 'Program.cs' is a valid file-based entry point + /// but additional positional arguments cause it to fall back to MSBuild. + /// + [Theory] + [InlineData("build", "someArg", "Program.cs")] + [InlineData("clean", "someArg", "Program.cs")] + [InlineData("publish", "someArg", "Program.cs")] + [InlineData("build", "Program.cs", "-consoleLoggerParameters:NoSummary")] + public void ExtraArgWithFileEntryPoint_Warns(string command, string arg1, string arg2) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, command, arg1, arg2) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.WarningFileArgumentPassedToMSBuild, + "Program.cs", + command)); + } + + /// + /// dotnet build nonexistent.cs warns because the .cs extension suggests it was intended as a file-based program. + /// + [Theory] + [InlineData("build")] + [InlineData("clean")] + [InlineData("publish")] + public void NonExistentCsFile_Warns(string command) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + new DotnetCommand(Log, command, "nonexistent.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.WarningCsFileArgumentPassedToMSBuild, + "nonexistent.cs", + command)); + } + + /// + /// dotnet build --no-incremental Program.cs is handled as file-based (known option + single positional arg) and does not warn. + /// + [Theory] + [InlineData("Program.cs")] + [InlineData("--no-incremental", "Program.cs")] + public void SingleFileEntryPoint_NoWarning(params string[] extraArgs) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + + new DotnetCommand(Log, ["build", .. extraArgs]) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.NotHaveStdErr(); + } + + /// + /// When a file is not a .cs file, we probe the first characters of the file for #!, and + /// execute as a single file program if we find them. + /// + [Theory] + [InlineData("Program")] + [InlineData("Program.csx")] + [InlineData("Program.vb")] + public void NonCsFileExtensionWithShebang(string fileName) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, fileName), """ + #!/usr/bin/env dotnet + Console.WriteLine("hello world"); + """); + + new DotnetCommand(Log, "run", fileName) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOutContaining("hello world"); + } + + /// + /// When a file is not a .cs file, we probe the first characters of the file for #!, and + /// fall back to normal dotnet run behavior if we don't find them. + /// + [Theory] + [InlineData("Program")] + [InlineData("Program.csx")] + [InlineData("Program.vb")] + public void NonCsFileExtensionWithNoShebang(string fileName) + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, fileName), s_program); + + new DotnetCommand(Log, "run", fileName) + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandExceptionNoProjects, + testInstance.Path, + "--project")); + } + + [Fact] + public void MultipleEntryPoints() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "Program2.cs"), s_program); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + + new DotnetCommand(Log, "run", "Program2.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program2"); + } + + /// + /// When the entry-point file does not exist, fallback to normal dotnet run behavior. + /// + [Fact] + public void NoCode() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandExceptionNoProjects, + testInstance.Path, + "--project")); + } + + /// + /// Cannot run a non-entry-point file. + /// + [Fact] + public void ClassLibrary_EntryPointFileExists() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); + + new DotnetCommand(Log, "run", "Util.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error CS5001:"); // Program does not contain a static 'Main' method suitable for an entry point + } + + /// + /// When the entry-point file does not exist, fallback to normal dotnet run behavior. + /// + [Fact] + public void ClassLibrary_EntryPointFileDoesNotExist() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); + + new DotnetCommand(Log, "run", "NonExistentFile.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandExceptionNoProjects, + testInstance.Path, + "--project")); + } + + /// + /// Other files in the folder are not part of the compilation. + /// See . + /// + [Fact] + public void MultipleFiles_RunEntryPoint() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_programDependingOnUtil); + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error CS0103"); // The name 'Util' does not exist in the current context + + // This can be overridden. + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet + #:property EnableDefaultCompileItems=true + {s_programDependingOnUtil} + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, String from Util"); + } + + /// + /// Setting EnableDefaultCompileItems=true via Directory.Build.props should not cause CS2002 warning. + /// See . + /// + [Fact] + public void MultipleFiles_EnableDefaultCompileItemsViaDirectoryBuildProps() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet + {s_programDependingOnUtil} + """); + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ + + + true + + + """); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello, String from Util"); + } + + /// + /// Directives in other files are considered even if those files are included via manual MSBuild rather than #:include. + /// + [Fact] + public void MultipleFiles_DirectivesInOtherFiles() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "A.cs"), """ + #!/usr/bin/env dotnet + Console.WriteLine(B.M()); + #if !DEBUG + Console.WriteLine("Release config"); + #endif + """); + File.WriteAllText(Path.Join(testInstance.Path, "B.cs"), """ + #:property Configuration=Release + public static class B + { + public static string M() => "String from Util"; + } + """); + File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), $""" + + + + + + """); + + new DotnetCommand(Log, "run", "A.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut(""" + String from Util + Release config + """); + } + + /// + /// dotnet run util.cs fails if util.cs is not the entry-point. + /// + [Fact] + public void MultipleFiles_RunLibraryFile() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_programDependingOnUtil); + File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); + + new DotnetCommand(Log, "run", "Util.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Fail() + .And.HaveStdOutContaining("error CS5001:"); // Program does not contain a static 'Main' method suitable for an entry point + } + + /// + /// If there are nested project files like + /// + /// app/file.cs + /// app/nested/x.csproj + /// app/nested/another.cs + /// + /// executing dotnet run app/file.cs will include the nested .cs file in the compilation. + /// Hence we could consider reporting an error in this situation. + /// However, the same problem exists for normal builds with explicit project files + /// and usually the build fails because there are multiple entry points or other clashes. + /// + [Fact] + public void NestedProjectFiles() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + Directory.CreateDirectory(Path.Join(testInstance.Path, "nested")); + File.WriteAllText(Path.Join(testInstance.Path, "nested", "App.csproj"), s_consoleProject); + + new DotnetCommand(Log, "run", "Program.cs") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello from Program"); + } + + /// + /// dotnet run folder/app.csproj -> the argument is not recognized as an entry-point file + /// (it does not have .cs file extension), so this fallbacks to normal dotnet run behavior. + /// + [Fact] + public void RunNestedProjectFile() + { + var testInstance = _testAssetsManager.CreateTestDirectory(); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_program); + File.WriteAllText(Path.Join(testInstance.Path, "App.csproj"), s_consoleProject); + + var dirName = Path.GetFileName(testInstance.Path); + + var workDir = Path.GetDirectoryName(testInstance.Path)!; + + new DotnetCommand(Log, "run", $"{dirName}/App.csproj") + .WithWorkingDirectory(workDir) + .Execute() + .Should().Fail() + .And.HaveStdErrContaining(string.Format( + CliCommandStrings.RunCommandExceptionNoProjects, + workDir, + "--project")); + } +} From f23cc8af89ba0ee92c4ace0c88282724846db0d9 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Wed, 22 Apr 2026 14:33:31 +0200 Subject: [PATCH 207/230] Add RunFileTestFixture to RunFileTestBase matching main branch Adds the fixture class that: - Copies NuGet.config to the runfile base directory - Ensures a simple app runs fully with MSBuild before other tests so packages like ILLink.Tasks are restored and csc-only optimization works Adapted for xUnit v2 (Task instead of ValueTask). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../CommandTests/Run/RunFileTestBase.cs | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs index 71d0e567721c..92748afb5994 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTestBase.cs @@ -5,13 +5,34 @@ using Microsoft.Build.Logging.StructuredLogger; using Microsoft.DotNet.Cli.Commands; using Microsoft.DotNet.Cli.Commands.Run; -using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.FileBasedPrograms; using Microsoft.DotNet.ProjectTools; namespace Microsoft.DotNet.Cli.Run.Tests; -public abstract class RunFileTestBase(ITestOutputHelper log) : SdkTest(log) +public sealed class RunFileTestFixture(IMessageSink sink) : IAsyncLifetime +{ + public System.Threading.Tasks.Task InitializeAsync() + { + RunFileTestBase.CopyNuGetConfigToRunfileDirectory(); + + // Ensure a simple app runs fully with MSBuild before running other csc-only tests + // so we have packages like ILLink.Tasks restored and csc-only optimization can kick in. + new DotnetCommand(new SharedTestOutputHelper(sink), "run", "-") + .WithStandardInput(""" + Console.WriteLine("Hello"); + """) + .Execute() + .Should().Pass() + .And.HaveStdOut("Hello"); + + return System.Threading.Tasks.Task.CompletedTask; + } + + public System.Threading.Tasks.Task DisposeAsync() => System.Threading.Tasks.Task.CompletedTask; +} + +public abstract class RunFileTestBase(ITestOutputHelper log) : SdkTest(log), IClassFixture { internal static string s_includeExcludeDefaultKnownExtensions => field ??= string.Join(", ", CSharpDirective.IncludeOrExclude.DefaultMapping.Select(static e => e.Extension)); @@ -134,6 +155,20 @@ private static string PrepareOutOfTreeBaseDirectory() return outOfTreeBaseDirectory; } + /// + /// Copies NuGet.config to the runfile base directory so virtual projects created by + /// dotnet run - (stdin) can resolve packages from test feeds. The virtual project + /// is created under this directory, and NuGet walks up from the project location to + /// find config files. + /// + internal static void CopyNuGetConfigToRunfileDirectory() + { + var sourceNuGetConfig = Path.Join(SdkTestContext.Current.TestExecutionDirectory, "NuGet.config"); + var runfileDir = VirtualProjectBuilder.GetTempSubdirectory(); + Directory.CreateDirectory(runfileDir); + File.Copy(sourceNuGetConfig, Path.Join(runfileDir, "NuGet.config"), overwrite: true); + } + internal static string DirectiveError(string path, int line, string messageFormat, params ReadOnlySpan args) { return $"{path}({line}): {FileBasedProgramsResources.DirectiveError}: {string.Format(messageFormat, args)}"; From 19da28b2679f9b603756090d7aa2c62a6e77e81e Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Wed, 22 Apr 2026 15:21:12 +0200 Subject: [PATCH 208/230] Fix Pack tests: set NUGET_PACKAGES to avoid cache interference Port fix from main branch - the tool exec commands in Pack and Pack_CustomPath tests need an isolated NUGET_PACKAGES directory to avoid picking up cached packages from other test runs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../dotnet.Tests/CommandTests/Run/RunFileTests_BuildCommands.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildCommands.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildCommands.cs index 2e4d17f9d313..3f7b981df166 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildCommands.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildCommands.cs @@ -675,6 +675,7 @@ public void Pack() // Run the packed tool. new DotnetCommand(Log, "tool", "exec", "MyFileBasedTool", "--yes", "--add-source", packageDir.FullName) + .WithEnvironmentVariable("NUGET_PACKAGES", Path.Join(testInstance.Path, "packages")) .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Pass() @@ -718,6 +719,7 @@ public void Pack_CustomPath() // Run the packed tool. new DotnetCommand(Log, "tool", "exec", "MyFileBasedTool", "--yes", "--add-source", outputDir) + .WithEnvironmentVariable("NUGET_PACKAGES", Path.Join(testInstance.Path, "packages")) .WithWorkingDirectory(testInstance.Path) .Execute() .Should().Pass() From fc674501014496155c3a8b48cea653664d4c4de5 Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Wed, 22 Apr 2026 11:55:19 -0500 Subject: [PATCH 209/230] Auto-close stale Known Build Error issues with zero monthly hits (#54017) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/workflows/stale.yml | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 62de55321f6f..c95a3eb56dc6 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -3,6 +3,11 @@ on: schedule: - cron: '19 4,16 * * *' # Twice daily at 19 minutes after the hour (random/uncommon time) +env: + KBE_LABEL: 'Known Build Error' + STALE_LABEL: 'stale' + KEEP_OPEN_LABEL: 'keep-open' + permissions: actions: write # For managing the operation state cache issues: write @@ -23,4 +28,66 @@ jobs: days-before-issue-close: 30 days-before-pr-stale: 180 # 6 months days-before-pr-close: 7 + exempt-issue-labels: ${{ env.KBE_LABEL }} operations-per-run: 4000 + + # Known Build Error issues with 0 hits for a month get labeled Stale, + # then actions/stale closes them after 7 days. + stale-known-build-errors: + if: github.repository_owner == 'dotnet' # Do not run on forks + + runs-on: ubuntu-latest + steps: + # Step 1: Label/unlabel based on hit counts + - uses: actions/github-script@v7 + with: + script: | + const issues = await github.paginate( + github.rest.issues.listForRepo, + { owner: context.repo.owner, repo: context.repo.repo, + labels: process.env.KBE_LABEL, state: 'open', per_page: 100 }); + + for (const issue of issues) { + if (issue.pull_request) continue; + if (issue.labels.some(l => l.name === process.env.KEEP_OPEN_LABEL)) continue; + + // Parse the hit count summary table from the issue body. + // Format: |24-Hour Hit Count|7-Day Hit Count|1-Month Count| + // |---|---|---| + // |N|N|N| + const match = issue.body?.match( + /\|24-Hour Hit Count\|.*\n\|[-| ]+\n\|(\d+)\|(\d+)\|(\d+)\|/); + if (!match) continue; + const monthCount = parseInt(match[3], 10); + + const hasStale = issue.labels.some(l => l.name === process.env.STALE_LABEL); + + if (monthCount === 0 && !hasStale) { + // Zero hits for a month: mark as stale + await github.rest.issues.addLabels({ + ...context.repo, issue_number: issue.number, + labels: [process.env.STALE_LABEL] }); + await github.rest.issues.createComment({ + ...context.repo, issue_number: issue.number, + body: 'This Known Build Error has had **0 hits in the past month** and has been labeled `stale`. ' + + 'It will be auto-closed in 7 days if the hit count remains at 0. ' + + 'Add the `' + process.env.KEEP_OPEN_LABEL + '` label to prevent auto-closure.' }); + } else if (monthCount > 0 && hasStale) { + // Hits resumed: remove the stale label + await github.rest.issues.removeLabel({ + ...context.repo, issue_number: issue.number, + name: process.env.STALE_LABEL }).catch(() => {}); + } + } + + # Step 2: Close KBE issues that have been Stale for 7+ days + - uses: actions/stale@v9 + with: + only-labels: ${{ env.KBE_LABEL }} + stale-issue-label: ${{ env.STALE_LABEL }} + close-issue-message: 'Closed automatically — this Known Build Error has had 0 hits for over a month.' + days-before-issue-stale: -1 # Don't auto-stale; step 1 handles that + days-before-issue-close: 7 + days-before-pr-stale: -1 + days-before-pr-close: -1 + operations-per-run: 100 From 5f7e0728d465837d82566573dbf1f74df7553bc0 Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Wed, 22 Apr 2026 12:02:18 -0500 Subject: [PATCH 210/230] Tighten stale issue and PR thresholds (#54043) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/workflows/stale.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index c95a3eb56dc6..35ae30c4a8ab 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -22,11 +22,11 @@ jobs: - uses: actions/stale@v9 # https://github.com/actions/stale/blob/v9/README.md with: ascending: true # Process the oldest issues first - stale-issue-message: "Due to lack of recent activity, this issue has been labeled as 'Stale'. It will be closed if no further activity occurs within 30 more days. Any new comment will remove the label." + stale-issue-message: "Due to lack of recent activity, this issue has been labeled as 'Stale'. It will be closed if no further activity occurs within 14 more days. Any new comment will remove the label." stale-pr-message: "Due to lack of recent activity, this PR has been labeled as 'Stale'. It will be closed if no further activity occurs within 7 more days. Any new comment will remove the label." - days-before-issue-stale: 1827 # ~5 years - days-before-issue-close: 30 - days-before-pr-stale: 180 # 6 months + days-before-issue-stale: 1644 # ~4.5 years + days-before-issue-close: 14 + days-before-pr-stale: 120 # ~4 months days-before-pr-close: 7 exempt-issue-labels: ${{ env.KBE_LABEL }} operations-per-run: 4000 From 8a2fa1c9c4fdf5ae72ef2f8202c51e7250a056ef Mon Sep 17 00:00:00 2001 From: Jeremy Kuhne Date: Wed, 22 Apr 2026 10:36:34 -0700 Subject: [PATCH 211/230] Add NativeAOT entry point for the dotnet CLI (#54002) Introduce a three-layer AOT architecture to enable near-instant startup for common CLI commands while preserving full managed CLI functionality: dn.exe (src/Cli/dn): NativeAOT host that resolves DOTNET_ROOT and hostfxr, marshals args, and calls into dotnet-aot via P/Invoke. Includes dn-native-debug.vcxproj for native debugging in VS. dotnet-aot.dll (src/Cli/dotnet-aot): NativeAOT shared library that tries an AOT-compiled parser for simple commands (--version, --info), then falls back to hosting the full managed CLI via hostfxr. dotnet.dll (src/Cli/dotnet): Existing managed CLI, wrapped with #if CLI_AOT conditional compilation to share source files with the AOT build while keeping full functionality in the managed path. Supporting changes: Add hostfxr interop APIs to Microsoft.DotNet.NativeWrapper (init, run_app, close, get_runtime_delegate, set_runtime_property_value) Fix hostfxr_get_dotnet_environment_info return type to StatusCode Add VS Code tasks and launch config for building/debugging AOT Add DESIGN.md documenting architecture, build, and debugging workflow --- cli.slnf | 2 + sdk.slnx | 3 + src/Cli/dn/.gitignore | 5 + src/Cli/dn/Program.cs | 178 +++++++ src/Cli/dn/dn-native-debug.vcxproj | 164 +++++++ src/Cli/dn/dn.csproj | 136 ++++++ src/Cli/dotnet-aot/DESIGN.md | 457 ++++++++++++++++++ src/Cli/dotnet-aot/ManagedHost.cs | 206 ++++++++ src/Cli/dotnet-aot/NativeEntryPoint.cs | 63 +++ src/Cli/dotnet-aot/dotnet-aot.csproj | 45 ++ src/Cli/dotnet/CommandLineInfo.cs | 22 +- src/Cli/dotnet/Parser.cs | 47 ++ src/Cli/dotnet/Program.cs | 12 + .../Microsoft.DotNet.NativeWrapper/Interop.cs | 146 +++++- .../Microsoft.DotNet.NativeWrapper.csproj | 4 + .../NETBundlesNativeWrapper.cs | 2 +- start-code.cmd | 7 +- tasks.code-workspace | 101 ++++ 18 files changed, 1595 insertions(+), 5 deletions(-) create mode 100644 src/Cli/dn/.gitignore create mode 100644 src/Cli/dn/Program.cs create mode 100644 src/Cli/dn/dn-native-debug.vcxproj create mode 100644 src/Cli/dn/dn.csproj create mode 100644 src/Cli/dotnet-aot/DESIGN.md create mode 100644 src/Cli/dotnet-aot/ManagedHost.cs create mode 100644 src/Cli/dotnet-aot/NativeEntryPoint.cs create mode 100644 src/Cli/dotnet-aot/dotnet-aot.csproj diff --git a/cli.slnf b/cli.slnf index 82fdbf143408..55b6e2eec7c2 100644 --- a/cli.slnf +++ b/cli.slnf @@ -3,6 +3,8 @@ "path": "sdk.slnx", "projects": [ "src\\Dotnet.Watch\\dotnet-watch\\dotnet-watch.csproj", + "src\\Cli\\dn\\dn.csproj", + "src\\Cli\\dn\\dn-native-debug.vcxproj", "src\\Cli\\dotnet\\dotnet.csproj", "src\\Cli\\Microsoft.DotNet.Cli.Utils\\Microsoft.DotNet.Cli.Utils.csproj", "test\\dotnet-new.IntegrationTests\\dotnet-new.IntegrationTests.csproj", diff --git a/sdk.slnx b/sdk.slnx index c1a01bb05837..a99095280303 100644 --- a/sdk.slnx +++ b/sdk.slnx @@ -67,6 +67,9 @@ + + + diff --git a/src/Cli/dn/.gitignore b/src/Cli/dn/.gitignore new file mode 100644 index 000000000000..c6adc278bc15 --- /dev/null +++ b/src/Cli/dn/.gitignore @@ -0,0 +1,5 @@ +# Generated by PublishAotForDebug MSBuild target with machine-specific paths +Properties/launchSettings.json +debug-dn.cmd +dn-native-debug.vcxproj.user +dn.csproj.Backup.tmp diff --git a/src/Cli/dn/Program.cs b/src/Cli/dn/Program.cs new file mode 100644 index 000000000000..6528c040f157 --- /dev/null +++ b/src/Cli/dn/Program.cs @@ -0,0 +1,178 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Runtime.InteropServices; + +namespace Microsoft.DotNet.Cli; + +partial class Program +{ + [LibraryImport("dotnet-aot", EntryPoint = "dotnet_execute")] + private static partial int DotnetExecute( + nint hostPath, + nint dotnetRoot, + nint sdkDir, + nint hostfxrPath, + int argc, + nint argv); + + static unsafe int Main(string[] args) + { + string hostPath = Environment.ProcessPath!; + string baseDir = AppContext.BaseDirectory.TrimEnd(Path.DirectorySeparatorChar); + string dotnetRoot = ResolveDotnetRoot(); + string sdkDir = baseDir; + string hostfxrPath = ResolveHostfxrPath(dotnetRoot); + + // Marshal argv to native platform strings (UTF-16 on Windows, UTF-8 on Unix) + // to match hostfxr's char_t definition used by PlatformStringMarshaller + // in dotnet-aot.dll. + nint* nativeArgv = stackalloc nint[args.Length]; + try + { + for (int i = 0; i < args.Length; i++) + { + nativeArgv[i] = MarshalStringToNative(args[i]); + } + + nint hpNative = MarshalStringToNative(hostPath); + nint drNative = MarshalStringToNative(dotnetRoot); + nint sdNative = MarshalStringToNative(sdkDir); + nint hfNative = MarshalStringToNative(hostfxrPath); + + try + { + return DotnetExecute( + hpNative, + drNative, + sdNative, + hfNative, + args.Length, + (nint)nativeArgv); + } + finally + { + Marshal.FreeCoTaskMem(hpNative); + Marshal.FreeCoTaskMem(drNative); + Marshal.FreeCoTaskMem(sdNative); + Marshal.FreeCoTaskMem(hfNative); + } + } + finally + { + for (int i = 0; i < args.Length; i++) + { + if (nativeArgv[i] != 0) + { + Marshal.FreeCoTaskMem(nativeArgv[i]); + } + } + } + } + + /// + /// Resolves the .NET installation root directory, mimicking muxer behavior. + /// + private static string ResolveDotnetRoot() + { + // Check DOTNET_ROOT first (standard on all platforms) + string? dotnetRoot = Environment.GetEnvironmentVariable("DOTNET_ROOT"); + if (!string.IsNullOrEmpty(dotnetRoot) && Directory.Exists(dotnetRoot)) + { + return dotnetRoot; + } + + // On Windows, also check the architecture-specific variant + if (OperatingSystem.IsWindows()) + { + string archVar = RuntimeInformation.ProcessArchitecture switch + { + Architecture.X64 => "DOTNET_ROOT(x64)", + Architecture.X86 => "DOTNET_ROOT(x86)", + Architecture.Arm64 => "DOTNET_ROOT(ARM64)", + _ => "" + }; + + if (!string.IsNullOrEmpty(archVar)) + { + dotnetRoot = Environment.GetEnvironmentVariable(archVar); + if (!string.IsNullOrEmpty(dotnetRoot) && Directory.Exists(dotnetRoot)) + { + return dotnetRoot; + } + } + } + + // Fall back to resolving from the process path + string? processPath = Environment.ProcessPath; + if (processPath is not null) + { + string? processDir = Path.GetDirectoryName(processPath); + if (processDir is not null) + { + // Walk up looking for a directory with dotnet(.exe) + string? candidate = processDir; + while (candidate is not null) + { + if (File.Exists(Path.Combine(candidate, "dotnet" + (OperatingSystem.IsWindows() ? ".exe" : "")))) + { + return candidate; + } + candidate = Path.GetDirectoryName(candidate); + } + } + } + + // Last resort: assume relative to AppContext.BaseDirectory + return Path.GetDirectoryName(AppContext.BaseDirectory.TrimEnd(Path.DirectorySeparatorChar)) ?? AppContext.BaseDirectory; + } + + /// + /// Finds the hostfxr library path under the given .NET root. + /// + private static string ResolveHostfxrPath(string dotnetRoot) + { + string fxrDir = Path.Combine(dotnetRoot, "host", "fxr"); + if (!Directory.Exists(fxrDir)) + { + return string.Empty; + } + + // Pick the highest version directory by parsing version numbers + string? latestFxr = Directory.GetDirectories(fxrDir) + .Select(path => new + { + Path = path, + Version = Version.TryParse(Path.GetFileName(path), out Version? version) ? version : null + }) + .Where(candidate => candidate.Version is not null) + .OrderByDescending(candidate => candidate.Version) + .Select(candidate => candidate.Path) + .FirstOrDefault(); + + if (latestFxr is null) + { + return string.Empty; + } + + string hostfxrName = OperatingSystem.IsWindows() + ? "hostfxr.dll" + : OperatingSystem.IsMacOS() + ? "libhostfxr.dylib" + : "libhostfxr.so"; + + string hostfxrPath = Path.Combine(latestFxr, hostfxrName); + return File.Exists(hostfxrPath) ? hostfxrPath : string.Empty; + } + + /// + /// Marshals a string to a native platform string (UTF-16 on Windows, UTF-8 on Unix) + /// to match hostfxr's char_t definition. + /// + private static nint MarshalStringToNative(string value) + { + return OperatingSystem.IsWindows() + ? Marshal.StringToCoTaskMemUni(value) + : Marshal.StringToCoTaskMemUTF8(value); + } +} diff --git a/src/Cli/dn/dn-native-debug.vcxproj b/src/Cli/dn/dn-native-debug.vcxproj new file mode 100644 index 000000000000..1bfaa1983a3d --- /dev/null +++ b/src/Cli/dn/dn-native-debug.vcxproj @@ -0,0 +1,164 @@ + + + + + + + <_HasVCTargets Condition="'$(VCTargetsPath)' != '' and Exists('$(VCTargetsPath)\Microsoft.Cpp.Default.props')">true + + + + + + + + + + <_ValidProjectsForRestore Include="$(MSBuildProjectFullPath)" /> + + + + + + + + + + + Debug + x64 + + + Release + x64 + + + + + {E9A0B5D7-2F4A-4C8E-9D3B-1A6F5E8C7D2A} + dn-native-debug + dn-native-debug + + 17.0 + + + + + + + Makefile + v143 + + + + + + + <_RepoRoot>$([MSBuild]::NormalizePath('$(MSBuildThisFileDirectory)', '..', '..', '..')) + <_DotNetTool>$([MSBuild]::NormalizePath('$(_RepoRoot)', '.dotnet', 'dotnet.exe')) + <_DnPublishDir>$([MSBuild]::NormalizePath('$(_RepoRoot)', 'artifacts', 'bin', 'dn', '$(Configuration)', 'net11.0', 'win-x64', 'publish')) + <_DnExePath>$([MSBuild]::NormalizePath('$(_DnPublishDir)', 'dn.exe')) + <_DotnetRootPath>$([MSBuild]::NormalizePath('$(_RepoRoot)', '.dotnet')) + + + + + "$(_DotNetTool)" publish "$(MSBuildThisFileDirectory)..\dotnet-aot\dotnet-aot.csproj" -r win-x64 -c $(Configuration) && "$(_DotNetTool)" publish "$(MSBuildThisFileDirectory)dn.csproj" -r win-x64 -c $(Configuration) && "$(_DotNetTool)" build "$(MSBuildThisFileDirectory)..\dotnet\dotnet.csproj" -c $(Configuration) && copy /Y "$(_RepoRoot)\artifacts\bin\dotnet-aot\$(Configuration)\net11.0\win-x64\publish\dotnet-aot.dll" "$(_DnPublishDir)\" && xcopy "$(_RepoRoot)\artifacts\bin\dotnet\$(Configuration)\net11.0\*" "$(_DnPublishDir)\" /S /Y /Q + if exist "$(_DnPublishDir)" rd /s /q "$(_DnPublishDir)" + $(NMakeCleanCommandLine) && $(NMakeBuildCommandLine) + $(_DnExePath) + + + + + $(_DnExePath) + --info + $(_DnPublishDir) + DOTNET_ROOT=$(_DotnetRootPath) + WindowsLocalDebugger + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Cli/dn/dn.csproj b/src/Cli/dn/dn.csproj new file mode 100644 index 000000000000..541a4f20804e --- /dev/null +++ b/src/Cli/dn/dn.csproj @@ -0,0 +1,136 @@ + + + + $(SdkTargetFramework) + dn + Exe + Microsoft.DotNet.Cli + true + true + MicrosoftAspNetCore + true + true + true + true + false + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + <_DnPublishDir>$(ArtifactsBinDir)dn\$(Configuration)\$(SdkTargetFramework)\$(TargetRid)\publish\ + <_DotnetAotPublishDir>$(ArtifactsBinDir)dotnet-aot\$(Configuration)\$(SdkTargetFramework)\$(TargetRid)\publish\ + <_DotnetManagedOutDir>$(ArtifactsBinDir)dotnet\$(Configuration)\$(SdkTargetFramework)\ + + + + + + + + + + + + + + + + + + + <_DotnetManagedFiles Include="$(_DotnetManagedOutDir)**\*" /> + + + + + + <_DnExePath>$([MSBuild]::NormalizePath('$(_DnPublishDir)', 'dn.exe')) + <_DnCwdPath>$([MSBuild]::NormalizePath('$(_DnPublishDir)')) + <_DotnetRootPath>$([MSBuild]::NormalizePath('$(RepoRoot)', '.dotnet')) + + + <_LaunchSettingsLines Include="{" /> + <_LaunchSettingsLines Include=" %22profiles%22: {" /> + <_LaunchSettingsLines Include=" %22Debug dn (managed path)%22: {" /> + <_LaunchSettingsLines Include=" %22commandName%22: %22Executable%22," /> + <_LaunchSettingsLines Include=" %22executablePath%22: %22$(_DnExePath.Replace('\','\\'))%22," /> + <_LaunchSettingsLines Include=" %22commandLineArgs%22: %22--info%22," /> + <_LaunchSettingsLines Include=" %22workingDirectory%22: %22$(_DnCwdPath.Replace('\','\\'))%22," /> + <_LaunchSettingsLines Include=" %22environmentVariables%22: {" /> + <_LaunchSettingsLines Include=" %22DOTNET_ROOT%22: %22$(_DotnetRootPath.Replace('\','\\'))%22" /> + <_LaunchSettingsLines Include=" }," /> + <_LaunchSettingsLines Include=" %22nativeDebugging%22: true" /> + <_LaunchSettingsLines Include=" }" /> + <_LaunchSettingsLines Include=" }" /> + <_LaunchSettingsLines Include="}" /> + + + + + + <_VcxUserLines Include="<?xml version=%221.0%22 encoding=%22utf-8%22?>" /> + <_VcxUserLines Include="<Project ToolsVersion=%2217.0%22 xmlns=%22http://schemas.microsoft.com/developer/msbuild/2003%22>" /> + <_VcxUserLines Include=" <PropertyGroup Condition=%22'$(Configuration)|$(Platform)'=='$(Configuration)|x64'%22>" /> + <_VcxUserLines Include=" <LocalDebuggerCommand>$(_DnExePath)</LocalDebuggerCommand>" /> + <_VcxUserLines Include=" <LocalDebuggerCommandArguments>--info</LocalDebuggerCommandArguments>" /> + <_VcxUserLines Include=" <LocalDebuggerWorkingDirectory>$(_DnCwdPath)</LocalDebuggerWorkingDirectory>" /> + <_VcxUserLines Include=" <LocalDebuggerEnvironment>DOTNET_ROOT=$(_DotnetRootPath)</LocalDebuggerEnvironment>" /> + <_VcxUserLines Include=" <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>" /> + <_VcxUserLines Include=" </PropertyGroup>" /> + <_VcxUserLines Include="</Project>" /> + + + + + + <_DebugScriptLines Include="@echo off" /> + <_DebugScriptLines Include="REM Launch the published NativeAOT dn.exe under Visual Studio's native debugger." /> + <_DebugScriptLines Include="REM This opens a new VS instance with the native debugger attached." /> + <_DebugScriptLines Include="REM Set breakpoints in the source file view and press F5 to start." /> + <_DebugScriptLines Include="REM" /> + <_DebugScriptLines Include="REM Tip: to break on managed exceptions, add a Function Breakpoint on RhThrowEx" /> + <_DebugScriptLines Include="REM (Debug > Windows > Breakpoints > New > Function, Language = All Languages)." /> + <_DebugScriptLines Include="REM" /> + <_DebugScriptLines Include="set DOTNET_ROOT=$(_DotnetRootPath)" /> + <_DebugScriptLines Include="devenv /debugexe %22$(_DnExePath)%22 --info" /> + + + + + diff --git a/src/Cli/dotnet-aot/DESIGN.md b/src/Cli/dotnet-aot/DESIGN.md new file mode 100644 index 000000000000..9f939079ae39 --- /dev/null +++ b/src/Cli/dotnet-aot/DESIGN.md @@ -0,0 +1,457 @@ +# NativeAOT Design for the .NET SDK CLI + +This document describes the design for adding a NativeAOT-compiled entry point +to the .NET SDK CLI. The goal is to achieve near-instant startup for common +commands while preserving full functionality through the managed CLI. + +The current implementation uses a standalone `dn.exe` host that lives alongside +the existing `dotnet` CLI. `dn.exe` emulates functionality that will eventually +be integrated into the dotnet host (muxer) itself — see +[dotnet/runtime#126171](https://github.com/dotnet/runtime/issues/126171). Once +the muxer gains native SDK resolution support, the AOT entry point will be +called directly by the standard `dotnet` executable and `dn.exe` will remain as +a local development and testing entry point. At that point, AOT-handled command +implementations will likely be removed from the managed `dotnet.dll` package as +well. + +## Motivation + +The `dotnet` CLI today runs as a managed application hosted by CoreCLR. Every +invocation pays the cost of JIT compilation, type loading, and runtime +initialization — even for trivial operations like `dotnet --version`. A NativeAOT +entry point eliminates that overhead for supported commands while keeping the +full managed CLI as an automatic fallback. + +## Architecture + +The design uses three components arranged in layers. Each layer is compiled and +debugged differently. + +| Layer | Project | Output | Compilation | +|-------|---------|--------|-------------| +| 1 — Native Host | `src/Cli/dn/` | `dn.exe` | NativeAOT (`PublishAot`, `OutputType=Exe`) | +| 2 — AOT Bridge | `src/Cli/dotnet-aot/` | `dotnet-aot.dll` / `.so` / `.dylib` | NativeAOT (`PublishAot`, `NativeLib=Shared`) | +| 3 — Managed CLI | `src/Cli/dotnet/` | `dotnet.dll` | Standard managed build | + +```mermaid +graph TD + User["User runs dn.exe"] --> L1 + + subgraph L1["Layer 1 · dn.exe (Native AOT Executable)"] + Resolve["Resolve DOTNET_ROOT, hostfxr path"] + Marshal["Marshal args to native strings"] + PInvoke["P/Invoke: dotnet_execute()"] + Resolve --> Marshal --> PInvoke + end + + PInvoke -->|"DLL import"| L2 + + subgraph L2["Layer 2 · dotnet-aot.dll (Native AOT Shared Library)"] + Entry["NativeEntryPoint.Execute()"] + Parse["Parser.Parse(args)"] + Fast{"Command handled
by AOT path?"} + Invoke["Parser.Invoke()"] + DebugCheck["Check for native debugger"] + HostInit["ManagedHost.RunApp()"] + Entry --> Parse --> Fast + Fast -- "Yes" --> Invoke + Fast -- "No" --> DebugCheck --> HostInit + end + + Invoke --> Done["Return exit code"] + HostInit -->|"hostfxr loads CoreCLR"| L3 + + subgraph L3["Layer 3 · dotnet.dll (Managed CLI on CoreCLR)"] + FullCLI["Full dotnet CLI
All commands, telemetry, workloads"] + end + + FullCLI --> Done + + style L1 fill:#2d4a7a,stroke:#5b9bd5,color:#fff + style L2 fill:#4a2d6b,stroke:#9b59b6,color:#fff + style L3 fill:#2d6b3a,stroke:#27ae60,color:#fff +``` + +### Layer 1 — `dn.exe` (Native Host) + +A minimal NativeAOT executable whose only job is to locate the .NET installation, +resolve `hostfxr`, marshal command-line arguments into platform-native strings, +and call into Layer 2 via P/Invoke. + +Key responsibilities: + +- Resolve `DOTNET_ROOT` from environment variables or by walking up from the + process path. +- Locate the highest-versioned `hostfxr` under `/host/fxr/`. +- Marshal `string[] args` to `nint*` (UTF-16 on Windows, UTF-8 on Unix). +- Call `dotnet_execute` exported from `dotnet-aot.dll`. + +### Layer 2 — `dotnet-aot.dll` (AOT Bridge) + +A NativeAOT shared library (`NativeLib=Shared`) that exports a single +`[UnmanagedCallersOnly]` entry point: `dotnet_execute`. This layer contains +the dual-path dispatch logic. + +**Fast path** — The AOT bridge compiles a minimal `Parser` (guarded by +`#if CLI_AOT`) that handles simple commands (`--version`, `--info`) entirely in +native code. If the parser recognizes the command, it executes immediately and +returns. + +**Slow path** — For any command not handled by the AOT parser, the bridge calls +`ManagedHost.RunApp()`, which uses the hostfxr native hosting APIs +(`hostfxr_initialize_for_dotnet_command_line` / `hostfxr_run_app`) to bootstrap +CoreCLR and run `dotnet.dll`. + +```mermaid +sequenceDiagram + participant dn as dn.exe (Layer 1) + participant aot as dotnet-aot.dll (Layer 2) + participant hfxr as hostfxr + participant clr as CoreCLR + participant cli as dotnet.dll (Layer 3) + + dn->>aot: dotnet_execute(hostPath, dotnetRoot, sdkDir, hostfxrPath, argc, argv) + aot->>aot: Parser.Parse(args) + + alt Command handled by AOT + aot->>aot: Parser.Invoke(parseResult) + aot-->>dn: exit code + else Command not handled + aot->>hfxr: hostfxr_initialize_for_dotnet_command_line(args) + hfxr->>clr: Load CoreCLR runtime + aot->>hfxr: hostfxr_run_app(handle) + hfxr->>cli: Program.Main(args) + cli-->>hfxr: exit code + hfxr-->>aot: exit code + aot-->>dn: exit code + end +``` + +### Layer 3 — `dotnet.dll` (Managed CLI) + +The existing managed CLI, unchanged. It contains all commands, telemetry, +workload management, NuGet integration, and everything else the SDK supports. +It runs on CoreCLR with full runtime capabilities (reflection, JIT, dynamic +assembly loading, hot reload). + +## Source Sharing and Conditional Compilation + +The `dotnet-aot` project does not duplicate source files. Instead, it links +files from `dotnet` and uses the `CLI_AOT` preprocessor constant to select +the appropriate implementation: + +```xml + +$(DefineConstants);CLI_AOT + + + + +``` + +In the shared files: + +- **`Parser.cs`** — Under `#if CLI_AOT`, defines a minimal parser with only + `--version` and `--info`. Under `#else`, defines the full command tree. +- **`Program.cs`** — Under `#if CLI_AOT`, provides a simple `Main` that + delegates to the AOT parser. Under `#else`, provides the full CLI entry point + with telemetry, signal handlers, and workload checks. +- **`CommandLineInfo.cs`** — Shared without conditional compilation; prints + version and environment information. + +```mermaid +graph LR + subgraph "dotnet-aot.csproj (CLI_AOT defined)" + PA["Parser.cs — minimal"] + PR["Program.cs — simple Main"] + end + + subgraph "dotnet.csproj (CLI_AOT not defined)" + PB["Parser.cs — full commands"] + PS["Program.cs — full CLI"] + end + + SRC["Source files in src/Cli/dotnet/"] -->|"Compile link"| PA + SRC -->|"Compile link"| PR + SRC -->|"Direct compile"| PB + SRC -->|"Direct compile"| PS + + style SRC fill:#555,stroke:#999,color:#fff +``` + +## Build Process + +Building for debug involves publishing two NativeAOT projects and overlaying the +managed output. The `dn.csproj` contains a `PublishAotForDebug` MSBuild target +that automates this when building inside Visual Studio: + +```mermaid +flowchart LR + A["1. Publish dotnet-aot.csproj"] --> B["2. Publish dn.csproj"] + B --> C["3. Build dotnet.csproj"] + C --> D["4. Copy dotnet-aot.dll → dn publish dir"] + D --> E["5. Overlay managed files → dn publish dir"] + E --> F["6. Generate launchSettings.json
& debug scripts"] +``` + +The final publish directory contains: + +```text +publish/ +├── dn.exe ← Layer 1 (native) +├── dn.pdb ← Native debug symbols for Layer 1 +├── dotnet-aot.dll ← Layer 2 (native shared lib) +├── dotnet-aot.pdb ← Native debug symbols for Layer 2 +├── dotnet.dll ← Layer 3 (managed) +├── dotnet.pdb ← Managed debug symbols for Layer 3 +├── dotnet.runtimeconfig.json ← Runtime config for hosting Layer 3 +└── ... ← Other managed assemblies +``` + +For command-line builds, use the VS Code tasks or run the publish steps +manually: + +```bash +# Publish the AOT shared library +dotnet publish src/Cli/dotnet-aot/dotnet-aot.csproj -r win-x64 -c Debug + +# Publish the AOT host executable +dotnet publish src/Cli/dn/dn.csproj -r win-x64 -c Debug + +# Build the managed CLI +dotnet build src/Cli/dotnet/dotnet.csproj -c Debug + +# Copy artifacts into the dn publish directory +cp artifacts/bin/dotnet-aot/Debug//win-x64/publish/dotnet-aot.dll \ + artifacts/bin/dn/Debug//win-x64/publish/ +cp -r artifacts/bin/dotnet/Debug//* \ + artifacts/bin/dn/Debug//win-x64/publish/ +``` + +## Debugging + +Debugging this architecture requires understanding which debugger engine works +with which layer. The key constraint: **NativeAOT output is pure native code +with no IL. Only a native debugger can bind breakpoints in Layers 1 and 2.** + +### Debugger Compatibility Matrix + +| What you want to debug | Debugger engine | VS project | VS Code config | +|------------------------|-----------------|------------|----------------| +| Layer 1 (`dn.exe`) | Native | `dn-native-debug.vcxproj` | `cppvsdbg` launch config | +| Layer 2 (`dotnet-aot.dll`) | Native | `dn-native-debug.vcxproj` | `cppvsdbg` launch config | +| Layer 3 (`dotnet.dll`) | Managed or mixed-mode | `dn.csproj` launch profile | `coreclr` launch config | +| Layers 1+2+3 together | Two debugger sessions | See [Mixed-mode](#mixed-mode-debugging-visual-studio) | See [VS Code mixed](#mixed-mode-vs-code) | + +### Debugging in Visual Studio + +#### Native debugging (Layers 1 & 2) + +The `dn-native-debug.vcxproj` is a stub C++ Makefile project that exists solely +to provide an F5 launch target using the native debugger engine +(`WindowsLocalDebugger`). It performs no C++ compilation. + +1. Open the solution (`cli.slnf` or `sdk.slnx`) in Visual Studio. +2. Set **dn-native-debug** as the startup project. +3. Set breakpoints in AOT source files (`NativeEntryPoint.cs`, `ManagedHost.cs`, + `Program.cs` under `#if CLI_AOT`, etc.). +4. Press **F5**. + +The native debugger reads the PDB generated by ILC and maps C# source lines to +native addresses. Breakpoints bind correctly in all AOT-compiled code. + +> **Why not use `launchSettings.json` with `nativeDebugging: true`?** +> That flag enables *mixed-mode* debugging where the managed debugger is primary +> and a native debugger is attached as an add-on. But there is no CLR loaded yet +> in Layers 1 and 2, so the managed engine finds nothing to attach to and C# +> breakpoints in AOT code won't bind. + +#### Alternative: `devenv /debugexe` + +The build generates a `debug-dn.cmd` script that launches the published `dn.exe` +directly under Visual Studio's native debugger: + +```cmd +set DOTNET_ROOT=\.dotnet +devenv /debugexe "\dn.exe" --info +``` + +This opens a new VS instance with the native debugger attached. Set breakpoints +in the Source Files view and press F5. + +#### Managed debugging (Layer 3) + +Use the `dn.csproj` project with its generated `launchSettings.json` profile +("Debug dn (managed path)"). This profile has `nativeDebugging: true` which +enables mixed-mode, allowing the managed debugger to attach once CoreCLR loads. + +1. Set **dn** as the startup project. +2. Set breakpoints in managed source files (`Program.cs` under the non-AOT path, + command implementations, etc.). +3. Press **F5**. + +Breakpoints in managed code bind after `hostfxr_run_app` loads CoreCLR and +begins executing `dotnet.dll`. + +#### Mixed-mode debugging (Visual Studio) + +To debug across all three layers in a single session: + +```mermaid +flowchart LR + subgraph VS["Visual Studio"] + Native["Native debugger
(via dn-native-debug)"] + Managed["Managed debugger
(attaches when CLR loads)"] + end + + Native --> L1L2["Layers 1 & 2
AOT code"] + Managed --> L3["Layer 3
Managed code"] + + L1L2 -->|"hostfxr loads CLR"| L3 +``` + +1. Set **dn-native-debug** as startup project and press F5 (native debugger). +2. When execution reaches `ManagedHost.RunApp()` and the CLR is loaded, use + **Debug → Attach to Process** to attach the managed debugger to the same + process. + +Alternatively, the AOT bridge automatically detects a native debugger and sets +`DOTNET_LAUNCH_MANAGED_DEBUGGER=1`, which signals the managed code to call +`Debugger.Launch()` — prompting you to attach a managed debugger at CLR startup. + +### Debugging in VS Code + +#### Native debugging (Layers 1 & 2) + +Use the C/C++ extension (`ms-vscode.cpptools`) with a `cppvsdbg` (Windows) or +`cppdbg` (Linux/macOS) launch configuration: + +```jsonc +{ + "name": "Debug dn (native)", + "type": "cppvsdbg", // Windows; use "cppdbg" on Linux/macOS + "request": "launch", + "program": "${workspaceFolder}/artifacts/bin/dn/Debug//win-x64/publish/dn.exe", + "args": ["--info"], + "cwd": "${workspaceFolder}/artifacts/bin/dn/Debug//win-x64/publish", + "environment": [ + { "name": "DOTNET_ROOT", "value": "${workspaceFolder}/.dotnet" } + ], + "symbolSearchPath": "${workspaceFolder}/artifacts/bin/dn/Debug//win-x64/publish" +} +``` + +Set breakpoints in any AOT-compiled source file. The native debugger reads the +ILC-generated PDB/DWARF symbols and binds them. + +#### Managed debugging (Layer 3) + +Use the C# extension (`ms-dotnettools.csharp`) with a `coreclr` launch +configuration. Point it at the published `dn.exe` so it can attach once +CoreCLR loads: + +```jsonc +{ + "name": "Debug dn (managed)", + "type": "coreclr", + "request": "launch", + "program": "${workspaceFolder}/artifacts/bin/dn/Debug//win-x64/publish/dn.exe", + "args": ["build"], + "cwd": "${workspaceFolder}", + "env": { + "DOTNET_ROOT": "${workspaceFolder}/.dotnet" + } +} +``` + +> **Caveat**: The managed debugger will not break on anything until CoreCLR is +> loaded by `hostfxr`. Breakpoints in Layers 1 and 2 will be skipped silently. + +#### Mixed-mode (VS Code) + +VS Code does not support true mixed-mode debugging in a single session. The +workaround is to run two separate debug sessions: + +1. Launch with `cppvsdbg` for native breakpoints in Layers 1 & 2. +2. Separately, attach with `coreclr` after the CLR loads for Layer 3 breakpoints. + +Use the `DOTNET_LAUNCH_MANAGED_DEBUGGER` mechanism: the AOT bridge detects the +native debugger and sets the environment variable, causing the managed path to +call `Debugger.Launch()`. This gives you a window to attach the managed debugger. + +### Debugger Detection + +The AOT bridge (`NativeEntryPoint.cs`) detects whether a native debugger is +attached before falling through to the managed path: + +```mermaid +flowchart TD + Check{"Native debugger
attached?"} + Win["Windows: IsDebuggerPresent()"] + Linux["Linux: /proc/self/status
TracerPid != 0"] + SetEnv["Set DOTNET_LAUNCH_MANAGED_DEBUGGER=1"] + Continue["Continue to managed fallback"] + + Check --> Win + Check --> Linux + Win -- "true" --> SetEnv + Linux -- "true" --> SetEnv + Win -- "false" --> Continue + Linux -- "false" --> Continue + SetEnv --> Continue +``` + +When the managed CLI starts and sees `DOTNET_LAUNCH_MANAGED_DEBUGGER=1`, it +calls `System.Diagnostics.Debugger.Launch()`, which triggers the JIT debugger +dialog (or auto-attaches in configured environments). + +## Limitations and Caveats + +### AOT Layer Limitations + +- **No reflection** — AOT code cannot use unbounded reflection. The AOT parser + must be manually maintained. +- **No dynamic loading** — Assemblies cannot be loaded at runtime in AOT layers. +- **Limited exception inspection** — In the native debugger, managed exception + types appear with mangled names (e.g., `S_P_CoreLib_System_Exception`). + Inspecting exception messages requires casting pointers manually. +- **No Edit and Continue** — Not available for AOT-compiled code. +- **No Hot Reload** — Not available for AOT-compiled code. + +### Debugging Limitations + +- **No single-session mixed-mode in VS Code** — Must use two debugger sessions. +- **Managed breakpoints don't bind in AOT code** — The managed debugger engine + (`coreclr`) cannot see code that has no IL. Breakpoints set via the managed + debugger in files compiled by Layer 2 will not hit. +- **Breakpoint binding delay for Layer 3** — Managed breakpoints only bind after + `hostfxr_run_app` loads CoreCLR. Before that, they appear as hollow circles. +- **Generic type inspection** — Generic types in AOT code have mangled names + that include instantiation info, making Watch/Locals windows harder to read. +- **Stepping across the hosting boundary** — You cannot seamlessly step from + AOT code into managed code. The hostfxr call is opaque; you need to set a + breakpoint on the managed side and continue. + +### Platform-Specific Notes + +| Platform | Native Debugger | Symbol Format | Notes | +|----------|-----------------|---------------|-------| +| Windows | `cppvsdbg` / WinDbg | `.pdb` (native) | Full VS integration via vcxproj | +| Linux | `cppdbg` (gdb/lldb) | DWARF (`.dbg`) | Ensure `.dbg` is alongside binary | +| macOS | `cppdbg` (lldb) | `.dSYM` directory | `dsymutil` runs automatically | + +## Future Work + +- **Muxer integration** — The `dn.exe` host emulates muxer behavior locally. + Once [dotnet/runtime#126171](https://github.com/dotnet/runtime/issues/126171) + lands, the dotnet muxer will call `dotnet_execute` directly. `dn.exe` will + continue to serve as a local development and testing entry point. +- **Remove AOT commands from managed package** — After the AOT path is + validated and shipping, the `#if CLI_AOT` implementations in `Parser.cs` + and `Program.cs` can be removed from the managed `dotnet.dll` build. +- **Expand AOT-handled commands** — Move more commands into the AOT parser to + reduce fallback frequency. +- **Async managed host initialization** — Start loading CoreCLR while parsing + to hide runtime startup latency on fallback paths. +- **Single-binary distribution** — Explore embedding `dotnet-aot.dll` as a + static library linked directly into `dn.exe` (or the muxer). diff --git a/src/Cli/dotnet-aot/ManagedHost.cs b/src/Cli/dotnet-aot/ManagedHost.cs new file mode 100644 index 000000000000..4677068dd3ea --- /dev/null +++ b/src/Cli/dotnet-aot/ManagedHost.cs @@ -0,0 +1,206 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.DotNet.NativeWrapper; + +namespace Microsoft.DotNet.Cli; + +/// +/// Hosts the .NET runtime and provides the ability to load and invoke managed assemblies. +/// Designed to be initialized asynchronously so the runtime is ready when needed. +/// +internal sealed unsafe class ManagedHost : IDisposable +{ + private nint _hostContextHandle; + private delegate* unmanaged[Cdecl] _loadAssemblyAndGetFunctionPointer; + private Task? _initTask; + private readonly string _runtimeConfigPath; + private readonly string _dotnetRoot; + private bool _disposed; + + /// + /// Creates a new for the given runtime config. + /// + /// Path to the .runtimeconfig.json file. + /// Path to the .NET installation root. + public ManagedHost(string runtimeConfigPath, string dotnetRoot) + { + _runtimeConfigPath = runtimeConfigPath; + _dotnetRoot = dotnetRoot; + } + + /// + /// Starts initializing the .NET runtime asynchronously. + /// + public void StartInitialization() + { + _initTask = Task.Run(Initialize); + } + + /// + /// Ensures the runtime is initialized, blocking if necessary. + /// + public void EnsureInitialized() + { + if (_initTask is null) + { + Initialize(); + } + else + { + _initTask.GetAwaiter().GetResult(); + } + } + + /// + /// Loads the specified assembly and invokes an [UnmanagedCallersOnly] method + /// with the default component entry point signature: int fn(nint args, int sizeBytes). + /// + /// Full path to the managed assembly. + /// Fully qualified type name (e.g., "Microsoft.DotNet.Cli.Program, dotnet"). + /// Method name to invoke. + /// The exit code returned by the managed method. + public int InvokeMethod(string assemblyPath, string typeName, string methodName) + { + EnsureInitialized(); + + if (_loadAssemblyAndGetFunctionPointer is null) + { + throw new InvalidOperationException("Runtime initialization failed - load_assembly_and_get_function_pointer is not available."); + } + + nint functionPointer; + + nint assemblyPathNative = PlatformStringMarshaller.ConvertToUnmanaged(assemblyPath); + nint typeNameNative = PlatformStringMarshaller.ConvertToUnmanaged(typeName); + nint methodNameNative = PlatformStringMarshaller.ConvertToUnmanaged(methodName); + + try + { + // delegate_type_name = -1 means UNMANAGEDCALLERSONLY_METHOD, reserved = 0 + int result = _loadAssemblyAndGetFunctionPointer( + assemblyPathNative, + typeNameNative, + methodNameNative, + -1, + 0, + (nint)(&functionPointer)); + + if (result != 0) + { + throw new InvalidOperationException($"Failed to load assembly and get function pointer. HRESULT: 0x{result:X8}"); + } + } + finally + { + PlatformStringMarshaller.Free(assemblyPathNative); + PlatformStringMarshaller.Free(typeNameNative); + PlatformStringMarshaller.Free(methodNameNative); + } + + var entryPoint = (delegate* unmanaged[Cdecl])functionPointer; + return entryPoint(0, 0); + } + + /// + /// Runs the managed application using the hostfxr command-line hosting path. + /// This is the simplest way to invoke dotnet.dll Program.Main(args). + /// + /// Path to the .NET installation root. + /// Command-line arguments (first element should be the app path). + /// The application exit code. + public static int RunApp(string dotnetRoot, string[] args) + { + nint handle; + + var parameters = new Interop.hostfxr_initialize_parameters + { + size = sizeof(Interop.hostfxr_initialize_parameters), + dotnet_root = PlatformStringMarshaller.ConvertToUnmanaged(dotnetRoot), + }; + + try + { + StatusCode result = Interop.hostfxr_initialize_for_dotnet_command_line( + args.Length, + args, + in parameters, + out handle); + + if (result != StatusCode.Success && handle == 0) + { + throw new InvalidOperationException($"hostfxr_initialize_for_dotnet_command_line failed. Status: {result} (0x{(uint)result:X8})"); + } + + try + { + StatusCode appResult = Interop.hostfxr_run_app(handle); + return (int)appResult; + } + finally + { + Interop.hostfxr_close(handle); + } + } + finally + { + PlatformStringMarshaller.Free(parameters.dotnet_root); + } + } + + private void Initialize() + { + nint dotnetRootNative = PlatformStringMarshaller.ConvertToUnmanaged(_dotnetRoot); + nint runtimeConfigPathNative = PlatformStringMarshaller.ConvertToUnmanaged(_runtimeConfigPath); + + try + { + var parameters = new Interop.hostfxr_initialize_parameters + { + size = sizeof(Interop.hostfxr_initialize_parameters), + dotnet_root = dotnetRootNative, + }; + + StatusCode result = Interop.hostfxr_initialize_for_runtime_config( + runtimeConfigPathNative, + in parameters, + out _hostContextHandle); + + if (result != StatusCode.Success && _hostContextHandle == 0) + { + throw new InvalidOperationException($"hostfxr_initialize_for_runtime_config failed. Status: {result} (0x{(uint)result:X8})"); + } + + nint loadAssemblyDelegate; + result = Interop.hostfxr_get_runtime_delegate( + _hostContextHandle, + Interop.hostfxr_delegate_type.hdt_load_assembly_and_get_function_pointer, + out loadAssemblyDelegate); + + if (result != StatusCode.Success) + { + Interop.hostfxr_close(_hostContextHandle); + _hostContextHandle = 0; + throw new InvalidOperationException($"hostfxr_get_runtime_delegate failed. Status: {result} (0x{(uint)result:X8})"); + } + + _loadAssemblyAndGetFunctionPointer = + (delegate* unmanaged[Cdecl])loadAssemblyDelegate; + } + finally + { + PlatformStringMarshaller.Free(dotnetRootNative); + PlatformStringMarshaller.Free(runtimeConfigPathNative); + } + } + + public void Dispose() + { + if (!_disposed && _hostContextHandle != 0) + { + Interop.hostfxr_close(_hostContextHandle); + _hostContextHandle = 0; + _disposed = true; + } + } +} diff --git a/src/Cli/dotnet-aot/NativeEntryPoint.cs b/src/Cli/dotnet-aot/NativeEntryPoint.cs new file mode 100644 index 000000000000..e88955b29977 --- /dev/null +++ b/src/Cli/dotnet-aot/NativeEntryPoint.cs @@ -0,0 +1,63 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.DotNet.NativeWrapper; + +namespace Microsoft.DotNet.Cli; + +static unsafe partial class NativeEntryPoint +{ + [UnmanagedCallersOnly(EntryPoint = "dotnet_execute")] + static int Execute( + nint hostPathPtr, // const char_t* host_path + nint dotnetRootPtr, // const char_t* dotnet_root + nint sdkDirPtr, // const char_t* sdk_dir + nint hostfxrPathPtr, // const char_t* hostfxr_path + int argc, // int argc (user args, no dotnet exe) + nint argvPtr) // const char_t** argv + { + string hostPath = PlatformStringMarshaller.ConvertToManaged(hostPathPtr) ?? string.Empty; + string dotnetRoot = PlatformStringMarshaller.ConvertToManaged(dotnetRootPtr) ?? string.Empty; + string sdkDir = PlatformStringMarshaller.ConvertToManaged(sdkDirPtr) ?? string.Empty; + string hostfxrPath = PlatformStringMarshaller.ConvertToManaged(hostfxrPathPtr) ?? string.Empty; + + // Make hostfxr discoverable for NativeWrapper P/Invokes (required on non-Windows) + if (!string.IsNullOrEmpty(hostfxrPath)) + { + AppContext.SetData("HOSTFXR_PATH", hostfxrPath); + } + + string[] args = new string[argc]; + nint* argv = (nint*)argvPtr; + for (int i = 0; i < argc; i++) + { + args[i] = PlatformStringMarshaller.ConvertToManaged(argv[i]) ?? string.Empty; + } + + // Try the AOT-compiled path first for supported commands + var parseResult = Parser.Parse(args); + bool handled = parseResult.Errors.Count == 0; + + if (handled) + { + return Parser.Invoke(parseResult); + } + + // Fall back to the fully managed dotnet CLI by hosting .NET + string dotnetDll = Path.Combine(sdkDir, "dotnet.dll"); + string runtimeConfig = Path.Combine(sdkDir, "dotnet.runtimeconfig.json"); + + if (File.Exists(dotnetDll) && File.Exists(runtimeConfig)) + { + // Use the command-line hosting path to run dotnet.dll + string[] appArgs = new string[args.Length + 1]; + appArgs[0] = dotnetDll; + Array.Copy(args, 0, appArgs, 1, args.Length); + return ManagedHost.RunApp(dotnetRoot, appArgs); + } + + // No managed fallback available + Console.Error.WriteLine($"The managed fallback could not be located. Expected '{dotnetDll}' and '{runtimeConfig}'."); + return 1; + } +} diff --git a/src/Cli/dotnet-aot/dotnet-aot.csproj b/src/Cli/dotnet-aot/dotnet-aot.csproj new file mode 100644 index 000000000000..ef0c6d2a1708 --- /dev/null +++ b/src/Cli/dotnet-aot/dotnet-aot.csproj @@ -0,0 +1,45 @@ + + + + $(SdkTargetFramework) + dotnet-aot + Library + Shared + true + true + false + false + MicrosoftAspNetCore + true + true + Microsoft.DotNet.Cli + $(DefineConstants);EXCLUDE_ASPNETCORE + $(DefineConstants);DotnetCsproj;CLI_AOT + false + true + + + $(NoWarn);CS8002 + + + $(NoWarn);CA1416 + + + + + + + + + + + + + + + + + + + + diff --git a/src/Cli/dotnet/CommandLineInfo.cs b/src/Cli/dotnet/CommandLineInfo.cs index b1a4cd319ae5..b4b99b807711 100644 --- a/src/Cli/dotnet/CommandLineInfo.cs +++ b/src/Cli/dotnet/CommandLineInfo.cs @@ -3,10 +3,14 @@ #nullable disable +#if !CLI_AOT using Microsoft.DotNet.Cli.Commands.Workload; +#endif using Microsoft.DotNet.Cli.Utils; +#if !CLI_AOT using LocalizableStrings = Microsoft.DotNet.Cli.Utils.LocalizableStrings; using RuntimeEnvironment = Microsoft.DotNet.Cli.Utils.RuntimeEnvironment; +#endif namespace Microsoft.DotNet.Cli; @@ -21,21 +25,36 @@ public static void PrintInfo() { DotnetVersionFile versionFile = DotnetFiles.VersionFileObject; var commitSha = versionFile.CommitSha ?? "N/A"; +#if CLI_AOT + Reporter.Output.WriteLine(".NET SDK:"); +#else Reporter.Output.WriteLine($"{LocalizableStrings.DotNetSdkInfoLabel}"); +#endif Reporter.Output.WriteLine($" Version: {Product.Version}"); Reporter.Output.WriteLine($" Commit: {commitSha}"); +#if !CLI_AOT Reporter.Output.WriteLine($" Workload version: {WorkloadInfoHelper.GetWorkloadsVersion()}"); Reporter.Output.WriteLine($" MSBuild version: {MSBuildForwardingAppWithoutLogging.MSBuildVersion}"); +#endif Reporter.Output.WriteLine(); +#if CLI_AOT + Reporter.Output.WriteLine("Runtime Environment:"); + Reporter.Output.WriteLine($" OS Name: {System.Runtime.InteropServices.RuntimeInformation.OSDescription}"); + Reporter.Output.WriteLine($" OS Platform: {(OperatingSystem.IsWindows() ? "Windows" : OperatingSystem.IsMacOS() ? "Darwin" : "Linux")}"); +#else Reporter.Output.WriteLine($"{LocalizableStrings.DotNetRuntimeInfoLabel}"); Reporter.Output.WriteLine($" OS Name: {RuntimeEnvironment.OperatingSystem}"); Reporter.Output.WriteLine($" OS Version: {RuntimeEnvironment.OperatingSystemVersion}"); Reporter.Output.WriteLine($" OS Platform: {RuntimeEnvironment.OperatingSystemPlatform}"); - Reporter.Output.WriteLine($" RID: {GetDisplayRid(versionFile)}"); +#endif + Reporter.Output.WriteLine($" RID: {RuntimeInformation.RuntimeIdentifier}"); Reporter.Output.WriteLine($" Base Path: {AppContext.BaseDirectory}"); +#if !CLI_AOT PrintWorkloadsInfo(); +#endif } +#if !CLI_AOT private static void PrintWorkloadsInfo() { Reporter.Output.WriteLine(); @@ -55,4 +74,5 @@ private static string GetDisplayRid(DotnetVersionFile versionFile) currentRid : versionFile.BuildRid; } +#endif } diff --git a/src/Cli/dotnet/Parser.cs b/src/Cli/dotnet/Parser.cs index 8c6a9fd2031a..99a56bce90bd 100644 --- a/src/Cli/dotnet/Parser.cs +++ b/src/Cli/dotnet/Parser.cs @@ -1,6 +1,52 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +#if CLI_AOT +using System.CommandLine; +using Microsoft.DotNet.Cli.Utils; + +namespace Microsoft.DotNet.Cli; + +public static class Parser +{ + internal static RootCommand RootCommand { get; } = CreateCommand(); + + private static RootCommand CreateCommand() + { + var versionOption = new Option("--version") { Description = "Display .NET SDK version." }; + var infoOption = new Option("--info") { Description = "Display .NET information." }; + + var rootCommand = new RootCommand("The .NET CLI") + { + versionOption, + infoOption, + }; + + rootCommand.SetAction(parseResult => + { + if (parseResult.GetValue(versionOption)) + { + CommandLineInfo.PrintVersion(); + return 0; + } + if (parseResult.GetValue(infoOption)) + { + CommandLineInfo.PrintInfo(); + return 0; + } + parseResult.InvocationConfiguration.Output.WriteLine("Usage: dn [options]"); + return 0; + }); + + return rootCommand; + } + + public static ParseResult Parse(string[] args) => RootCommand.Parse(args); + + public static int Invoke(ParseResult parseResult) => parseResult.Invoke(); +} + +#else using System.CommandLine; using System.CommandLine.Help; using System.CommandLine.StaticCompletions; @@ -392,3 +438,4 @@ private static bool IsInNuGetCommandTree(Command command) } } } +#endif diff --git a/src/Cli/dotnet/Program.cs b/src/Cli/dotnet/Program.cs index dbe1b36fb3d3..37f76e57910b 100644 --- a/src/Cli/dotnet/Program.cs +++ b/src/Cli/dotnet/Program.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +#if !CLI_AOT using System.CommandLine; using System.CommandLine.Parsing; using System.Diagnostics; @@ -11,7 +12,9 @@ using Microsoft.DotNet.Cli.Extensions; using Microsoft.DotNet.Cli.ShellShim; using Microsoft.DotNet.Cli.Telemetry; +#endif using Microsoft.DotNet.Cli.Utils; +#if !CLI_AOT using Microsoft.DotNet.Cli.Utils.Extensions; using Microsoft.DotNet.Configurer; using Microsoft.DotNet.ProjectTools; @@ -19,11 +22,19 @@ using Microsoft.Extensions.EnvironmentAbstractions; using NuGet.Frameworks; using CommandResult = System.CommandLine.Parsing.CommandResult; +#endif namespace Microsoft.DotNet.Cli; public class Program { +#if CLI_AOT + public static int Main(string[] args) + { + var parseResult = Parser.Parse(args); + return Parser.Invoke(parseResult); + } +#else private static readonly string s_toolPathSentinelFileName = $"{Product.Version}.toolpath.sentinel"; private static readonly Activity? s_mainActivity; @@ -349,4 +360,5 @@ public static void Shutdown(PosixSignalContext context) TelemetryClient.FlushProviders(); Activities.Source.Dispose(); } +#endif } diff --git a/src/Resolvers/Microsoft.DotNet.NativeWrapper/Interop.cs b/src/Resolvers/Microsoft.DotNet.NativeWrapper/Interop.cs index 797048134557..40faa7278c20 100644 --- a/src/Resolvers/Microsoft.DotNet.NativeWrapper/Interop.cs +++ b/src/Resolvers/Microsoft.DotNet.NativeWrapper/Interop.cs @@ -3,6 +3,9 @@ using System.Reflection; using System.Runtime.CompilerServices; +#if NET +using System.Runtime.InteropServices.Marshalling; +#endif namespace Microsoft.DotNet.NativeWrapper { @@ -255,10 +258,10 @@ internal struct hostfxr_dotnet_environment_sdk_info #if NET [LibraryImport(Constants.HostFxr, StringMarshalling = StringMarshalling.Custom, StringMarshallingCustomType = typeof(PlatformStringMarshaller))] [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial int hostfxr_get_dotnet_environment_info( + internal static partial StatusCode hostfxr_get_dotnet_environment_info( #else [DllImport(Constants.HostFxr, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] - internal static extern int hostfxr_get_dotnet_environment_info( + internal static extern StatusCode hostfxr_get_dotnet_environment_info( #endif string? dotnetRoot, nint reserved, @@ -419,5 +422,144 @@ private static extern StatusCode hostfxr_get_available_sdks_private( #endif string? exeDir, hostfxr_get_available_sdks_result_fn result); + + /// + /// Delegate type identifiers for . + /// + internal enum hostfxr_delegate_type + { + hdt_com_activation = 0, + hdt_load_in_memory_assembly = 1, + hdt_winrt_activation = 2, + hdt_com_register = 3, + hdt_com_unregister = 4, + hdt_load_assembly_and_get_function_pointer = 5, + hdt_get_function_pointer = 6, + hdt_load_assembly = 7, + hdt_load_assembly_bytes = 8, + } + + /// + /// Parameters for and + /// . + /// + [StructLayout(LayoutKind.Sequential)] + internal struct hostfxr_initialize_parameters + { + public nint size; + public nint host_path; + public nint dotnet_root; + } + + /// + /// Initializes the hosting context from a runtime configuration file. + /// +#if NET + [LibraryImport(Constants.HostFxr)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial StatusCode hostfxr_initialize_for_runtime_config( +#else + [DllImport(Constants.HostFxr, CallingConvention = CallingConvention.Cdecl)] + internal static extern StatusCode hostfxr_initialize_for_runtime_config( +#endif + nint runtimeConfigPath, + in hostfxr_initialize_parameters parameters, + out nint hostContextHandle); + + /// + /// Gets a runtime delegate of the specified type. + /// +#if NET + [LibraryImport(Constants.HostFxr)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial StatusCode hostfxr_get_runtime_delegate( +#else + [DllImport(Constants.HostFxr, CallingConvention = CallingConvention.Cdecl)] + internal static extern StatusCode hostfxr_get_runtime_delegate( +#endif + nint hostContextHandle, + hostfxr_delegate_type type, + out nint @delegate); + + /// + /// Initializes the hosting context for running a dotnet command line application. + /// +#if NET + [LibraryImport(Constants.HostFxr, + StringMarshalling = StringMarshalling.Custom, + StringMarshallingCustomType = typeof(PlatformStringMarshaller))] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial StatusCode hostfxr_initialize_for_dotnet_command_line( +#else + [DllImport(Constants.HostFxr, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + internal static extern StatusCode hostfxr_initialize_for_dotnet_command_line( +#endif + int argc, +#if NET + [MarshalUsing(typeof(ArrayMarshaller))] + [MarshalUsing(typeof(PlatformStringMarshaller), ElementIndirectionDepth = 1)] +#else + [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)] +#endif + [In] string[] argv, + in hostfxr_initialize_parameters parameters, + out nint hostContextHandle); + + /// + /// Runs the application initialized by . + /// +#if NET + [LibraryImport(Constants.HostFxr)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial StatusCode hostfxr_run_app( +#else + [DllImport(Constants.HostFxr, CallingConvention = CallingConvention.Cdecl)] + internal static extern StatusCode hostfxr_run_app( +#endif + nint hostContextHandle); + + /// + /// Closes the hosting context handle and releases associated resources. + /// +#if NET + [LibraryImport(Constants.HostFxr)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial StatusCode hostfxr_close( +#else + [DllImport(Constants.HostFxr, CallingConvention = CallingConvention.Cdecl)] + internal static extern StatusCode hostfxr_close( +#endif + nint hostContextHandle); + + /// + /// Sets a runtime property value. Must be called before the runtime is loaded. + /// + /// Handle from initialization. The runtime must not be loaded yet. + /// Name of the property to set. + /// Value to set, or to remove the property. + /// + /// on success, if the runtime + /// is already loaded, or another error status code. + /// + /// + /// + /// Properties set through this API are passed to the runtime during initialization and can affect + /// runtime behavior. Once the runtime is loaded, properties become read-only. + /// + /// +#if NET + [LibraryImport( + Constants.HostFxr, + StringMarshalling = StringMarshalling.Custom, + StringMarshallingCustomType = typeof(PlatformStringMarshaller))] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial StatusCode hostfxr_set_runtime_property_value( +#else + [DllImport(Constants.HostFxr, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] + internal static extern StatusCode hostfxr_set_runtime_property_value( +#endif + nint hostContextHandle, + string name, + string? value); } } diff --git a/src/Resolvers/Microsoft.DotNet.NativeWrapper/Microsoft.DotNet.NativeWrapper.csproj b/src/Resolvers/Microsoft.DotNet.NativeWrapper/Microsoft.DotNet.NativeWrapper.csproj index a243c2df6dc6..c51d4499dee5 100644 --- a/src/Resolvers/Microsoft.DotNet.NativeWrapper/Microsoft.DotNet.NativeWrapper.csproj +++ b/src/Resolvers/Microsoft.DotNet.NativeWrapper/Microsoft.DotNet.NativeWrapper.csproj @@ -17,4 +17,8 @@ + + + +
diff --git a/src/Resolvers/Microsoft.DotNet.NativeWrapper/NETBundlesNativeWrapper.cs b/src/Resolvers/Microsoft.DotNet.NativeWrapper/NETBundlesNativeWrapper.cs index 7585777aff15..057c76df599c 100644 --- a/src/Resolvers/Microsoft.DotNet.NativeWrapper/NETBundlesNativeWrapper.cs +++ b/src/Resolvers/Microsoft.DotNet.NativeWrapper/NETBundlesNativeWrapper.cs @@ -11,7 +11,7 @@ public NetEnvironmentInfo GetDotnetEnvironmentInfo(string dotnetExeDirectory) IntPtr reserved = IntPtr.Zero; IntPtr resultContext = IntPtr.Zero; - int errorCode = Interop.hostfxr_get_dotnet_environment_info(dotnetExeDirectory, default, info.Initialize, default); + StatusCode errorCode = Interop.hostfxr_get_dotnet_environment_info(dotnetExeDirectory, default, info.Initialize, default); return info; } diff --git a/start-code.cmd b/start-code.cmd index 08af10160fb6..4a71cf56082c 100644 --- a/start-code.cmd +++ b/start-code.cmd @@ -23,4 +23,9 @@ IF NOT EXIST "%DOTNET_ROOT%\dotnet.exe" ( exit /b 1 ) -"%vscode%" "." \ No newline at end of file +:: Open a specific .code-workspace file if provided, otherwise default to tasks.code-workspace +IF ["%~1"] == [""] ( + "%vscode%" "%~dp0tasks.code-workspace" +) ELSE ( + "%vscode%" "%~dp0%~1" +) diff --git a/tasks.code-workspace b/tasks.code-workspace index 67a217bc7698..923b82ffad87 100644 --- a/tasks.code-workspace +++ b/tasks.code-workspace @@ -6,5 +6,106 @@ ], "settings": { "dotnet.defaultSolution": "tasks.slnf" + }, + "launch": { + "version": "0.2.0", + "configurations": [ + { + "name": "Debug dn (AOT native)", + "type": "cppvsdbg", + "request": "launch", + "preLaunchTask": "publish-and-copy-dn-aot", + "program": "${workspaceFolder}${/}artifacts${/}bin${/}dn${/}Debug${/}net11.0${/}win-x64${/}publish${/}dn.exe", + "args": ["--info"], + "cwd": "${workspaceFolder}${/}artifacts${/}bin${/}dn${/}Debug${/}net11.0${/}win-x64${/}publish", + "environment": [ + { "name": "DOTNET_ROOT", "value": "${workspaceFolder}/.dotnet" } + ], + "stopAtEntry": false, + "console": "integratedTerminal" + } + ] + }, + "tasks": { + "version": "2.0.0", + "tasks": [ + { + "label": "publish-dotnet-aot", + "command": "${workspaceFolder}/.dotnet/dotnet.exe", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/src/Cli/dotnet-aot/dotnet-aot.csproj", + "-r", "win-x64", + "-c", "Debug" + ], + "problemMatcher": "$msCompile", + "group": "build" + }, + { + "label": "publish-dn", + "command": "${workspaceFolder}/.dotnet/dotnet.exe", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/src/Cli/dn/dn.csproj", + "-r", "win-x64", + "-c", "Debug" + ], + "problemMatcher": "$msCompile", + "group": "build" + }, + { + "label": "copy-dotnet-aot-lib", + "type": "shell", + "command": "copy", + "args": [ + "${workspaceFolder}\\artifacts\\bin\\dotnet-aot\\Debug\\net11.0\\win-x64\\publish\\dotnet-aot.dll", + "${workspaceFolder}\\artifacts\\bin\\dn\\Debug\\net11.0\\win-x64\\publish\\" + ], + "problemMatcher": [] + }, + { + "label": "build-dotnet", + "command": "${workspaceFolder}/.dotnet/dotnet.exe", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/src/Cli/dotnet/dotnet.csproj", + "-c", "Debug" + ], + "problemMatcher": "$msCompile", + "group": "build" + }, + { + "label": "copy-dotnet-managed", + "type": "shell", + "command": "xcopy", + "args": [ + "${workspaceFolder}\\artifacts\\bin\\dotnet\\Debug\\net11.0\\*", + "${workspaceFolder}\\artifacts\\bin\\dn\\Debug\\net11.0\\win-x64\\publish\\", + "/S", "/Y", "/Q" + ], + "problemMatcher": [] + }, + { + "label": "publish-dn-aot", + "dependsOn": ["publish-dotnet-aot", "publish-dn", "build-dotnet"], + "dependsOrder": "sequence", + "problemMatcher": [] + }, + { + "label": "copy-all-deps", + "dependsOn": ["copy-dotnet-aot-lib", "copy-dotnet-managed"], + "dependsOrder": "sequence", + "problemMatcher": [] + }, + { + "label": "publish-and-copy-dn-aot", + "dependsOn": ["publish-dn-aot", "copy-all-deps"], + "dependsOrder": "sequence", + "problemMatcher": [] + } + ] } } From 7cef932c06e01f0812be62dd67fdf5d6ffacfb60 Mon Sep 17 00:00:00 2001 From: Logan Bussell Date: Wed, 22 Apr 2026 10:37:54 -0700 Subject: [PATCH 212/230] Update developer guide with more details about build analysis checks and workflows (#53977) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/workflows/backport.yml | 8 +++- .../workflows/fix-completions-on-comment.yml | 5 +++ .github/workflows/update-xlf-on-comment.yml | 5 +++ documentation/project-docs/developer-guide.md | 42 +++++++++++++++---- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index fffd778b9d48..5efe762cf00f 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -1,3 +1,9 @@ +# This workflow creates a "backport" pull request by cherry-picking changes +# from the source pull request to the target branch when /backport to +# is commented on a pull request. +# Action: https://github.com/dotnet/sdk/actions/workflows/backport.yml +# Keep documentation/project-docs/developer-guide.md up to date with changes in +# this workflow. name: Backport PR to branch on: issue_comment: @@ -17,4 +23,4 @@ jobs: pr_description_template: | Backport of #%source_pr_number% to %target_branch% - /cc %cc_users% \ No newline at end of file + /cc %cc_users% diff --git a/.github/workflows/fix-completions-on-comment.yml b/.github/workflows/fix-completions-on-comment.yml index 29f4bff3f363..e1a8c5051085 100644 --- a/.github/workflows/fix-completions-on-comment.yml +++ b/.github/workflows/fix-completions-on-comment.yml @@ -1,3 +1,8 @@ +# This workflow updates snapshots for CLI completion tests when +# /fixcompletions or /completions is commented on a pull request. +# Action: https://github.com/dotnet/sdk/actions/workflows/fix-completions-on-comment.yml +# Keep documentation/project-docs/developer-guide.md up to date with changes in +# this workflow. name: Fix completion snapshots on command on: diff --git a/.github/workflows/update-xlf-on-comment.yml b/.github/workflows/update-xlf-on-comment.yml index 5f67a325130a..98196608b97d 100644 --- a/.github/workflows/update-xlf-on-comment.yml +++ b/.github/workflows/update-xlf-on-comment.yml @@ -1,3 +1,8 @@ +# This workflow updates XLF files when /updatexlf or /xlf is commented on a +# pull request. +# Action: https://github.com/dotnet/sdk/actions/workflows/update-xlf-on-comment.yml +# Keep documentation/project-docs/developer-guide.md up to date with changes in +# this workflow. name: Update XLF files on command on: diff --git a/documentation/project-docs/developer-guide.md b/documentation/project-docs/developer-guide.md index e1bd2e70a080..6ab85c6deca7 100644 --- a/documentation/project-docs/developer-guide.md +++ b/documentation/project-docs/developer-guide.md @@ -180,9 +180,12 @@ taskkill /F /IM msbuild.exe /T The SDK repository includes GitHub Actions workflows that automate common maintenance tasks directly from pull requests. -### `/xlf or /updatexlf` - Update Translation Files +### `/xlf` or `/updatexlf` - Update Translation Files -When you modify `.resx` resource files, the corresponding `.xlf` translation files need to be updated. Instead of manually running the build locally, comment `/updatexlf` on the PR and the GitHub Action will: +- Workflow: [Update XLF files on command](https://github.com/dotnet/sdk/actions/workflows/update-xlf-on-comment.yml) +- Source: [update-xlf-on-comment.yml](../../.github/workflows/update-xlf-on-comment.yml) + +When you modify `.resx` resource files, the corresponding `.xlf` translation files need to be updated. Instead of manually running the build locally, comment `/xlf` or `/updatexlf` on the PR and the GitHub Action will: 1. Check out the PR branch 2. Run `./build.sh /t:UpdateXlf` (or full build if needed) @@ -192,9 +195,12 @@ This is useful when you've changed localized strings and the CI build is failing See also: [Localization documentation](Localization.md) -### `/completions or /fixcompletions` - Update CLI Completion Snapshots +### `/completions` or `/fixcompletions` - Update CLI Completion Snapshots + +- Workflow: [Fix completion snapshots on command](https://github.com/dotnet/sdk/actions/workflows/fix-completions-on-comment.yml) +- Source: [fix-completions-on-comment.yml](../../.github/workflows/fix-completions-on-comment.yml) -The CLI includes snapshot-based tests for shell completions (bash, zsh, pwsh, etc.). When you add or modify CLI commands, these snapshots need to be updated. Comment `/fixcompletions` on the PR and the GitHub Action will: +The CLI includes snapshot-based tests for shell completions (bash, zsh, pwsh, etc.). When you add or modify CLI commands, these snapshots need to be updated. Comment `/completions` or `/fixcompletions` on the PR and the GitHub Action will: 1. Build the repository 2. Run the completion tests @@ -205,12 +211,34 @@ This is useful when you've added new commands or options and the completion snap See also: [Snapshot-based testing documentation](snapshot-based-testing.md) +### `/backport to ` + +- Workflow: [Backport PR to branch](https://github.com/dotnet/sdk/actions/workflows/backport.yml) +- Source: [backport.yml](../../.github/workflows/backport.yml) + +Comment `/backport to ` on a merged PR to create a new pull request that cherry-picks the changes onto the target branch. The backport PR will be labeled with `backport` and will CC the original PR participants. + +### `/ba-g ` - Bypass Build Analysis + +Comment `/ba-g ` on a PR to unconditionally turn the Build Analysis check green. The reason +is captured by telemetry and should be descriptive - avoid non-specific justifications like +"unrelated issues". This is useful when CI failures are caused by known flaky tests or +infrastructure issues unrelated to the PR. -### `/backport to {branch}` +Example reasons: -The SDK team manages many branches. -You may use /backport to {branch_name} to mimic the process of cherry-picking a PR onto another branch. +- `/ba-g deadletter` - Helix work item crashed with "DeadLetter" status. +- `/ba-g docs-only change` - PR did not change any source code. +- `/ba-g insufficient info in logs` - No good unique pattern in the logs to open a known issue. +- `/ba-g recently fixed known issue #` - The known issue fix was already merged, but CI ran + before it. +- `/ba-g failures are from known issues #, #` - All failures have known issues + filed, but Build Analysis isn't turning green. +For details on triaging CI failures and filing known issues, see the [runtime failure analysis +documentation](https://github.com/dotnet/runtime/blob/main/docs/workflow/ci/failure-analysis.md). +The [Build Analysis Known Issue Helper](https://helix.dot.net/BuildAnalysis/CreateKnownIssues) can +assist in creating known issue reports with the correct labels and JSON format. ## Adding a Command From e259547ae0d38e7273966e3ff12ae381f4d263bf Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Wed, 22 Apr 2026 12:52:56 -0500 Subject: [PATCH 213/230] Drop netstandard2.0 support from template engine (#54041) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/Versions.props | 1 - src/TemplateEngine/Directory.Build.props | 8 -------- .../Microsoft.TemplateEngine.Abstractions.csproj | 2 +- .../Microsoft.TemplateEngine.Core.Contracts.csproj | 2 +- .../Microsoft.TemplateEngine.Core.csproj | 2 +- .../Microsoft.TemplateEngine.Edge.csproj | 12 ++++-------- .../Microsoft.TemplateEngine.IDE.csproj | 2 +- ...mplateEngine.Orchestrator.RunnableProjects.csproj | 2 +- .../Microsoft.TemplateEngine.Utils.csproj | 2 +- src/TemplateEngine/Shared/IsExternalInit.cs | 2 +- ...soft.TemplateEngine.TemplateLocalizer.Core.csproj | 2 +- 11 files changed, 12 insertions(+), 25 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 3e37a6104252..6cdcadaf47c9 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -61,7 +61,6 @@ 1.0.52 1.4.0 1.12.0 - 6.13.2 diff --git a/src/TemplateEngine/Directory.Build.props b/src/TemplateEngine/Directory.Build.props index 3928af1d7cd6..88a2a85355ac 100644 --- a/src/TemplateEngine/Directory.Build.props +++ b/src/TemplateEngine/Directory.Build.props @@ -8,14 +8,6 @@ $(NoWarn);NU5105;NU5128;NU5100;NU5118;0419;0649 - - false - MicrosoftAspNetCore 0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.Abstractions/Microsoft.TemplateEngine.Abstractions.csproj b/src/TemplateEngine/Microsoft.TemplateEngine.Abstractions/Microsoft.TemplateEngine.Abstractions.csproj index 8fc9cbf599c3..48fa93a1f1ca 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.Abstractions/Microsoft.TemplateEngine.Abstractions.csproj +++ b/src/TemplateEngine/Microsoft.TemplateEngine.Abstractions/Microsoft.TemplateEngine.Abstractions.csproj @@ -1,7 +1,7 @@ - $(NetMinimum);$(NetCurrent);netstandard2.0;$(NetFrameworkToolCurrent) + $(NetMinimum);$(NetCurrent);$(NetFrameworkToolCurrent) Contracts for extending Template Engine true true diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.Core.Contracts/Microsoft.TemplateEngine.Core.Contracts.csproj b/src/TemplateEngine/Microsoft.TemplateEngine.Core.Contracts/Microsoft.TemplateEngine.Core.Contracts.csproj index 267725cb7c71..438d8b2d7587 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.Core.Contracts/Microsoft.TemplateEngine.Core.Contracts.csproj +++ b/src/TemplateEngine/Microsoft.TemplateEngine.Core.Contracts/Microsoft.TemplateEngine.Core.Contracts.csproj @@ -1,7 +1,7 @@ - $(NetMinimum);$(NetCurrent);netstandard2.0;$(NetFrameworkToolCurrent) + $(NetMinimum);$(NetCurrent);$(NetFrameworkToolCurrent) Contracts for extending Microsoft.TemplateEngine.Core true true diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.Core/Microsoft.TemplateEngine.Core.csproj b/src/TemplateEngine/Microsoft.TemplateEngine.Core/Microsoft.TemplateEngine.Core.csproj index efcc6546093a..e614cb645f3a 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.Core/Microsoft.TemplateEngine.Core.csproj +++ b/src/TemplateEngine/Microsoft.TemplateEngine.Core/Microsoft.TemplateEngine.Core.csproj @@ -1,7 +1,7 @@ - $(NetMinimum);$(NetCurrent);netstandard2.0;$(NetFrameworkToolCurrent) + $(NetMinimum);$(NetCurrent);$(NetFrameworkToolCurrent) Common operations for instantiating templates using forward-only input stream operations true true diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.Edge/Microsoft.TemplateEngine.Edge.csproj b/src/TemplateEngine/Microsoft.TemplateEngine.Edge/Microsoft.TemplateEngine.Edge.csproj index 08d754f4fc24..e553e2e4b640 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.Edge/Microsoft.TemplateEngine.Edge.csproj +++ b/src/TemplateEngine/Microsoft.TemplateEngine.Edge/Microsoft.TemplateEngine.Edge.csproj @@ -1,7 +1,7 @@ - $(NetMinimum);$(NetCurrent);netstandard2.0;$(NetFrameworkToolCurrent) + $(NetMinimum);$(NetCurrent);$(NetFrameworkToolCurrent) Helper package for adding Template Engine to consuming applications true true @@ -30,13 +30,9 @@ - - - - + + + diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.IDE/Microsoft.TemplateEngine.IDE.csproj b/src/TemplateEngine/Microsoft.TemplateEngine.IDE/Microsoft.TemplateEngine.IDE.csproj index 5a8d4a05bcb9..65d24e853539 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.IDE/Microsoft.TemplateEngine.IDE.csproj +++ b/src/TemplateEngine/Microsoft.TemplateEngine.IDE/Microsoft.TemplateEngine.IDE.csproj @@ -1,7 +1,7 @@ - $(NetMinimum);$(NetCurrent);netstandard2.0;$(NetFrameworkToolCurrent) + $(NetMinimum);$(NetCurrent);$(NetFrameworkToolCurrent) Helper package for adding Template Engine to IDEs true true diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.csproj b/src/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.csproj index 1bf49d348506..bb37ff875b7e 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.csproj +++ b/src/TemplateEngine/Microsoft.TemplateEngine.Orchestrator.RunnableProjects/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.csproj @@ -1,7 +1,7 @@ - $(NetMinimum);$(NetCurrent);netstandard2.0;$(NetFrameworkToolCurrent) + $(NetMinimum);$(NetCurrent);$(NetFrameworkToolCurrent) An extension for Template Engine that allows projects that still run to be used as templates true true diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.Utils/Microsoft.TemplateEngine.Utils.csproj b/src/TemplateEngine/Microsoft.TemplateEngine.Utils/Microsoft.TemplateEngine.Utils.csproj index 5ed3ea7ffd87..90b3cb6f4946 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.Utils/Microsoft.TemplateEngine.Utils.csproj +++ b/src/TemplateEngine/Microsoft.TemplateEngine.Utils/Microsoft.TemplateEngine.Utils.csproj @@ -1,7 +1,7 @@ - $(NetMinimum);$(NetCurrent);netstandard2.0;$(NetFrameworkToolCurrent) + $(NetMinimum);$(NetCurrent);$(NetFrameworkToolCurrent) Components used by all Template Engine extensions and consumers true true diff --git a/src/TemplateEngine/Shared/IsExternalInit.cs b/src/TemplateEngine/Shared/IsExternalInit.cs index 5fb3b8678341..f96d0f09629b 100644 --- a/src/TemplateEngine/Shared/IsExternalInit.cs +++ b/src/TemplateEngine/Shared/IsExternalInit.cs @@ -1,7 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -#if NETSTANDARD || NETFRAMEWORK +#if NETFRAMEWORK using System.ComponentModel; diff --git a/src/TemplateEngine/Tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj b/src/TemplateEngine/Tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj index 22272b0ce100..4280d0642117 100644 --- a/src/TemplateEngine/Tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj +++ b/src/TemplateEngine/Tools/Microsoft.TemplateEngine.TemplateLocalizer.Core/Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj @@ -1,7 +1,7 @@ - $(NetMinimum);$(NetCurrent);netstandard2.0;$(NetFrameworkToolCurrent) + $(NetMinimum);$(NetCurrent);$(NetFrameworkToolCurrent) The core API for Template Localizer tool. true true From 09930f5fecdebecfe834f51b9a8a12feb01a819a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 21:57:41 +0000 Subject: [PATCH 214/230] Reset files to main Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Version.Details.props - eng/common/* --- NuGet.config | 2 + eng/Version.Details.props | 280 ++++--- eng/Version.Details.xml | 688 +++++++++--------- eng/common/SetupNugetSources.ps1 | 17 +- eng/common/SetupNugetSources.sh | 17 +- eng/common/build.ps1 | 2 + eng/common/build.sh | 8 +- eng/common/core-templates/job/job.yml | 13 +- .../job/publish-build-assets.yml | 24 +- eng/common/core-templates/job/renovate.yml | 196 +++++ .../job/source-index-stage1.yml | 6 +- eng/common/core-templates/jobs/jobs.yml | 5 - .../core-templates/post-build/post-build.yml | 506 ++++++------- .../post-build/setup-maestro-vars.yml | 5 +- eng/common/core-templates/stages/renovate.yml | 111 +++ .../steps/component-governance.yml | 16 + .../core-templates/steps/generate-sbom.yml | 60 +- .../steps/install-microbuild-impl.yml | 34 + .../steps/install-microbuild.yml | 64 +- .../core-templates/steps/publish-logs.yml | 9 +- .../core-templates/steps/source-build.yml | 4 +- .../steps/source-index-stage1-publish.yml | 8 +- eng/common/cross/build-rootfs.sh | 81 ++- eng/common/cross/toolchain.cmake | 15 +- eng/common/darc-init.sh | 2 +- eng/common/dotnet-install.sh | 2 +- eng/common/dotnet.sh | 2 +- eng/common/generate-sbom-prep.ps1 | 29 + eng/common/generate-sbom-prep.sh | 39 + eng/common/internal-feed-operations.sh | 2 +- eng/common/native/init-distro-rid.sh | 2 + eng/common/native/install-dependencies.sh | 11 +- eng/common/post-build/redact-logs.ps1 | 3 +- eng/common/renovate.env | 42 ++ eng/common/template-guidance.md | 5 +- eng/common/templates-official/job/job.yml | 57 +- .../steps/component-governance.yml | 7 + .../steps/publish-pipeline-artifacts.yml | 4 +- eng/common/templates/job/job.yml | 53 +- .../templates/steps/component-governance.yml | 7 + eng/common/tools.ps1 | 18 +- eng/common/tools.sh | 16 +- global.json | 6 +- 43 files changed, 1489 insertions(+), 989 deletions(-) create mode 100644 eng/common/core-templates/job/renovate.yml create mode 100644 eng/common/core-templates/stages/renovate.yml create mode 100644 eng/common/core-templates/steps/component-governance.yml create mode 100644 eng/common/core-templates/steps/install-microbuild-impl.yml create mode 100644 eng/common/generate-sbom-prep.ps1 create mode 100644 eng/common/generate-sbom-prep.sh create mode 100644 eng/common/renovate.env create mode 100644 eng/common/templates-official/steps/component-governance.yml create mode 100644 eng/common/templates/steps/component-governance.yml diff --git a/NuGet.config b/NuGet.config index f3f728c95515..4e8eb7f42e2c 100644 --- a/NuGet.config +++ b/NuGet.config @@ -23,6 +23,8 @@ + + diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 128c7cf73046..4d5ecaecb064 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -8,145 +8,135 @@ This file should be imported by eng/Versions.props 2.1.0 - 10.0.6-servicing.26176.101 - 10.0.6-servicing.26176.101 - 10.0.6-servicing.26176.101 - 10.0.6-servicing.26176.101 - 10.0.6 - 10.0.6-servicing.26176.101 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26176.101 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26176.101 - 10.0.6 - 10.0.6-servicing.26176.101 - 10.0.6-servicing.26176.101 - 10.0.0-preview.26217.116 - 10.0.6 - 10.0.6 - 18.6.0-preview-26217-116 - 18.6.0-preview-26217-116 - 7.7.0-rc.21816 - 10.0.300-alpha.26217.116 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 10.0.0-preview.26217.116 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 2.0.0-preview.1.26176.101 - 2.2.6 - 10.0.0-beta.26217.116 - 10.0.0-beta.26217.116 - 10.0.0-beta.26217.116 - 10.0.0-beta.26217.116 - 10.0.0-beta.26217.116 - 10.0.0-beta.26217.116 - 10.0.6 - 10.0.6 - 10.0.6-servicing.26176.101 - 10.0.6-servicing.26176.101 - 10.0.0-beta.26217.116 - 10.0.0-beta.26217.116 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 15.2.300-servicing.26217.116 - 10.0.6 - 5.6.0-2.26217.116 - 5.6.0-2.26217.116 - 10.0.6-servicing.26176.101 - 10.0.6 - 10.0.6 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 10.0.0-preview.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 18.6.0-preview-26208-110 + 18.6.0-preview-26208-110 + 7.6.0-rc.20910 + 11.0.100-preview.4.26208.110 + 5.7.0-1.26208.110 + 5.7.0-1.26208.110 + 5.7.0-1.26208.110 + 5.7.0-1.26208.110 + 5.7.0-1.26208.110 + 5.7.0-1.26208.110 + 5.7.0-1.26208.110 + 5.7.0-1.26208.110 + 10.0.0-preview.26208.110 + 5.7.0-1.26208.110 + 5.7.0-1.26208.110 + 2.0.0-preview.1.26208.110 + 3.0.0-preview.4.26208.110 + 11.0.0-beta.26208.110 + 11.0.0-beta.26208.110 + 11.0.0-beta.26208.110 + 11.0.0-beta.26208.110 + 11.0.0-beta.26208.110 + 11.0.0-beta.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-beta.26208.110 + 11.0.0-beta.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 15.2.100-preview4.26208.110 + 11.0.0-preview.4.26208.110 + 5.7.0-1.26208.110 + 5.7.0-1.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 10.0.0-preview.7.25377.103 - 10.0.0-preview.26217.116 - 10.0.6-servicing.26176.101 - 18.3.0-release-26217-116 - 10.0.6 - 10.0.6-servicing.26176.101 - 10.0.300-alpha.26217.116 - 10.0.300-alpha.26217.116 - 10.0.300-alpha.26217.116 - 10.0.300-alpha.26217.116 - 10.0.300-alpha.26217.116 - 10.0.300-preview.26217.116 - 10.0.300-preview.26217.116 - 10.0.300-preview.26217.116 - 10.0.300-preview.26217.116 - 10.0.300-preview.26217.116 - 10.0.300-preview.26217.116 - 10.0.300-preview.26217.116 - 10.0.300-preview.26217.116 - 10.0.300-preview.26217.116 - 18.3.0-release-26217-116 - 18.3.0-release-26217-116 - 3.2.6 - 10.0.6 - 10.0.6-servicing.26176.101 - 10.0.6 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 7.7.0-rc.21816 - 10.0.6 - 2.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 - 10.0.6 + 10.0.0-preview.26208.110 + 11.0.0-preview.4.26208.110 + 18.7.0-preview-26208-110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.100-preview.4.26208.110 + 11.0.100-preview.4.26208.110 + 11.0.100-preview.4.26208.110 + 11.0.100-preview.4.26208.110 + 11.0.100-preview.4.26208.110 + 18.7.0-preview-26208-110 + 18.7.0-preview-26208-110 + 3.3.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 7.6.0-rc.20910 + 11.0.0-preview.4.26208.110 + 3.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 + 11.0.0-preview.4.26208.110 - 2.1.0-preview.25571.1 - 4.1.0-preview.25571.1 + 2.3.0-preview.26219.1 + 4.3.0-preview.26219.1 @@ -193,7 +183,6 @@ This file should be imported by eng/Versions.props $(MicrosoftCodeAnalysisRazorToolingInternalPackageVersion) $(MicrosoftCodeAnalysisWorkspacesCommonPackageVersion) $(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion) - $(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion) $(MicrosoftDeploymentDotNetReleasesPackageVersion) $(MicrosoftDiaSymReaderPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) @@ -202,12 +191,12 @@ This file should be imported by eng/Versions.props $(MicrosoftDotNetBuildTasksWorkloadsPackageVersion) $(MicrosoftDotNetHelixSdkPackageVersion) $(MicrosoftDotNetSignToolPackageVersion) - $(MicrosoftDotNetWebItemTemplates100PackageVersion) - $(MicrosoftDotNetWebProjectTemplates100PackageVersion) + $(MicrosoftDotNetWebItemTemplates110PackageVersion) + $(MicrosoftDotNetWebProjectTemplates110PackageVersion) $(MicrosoftDotnetWinFormsProjectTemplatesPackageVersion) $(MicrosoftDotNetWpfProjectTemplatesPackageVersion) $(MicrosoftDotNetXliffTasksPackageVersion) - $(MicrosoftDotNetXUnitExtensionsPackageVersion) + $(MicrosoftDotNetXUnitV3ExtensionsPackageVersion) $(MicrosoftExtensionsConfigurationIniPackageVersion) $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) $(MicrosoftExtensionsDependencyModelPackageVersion) @@ -236,15 +225,6 @@ This file should be imported by eng/Versions.props $(MicrosoftSourceLinkCommonPackageVersion) $(MicrosoftSourceLinkGitHubPackageVersion) $(MicrosoftSourceLinkGitLabPackageVersion) - $(MicrosoftTemplateEngineAbstractionsPackageVersion) - $(MicrosoftTemplateEngineAuthoringTemplateVerifierPackageVersion) - $(MicrosoftTemplateEngineEdgePackageVersion) - $(MicrosoftTemplateEngineMocksPackageVersion) - $(MicrosoftTemplateEngineOrchestratorRunnableProjectsPackageVersion) - $(MicrosoftTemplateEngineTestHelperPackageVersion) - $(MicrosoftTemplateEngineUtilsPackageVersion) - $(MicrosoftTemplateSearchCommonPackageVersion) - $(MicrosoftTemplateSearchTemplateDiscoveryPackageVersion) $(MicrosoftTestPlatformBuildPackageVersion) $(MicrosoftTestPlatformCLIPackageVersion) $(MicrosoftWebXdtPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b868dd4ad279..7319b24bd706 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,26 @@ - + - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 - - - https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 - - - https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 - - - https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 - - - https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 @@ -68,174 +32,174 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 + + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/dotnet/dotnet - 5b150b1d949d9509e9822fa44fd52923d1d162e5 + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 - + https://github.com/microsoft/testfx - 43e592148ac1c7916908477bdffcf2a345affa6d + 2f487896471027b0c37c24b2d5b58cd20a195427 - + https://github.com/microsoft/testfx - 43e592148ac1c7916908477bdffcf2a345affa6d + 2f487896471027b0c37c24b2d5b58cd20a195427 - - https://dev.azure.com/dnceng/internal/_git/dotnet-dotnet - 47fb725acf5d7094af51aebbb5b7e5c44a3b2a77 + + https://github.com/dotnet/dotnet + 0cf6b19ed68d2d52e097e6af6d6046b4eeefefe2 diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 65ed3a8adef0..fc8d618014e0 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -1,7 +1,6 @@ # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, -# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. -# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables +# disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # @@ -174,16 +173,4 @@ foreach ($dotnetVersion in $dotnetVersions) { } } -# Check for dotnet-eng and add dotnet-eng-internal if present -$dotnetEngSource = $sources.SelectSingleNode("add[@key='dotnet-eng']") -if ($dotnetEngSource -ne $null) { - AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-eng-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password -} - -# Check for dotnet-tools and add dotnet-tools-internal if present -$dotnetToolsSource = $sources.SelectSingleNode("add[@key='dotnet-tools']") -if ($dotnetToolsSource -ne $null) { - AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-tools-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password -} - $doc.Save($filename) diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index b2163abbe71b..b97cc536379d 100755 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -1,9 +1,8 @@ #!/usr/bin/env bash # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, -# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. -# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables +# disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # @@ -174,18 +173,6 @@ for DotNetVersion in ${DotNetVersions[@]} ; do fi done -# Check for dotnet-eng and add dotnet-eng-internal if present -grep -i " /dev/null -if [ "$?" == "0" ]; then - AddOrEnablePackageSource "dotnet-eng-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$FeedSuffix" -fi - -# Check for dotnet-tools and add dotnet-tools-internal if present -grep -i " /dev/null -if [ "$?" == "0" ]; then - AddOrEnablePackageSource "dotnet-tools-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$FeedSuffix" -fi - # I want things split line by line PrevIFS=$IFS IFS=$'\n' diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 8cfee107e7a3..18397a60eb85 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -6,6 +6,7 @@ Param( [string][Alias('v')]$verbosity = "minimal", [string] $msbuildEngine = $null, [bool] $warnAsError = $true, + [string] $warnNotAsError = '', [bool] $nodeReuse = $true, [switch] $buildCheck = $false, [switch][Alias('r')]$restore, @@ -70,6 +71,7 @@ function Print-Usage() { Write-Host " -excludeCIBinarylog Don't output binary log (short: -nobl)" Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build" Write-Host " -warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" + Write-Host " -warnNotAsError Sets a semi-colon delimited list of warning codes that should not be treated as errors" Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio" Write-Host " -nativeToolsOnMachine Sets the native tools on machine environment variable (indicating that the script should use native tools on machine)" diff --git a/eng/common/build.sh b/eng/common/build.sh index 9767bb411a4f..5883e53bcfb1 100755 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -42,6 +42,7 @@ usage() echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" + echo " --warnNotAsError Sets a semi-colon delimited list of warning codes that should not be treated as errors" echo " --buildCheck Sets /check msbuild parameter" echo " --fromVMR Set when building from within the VMR" echo "" @@ -78,6 +79,7 @@ ci=false clean=false warn_as_error=true +warn_not_as_error='' node_reuse=true build_check=false binary_log=false @@ -92,7 +94,7 @@ runtime_source_feed='' runtime_source_feed_key='' properties=() -while [[ $# > 0 ]]; do +while [[ $# -gt 0 ]]; do opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in -help|-h) @@ -176,6 +178,10 @@ while [[ $# > 0 ]]; do warn_as_error=$2 shift ;; + -warnnotaserror) + warn_not_as_error=$2 + shift + ;; -nodereuse) node_reuse=$2 shift diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index eaed6d87e653..748c4f07a64d 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -19,17 +19,19 @@ parameters: # publishing defaults artifacts: '' enableMicrobuild: false + enablePreviewMicrobuild: false + microbuildPluginVersion: 'latest' enableMicrobuildForMacAndLinux: false microbuildUseESRP: true enablePublishBuildArtifacts: false enablePublishBuildAssets: false enablePublishTestResults: false - enablePublishing: false enableBuildRetry: false mergeTestResults: false testRunTitle: '' testResultsFormat: '' name: '' + componentGovernanceSteps: [] preSteps: [] artifactPublishSteps: [] runAsPublic: false @@ -71,6 +73,8 @@ jobs: templateContext: ${{ parameters.templateContext }} variables: + - name: AllowPtrToDetectTestRunRetryFiles + value: true - ${{ if ne(parameters.enableTelemetry, 'false') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE value: '$(Build.Repository.Uri)' @@ -128,6 +132,8 @@ jobs: - template: /eng/common/core-templates/steps/install-microbuild.yml parameters: enableMicrobuild: ${{ parameters.enableMicrobuild }} + enablePreviewMicrobuild: ${{ parameters.enablePreviewMicrobuild }} + microbuildPluginVersion: ${{ parameters.microbuildPluginVersion }} enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} microbuildUseESRP: ${{ parameters.microbuildUseESRP }} continueOnError: ${{ parameters.continueOnError }} @@ -146,10 +152,15 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} + - ${{ each step in parameters.componentGovernanceSteps }}: + - ${{ step }} + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - template: /eng/common/core-templates/steps/cleanup-microbuild.yml parameters: enableMicrobuild: ${{ parameters.enableMicrobuild }} + enablePreviewMicrobuild: ${{ parameters.enablePreviewMicrobuild }} + microbuildPluginVersion: ${{ parameters.microbuildPluginVersion }} enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} continueOnError: ${{ parameters.continueOnError }} diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index 06f2eed0323d..9d7490518c48 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -91,8 +91,8 @@ jobs: fetchDepth: 3 clean: true - - ${{ if eq(parameters.isAssetlessBuild, 'false') }}: - - ${{ if eq(parameters.publishingVersion, 3) }}: + - ${{ if eq(parameters.isAssetlessBuild, 'false') }}: + - ${{ if eq(parameters.publishingVersion, 3) }}: - task: DownloadPipelineArtifact@2 displayName: Download Asset Manifests inputs: @@ -117,7 +117,7 @@ jobs: flattenFolders: true condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} - + - task: NuGetAuthenticate@1 # Populate internal runtime variables. @@ -125,7 +125,7 @@ jobs: ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: parameters: legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) - + - template: /eng/common/templates/steps/enable-internal-runtimes.yml - task: AzureCLI@2 @@ -145,7 +145,7 @@ jobs: condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} - + - task: powershell@2 displayName: Create ReleaseConfigs Artifact inputs: @@ -172,18 +172,17 @@ jobs: targetPath: '$(Build.ArtifactStagingDirectory)/MergedManifest.xml' artifactName: AssetManifests displayName: 'Publish Merged Manifest' - retryCountOnTaskFailure: 10 # for any files being locked - isProduction: false # just metadata for publishing + retryCountOnTaskFailure: 10 # for any logs being locked + sbomEnabled: false # we don't need SBOM for logs - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish ReleaseConfigs Artifact - targetPath: '$(Build.StagingDirectory)/ReleaseConfigs' + pathToPublish: '$(Build.StagingDirectory)/ReleaseConfigs' + publishLocation: Container artifactName: ReleaseConfigs - retryCountOnTaskFailure: 10 # for any files being locked - isProduction: false # just metadata for publishing - ${{ if or(eq(parameters.publishAssetsImmediately, 'true'), eq(parameters.isAssetlessBuild, 'true')) }}: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -191,7 +190,7 @@ jobs: BARBuildId: ${{ parameters.BARBuildId }} PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} - + # Darc is targeting 8.0, so make sure it's installed - task: UseDotNet@2 inputs: @@ -219,5 +218,4 @@ jobs: - template: /eng/common/core-templates/steps/publish-logs.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - StageLabel: 'BuildAssetRegistry' JobLabel: 'Publish_Artifacts_Logs' diff --git a/eng/common/core-templates/job/renovate.yml b/eng/common/core-templates/job/renovate.yml new file mode 100644 index 000000000000..ab233539b5dc --- /dev/null +++ b/eng/common/core-templates/job/renovate.yml @@ -0,0 +1,196 @@ +# -------------------------------------------------------------------------------------- +# Renovate Bot Job Template +# -------------------------------------------------------------------------------------- +# This Azure DevOps pipeline job template runs Renovate (https://docs.renovatebot.com/) +# to automatically update dependencies in a GitHub repository. +# +# Renovate scans the repository for dependency files and creates pull requests to update +# outdated dependencies based on the configuration specified in the renovateConfigPath +# parameter. +# +# Usage: +# For each product repo wanting to make use of Renovate, this template is called from +# an internal Azure DevOps pipeline, typically with a schedule trigger, to check for +# and propose dependency updates. +# +# For more info, see https://github.com/dotnet/arcade/blob/main/Documentation/Renovate.md +# -------------------------------------------------------------------------------------- + +parameters: + +# Path to the Renovate configuration file within the repository. +- name: renovateConfigPath + type: string + default: 'eng/renovate.json' + +# GitHub repository to run Renovate against, in the format 'owner/repo'. +# This could technically be any repo but convention is to target the same +# repo that contains the calling pipeline. The Renovate config file would +# be co-located with the pipeline's repo and, in most cases, the config +# file is specific to the repo being targeted. +- name: gitHubRepo + type: string + +# List of base branches to target for Renovate PRs. +# NOTE: The Renovate configuration file is always read from the branch where the +# pipeline is run, NOT from the target branches specified here. If you need different +# configurations for different branches, run the pipeline from each branch separately. +- name: baseBranches + type: object + default: + - main + +# When true, Renovate will run in dry run mode, which previews changes without creating PRs. +# See the 'Run Renovate' step log output for details of what would have been changed. +- name: dryRun + type: boolean + default: false + +# By default, Renovate will not recreate a PR for a given dependency/version pair that was +# previously closed. This allows opting in to always recreating PRs even if they were +# previously closed. +- name: forceRecreatePR + type: boolean + default: false + +# Name of the arcade repository resource in the pipeline. +# This allows repos which haven't been onboarded to Arcade to still use this +# template by checking out the repo as a resource with a custom name and pointing +# this parameter to it. +- name: arcadeRepoResource + type: string + default: self + +# Directory name for the self repo under $(Build.SourcesDirectory) in multi-checkout. +# In multi-checkout (when arcadeRepoResource != 'self'), Azure DevOps checks out the +# self repo to $(Build.SourcesDirectory)/. Set this to match the auto-generated +# directory name. Using the auto-generated name is necessary rather than explicitly +# defining a checkout path because container jobs expect repos to live under the agent's +# workspace ($(Pipeline.Workspace)). On some self-hosted setups the host path +# (e.g., /mnt/vss/_work) differs from the container path (e.g., /__w), and a custom checkout +# path can fail validation. Using the default checkout location keeps the paths consistent +# and avoids this issue. +- name: selfRepoName + type: string + default: '' +- name: arcadeRepoName + type: string + default: '' + +# Pool configuration for the job. +- name: pool + type: object + default: + name: NetCore1ESPool-Internal + image: build.azurelinux.3.amd64 + os: linux + +jobs: +- job: Renovate + displayName: Run Renovate + container: RenovateContainer + variables: + - group: dotnet-renovate-bot + # The Renovate version is automatically updated by https://github.com/dotnet/arcade/blob/main/azure-pipelines-renovate.yml. + # Changing the variable name here would require updating the name in https://github.com/dotnet/arcade/blob/main/eng/renovate.json as well. + - name: renovateVersion + value: '42' + readonly: true + - name: renovateLogFilePath + value: '$(Build.ArtifactStagingDirectory)/renovate.json' + readonly: true + - name: dryRunArg + readonly: true + ${{ if eq(parameters.dryRun, true) }}: + value: 'full' + ${{ else }}: + value: '' + - name: recreateWhenArg + readonly: true + ${{ if eq(parameters.forceRecreatePR, true) }}: + value: 'always' + ${{ else }}: + value: '' + # In multi-checkout (without custom paths), Azure DevOps places each repo under + # $(Build.SourcesDirectory)/. selfRepoName must be provided in that case. + - name: selfRepoPath + readonly: true + ${{ if eq(parameters.arcadeRepoResource, 'self') }}: + value: '$(Build.SourcesDirectory)' + ${{ else }}: + value: '$(Build.SourcesDirectory)/${{ parameters.selfRepoName }}' + - name: arcadeRepoPath + readonly: true + ${{ if eq(parameters.arcadeRepoResource, 'self') }}: + value: '$(Build.SourcesDirectory)' + ${{ else }}: + value: '$(Build.SourcesDirectory)/${{ parameters.arcadeRepoName }}' + pool: ${{ parameters.pool }} + + templateContext: + outputParentDirectory: $(Build.ArtifactStagingDirectory) + outputs: + - output: pipelineArtifact + displayName: Publish Renovate Log + condition: succeededOrFailed() + targetPath: $(Build.ArtifactStagingDirectory) + artifactName: $(Agent.JobName)_Logs_Attempt$(System.JobAttempt) + sbomEnabled: false + + steps: + - checkout: self + fetchDepth: 1 + + - ${{ if ne(parameters.arcadeRepoResource, 'self') }}: + - checkout: ${{ parameters.arcadeRepoResource }} + fetchDepth: 1 + + - script: | + renovate-config-validator $(selfRepoPath)/${{parameters.renovateConfigPath}} 2>&1 | tee /tmp/renovate-config-validator.out + validatorExit=${PIPESTATUS[0]} + if grep -q '^ WARN:' /tmp/renovate-config-validator.out; then + echo "##vso[task.logissue type=warning]Renovate config validator produced warnings." + echo "##vso[task.complete result=SucceededWithIssues]" + fi + exit $validatorExit + displayName: Validate Renovate config + env: + LOG_LEVEL: info + LOG_FILE_LEVEL: debug + LOG_FILE: $(Build.ArtifactStagingDirectory)/renovate-config-validator.json + + - script: | + . $(arcadeRepoPath)/eng/common/renovate.env + renovate 2>&1 | tee /tmp/renovate.out + renovateExit=${PIPESTATUS[0]} + if grep -q '^ WARN:' /tmp/renovate.out; then + echo "##vso[task.logissue type=warning]Renovate produced warnings." + echo "##vso[task.complete result=SucceededWithIssues]" + fi + exit $renovateExit + displayName: Run Renovate + env: + RENOVATE_FORK_TOKEN: $(BotAccount-dotnet-renovate-bot-PAT) + RENOVATE_TOKEN: $(BotAccount-dotnet-renovate-bot-PAT) + RENOVATE_REPOSITORIES: ${{parameters.gitHubRepo}} + RENOVATE_BASE_BRANCHES: ${{ convertToJson(parameters.baseBranches) }} + RENOVATE_DRY_RUN: $(dryRunArg) + RENOVATE_RECREATE_WHEN: $(recreateWhenArg) + LOG_LEVEL: info + LOG_FILE_LEVEL: debug + LOG_FILE: $(renovateLogFilePath) + RENOVATE_CONFIG_FILE: $(selfRepoPath)/${{parameters.renovateConfigPath}} + + - script: | + echo "PRs created by Renovate:" + if [ -s "$(renovateLogFilePath)" ]; then + if ! jq -r 'select(.msg == "PR created" and .pr != null) | "https://github.com/\(.repository)/pull/\(.pr)"' "$(renovateLogFilePath)" | sort -u; then + echo "##vso[task.logissue type=warning]Failed to parse Renovate log file with jq." + echo "##vso[task.complete result=SucceededWithIssues]" + fi + else + echo "##vso[task.logissue type=warning]No Renovate log file found or file is empty." + echo "##vso[task.complete result=SucceededWithIssues]" + fi + displayName: List created PRs + condition: and(succeededOrFailed(), eq('${{ parameters.dryRun }}', false)) diff --git a/eng/common/core-templates/job/source-index-stage1.yml b/eng/common/core-templates/job/source-index-stage1.yml index 76baf5c27258..bac6ac5faac3 100644 --- a/eng/common/core-templates/job/source-index-stage1.yml +++ b/eng/common/core-templates/job/source-index-stage1.yml @@ -15,6 +15,8 @@ jobs: variables: - name: BinlogPath value: ${{ parameters.binlogPath }} + - name: skipComponentGovernanceDetection + value: true - template: /eng/common/core-templates/variables/pool-providers.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -25,10 +27,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - image: windows.vs2026preview.scout.amd64.open + image: windows.vs2026.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - image: windows.vs2026preview.scout.amd64 + image: windows.vs2026.amd64 steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index cc8cce452786..01ada7476651 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -43,10 +43,6 @@ parameters: artifacts: {} is1ESPipeline: '' - - # Publishing version w/default. - publishingVersion: 3 - repositoryAlias: self officialBuildId: '' @@ -106,7 +102,6 @@ jobs: parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} continueOnError: ${{ parameters.continueOnError }} - publishingVersion: ${{ parameters.publishingVersion }} dependsOn: - ${{ if ne(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.publishBuildAssetsDependsOn }}: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index 905a6315e2d5..0994189969f3 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -1,118 +1,107 @@ parameters: - # Which publishing infra should be used. THIS SHOULD MATCH THE VERSION ON THE BUILD MANIFEST. - # Publishing V1 is no longer supported - # Publishing V2 is no longer supported - # Publishing V3 is the default - - name: publishingInfraVersion - displayName: Which version of publishing should be used to promote the build definition? - type: number - default: 3 - values: - - 3 - - 4 - - - name: BARBuildId - displayName: BAR Build Id - type: number - default: 0 - - - name: PromoteToChannelIds - displayName: Channel to promote BARBuildId to - type: string - default: '' - - - name: enableSourceLinkValidation - displayName: Enable SourceLink validation - type: boolean - default: false - - - name: enableSigningValidation - displayName: Enable signing validation - type: boolean - default: true - - - name: enableSymbolValidation - displayName: Enable symbol validation - type: boolean - default: false - - - name: enableNugetValidation - displayName: Enable NuGet validation - type: boolean - default: true - - - name: publishInstallersAndChecksums - displayName: Publish installers and checksums - type: boolean - default: true - - - name: requireDefaultChannels - displayName: Fail the build if there are no default channel(s) registrations for the current build - type: boolean - default: false - - - name: SDLValidationParameters - type: object - default: - enable: false - publishGdn: false - continueOnError: false - params: '' - artifactNames: '' - downloadArtifacts: true - - - name: isAssetlessBuild - type: boolean - displayName: Is Assetless Build - default: false - - # These parameters let the user customize the call to sdk-task.ps1 for publishing - # symbols & general artifacts as well as for signing validation - - name: symbolPublishingAdditionalParameters - displayName: Symbol publishing additional parameters - type: string - default: '' - - - name: artifactsPublishingAdditionalParameters - displayName: Artifact publishing additional parameters - type: string - default: '' - - - name: signingValidationAdditionalParameters - displayName: Signing validation additional parameters - type: string - default: '' - - # Which stages should finish execution before post-build stages start - - name: validateDependsOn - type: object - default: - - build - - - name: publishDependsOn - type: object - default: - - Validate - - # Optional: Call asset publishing rather than running in a separate stage - - name: publishAssetsImmediately - type: boolean - default: false - - - name: is1ESPipeline - type: boolean - default: false +# Which publishing infra should be used. THIS SHOULD MATCH THE VERSION ON THE BUILD MANIFEST. +# Publishing V1 is no longer supported +# Publishing V2 is no longer supported +# Publishing V3 is the default +- name: publishingInfraVersion + displayName: Which version of publishing should be used to promote the build definition? + type: number + default: 3 + values: + - 3 + +- name: BARBuildId + displayName: BAR Build Id + type: number + default: 0 + +- name: PromoteToChannelIds + displayName: Channel to promote BARBuildId to + type: string + default: '' + +- name: enableSourceLinkValidation + displayName: Enable SourceLink validation + type: boolean + default: false + +- name: enableSigningValidation + displayName: Enable signing validation + type: boolean + default: true + +- name: enableSymbolValidation + displayName: Enable symbol validation + type: boolean + default: false + +- name: enableNugetValidation + displayName: Enable NuGet validation + type: boolean + default: true + +- name: publishInstallersAndChecksums + displayName: Publish installers and checksums + type: boolean + default: true + +- name: requireDefaultChannels + displayName: Fail the build if there are no default channel(s) registrations for the current build + type: boolean + default: false + +- name: isAssetlessBuild + type: boolean + displayName: Is Assetless Build + default: false + +# These parameters let the user customize the call to sdk-task.ps1 for publishing +# symbols & general artifacts as well as for signing validation +- name: symbolPublishingAdditionalParameters + displayName: Symbol publishing additional parameters + type: string + default: '' + +- name: artifactsPublishingAdditionalParameters + displayName: Artifact publishing additional parameters + type: string + default: '' + +- name: signingValidationAdditionalParameters + displayName: Signing validation additional parameters + type: string + default: '' + +# Which stages should finish execution before post-build stages start +- name: validateDependsOn + type: object + default: + - build + +- name: publishDependsOn + type: object + default: + - Validate + +# Optional: Call asset publishing rather than running in a separate stage +- name: publishAssetsImmediately + type: boolean + default: false + +- name: is1ESPipeline + type: boolean + default: false stages: -- ${{ if or(eq( parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}: +- ${{ if or(eq( parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true')) }}: - stage: Validate dependsOn: ${{ parameters.validateDependsOn }} displayName: Validate Build Assets variables: - - template: /eng/common/core-templates/post-build/common-variables.yml - - template: /eng/common/core-templates/variables/pool-providers.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} + - template: /eng/common/core-templates/post-build/common-variables.yml + - template: /eng/common/core-templates/variables/pool-providers.yml + parameters: + is1ESPipeline: ${{ parameters.is1ESPipeline }} jobs: - job: displayName: NuGet Validation @@ -128,49 +117,35 @@ stages: ${{ else }}: ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) - image: windows.vs2026preview.scout.amd64 + image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2026preview.scout.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml - parameters: - BARBuildId: ${{ parameters.BARBuildId }} - PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} - is1ESPipeline: ${{ parameters.is1ESPipeline }} - - - ${{ if ne(parameters.publishingInfraVersion, 4) }}: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(AzDOProjectName) - pipeline: $(AzDOPipelineId) - buildId: $(AzDOBuildId) - artifactName: PackageArtifacts - checkDownloadedFiles: true - - ${{ if eq(parameters.publishingInfraVersion, 4) }}: - - task: DownloadPipelineArtifact@2 - displayName: Download Pipeline Artifacts (V4) - inputs: - itemPattern: '*/packages/**/*.nupkg' - targetPath: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' - - task: CopyFiles@2 - displayName: Flatten packages to PackageArtifacts - inputs: - SourceFolder: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' - Contents: '**/*.nupkg' - TargetFolder: '$(Build.ArtifactStagingDirectory)/PackageArtifacts' - flattenFolders: true - - - task: PowerShell@2 - displayName: Validate - inputs: - filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/nuget-validation.ps1 - arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ + - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + is1ESPipeline: ${{ parameters.is1ESPipeline }} + + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: PackageArtifacts + checkDownloadedFiles: true + + - task: PowerShell@2 + displayName: Validate + inputs: + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/nuget-validation.ps1 + arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ - job: displayName: Signing Validation @@ -184,68 +159,54 @@ stages: os: windows # If it's not devdiv, it's dnceng ${{ else }}: - ${{ if eq(parameters.is1ESPipeline, true) }}: + ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2026preview.scout.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml - parameters: - BARBuildId: ${{ parameters.BARBuildId }} - PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} - is1ESPipeline: ${{ parameters.is1ESPipeline }} - - - ${{ if ne(parameters.publishingInfraVersion, 4) }}: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(AzDOProjectName) - pipeline: $(AzDOPipelineId) - buildId: $(AzDOBuildId) - artifactName: PackageArtifacts - checkDownloadedFiles: true - - ${{ if eq(parameters.publishingInfraVersion, 4) }}: - - task: DownloadPipelineArtifact@2 - displayName: Download Pipeline Artifacts (V4) - inputs: - itemPattern: '*/packages/**/*.nupkg' - targetPath: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' - - task: CopyFiles@2 - displayName: Flatten packages to PackageArtifacts - inputs: - SourceFolder: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' - Contents: '**/*.nupkg' - TargetFolder: '$(Build.ArtifactStagingDirectory)/PackageArtifacts' - flattenFolders: true - - # This is necessary whenever we want to publish/restore to an AzDO private feed - # Since sdk-task.ps1 tries to restore packages we need to do this authentication here - # otherwise it'll complain about accessing a private feed. - - task: NuGetAuthenticate@1 - displayName: 'Authenticate to AzDO Feeds' - - # Signing validation will optionally work with the buildmanifest file which is downloaded from - # Azure DevOps above. - - task: PowerShell@2 - displayName: Validate - inputs: - filePath: eng\common\sdk-task.ps1 - arguments: -task SigningValidation -restore -msbuildEngine vs - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' - /p:SignCheckExclusionsFile='$(System.DefaultWorkingDirectory)/eng/SignCheckExclusionsFile.txt' - ${{ parameters.signingValidationAdditionalParameters }} - - - template: /eng/common/core-templates/steps/publish-logs.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} - StageLabel: 'Validation' - JobLabel: 'Signing' - BinlogToolVersion: $(BinlogToolVersion) + - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + is1ESPipeline: ${{ parameters.is1ESPipeline }} + + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: PackageArtifacts + checkDownloadedFiles: true + + # This is necessary whenever we want to publish/restore to an AzDO private feed + # Since sdk-task.ps1 tries to restore packages we need to do this authentication here + # otherwise it'll complain about accessing a private feed. + - task: NuGetAuthenticate@1 + displayName: 'Authenticate to AzDO Feeds' + + # Signing validation will optionally work with the buildmanifest file which is downloaded from + # Azure DevOps above. + - task: PowerShell@2 + displayName: Validate + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task SigningValidation -restore + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' + /p:SignCheckExclusionsFile='$(System.DefaultWorkingDirectory)/eng/SignCheckExclusionsFile.txt' + ${{ parameters.signingValidationAdditionalParameters }} + + - template: /eng/common/core-templates/steps/publish-logs.yml + parameters: + is1ESPipeline: ${{ parameters.is1ESPipeline }} + StageLabel: 'Validation' + JobLabel: 'Signing' + BinlogToolVersion: $(BinlogToolVersion) - job: displayName: SourceLink Validation @@ -259,68 +220,54 @@ stages: os: windows # If it's not devdiv, it's dnceng ${{ else }}: - ${{ if eq(parameters.is1ESPipeline, true) }}: + ${{ if eq(parameters.is1ESPipeline, true) }}: name: $(DncEngInternalBuildPool) image: windows.vs2026.amd64 os: windows ${{ else }}: name: $(DncEngInternalBuildPool) - demands: ImageOverride -equals windows.vs2026preview.scout.amd64 + demands: ImageOverride -equals windows.vs2026.amd64 steps: - - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml - parameters: - BARBuildId: ${{ parameters.BARBuildId }} - PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} - is1ESPipeline: ${{ parameters.is1ESPipeline }} - - - ${{ if ne(parameters.publishingInfraVersion, 4) }}: - - task: DownloadBuildArtifacts@0 - displayName: Download Blob Artifacts - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(AzDOProjectName) - pipeline: $(AzDOPipelineId) - buildId: $(AzDOBuildId) - artifactName: BlobArtifacts - checkDownloadedFiles: true - - ${{ if eq(parameters.publishingInfraVersion, 4) }}: - - task: DownloadPipelineArtifact@2 - displayName: Download Pipeline Artifacts (V4) - inputs: - itemPattern: '*/assets/**' - targetPath: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' - - task: CopyFiles@2 - displayName: Flatten assets to BlobArtifacts - inputs: - SourceFolder: '$(Build.ArtifactStagingDirectory)/PipelineArtifactsDownload' - Contents: '**/*' - TargetFolder: '$(Build.ArtifactStagingDirectory)/BlobArtifacts' - flattenFolders: true - - - task: PowerShell@2 - displayName: Validate - inputs: - filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/sourcelink-validation.ps1 - arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/ - -ExtractPath $(Agent.BuildDirectory)/Extract/ - -GHRepoName $(Build.Repository.Name) - -GHCommit $(Build.SourceVersion) - -SourcelinkCliVersion $(SourceLinkCLIVersion) - continueOnError: true + - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + is1ESPipeline: ${{ parameters.is1ESPipeline }} + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: specific + buildVersionToDownload: specific + project: $(AzDOProjectName) + pipeline: $(AzDOPipelineId) + buildId: $(AzDOBuildId) + artifactName: BlobArtifacts + checkDownloadedFiles: true + + - task: PowerShell@2 + displayName: Validate + inputs: + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/sourcelink-validation.ps1 + arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/ + -ExtractPath $(Agent.BuildDirectory)/Extract/ + -GHRepoName $(Build.Repository.Name) + -GHCommit $(Build.SourceVersion) + -SourcelinkCliVersion $(SourceLinkCLIVersion) + continueOnError: true - ${{ if ne(parameters.publishAssetsImmediately, 'true') }}: - stage: publish_using_darc - ${{ if or(eq(parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}: + ${{ if or(eq(parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true')) }}: dependsOn: ${{ parameters.publishDependsOn }} ${{ else }}: dependsOn: ${{ parameters.validateDependsOn }} displayName: Publish using Darc variables: - - template: /eng/common/core-templates/post-build/common-variables.yml - - template: /eng/common/core-templates/variables/pool-providers.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} + - template: /eng/common/core-templates/post-build/common-variables.yml + - template: /eng/common/core-templates/variables/pool-providers.yml + parameters: + is1ESPipeline: ${{ parameters.is1ESPipeline }} jobs: - job: displayName: Publish Using Darc @@ -334,7 +281,7 @@ stages: os: windows # If it's not devdiv, it's dnceng ${{ else }}: - ${{ if eq(parameters.is1ESPipeline, true) }}: + ${{ if eq(parameters.is1ESPipeline, true) }}: name: NetCore1ESPool-Publishing-Internal image: windows.vs2026.amd64 os: windows @@ -342,36 +289,35 @@ stages: name: NetCore1ESPool-Publishing-Internal demands: ImageOverride -equals windows.vs2026.amd64 steps: - - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml - parameters: - BARBuildId: ${{ parameters.BARBuildId }} - PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} - is1ESPipeline: ${{ parameters.is1ESPipeline }} - - - task: NuGetAuthenticate@1 - - # Populate internal runtime variables. - - template: /eng/common/templates/steps/enable-internal-sources.yml - parameters: - legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) - - - template: /eng/common/templates/steps/enable-internal-runtimes.yml - - # Darc is targeting 8.0, so make sure it's installed - - task: UseDotNet@2 - inputs: - version: 8.0.x - - - task: AzureCLI@2 - displayName: Publish Using Darc - inputs: - azureSubscription: "Darc: Maestro Production" - scriptType: ps - scriptLocation: scriptPath - scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 - arguments: > + - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + is1ESPipeline: ${{ parameters.is1ESPipeline }} + + - task: NuGetAuthenticate@1 + + # Populate internal runtime variables. + - template: /eng/common/templates/steps/enable-internal-sources.yml + parameters: + legacyCredential: $(dn-bot-dnceng-artifact-feeds-rw) + + - template: /eng/common/templates/steps/enable-internal-runtimes.yml + + - task: UseDotNet@2 + inputs: + version: 8.0.x + + - task: AzureCLI@2 + displayName: Publish Using Darc + inputs: + azureSubscription: "Darc: Maestro Production" + scriptType: ps + scriptLocation: scriptPath + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 + arguments: > -BuildId $(BARBuildId) - -PublishingInfraVersion 3 + -PublishingInfraVersion ${{ parameters.publishingInfraVersion }} -AzdoToken '$(System.AccessToken)' -WaitPublishingFinish true -RequireDefaultChannels ${{ parameters.requireDefaultChannels }} diff --git a/eng/common/core-templates/post-build/setup-maestro-vars.yml b/eng/common/core-templates/post-build/setup-maestro-vars.yml index 6dfa99ec5e37..a7abd58c4bb6 100644 --- a/eng/common/core-templates/post-build/setup-maestro-vars.yml +++ b/eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -8,11 +8,12 @@ steps: - 'Illegal entry point, is1ESPipeline is not defined. Repository yaml should not directly reference templates in core-templates folder.': error - ${{ if eq(coalesce(parameters.PromoteToChannelIds, 0), 0) }}: - - task: DownloadPipelineArtifact@2 + - task: DownloadBuildArtifacts@0 displayName: Download Release Configs inputs: + buildType: current artifactName: ReleaseConfigs - targetPath: '$(Build.StagingDirectory)/ReleaseConfigs' + checkDownloadedFiles: true - task: AzureCLI@2 name: setReleaseVars diff --git a/eng/common/core-templates/stages/renovate.yml b/eng/common/core-templates/stages/renovate.yml new file mode 100644 index 000000000000..edab28182585 --- /dev/null +++ b/eng/common/core-templates/stages/renovate.yml @@ -0,0 +1,111 @@ +# -------------------------------------------------------------------------------------- +# Renovate Pipeline Template +# -------------------------------------------------------------------------------------- +# This template provides a complete reusable pipeline definition for running Renovate +# in a 1ES Official pipeline. Pipelines can extend from this template and only need +# to pass the Renovate job parameters. +# +# For more info, see https://github.com/dotnet/arcade/blob/main/Documentation/Renovate.md +# -------------------------------------------------------------------------------------- + +parameters: + +# Path to the Renovate configuration file within the repository. +- name: renovateConfigPath + type: string + default: 'eng/renovate.json' + +# GitHub repository to run Renovate against, in the format 'owner/repo'. +- name: gitHubRepo + type: string + +# List of base branches to target for Renovate PRs. +- name: baseBranches + type: object + default: + - main + +# When true, Renovate will run in dry run mode. +- name: dryRun + type: boolean + default: false + +# When true, Renovate will recreate PRs even if they were previously closed. +- name: forceRecreatePR + type: boolean + default: false + +# Name of the arcade repository resource in the pipeline. +# This allows repos which haven't been onboarded to Arcade to still use this +# template by checking out the repo as a resource with a custom name and pointing +# this parameter to it. +- name: arcadeRepoResource + type: string + default: 'self' + +- name: selfRepoName + type: string + default: '' +- name: arcadeRepoName + type: string + default: '' + +# Pool configuration for the pipeline. +- name: pool + type: object + default: + name: NetCore1ESPool-Internal + image: build.azurelinux.3.amd64 + os: linux + +# Renovate version used in the container image tag. +- name: renovateVersion + default: 43 + type: number + +# Pool configuration for SDL analysis. +- name: sdlPool + type: object + default: + name: NetCore1ESPool-Internal + image: windows.vs2026.amd64 + os: windows + +resources: + repositories: + - repository: 1ESPipelineTemplates + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release + +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates + parameters: + pool: ${{ parameters.pool }} + sdl: + sourceAnalysisPool: ${{ parameters.sdlPool }} + # When repos that aren't onboarded to Arcade use this template, they set the + # arcadeRepoResource parameter to point to their Arcade repo resource. In that case, + # Aracde will be excluded from SDL analysis. + ${{ if ne(parameters.arcadeRepoResource, 'self') }}: + sourceRepositoriesToScan: + exclude: + - repository: ${{ parameters.arcadeRepoResource }} + containers: + RenovateContainer: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-renovate-${{ parameters.renovateVersion }}-amd64 + stages: + - stage: Renovate + displayName: Run Renovate + jobs: + - template: /eng/common/core-templates/job/renovate.yml@${{ parameters.arcadeRepoResource }} + parameters: + renovateConfigPath: ${{ parameters.renovateConfigPath }} + gitHubRepo: ${{ parameters.gitHubRepo }} + baseBranches: ${{ parameters.baseBranches }} + dryRun: ${{ parameters.dryRun }} + forceRecreatePR: ${{ parameters.forceRecreatePR }} + pool: ${{ parameters.pool }} + arcadeRepoResource: ${{ parameters.arcadeRepoResource }} + selfRepoName: ${{ parameters.selfRepoName }} + arcadeRepoName: ${{ parameters.arcadeRepoName }} diff --git a/eng/common/core-templates/steps/component-governance.yml b/eng/common/core-templates/steps/component-governance.yml new file mode 100644 index 000000000000..cf0649aa9565 --- /dev/null +++ b/eng/common/core-templates/steps/component-governance.yml @@ -0,0 +1,16 @@ +parameters: + disableComponentGovernance: false + componentGovernanceIgnoreDirectories: '' + is1ESPipeline: false + displayName: 'Component Detection' + +steps: +- ${{ if eq(parameters.disableComponentGovernance, 'true') }}: + - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true" + displayName: Set skipComponentGovernanceDetection variable +- ${{ if ne(parameters.disableComponentGovernance, 'true') }}: + - task: ComponentGovernanceComponentDetection@0 + continueOnError: true + displayName: ${{ parameters.displayName }} + inputs: + ignoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml index aad0a8aeda33..003f7eae0fa5 100644 --- a/eng/common/core-templates/steps/generate-sbom.yml +++ b/eng/common/core-templates/steps/generate-sbom.yml @@ -1,14 +1,54 @@ +# BuildDropPath - The root folder of the drop directory for which the manifest file will be generated. +# PackageName - The name of the package this SBOM represents. +# PackageVersion - The version of the package this SBOM represents. +# ManifestDirPath - The path of the directory where the generated manifest files will be placed +# IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. + parameters: - PackageVersion: unused - BuildDropPath: unused - PackageName: unused - ManifestDirPath: unused - IgnoreDirectories: unused - sbomContinueOnError: unused - is1ESPipeline: unused - publishArtifacts: unused + PackageVersion: 11.0.0 + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' + PackageName: '.NET' + ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom + IgnoreDirectories: '' + sbomContinueOnError: true + is1ESPipeline: false + # disable publishArtifacts if some other step is publishing the artifacts (like job.yml). + publishArtifacts: true steps: +- task: PowerShell@2 + displayName: Prep for SBOM generation in (Non-linux) + condition: or(eq(variables['Agent.Os'], 'Windows_NT'), eq(variables['Agent.Os'], 'Darwin')) + inputs: + filePath: ./eng/common/generate-sbom-prep.ps1 + arguments: ${{parameters.manifestDirPath}} + +# Chmodding is a workaround for https://github.com/dotnet/arcade/issues/8461 - script: | - echo "##vso[task.logissue type=warning]Including generate-sbom.yml is deprecated, SBOM generation is handled 1ES PT now. Remove this include." - displayName: Issue generate-sbom.yml deprecation warning + chmod +x ./eng/common/generate-sbom-prep.sh + ./eng/common/generate-sbom-prep.sh ${{parameters.manifestDirPath}} + displayName: Prep for SBOM generation in (Linux) + condition: eq(variables['Agent.Os'], 'Linux') + continueOnError: ${{ parameters.sbomContinueOnError }} + +- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'Generate SBOM manifest' + continueOnError: ${{ parameters.sbomContinueOnError }} + inputs: + PackageName: ${{ parameters.packageName }} + BuildDropPath: ${{ parameters.buildDropPath }} + PackageVersion: ${{ parameters.packageVersion }} + ManifestDirPath: ${{ parameters.manifestDirPath }}/$(ARTIFACT_NAME) + ${{ if ne(parameters.IgnoreDirectories, '') }}: + AdditionalComponentDetectorArgs: '--IgnoreDirectories ${{ parameters.IgnoreDirectories }}' + +- ${{ if eq(parameters.publishArtifacts, 'true')}}: + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + parameters: + is1ESPipeline: ${{ parameters.is1ESPipeline }} + args: + displayName: Publish SBOM manifest + continueOnError: ${{parameters.sbomContinueOnError}} + targetPath: '${{ parameters.manifestDirPath }}' + artifactName: $(ARTIFACT_NAME) + diff --git a/eng/common/core-templates/steps/install-microbuild-impl.yml b/eng/common/core-templates/steps/install-microbuild-impl.yml new file mode 100644 index 000000000000..da22beb3f60c --- /dev/null +++ b/eng/common/core-templates/steps/install-microbuild-impl.yml @@ -0,0 +1,34 @@ +parameters: + - name: microbuildTaskInputs + type: object + default: {} + + - name: microbuildEnv + type: object + default: {} + + - name: enablePreviewMicrobuild + type: boolean + default: false + + - name: condition + type: string + + - name: continueOnError + type: boolean + +steps: +- ${{ if eq(parameters.enablePreviewMicrobuild, true) }}: + - task: MicroBuildSigningPluginPreview@4 + displayName: Install Preview MicroBuild plugin + inputs: ${{ parameters.microbuildTaskInputs }} + env: ${{ parameters.microbuildEnv }} + continueOnError: ${{ parameters.continueOnError }} + condition: ${{ parameters.condition }} +- ${{ else }}: + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin + inputs: ${{ parameters.microbuildTaskInputs }} + env: ${{ parameters.microbuildEnv }} + continueOnError: ${{ parameters.continueOnError }} + condition: ${{ parameters.condition }} diff --git a/eng/common/core-templates/steps/install-microbuild.yml b/eng/common/core-templates/steps/install-microbuild.yml index 553fce66b940..76a54e157fda 100644 --- a/eng/common/core-templates/steps/install-microbuild.yml +++ b/eng/common/core-templates/steps/install-microbuild.yml @@ -4,6 +4,8 @@ parameters: # Enable install tasks for MicroBuild on Mac and Linux # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' enableMicrobuildForMacAndLinux: false + # Enable preview version of MB signing plugin + enablePreviewMicrobuild: false # Determines whether the ESRP service connection information should be passed to the signing plugin. # This overlaps with _SignType to some degree. We only need the service connection for real signing. # It's important that the service connection not be passed to the MicroBuildSigningPlugin task in this place. @@ -13,6 +15,8 @@ parameters: microbuildUseESRP: true # Microbuild installation directory microBuildOutputFolder: $(Agent.TempDirectory)/MicroBuild + # Microbuild version + microbuildPluginVersion: 'latest' continueOnError: false @@ -69,42 +73,46 @@ steps: # YAML expansion, and Windows vs. Linux/Mac uses different service connections. However, # we can avoid including the MB install step if not enabled at all. This avoids a bunch of # extra pipeline authorizations, since most pipelines do not sign on non-Windows. - - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin (Windows) - inputs: - signType: $(_SignType) - zipSources: false - feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json - ${{ if eq(parameters.microbuildUseESRP, true) }}: - ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' - ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: - ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea - ${{ else }}: - ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca - env: - TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) - - - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, true) }}: - - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin (non-Windows) - inputs: + - template: /eng/common/core-templates/steps/install-microbuild-impl.yml + parameters: + enablePreviewMicrobuild: ${{ parameters.enablePreviewMicrobuild }} + microbuildTaskInputs: signType: $(_SignType) zipSources: false feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json - workingDirectory: ${{ parameters.microBuildOutputFolder }} + version: ${{ parameters.microbuildPluginVersion }} ${{ if eq(parameters.microbuildUseESRP, true) }}: ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: - ConnectedPMEServiceName: beb8cb23-b303-4c95-ab26-9e44bc958d39 + ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea ${{ else }}: - ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc - env: + ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca + microbuildEnv: TeamName: $(_TeamName) MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} SYSTEM_ACCESSTOKEN: $(System.AccessToken) continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) + + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, true) }}: + - template: /eng/common/core-templates/steps/install-microbuild-impl.yml + parameters: + enablePreviewMicrobuild: ${{ parameters.enablePreviewMicrobuild }} + microbuildTaskInputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + version: ${{ parameters.microbuildPluginVersion }} + workingDirectory: ${{ parameters.microBuildOutputFolder }} + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: beb8cb23-b303-4c95-ab26-9e44bc958d39 + ${{ else }}: + ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc + microbuildEnv: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index 4eed0312b807..a9ea99ba6aaa 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -50,14 +50,13 @@ steps: TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' condition: always() -- template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml +- template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish Logs - targetPath: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' - artifactName: PostBuildLogs_${{ parameters.StageLabel }}_${{ parameters.JobLabel }}_Attempt$(System.JobAttempt) + pathToPublish: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' + publishLocation: Container + artifactName: PostBuildLogs continueOnError: true condition: always() - retryCountOnTaskFailure: 10 # for any files being locked - isProduction: false # logs are non-production artifacts diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml index 09ae5cd73ae3..acf16ed34963 100644 --- a/eng/common/core-templates/steps/source-build.yml +++ b/eng/common/core-templates/steps/source-build.yml @@ -24,7 +24,7 @@ steps: # in the default public locations. internalRuntimeDownloadArgs= if [ '$(dotnetbuilds-internal-container-read-token-base64)' != '$''(dotnetbuilds-internal-container-read-token-base64)' ]; then - internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey '$(dotnetbuilds-internal-container-read-token-base64)'' + internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey $(dotnetbuilds-internal-container-read-token-base64)' fi buildConfig=Release @@ -62,4 +62,4 @@ steps: artifactName: BuildLogs_SourceBuild_${{ parameters.platform.name }}_Attempt$(System.JobAttempt) continueOnError: true condition: succeededOrFailed() - isProduction: false # logs are non-production artifacts + sbomEnabled: false # we don't need SBOM for logs diff --git a/eng/common/core-templates/steps/source-index-stage1-publish.yml b/eng/common/core-templates/steps/source-index-stage1-publish.yml index e9a694afa58e..3ad83b8c3075 100644 --- a/eng/common/core-templates/steps/source-index-stage1-publish.yml +++ b/eng/common/core-templates/steps/source-index-stage1-publish.yml @@ -1,6 +1,6 @@ parameters: - sourceIndexUploadPackageVersion: 2.0.0-20250818.1 - sourceIndexProcessBinlogPackageVersion: 1.0.1-20250818.1 + sourceIndexUploadPackageVersion: 2.0.0-20250906.1 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20250906.1 sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json binlogPath: artifacts/log/Debug/Build.binlog @@ -14,8 +14,8 @@ steps: workingDirectory: $(Agent.TempDirectory) - script: | - $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version ${{parameters.sourceIndexProcessBinlogPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools - $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version ${{parameters.sourceIndexUploadPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version ${{parameters.sourceIndexProcessBinlogPackageVersion}} --source ${{parameters.sourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version ${{parameters.sourceIndexUploadPackageVersion}} --source ${{parameters.sourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools displayName: "Source Index: Download netsourceindex Tools" # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. workingDirectory: $(Agent.TempDirectory) diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 8abfb71f7275..314c93c57598 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -9,6 +9,7 @@ usage() echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine" echo " for alpine can be specified with version: alpineX.YY or alpineedge" echo " for FreeBSD can be: freebsd13, freebsd14" + echo " for OpenBSD can be: openbsd" echo " for illumos can be: illumos" echo " for Haiku can be: haiku." echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD" @@ -27,6 +28,8 @@ __BuildArch=arm __AlpineArch=armv7 __FreeBSDArch=arm __FreeBSDMachineArch=armv7 +__OpenBSDArch=arm +__OpenBSDMachineArch=armv7 __IllumosArch=arm7 __HaikuArch=arm __QEMUArch=arm @@ -72,7 +75,7 @@ __AlpinePackages+=" krb5-dev" __AlpinePackages+=" openssl-dev" __AlpinePackages+=" zlib-dev" -__FreeBSDBase="13.4-RELEASE" +__FreeBSDBase="13.5-RELEASE" __FreeBSDPkg="1.21.3" __FreeBSDABI="13" __FreeBSDPackages="libunwind" @@ -82,6 +85,12 @@ __FreeBSDPackages+=" openssl" __FreeBSDPackages+=" krb5" __FreeBSDPackages+=" terminfo-db" +__OpenBSDVersion="7.8" +__OpenBSDPackages="heimdal-libs" +__OpenBSDPackages+=" icu4c" +__OpenBSDPackages+=" inotify-tools" +__OpenBSDPackages+=" openssl" + __IllumosPackages="icu" __IllumosPackages+=" mit-krb5" __IllumosPackages+=" openssl" @@ -160,6 +169,8 @@ while :; do __QEMUArch=aarch64 __FreeBSDArch=arm64 __FreeBSDMachineArch=aarch64 + __OpenBSDArch=arm64 + __OpenBSDMachineArch=aarch64 ;; armel) __BuildArch=armel @@ -235,6 +246,8 @@ while :; do __UbuntuArch=amd64 __FreeBSDArch=amd64 __FreeBSDMachineArch=amd64 + __OpenBSDArch=amd64 + __OpenBSDMachineArch=amd64 __illumosArch=x86_64 __HaikuArch=x86_64 __UbuntuRepo="http://archive.ubuntu.com/ubuntu/" @@ -295,9 +308,7 @@ while :; do ;; noble) # Ubuntu 24.04 __CodeName=noble - if [[ -z "$__LLDB_Package" ]]; then - __LLDB_Package="liblldb-19-dev" - fi + __LLDB_Package="liblldb-19-dev" ;; stretch) # Debian 9 __CodeName=stretch @@ -383,10 +394,14 @@ while :; do ;; freebsd14) __CodeName=freebsd - __FreeBSDBase="14.2-RELEASE" + __FreeBSDBase="14.3-RELEASE" __FreeBSDABI="14" __SkipUnmount=1 ;; + openbsd) + __CodeName=openbsd + __SkipUnmount=1 + ;; illumos) __CodeName=illumos __SkipUnmount=1 @@ -595,6 +610,62 @@ elif [[ "$__CodeName" == "freebsd" ]]; then INSTALL_AS_USER=$(whoami) "$__RootfsDir"/host/sbin/pkg -r "$__RootfsDir" -C "$__RootfsDir"/usr/local/etc/pkg.conf update # shellcheck disable=SC2086 INSTALL_AS_USER=$(whoami) "$__RootfsDir"/host/sbin/pkg -r "$__RootfsDir" -C "$__RootfsDir"/usr/local/etc/pkg.conf install --yes $__FreeBSDPackages +elif [[ "$__CodeName" == "openbsd" ]]; then + # determine mirrors + OPENBSD_MIRROR="https://cdn.openbsd.org/pub/OpenBSD/$__OpenBSDVersion/$__OpenBSDMachineArch" + + # download base system sets + ensureDownloadTool + + BASE_SETS=(base comp) + for set in "${BASE_SETS[@]}"; do + FILE="${set}${__OpenBSDVersion//./}.tgz" + echo "Downloading $FILE..." + if [[ "$__hasWget" == 1 ]]; then + wget -O- "$OPENBSD_MIRROR/$FILE" | tar -C "$__RootfsDir" -xzpf - + else + curl -SL "$OPENBSD_MIRROR/$FILE" | tar -C "$__RootfsDir" -xzpf - + fi + done + + PKG_MIRROR="https://cdn.openbsd.org/pub/OpenBSD/${__OpenBSDVersion}/packages/${__OpenBSDMachineArch}" + + echo "Installing packages into sysroot..." + + # Fetch package index once + if [[ "$__hasWget" == 1 ]]; then + PKG_INDEX=$(wget -qO- "$PKG_MIRROR/") + else + PKG_INDEX=$(curl -s "$PKG_MIRROR/") + fi + + for pkg in $__OpenBSDPackages; do + PKG_FILE=$(echo "$PKG_INDEX" | grep -Po ">\K${pkg}-[0-9][^\" ]*\.tgz" \ + | sort -V | tail -n1) + + echo "Resolved package filename for $pkg: $PKG_FILE" + + [[ -z "$PKG_FILE" ]] && { echo "ERROR: Package $pkg not found"; exit 1; } + + if [[ "$__hasWget" == 1 ]]; then + wget -O- "$PKG_MIRROR/$PKG_FILE" | tar -C "$__RootfsDir" -xzpf - + else + curl -SL "$PKG_MIRROR/$PKG_FILE" | tar -C "$__RootfsDir" -xzpf - + fi + done + + echo "Creating versionless symlinks for shared libraries..." + # Find all versioned .so files and create the base .so symlink + for lib in "$__RootfsDir/usr/lib/libc++.so."* "$__RootfsDir/usr/lib/libc++abi.so."* "$__RootfsDir/usr/lib/libpthread.so."*; do + if [ -f "$lib" ]; then + # Extract the filename (e.g., libc++.so.12.0) + VERSIONED_NAME=$(basename "$lib") + # Remove the trailing version numbers (e.g., libc++.so) + BASE_NAME=${VERSIONED_NAME%.so.*}.so + # Create the symlink in the same directory + ln -sf "$VERSIONED_NAME" "$__RootfsDir/usr/lib/$BASE_NAME" + fi + done elif [[ "$__CodeName" == "illumos" ]]; then mkdir "$__RootfsDir/tmp" pushd "$__RootfsDir/tmp" diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake index 0ff85cf0367e..ff2dfdb4a5bf 100644 --- a/eng/common/cross/toolchain.cmake +++ b/eng/common/cross/toolchain.cmake @@ -3,15 +3,22 @@ set(CROSS_ROOTFS $ENV{ROOTFS_DIR}) # reset platform variables (e.g. cmake 3.25 sets LINUX=1) unset(LINUX) unset(FREEBSD) +unset(OPENBSD) unset(ILLUMOS) unset(ANDROID) unset(TIZEN) unset(HAIKU) set(TARGET_ARCH_NAME $ENV{TARGET_BUILD_ARCH}) + +file(GLOB OPENBSD_PROBE "${CROSS_ROOTFS}/etc/signify/openbsd-*.pub") + if(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version) set(CMAKE_SYSTEM_NAME FreeBSD) set(FREEBSD 1) +elseif(OPENBSD_PROBE) + set(CMAKE_SYSTEM_NAME OpenBSD) + set(OPENBSD 1) elseif(EXISTS ${CROSS_ROOTFS}/usr/platform/i86pc) set(CMAKE_SYSTEM_NAME SunOS) set(ILLUMOS 1) @@ -53,6 +60,8 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm64") endif() elseif(FREEBSD) set(triple "aarch64-unknown-freebsd12") + elseif(OPENBSD) + set(triple "aarch64-unknown-openbsd") endif() elseif(TARGET_ARCH_NAME STREQUAL "armel") set(CMAKE_SYSTEM_PROCESSOR armv7l) @@ -109,6 +118,8 @@ elseif(TARGET_ARCH_NAME STREQUAL "x64") endif() elseif(FREEBSD) set(triple "x86_64-unknown-freebsd12") + elseif(OPENBSD) + set(triple "x86_64-unknown-openbsd") elseif(ILLUMOS) set(TOOLCHAIN "x86_64-illumos") elseif(HAIKU) @@ -193,7 +204,7 @@ if(ANDROID) # include official NDK toolchain script include(${CROSS_ROOTFS}/../build/cmake/android.toolchain.cmake) -elseif(FREEBSD) +elseif(FREEBSD OR OPENBSD) # we cross-compile by instructing clang set(CMAKE_C_COMPILER_TARGET ${triple}) set(CMAKE_CXX_COMPILER_TARGET ${triple}) @@ -291,7 +302,7 @@ endif() # Specify compile options -if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|loongarch64|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) +if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|loongarch64|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD AND NOT OPENBSD) OR ILLUMOS OR HAIKU) set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN}) diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index e889f439b8dc..9f5ad6b763b5 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -5,7 +5,7 @@ darcVersion='' versionEndpoint='https://maestro.dot.net/api/assets/darc-version?api-version=2020-02-20' verbosity='minimal' -while [[ $# > 0 ]]; do +while [[ $# -gt 0 ]]; do opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" case "$opt" in --darcversion) diff --git a/eng/common/dotnet-install.sh b/eng/common/dotnet-install.sh index 7b9d97e3bd4d..61f302bb6775 100755 --- a/eng/common/dotnet-install.sh +++ b/eng/common/dotnet-install.sh @@ -18,7 +18,7 @@ architecture='' runtime='dotnet' runtimeSourceFeed='' runtimeSourceFeedKey='' -while [[ $# > 0 ]]; do +while [[ $# -gt 0 ]]; do opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" case "$opt" in -version|-v) diff --git a/eng/common/dotnet.sh b/eng/common/dotnet.sh index 2ef68235675f..f6d24871c1d4 100755 --- a/eng/common/dotnet.sh +++ b/eng/common/dotnet.sh @@ -19,7 +19,7 @@ source $scriptroot/tools.sh InitializeDotNetCli true # install # Invoke acquired SDK with args if they are provided -if [[ $# > 0 ]]; then +if [[ $# -gt 0 ]]; then __dotnetDir=${_InitializeDotNetCli} dotnetPath=${__dotnetDir}/dotnet ${dotnetPath} "$@" diff --git a/eng/common/generate-sbom-prep.ps1 b/eng/common/generate-sbom-prep.ps1 new file mode 100644 index 000000000000..a0c7d792a76f --- /dev/null +++ b/eng/common/generate-sbom-prep.ps1 @@ -0,0 +1,29 @@ +Param( + [Parameter(Mandatory=$true)][string] $ManifestDirPath # Manifest directory where sbom will be placed +) + +. $PSScriptRoot\pipeline-logging-functions.ps1 + +# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly +# with their own overwriting ours. So we create it as a sub directory of the requested manifest path. +$ArtifactName = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM" +$SafeArtifactName = $ArtifactName -replace '["/:<>\\|?@*"() ]', '_' +$SbomGenerationDir = Join-Path $ManifestDirPath $SafeArtifactName + +Write-Host "Artifact name before : $ArtifactName" +Write-Host "Artifact name after : $SafeArtifactName" + +Write-Host "Creating dir $ManifestDirPath" + +# create directory for sbom manifest to be placed +if (!(Test-Path -path $SbomGenerationDir)) +{ + New-Item -ItemType Directory -path $SbomGenerationDir + Write-Host "Successfully created directory $SbomGenerationDir" +} +else{ + Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder." +} + +Write-Host "Updating artifact name" +Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$SafeArtifactName" diff --git a/eng/common/generate-sbom-prep.sh b/eng/common/generate-sbom-prep.sh new file mode 100644 index 000000000000..b8ecca72bbf5 --- /dev/null +++ b/eng/common/generate-sbom-prep.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +source="${BASH_SOURCE[0]}" + +# resolve $SOURCE until the file is no longer a symlink +while [[ -h $source ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" +. $scriptroot/pipeline-logging-functions.sh + + +# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts. +artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM" +safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}" +manifest_dir=$1 + +# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly +# with their own overwriting ours. So we create it as a sub directory of the requested manifest path. +sbom_generation_dir="$manifest_dir/$safe_artifact_name" + +if [ ! -d "$sbom_generation_dir" ] ; then + mkdir -p "$sbom_generation_dir" + echo "Sbom directory created." $sbom_generation_dir +else + Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder." +fi + +echo "Artifact name before : "$artifact_name +echo "Artifact name after : "$safe_artifact_name +export ARTIFACT_NAME=$safe_artifact_name +echo "##vso[task.setvariable variable=ARTIFACT_NAME]$safe_artifact_name" + +exit 0 diff --git a/eng/common/internal-feed-operations.sh b/eng/common/internal-feed-operations.sh index 9378223ba095..6299e7effd4c 100755 --- a/eng/common/internal-feed-operations.sh +++ b/eng/common/internal-feed-operations.sh @@ -100,7 +100,7 @@ operation='' authToken='' repoName='' -while [[ $# > 0 ]]; do +while [[ $# -gt 0 ]]; do opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" case "$opt" in --operation) diff --git a/eng/common/native/init-distro-rid.sh b/eng/common/native/init-distro-rid.sh index 83ea7aab0e08..8fc6d2fec78d 100644 --- a/eng/common/native/init-distro-rid.sh +++ b/eng/common/native/init-distro-rid.sh @@ -39,6 +39,8 @@ getNonPortableDistroRid() # $rootfsDir can be empty. freebsd-version is a shell script and should always work. __freebsd_major_version=$("$rootfsDir"/bin/freebsd-version | cut -d'.' -f1) nonPortableRid="freebsd.$__freebsd_major_version-${targetArch}" + elif [ "$targetOs" = "openbsd" ]; then + nonPortableRid="openbsd.$(uname -r)-${targetArch}" elif command -v getprop >/dev/null && getprop ro.product.system.model | grep -qi android; then __android_sdk_version=$(getprop ro.build.version.sdk) nonPortableRid="android.$__android_sdk_version-${targetArch}" diff --git a/eng/common/native/install-dependencies.sh b/eng/common/native/install-dependencies.sh index 477a44f335be..4742177a7685 100755 --- a/eng/common/native/install-dependencies.sh +++ b/eng/common/native/install-dependencies.sh @@ -24,14 +24,16 @@ case "$os" in apt update apt install -y build-essential gettext locales cmake llvm clang lld lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev \ - libssl-dev libkrb5-dev pigz cpio + libssl-dev libkrb5-dev pigz cpio ninja-build localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 - elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ] || [ "$ID" = "azurelinux" ]; then + elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ] || [ "$ID" = "azurelinux" ] || [ "$ID" = "centos" ]; then pkg_mgr="$(command -v tdnf 2>/dev/null || command -v dnf)" - $pkg_mgr install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio + $pkg_mgr install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio ninja-build + elif [ "$ID" = "amzn" ]; then + dnf install -y cmake llvm lld lldb clang python libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio ninja-build elif [ "$ID" = "alpine" ]; then - apk add build-base cmake bash curl clang llvm-dev lld lldb krb5-dev lttng-ust-dev icu-dev openssl-dev pigz cpio + apk add build-base cmake bash curl clang llvm llvm-dev lld lldb-dev krb5-dev lttng-ust-dev icu-dev openssl-dev pigz cpio ninja else echo "Unsupported distro. distro: $ID" exit 1 @@ -52,6 +54,7 @@ brew "openssl@3" brew "pkgconf" brew "python3" brew "pigz" +brew "ninja" EOF ;; diff --git a/eng/common/post-build/redact-logs.ps1 b/eng/common/post-build/redact-logs.ps1 index 472d5bb562c9..fc0218a013d1 100644 --- a/eng/common/post-build/redact-logs.ps1 +++ b/eng/common/post-build/redact-logs.ps1 @@ -9,7 +9,8 @@ param( [Parameter(Mandatory=$false)][string] $TokensFilePath, [Parameter(ValueFromRemainingArguments=$true)][String[]]$TokensToRedact, [Parameter(Mandatory=$false)][string] $runtimeSourceFeed, - [Parameter(Mandatory=$false)][string] $runtimeSourceFeedKey) + [Parameter(Mandatory=$false)][string] $runtimeSourceFeedKey +) try { $ErrorActionPreference = 'Stop' diff --git a/eng/common/renovate.env b/eng/common/renovate.env new file mode 100644 index 000000000000..17ecc05d9b19 --- /dev/null +++ b/eng/common/renovate.env @@ -0,0 +1,42 @@ +# Renovate Global Configuration +# https://docs.renovatebot.com/self-hosted-configuration/ +# +# NOTE: This file uses bash/shell format and is sourced via `. renovate.env`. +# Values containing spaces or special characters must be quoted. + +# Author to use for git commits made by Renovate +# https://docs.renovatebot.com/configuration-options/#gitauthor +export RENOVATE_GIT_AUTHOR='.NET Renovate ' + +# Disable rate limiting for PR creation (0 = unlimited) +# https://docs.renovatebot.com/presets-default/#prhourlylimitnone +# https://docs.renovatebot.com/presets-default/#prconcurrentlimitnone +export RENOVATE_PR_HOURLY_LIMIT=0 +export RENOVATE_PR_CONCURRENT_LIMIT=0 + +# Skip the onboarding PR that Renovate normally creates for new repos +# https://docs.renovatebot.com/config-overview/#onboarding +export RENOVATE_ONBOARDING=false + +# Any Renovate config file in the cloned repository is ignored. Only +# the Renovate config file from the repo where the pipeline is running +# is used (yes, those are the same repo but the sources may be different). +# https://docs.renovatebot.com/self-hosted-configuration/#requireconfig +export RENOVATE_REQUIRE_CONFIG=ignored + +# Customize the PR body content. This removes some of the default +# sections that aren't relevant in a self-hosted config. +# https://docs.renovatebot.com/configuration-options/#prheader +# https://docs.renovatebot.com/configuration-options/#prbodynotes +# https://docs.renovatebot.com/configuration-options/#prbodytemplate +export RENOVATE_PR_HEADER='## Automated Dependency Update' +export RENOVATE_PR_BODY_NOTES='["This PR has been created automatically by the [.NET Renovate Bot](https://github.com/dotnet/arcade/blob/main/Documentation/Renovate.md) to update one or more dependencies in your repo. Please review the changes and merge the PR if everything looks good."]' +export RENOVATE_PR_BODY_TEMPLATE='{{{header}}}{{{table}}}{{{warnings}}}{{{notes}}}{{{changelogs}}}' + +# Extend the global config with additional presets +# https://docs.renovatebot.com/self-hosted-configuration/#globalextends +# Disable the Dependency Dashboard issue that tracks all updates +export RENOVATE_GLOBAL_EXTENDS='[":disableDependencyDashboard"]' + +# Allow all commands for post-upgrade commands. +export RENOVATE_ALLOWED_COMMANDS='[".*"]' diff --git a/eng/common/template-guidance.md b/eng/common/template-guidance.md index e2b07a865f10..cdc62e72b077 100644 --- a/eng/common/template-guidance.md +++ b/eng/common/template-guidance.md @@ -71,7 +71,6 @@ eng\common\ source-build.yml (shim) source-index-stage1.yml (shim) jobs\ - codeql-build.yml (shim) jobs.yml (shim) source-build.yml (shim) post-build\ @@ -82,13 +81,13 @@ eng\common\ publish-build-artifacts.yml (logic) publish-pipeline-artifacts.yml (logic) component-governance.yml (shim) + generate-sbom.yml (shim) publish-logs.yml (shim) retain-build.yml (shim) send-to-helix.yml (shim) source-build.yml (shim) variables\ pool-providers.yml (logic + redirect) # templates/variables/pool-providers.yml will redirect to templates-official/variables/pool-providers.yml if you are running in the internal project - sdl-variables.yml (logic) core-templates\ job\ job.yml (logic) @@ -97,7 +96,6 @@ eng\common\ source-build.yml (logic) source-index-stage1.yml (logic) jobs\ - codeql-build.yml (logic) jobs.yml (logic) source-build.yml (logic) post-build\ @@ -106,6 +104,7 @@ eng\common\ setup-maestro-vars.yml (logic) steps\ component-governance.yml (logic) + generate-sbom.yml (logic) publish-build-artifacts.yml (redirect) publish-logs.yml (logic) publish-pipeline-artifacts.yml (redirect) diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml index d68e9fbc2656..f70224eaa456 100644 --- a/eng/common/templates-official/job/job.yml +++ b/eng/common/templates-official/job/job.yml @@ -1,15 +1,24 @@ parameters: +# Sbom related params + enableSbom: true runAsPublic: false -# Sbom related params, unused now and can eventually be removed - enableSbom: unused - PackageVersion: unused - BuildDropPath: unused + PackageVersion: 9.0.0 + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' jobs: - template: /eng/common/core-templates/job/job.yml parameters: is1ESPipeline: true + componentGovernanceSteps: + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.enableSbom, 'true')) }}: + - template: /eng/common/templates/steps/generate-sbom.yml + parameters: + PackageVersion: ${{ parameters.packageVersion }} + BuildDropPath: ${{ parameters.buildDropPath }} + ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom + publishArtifacts: false + # publish artifacts # for 1ES managed templates, use the templateContext.output to handle multiple outputs. templateContext: @@ -17,19 +26,12 @@ jobs: outputs: - ${{ if ne(parameters.artifacts.publish, '') }}: - ${{ if and(ne(parameters.artifacts.publish.artifacts, 'false'), ne(parameters.artifacts.publish.artifacts, '')) }}: - - output: pipelineArtifact - displayName: Publish pipeline artifacts - targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' - artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} - condition: succeeded() - retryCountOnTaskFailure: 10 # for any files being locked - continueOnError: true - - output: pipelineArtifact + - output: buildArtifacts displayName: Publish pipeline artifacts - targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' - artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }}_Attempt$(System.JobAttempt) - condition: not(succeeded()) - retryCountOnTaskFailure: 10 # for any files being locked + PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' + ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} + condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked continueOnError: true - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - output: pipelineArtifact @@ -38,8 +40,8 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() - retryCountOnTaskFailure: 10 # for any files being locked - isProduction: false # logs are non-production artifacts + retryCountOnTaskFailure: 10 # for any logs being locked + sbomEnabled: false # we don't need SBOM for logs - ${{ if eq(parameters.enablePublishBuildArtifacts, true) }}: - output: pipelineArtifact @@ -48,8 +50,7 @@ jobs: artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() - retryCountOnTaskFailure: 10 # for any files being locked - isProduction: false # logs are non-production artifacts + sbomEnabled: false # we don't need SBOM for logs - ${{ if eq(parameters.enableBuildRetry, 'true') }}: - output: pipelineArtifact @@ -57,20 +58,14 @@ jobs: artifactName: 'BuildConfiguration' displayName: 'Publish build retry configuration' continueOnError: true - retryCountOnTaskFailure: 10 # for any files being locked - isProduction: false # BuildConfiguration is a non-production artifact + sbomEnabled: false # we don't need SBOM for BuildConfiguration - # V4 publishing: automatically publish staged artifacts as a pipeline artifact. - # The artifact name matches the SDK's FutureArtifactName ($(System.PhaseName)_Artifacts), - # which is encoded in the asset manifest for downstream publishing to discover. - # Jobs can opt in by setting enablePublishing: true. - - ${{ if and(eq(parameters.publishingVersion, 4), eq(parameters.enablePublishing, 'true')) }}: + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.enableSbom, 'true')) }}: - output: pipelineArtifact - displayName: 'Publish V4 pipeline artifacts' - targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' - artifactName: '$(System.PhaseName)_Artifacts' + displayName: Publish SBOM manifest continueOnError: true - retryCountOnTaskFailure: 10 # for any files being locked + targetPath: $(Build.ArtifactStagingDirectory)/sbom + artifactName: $(ARTIFACT_NAME) # add any outputs provided via root yaml - ${{ if ne(parameters.templateContext.outputs, '') }}: diff --git a/eng/common/templates-official/steps/component-governance.yml b/eng/common/templates-official/steps/component-governance.yml new file mode 100644 index 000000000000..30bb3985ca2b --- /dev/null +++ b/eng/common/templates-official/steps/component-governance.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/component-governance.yml + parameters: + is1ESPipeline: true + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates-official/steps/publish-pipeline-artifacts.yml b/eng/common/templates-official/steps/publish-pipeline-artifacts.yml index 9e5981365e56..172f9f0fdc97 100644 --- a/eng/common/templates-official/steps/publish-pipeline-artifacts.yml +++ b/eng/common/templates-official/steps/publish-pipeline-artifacts.yml @@ -24,7 +24,5 @@ steps: artifactName: ${{ parameters.args.artifactName }} ${{ if parameters.args.properties }}: properties: ${{ parameters.args.properties }} - ${{ if ne(parameters.args.sbomEnabled, '') }}: + ${{ if parameters.args.sbomEnabled }}: sbomEnabled: ${{ parameters.args.sbomEnabled }} - ${{ if ne(parameters.args.isProduction, '') }}: - isProduction: ${{ parameters.args.isProduction }} diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 5e261f34db42..7f1b5d97d1ab 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -1,12 +1,12 @@ parameters: enablePublishBuildArtifacts: false + disableComponentGovernance: '' + componentGovernanceIgnoreDirectories: '' +# Sbom related params + enableSbom: true runAsPublic: false -# CG related params, unused now and can eventually be removed - disableComponentGovernance: unused -# Sbom related params, unused now and can eventually be removed - enableSbom: unused - PackageVersion: unused - BuildDropPath: unused + PackageVersion: 9.0.0 + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' jobs: - template: /eng/common/core-templates/job/job.yml @@ -21,34 +21,32 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} - # we don't run CG in public - - ${{ if eq(variables['System.TeamProject'], 'public') }}: - - script: echo "##vso[task.setvariable variable=skipComponentGovernanceDetection]true" - displayName: Set skipComponentGovernanceDetection variable + componentGovernanceSteps: + - template: /eng/common/templates/steps/component-governance.yml + parameters: + ${{ if eq(parameters.disableComponentGovernance, '') }}: + ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), eq(parameters.runAsPublic, 'false'), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/dotnet/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/microsoft/'), eq(variables['Build.SourceBranch'], 'refs/heads/main'))) }}: + disableComponentGovernance: false + ${{ else }}: + disableComponentGovernance: true + ${{ else }}: + disableComponentGovernance: ${{ parameters.disableComponentGovernance }} + componentGovernanceIgnoreDirectories: ${{ parameters.componentGovernanceIgnoreDirectories }} artifactPublishSteps: - ${{ if ne(parameters.artifacts.publish, '') }}: - ${{ if and(ne(parameters.artifacts.publish.artifacts, 'false'), ne(parameters.artifacts.publish.artifacts, '')) }}: - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: is1ESPipeline: false args: displayName: Publish pipeline artifacts - targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' + pathToPublish: '$(Build.ArtifactStagingDirectory)/artifacts' + publishLocation: Container artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} continueOnError: true - condition: succeeded() - retryCountOnTaskFailure: 10 # for any files being locked - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml - parameters: - is1ESPipeline: false - args: - displayName: Publish pipeline artifacts - targetPath: '$(Build.ArtifactStagingDirectory)/artifacts' - artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }}_Attempt$(System.JobAttempt) - continueOnError: true - condition: not(succeeded()) - retryCountOnTaskFailure: 10 # for any files being locked + condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: @@ -59,7 +57,8 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() - retryCountOnTaskFailure: 10 # for any files being locked + retryCountOnTaskFailure: 10 # for any logs being locked + sbomEnabled: false # we don't need SBOM for logs - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml @@ -71,7 +70,7 @@ jobs: artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() - retryCountOnTaskFailure: 10 # for any files being locked + sbomEnabled: false - ${{ if eq(parameters.enableBuildRetry, 'true') }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml @@ -82,4 +81,4 @@ jobs: artifactName: 'BuildConfiguration' displayName: 'Publish build retry configuration' continueOnError: true - retryCountOnTaskFailure: 10 # for any files being locked + sbomEnabled: false # we don't need SBOM for BuildConfiguration diff --git a/eng/common/templates/steps/component-governance.yml b/eng/common/templates/steps/component-governance.yml new file mode 100644 index 000000000000..c12a5f8d21d7 --- /dev/null +++ b/eng/common/templates/steps/component-governance.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/component-governance.yml + parameters: + is1ESPipeline: false + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 977a2d4b1039..2b593af51cee 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -34,6 +34,9 @@ # Configures warning treatment in msbuild. [bool]$warnAsError = if (Test-Path variable:warnAsError) { $warnAsError } else { $true } +# Specifies semi-colon delimited list of warning codes that should not be treated as errors. +[string]$warnNotAsError = if (Test-Path variable:warnNotAsError) { $warnNotAsError } else { '' } + # Specifies which msbuild engine to use for build: 'vs', 'dotnet' or unspecified (determined based on presence of tools.vs in global.json). [string]$msbuildEngine = if (Test-Path variable:msbuildEngine) { $msbuildEngine } else { $null } @@ -157,9 +160,6 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { return $global:_DotNetInstallDir } - # Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism - $env:DOTNET_MULTILEVEL_LOOKUP=0 - # Disable first run since we do not need all ASP.NET packages restored. $env:DOTNET_NOLOGO=1 @@ -225,7 +225,6 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { # Make Sure that our bootstrapped dotnet cli is available in future steps of the Azure Pipelines build Write-PipelinePrependPath -Path $dotnetRoot - Write-PipelineSetVariable -Name 'DOTNET_MULTILEVEL_LOOKUP' -Value '0' Write-PipelineSetVariable -Name 'DOTNET_NOLOGO' -Value '1' return $global:_DotNetInstallDir = $dotnetRoot @@ -299,6 +298,8 @@ function InstallDotNet([string] $dotnetRoot, $dotnetVersionLabel = "'sdk v$version'" + # For performance this check is duplicated in src/Microsoft.DotNet.Arcade.Sdk/src/InstallDotNetCore.cs + # if you are making changes here, consider if you need to make changes there as well. if ($runtime -ne '' -and $runtime -ne 'sdk') { $runtimePath = $dotnetRoot $runtimePath = $runtimePath + "\shared" @@ -592,6 +593,11 @@ function LocateVisualStudio([object]$vsRequirements = $null){ return $null } + if ($null -eq $vsInfo -or $vsInfo.Count -eq 0) { + throw "No instance of Visual Studio meeting the requirements specified was found. Requirements: $($args -join ' ')" + return $null + } + # use first matching instance return $vsInfo[0] } @@ -836,6 +842,10 @@ function MSBuild-Core() { $cmdArgs += ' /p:TreatWarningsAsErrors=false' } + if ($warnAsError -and $warnNotAsError) { + $cmdArgs += " /warnnotaserror:$warnNotAsError /p:AdditionalWarningsNotAsErrors=$warnNotAsError" + } + foreach ($arg in $args) { if ($null -ne $arg -and $arg.Trim() -ne "") { if ($arg.EndsWith('\')) { diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 1b296f646c23..80d2dbd0fe3d 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -52,6 +52,9 @@ fi # Configures warning treatment in msbuild. warn_as_error=${warn_as_error:-true} +# Specifies semi-colon delimited list of warning codes that should not be treated as errors. +warn_not_as_error=${warn_not_as_error:-''} + # True to attempt using .NET Core already that meets requirements specified in global.json # installed on the machine instead of downloading one. use_installed_dotnet_cli=${use_installed_dotnet_cli:-true} @@ -115,9 +118,6 @@ function InitializeDotNetCli { local install=$1 - # Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism - export DOTNET_MULTILEVEL_LOOKUP=0 - # Disable first run since we want to control all package sources export DOTNET_NOLOGO=1 @@ -166,7 +166,6 @@ function InitializeDotNetCli { # build steps from using anything other than what we've downloaded. Write-PipelinePrependPath -path "$dotnet_root" - Write-PipelineSetVariable -name "DOTNET_MULTILEVEL_LOOKUP" -value "0" Write-PipelineSetVariable -name "DOTNET_NOLOGO" -value "1" # return value @@ -188,6 +187,8 @@ function InstallDotNet { local version=$2 local runtime=$4 + # For performance this check is duplicated in src/Microsoft.DotNet.Arcade.Sdk/src/InstallDotNetCore.cs + # if you are making changes here, consider if you need to make changes there as well. local dotnetVersionLabel="'$runtime v$version'" if [[ -n "${4:-}" ]] && [ "$4" != 'sdk' ]; then runtimePath="$root" @@ -532,7 +533,12 @@ function MSBuild-Core { mt_switch="-mt" fi - RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch $mt_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" + local warnnotaserror_switch="" + if [[ -n "$warn_not_as_error" && "$warn_as_error" == true ]]; then + warnnotaserror_switch="/warnnotaserror:$warn_not_as_error /p:AdditionalWarningsNotAsErrors=$warn_not_as_error" + fi + + RunBuildTool "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch $mt_switch $warnnotaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" } function GetDarc { diff --git a/global.json b/global.json index 4779305f43e6..6caa2e64febd 100644 --- a/global.json +++ b/global.json @@ -7,7 +7,7 @@ "errorMessage": "The .NET SDK is not installed or is not configured correctly. Please run ./build to install the correct SDK version locally." }, "tools": { - "dotnet": "10.0.105", + "dotnet": "11.0.100-preview.3.26170.106", "runtimes": { "dotnet": [ "$(MicrosoftNETCorePlatformsPackageVersion)" @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.26217.116", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.26217.116", + "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26208.110", + "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26208.110", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" From 8d2671168ee9d9852f36c757508db34fde8f4b17 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Wed, 22 Apr 2026 15:53:19 -0700 Subject: [PATCH 215/230] Revert "Enable /graph in CI builds, dev builds, and PR builds (#53607)" This reverts commit 8b1618b7c32401b2f7eb6f924104b1ff3bd49b1c. --- eng/build.ps1 | 1 - eng/build.sh | 1 - eng/pipelines/templates/jobs/sdk-build.yml | 4 +--- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/eng/build.ps1 b/eng/build.ps1 index b78275e400c1..40116f7ca870 100644 --- a/eng/build.ps1 +++ b/eng/build.ps1 @@ -47,7 +47,6 @@ if ($pack) { if ($properties) { $arguments += " " + ($properties -join " ") } $arguments += " /tlp:summary" -$arguments += " /graph" $env:DOTNET_SYSTEM_NET_SECURITY_NOREVOCATIONCHECKBYDEFAULT = "true" diff --git a/eng/build.sh b/eng/build.sh index 9ca16665fb24..a4fc955ac08d 100644 --- a/eng/build.sh +++ b/eng/build.sh @@ -39,7 +39,6 @@ fi arguments+=("/p:SkipUsingCrossgen=$skip_crossgen") arguments+=("/p:SkipBuildingInstallers=$skip_installers") arguments+=(/tlp:summary) -arguments+=(/graph) export DOTNET_SYSTEM_NET_SECURITY_NOREVOCATIONCHECKBYDEFAULT="true" . "$ScriptRoot/common/build.sh" "${arguments[@]}" diff --git a/eng/pipelines/templates/jobs/sdk-build.yml b/eng/pipelines/templates/jobs/sdk-build.yml index 7d395c946674..3c9f292cc157 100644 --- a/eng/pipelines/templates/jobs/sdk-build.yml +++ b/eng/pipelines/templates/jobs/sdk-build.yml @@ -100,7 +100,6 @@ jobs: ${{ parameters.runtimeSourceProperties }} ${{ parameters.officialBuildProperties }} /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) - /graph displayName: 🟣 Build env: BuildConfig: $(buildConfiguration) @@ -125,8 +124,7 @@ jobs: ${{ parameters.osProperties }} \ ${{ parameters.runtimeSourceProperties }} \ ${{ parameters.officialBuildProperties }} \ - /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) \ - /graph + /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) displayName: 🟣 Build env: BuildConfig: $(buildConfiguration) From 142edfafcf698063f057a32cfc4446c631d699c8 Mon Sep 17 00:00:00 2001 From: Marc Paine Date: Wed, 22 Apr 2026 15:54:44 -0700 Subject: [PATCH 216/230] Add back the build.ps1/.sh changes for local builds --- eng/build.ps1 | 1 + eng/build.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/eng/build.ps1 b/eng/build.ps1 index 40116f7ca870..b78275e400c1 100644 --- a/eng/build.ps1 +++ b/eng/build.ps1 @@ -47,6 +47,7 @@ if ($pack) { if ($properties) { $arguments += " " + ($properties -join " ") } $arguments += " /tlp:summary" +$arguments += " /graph" $env:DOTNET_SYSTEM_NET_SECURITY_NOREVOCATIONCHECKBYDEFAULT = "true" diff --git a/eng/build.sh b/eng/build.sh index a4fc955ac08d..9ca16665fb24 100644 --- a/eng/build.sh +++ b/eng/build.sh @@ -39,6 +39,7 @@ fi arguments+=("/p:SkipUsingCrossgen=$skip_crossgen") arguments+=("/p:SkipBuildingInstallers=$skip_installers") arguments+=(/tlp:summary) +arguments+=(/graph) export DOTNET_SYSTEM_NET_SECURITY_NOREVOCATIONCHECKBYDEFAULT="true" . "$ScriptRoot/common/build.sh" "${arguments[@]}" From a1f2c13671e73fd0dc0864d374968bc0342c63c2 Mon Sep 17 00:00:00 2001 From: Jeremy Kuhne Date: Thu, 23 Apr 2026 14:01:39 -0700 Subject: [PATCH 217/230] Gate AOT fast path behind DOTNET_CLI_ENABLEAOT (#54047) Gate AOT fast path behind DOTNET_CLI_ENABLEAOT and fix hostfxr initialization The AOT parser in NativeEntryPoint is now only invoked when DOTNET_CLI_ENABLEAOT=true. When unset, the bridge falls through to the managed CLI immediately. ManagedHost.RunApp now configures the runtime exactly as the muxer would for an SDK command: Sets host_path in hostfxr_initialize_parameters so hostfxr uses the correct host executable identity instead of the current process. Sets the HOSTFXR_PATH runtime property via hostfxr_set_runtime_property_value, matching the muxer's is_sdk_command=true behavior so the SDK can locate hostfxr directly. All debug configurations (launchSettings.json, vcxproj.user, debug-dn.cmd, tasks.code-workspace) updated to set the new env var. DESIGN.md updated to reflect the DOTNET_CLI_ENABLEAOT gate and the muxer's existing try_invoke_aot_sdk integration. --- src/Cli/dn/dn-native-debug.vcxproj | 3 +- src/Cli/dn/dn.csproj | 6 ++- src/Cli/dotnet-aot/DESIGN.md | 66 +++++++++++++++----------- src/Cli/dotnet-aot/ManagedHost.cs | 24 ++++++++-- src/Cli/dotnet-aot/NativeEntryPoint.cs | 19 ++++---- src/Cli/dotnet-aot/dotnet-aot.csproj | 1 + src/Common/EnvironmentVariableNames.cs | 1 + tasks.code-workspace | 3 +- 8 files changed, 77 insertions(+), 46 deletions(-) diff --git a/src/Cli/dn/dn-native-debug.vcxproj b/src/Cli/dn/dn-native-debug.vcxproj index 1bfaa1983a3d..ea0f3bc53b95 100644 --- a/src/Cli/dn/dn-native-debug.vcxproj +++ b/src/Cli/dn/dn-native-debug.vcxproj @@ -129,7 +129,8 @@ $(_DnExePath) --info $(_DnPublishDir) - DOTNET_ROOT=$(_DotnetRootPath) + DOTNET_ROOT=$(_DotnetRootPath) +DOTNET_CLI_ENABLEAOT=true WindowsLocalDebugger diff --git a/src/Cli/dn/dn.csproj b/src/Cli/dn/dn.csproj index 541a4f20804e..c969c489389e 100644 --- a/src/Cli/dn/dn.csproj +++ b/src/Cli/dn/dn.csproj @@ -72,7 +72,8 @@ <_LaunchSettingsLines Include=" %22commandLineArgs%22: %22--info%22," /> <_LaunchSettingsLines Include=" %22workingDirectory%22: %22$(_DnCwdPath.Replace('\','\\'))%22," /> <_LaunchSettingsLines Include=" %22environmentVariables%22: {" /> - <_LaunchSettingsLines Include=" %22DOTNET_ROOT%22: %22$(_DotnetRootPath.Replace('\','\\'))%22" /> + <_LaunchSettingsLines Include=" %22DOTNET_ROOT%22: %22$(_DotnetRootPath.Replace('\','\\'))%22," /> + <_LaunchSettingsLines Include=" %22DOTNET_CLI_ENABLEAOT%22: %22true%22" /> <_LaunchSettingsLines Include=" }," /> <_LaunchSettingsLines Include=" %22nativeDebugging%22: true" /> <_LaunchSettingsLines Include=" }" /> @@ -93,7 +94,7 @@ <_VcxUserLines Include=" <LocalDebuggerCommand>$(_DnExePath)</LocalDebuggerCommand>" /> <_VcxUserLines Include=" <LocalDebuggerCommandArguments>--info</LocalDebuggerCommandArguments>" /> <_VcxUserLines Include=" <LocalDebuggerWorkingDirectory>$(_DnCwdPath)</LocalDebuggerWorkingDirectory>" /> - <_VcxUserLines Include=" <LocalDebuggerEnvironment>DOTNET_ROOT=$(_DotnetRootPath)</LocalDebuggerEnvironment>" /> + <_VcxUserLines Include=" <LocalDebuggerEnvironment>DOTNET_ROOT=$(_DotnetRootPath) DOTNET_CLI_ENABLEAOT=true</LocalDebuggerEnvironment>" /> <_VcxUserLines Include=" <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>" /> <_VcxUserLines Include=" </PropertyGroup>" /> <_VcxUserLines Include="</Project>" /> @@ -128,6 +129,7 @@ <_DebugScriptLines Include="REM (Debug > Windows > Breakpoints > New > Function, Language = All Languages)." /> <_DebugScriptLines Include="REM" /> <_DebugScriptLines Include="set DOTNET_ROOT=$(_DotnetRootPath)" /> + <_DebugScriptLines Include="set DOTNET_CLI_ENABLEAOT=true" /> <_DebugScriptLines Include="devenv /debugexe %22$(_DnExePath)%22 --info" /> diff --git a/src/Cli/dotnet-aot/DESIGN.md b/src/Cli/dotnet-aot/DESIGN.md index 9f939079ae39..9e75132c2944 100644 --- a/src/Cli/dotnet-aot/DESIGN.md +++ b/src/Cli/dotnet-aot/DESIGN.md @@ -5,14 +5,14 @@ to the .NET SDK CLI. The goal is to achieve near-instant startup for common commands while preserving full functionality through the managed CLI. The current implementation uses a standalone `dn.exe` host that lives alongside -the existing `dotnet` CLI. `dn.exe` emulates functionality that will eventually -be integrated into the dotnet host (muxer) itself — see -[dotnet/runtime#126171](https://github.com/dotnet/runtime/issues/126171). Once -the muxer gains native SDK resolution support, the AOT entry point will be -called directly by the standard `dotnet` executable and `dn.exe` will remain as -a local development and testing entry point. At that point, AOT-handled command -implementations will likely be removed from the managed `dotnet.dll` package as -well. +the existing `dotnet` CLI. `dn.exe` emulates the muxer's `try_invoke_aot_sdk` +function — see +[dotnet/runtime#126171](https://github.com/dotnet/runtime/issues/126171). The +muxer looks for `dotnet-aot` in the resolved SDK directory and, when found, +calls `dotnet_execute` directly. `dn.exe` follows the same contract and serves +as a local development and testing entry point. The AOT fast path is gated +behind `DOTNET_CLI_ENABLEAOT=true`; when the variable is unset or false, the +bridge falls through to the managed CLI immediately. ## Motivation @@ -48,14 +48,16 @@ graph TD subgraph L2["Layer 2 · dotnet-aot.dll (Native AOT Shared Library)"] Entry["NativeEntryPoint.Execute()"] + AotCheck{"DOTNET_CLI_ENABLEAOT
enabled?"} Parse["Parser.Parse(args)"] Fast{"Command handled
by AOT path?"} Invoke["Parser.Invoke()"] - DebugCheck["Check for native debugger"] HostInit["ManagedHost.RunApp()"] - Entry --> Parse --> Fast + Entry --> AotCheck + AotCheck -- "Yes" --> Parse --> Fast + AotCheck -- "No" --> HostInit Fast -- "Yes" --> Invoke - Fast -- "No" --> DebugCheck --> HostInit + Fast -- "No" --> HostInit end Invoke --> Done["Return exit code"] @@ -92,15 +94,18 @@ A NativeAOT shared library (`NativeLib=Shared`) that exports a single `[UnmanagedCallersOnly]` entry point: `dotnet_execute`. This layer contains the dual-path dispatch logic. -**Fast path** — The AOT bridge compiles a minimal `Parser` (guarded by -`#if CLI_AOT`) that handles simple commands (`--version`, `--info`) entirely in -native code. If the parser recognizes the command, it executes immediately and -returns. +**Fast path** — When `DOTNET_CLI_ENABLEAOT=true`, the AOT bridge compiles a +minimal `Parser` (guarded by `#if CLI_AOT`) that handles simple commands +(`--version`, `--info`) entirely in native code. If the parser recognizes the +command, it executes immediately and returns. -**Slow path** — For any command not handled by the AOT parser, the bridge calls -`ManagedHost.RunApp()`, which uses the hostfxr native hosting APIs -(`hostfxr_initialize_for_dotnet_command_line` / `hostfxr_run_app`) to bootstrap -CoreCLR and run `dotnet.dll`. +**Slow path** — When `DOTNET_CLI_ENABLEAOT` is not set or the AOT parser does +not handle the command, the bridge calls `ManagedHost.RunApp()`, which uses the +hostfxr native hosting APIs (`hostfxr_initialize_for_dotnet_command_line` / +`hostfxr_set_runtime_property_value` / `hostfxr_run_app`) to bootstrap CoreCLR +and run `dotnet.dll`. The bridge passes through the `host_path`, `dotnet_root`, +and `hostfxr_path` received from the caller so that the runtime is configured +exactly as the muxer would configure it for an SDK command. ```mermaid sequenceDiagram @@ -113,13 +118,14 @@ sequenceDiagram dn->>aot: dotnet_execute(hostPath, dotnetRoot, sdkDir, hostfxrPath, argc, argv) aot->>aot: Parser.Parse(args) - alt Command handled by AOT + alt DOTNET_CLI_ENABLEAOT=true and command handled by AOT aot->>aot: Parser.Invoke(parseResult) aot-->>dn: exit code - else Command not handled - aot->>hfxr: hostfxr_initialize_for_dotnet_command_line(args) - hfxr->>clr: Load CoreCLR runtime + else Command not handled or AOT disabled + aot->>hfxr: hostfxr_initialize_for_dotnet_command_line(args, host_path, dotnet_root) + aot->>hfxr: hostfxr_set_runtime_property_value(handle, "HOSTFXR_PATH", hostfxrPath) aot->>hfxr: hostfxr_run_app(handle) + hfxr->>clr: Load CoreCLR runtime hfxr->>cli: Program.Main(args) cli-->>hfxr: exit code hfxr-->>aot: exit code @@ -156,8 +162,9 @@ In the shared files: - **`Program.cs`** — Under `#if CLI_AOT`, provides a simple `Main` that delegates to the AOT parser. Under `#else`, provides the full CLI entry point with telemetry, signal handlers, and workload checks. -- **`CommandLineInfo.cs`** — Shared without conditional compilation; prints - version and environment information. +- **`CommandLineInfo.cs`** — Uses `#if CLI_AOT` to substitute lightweight + implementations for workload info, localized strings, and OS detection that + would otherwise pull in dependencies incompatible with AOT. ```mermaid graph LR @@ -442,10 +449,11 @@ dialog (or auto-attaches in configured environments). ## Future Work -- **Muxer integration** — The `dn.exe` host emulates muxer behavior locally. - Once [dotnet/runtime#126171](https://github.com/dotnet/runtime/issues/126171) - lands, the dotnet muxer will call `dotnet_execute` directly. `dn.exe` will - continue to serve as a local development and testing entry point. +- **Muxer integration** — The muxer's `try_invoke_aot_sdk` function + ([dotnet/runtime#126171](https://github.com/dotnet/runtime/issues/126171)) + already calls `dotnet_execute` from the resolved SDK directory, passing + `host_path`, `dotnet_root`, `sdk_dir`, and `hostfxr_path`. `dn.exe` + emulates this same contract for local development and testing. - **Remove AOT commands from managed package** — After the AOT path is validated and shipping, the `#if CLI_AOT` implementations in `Parser.cs` and `Program.cs` can be removed from the managed `dotnet.dll` build. diff --git a/src/Cli/dotnet-aot/ManagedHost.cs b/src/Cli/dotnet-aot/ManagedHost.cs index 4677068dd3ea..ed6905aa7373 100644 --- a/src/Cli/dotnet-aot/ManagedHost.cs +++ b/src/Cli/dotnet-aot/ManagedHost.cs @@ -106,16 +106,17 @@ public int InvokeMethod(string assemblyPath, string typeName, string methodName) /// Runs the managed application using the hostfxr command-line hosting path. /// This is the simplest way to invoke dotnet.dll Program.Main(args). /// + /// Path to the host executable (e.g., dotnet.exe). /// Path to the .NET installation root. + /// Path to the hostfxr library. /// Command-line arguments (first element should be the app path). /// The application exit code. - public static int RunApp(string dotnetRoot, string[] args) + public static int RunApp(string hostPath, string dotnetRoot, string hostfxrPath, string[] args) { - nint handle; - var parameters = new Interop.hostfxr_initialize_parameters { size = sizeof(Interop.hostfxr_initialize_parameters), + host_path = PlatformStringMarshaller.ConvertToUnmanaged(hostPath), dotnet_root = PlatformStringMarshaller.ConvertToUnmanaged(dotnetRoot), }; @@ -125,7 +126,7 @@ public static int RunApp(string dotnetRoot, string[] args) args.Length, args, in parameters, - out handle); + out nint handle); if (result != StatusCode.Success && handle == 0) { @@ -134,6 +135,20 @@ public static int RunApp(string dotnetRoot, string[] args) try { + // Set HOSTFXR_PATH property to match the muxer's behavior for SDK commands. + // The muxer sets this when is_sdk_command=true so the SDK can load hostfxr + // without relying on dlopen/LoadLibrary to find it. + if (!string.IsNullOrEmpty(hostfxrPath)) + { + StatusCode propertyResult = Interop.hostfxr_set_runtime_property_value( + handle, Constants.RuntimeProperty.HostFxrPath, hostfxrPath); + if (propertyResult != StatusCode.Success) + { + throw new InvalidOperationException( + $"hostfxr_set_runtime_property_value failed for {Constants.RuntimeProperty.HostFxrPath}. Status: {propertyResult} (0x{(uint)propertyResult:X8})"); + } + } + StatusCode appResult = Interop.hostfxr_run_app(handle); return (int)appResult; } @@ -144,6 +159,7 @@ public static int RunApp(string dotnetRoot, string[] args) } finally { + PlatformStringMarshaller.Free(parameters.host_path); PlatformStringMarshaller.Free(parameters.dotnet_root); } } diff --git a/src/Cli/dotnet-aot/NativeEntryPoint.cs b/src/Cli/dotnet-aot/NativeEntryPoint.cs index e88955b29977..dc71475d4dbf 100644 --- a/src/Cli/dotnet-aot/NativeEntryPoint.cs +++ b/src/Cli/dotnet-aot/NativeEntryPoint.cs @@ -34,18 +34,19 @@ static int Execute( args[i] = PlatformStringMarshaller.ConvertToManaged(argv[i]) ?? string.Empty; } - // Try the AOT-compiled path first for supported commands - var parseResult = Parser.Parse(args); - bool handled = parseResult.Errors.Count == 0; - - if (handled) + // Try the AOT-compiled path for supported commands (if enabled) + if (EnvironmentVariableParser.ParseBool(Environment.GetEnvironmentVariable(EnvironmentVariableNames.DOTNET_CLI_ENABLEAOT), defaultValue: false)) { - return Parser.Invoke(parseResult); + var parseResult = Parser.Parse(args); + if (parseResult.Errors.Count == 0) + { + return Parser.Invoke(parseResult); + } } // Fall back to the fully managed dotnet CLI by hosting .NET - string dotnetDll = Path.Combine(sdkDir, "dotnet.dll"); - string runtimeConfig = Path.Combine(sdkDir, "dotnet.runtimeconfig.json"); + string dotnetDll = Path.Join(sdkDir, "dotnet.dll"); + string runtimeConfig = Path.Join(sdkDir, "dotnet.runtimeconfig.json"); if (File.Exists(dotnetDll) && File.Exists(runtimeConfig)) { @@ -53,7 +54,7 @@ static int Execute( string[] appArgs = new string[args.Length + 1]; appArgs[0] = dotnetDll; Array.Copy(args, 0, appArgs, 1, args.Length); - return ManagedHost.RunApp(dotnetRoot, appArgs); + return ManagedHost.RunApp(hostPath, dotnetRoot, hostfxrPath, appArgs); } // No managed fallback available diff --git a/src/Cli/dotnet-aot/dotnet-aot.csproj b/src/Cli/dotnet-aot/dotnet-aot.csproj index ef0c6d2a1708..87ccce2bf072 100644 --- a/src/Cli/dotnet-aot/dotnet-aot.csproj +++ b/src/Cli/dotnet-aot/dotnet-aot.csproj @@ -31,6 +31,7 @@ + diff --git a/src/Common/EnvironmentVariableNames.cs b/src/Common/EnvironmentVariableNames.cs index a2dce0704346..ff31b1fe7141 100644 --- a/src/Common/EnvironmentVariableNames.cs +++ b/src/Common/EnvironmentVariableNames.cs @@ -25,6 +25,7 @@ internal static class EnvironmentVariableNames public static readonly string DOTNET_ADD_GLOBAL_TOOLS_TO_PATH = nameof(DOTNET_ADD_GLOBAL_TOOLS_TO_PATH); public static readonly string DOTNET_NOLOGO = nameof(DOTNET_NOLOGO); public static readonly string DOTNET_SKIP_WORKLOAD_INTEGRITY_CHECK = nameof(DOTNET_SKIP_WORKLOAD_INTEGRITY_CHECK); + public static readonly string DOTNET_CLI_ENABLEAOT = nameof(DOTNET_CLI_ENABLEAOT); public static readonly string DOTNET_CLI_TELEMETRY_SESSIONID = nameof(DOTNET_CLI_TELEMETRY_SESSIONID); public static readonly string DOTNET_CLI_CONSOLE_USE_DEFAULT_ENCODING = nameof(DOTNET_CLI_CONSOLE_USE_DEFAULT_ENCODING); // Telemetry logging/debug/testing. diff --git a/tasks.code-workspace b/tasks.code-workspace index 923b82ffad87..16974cf0d4a4 100644 --- a/tasks.code-workspace +++ b/tasks.code-workspace @@ -19,7 +19,8 @@ "args": ["--info"], "cwd": "${workspaceFolder}${/}artifacts${/}bin${/}dn${/}Debug${/}net11.0${/}win-x64${/}publish", "environment": [ - { "name": "DOTNET_ROOT", "value": "${workspaceFolder}/.dotnet" } + { "name": "DOTNET_ROOT", "value": "${workspaceFolder}/.dotnet" }, + { "name": "DOTNET_CLI_ENABLEAOT", "value": "true" } ], "stopAtEntry": false, "console": "integratedTerminal" From 2e7d32b68902035df56d8b9a9ca8d854534ce720 Mon Sep 17 00:00:00 2001 From: "Donna Chen (BEYONDSOFT CONSULTING INC)" Date: Fri, 24 Apr 2026 10:03:55 +0800 Subject: [PATCH 218/230] Fix IDE0073 header and xUnit1051 warnings in MissingShebangInFileBasedProgramTests --- .../MissingShebangInFileBasedProgramTests.cs | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgramTests.cs b/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgramTests.cs index 3ec4c4759d05..5008d0800307 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgramTests.cs +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/tests/Microsoft.CodeAnalysis.NetAnalyzers.UnitTests/Microsoft.NetCore.Analyzers/Usage/MissingShebangInFileBasedProgramTests.cs @@ -1,4 +1,5 @@ -// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information. +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Testing; @@ -31,7 +32,7 @@ public async Task EntryPointWithoutShebang_MultipleFiles_WarningAsync() new DiagnosticResult(MissingShebangInFileBasedProgram.Rule).WithLocation("Test0.cs", 1, 1), }, }, - }.RunAsync(); + }.RunAsync(TestContext.Current.CancellationToken); } [Fact] @@ -60,7 +61,7 @@ public async Task SingleFile_NoDiagnosticAsync() Sources = { ("Test0.cs", """class Program { static void Main() { } }""") }, AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, }, - }.RunAsync(); + }.RunAsync(TestContext.Current.CancellationToken); } [Fact] @@ -105,7 +106,7 @@ class Program { static void Main() { } } [new KeyValuePair("FileBasedProgram", "true")]))); }, }, - }.RunAsync(); + }.RunAsync(TestContext.Current.CancellationToken); } [Fact] @@ -136,7 +137,7 @@ class Program { static void Main() { } } [new KeyValuePair("FileBasedProgram", "true")]))); }, }, - }.RunAsync(); + }.RunAsync(TestContext.Current.CancellationToken); } [Fact] @@ -154,7 +155,7 @@ public async Task EmptyEntryPointFilePath_NoDiagnosticAsync() }, AnalyzerConfigFiles = { ("/.globalconfig", "is_global = true\r\nbuild_property.EntryPointFilePath = ") }, }, - }.RunAsync(); + }.RunAsync(TestContext.Current.CancellationToken); } [Fact] @@ -173,7 +174,7 @@ public async Task GeneratedCodeFile_NoDiagnosticAsync() }, AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, }, - }.RunAsync(); + }.RunAsync(TestContext.Current.CancellationToken); } [Fact] @@ -196,7 +197,7 @@ public async Task AutoGeneratedComment_NoDiagnosticAsync() }, AnalyzerConfigFiles = { ("/.globalconfig", GlobalConfig) }, }, - }.RunAsync(); + }.RunAsync(TestContext.Current.CancellationToken); } [Fact] @@ -220,7 +221,7 @@ public async Task GeneratedCodePlusRealFile_WarningAsync() new DiagnosticResult(MissingShebangInFileBasedProgram.Rule).WithLocation("Test0.cs", 1, 1), }, }, - }.RunAsync(); + }.RunAsync(TestContext.Current.CancellationToken); } [Fact] @@ -259,7 +260,7 @@ class Program { static void Main() { } } [new KeyValuePair("FileBasedProgram", "true")]))); }, }, - }.RunAsync(); + }.RunAsync(TestContext.Current.CancellationToken); } } } \ No newline at end of file From b8849048c5afcd84ed787040023609a073c8d5d7 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Fri, 24 Apr 2026 07:57:11 +0200 Subject: [PATCH 219/230] Fixup run-file tests --- .../CommandTests/Run/RunFileTests_BuildOptions.cs | 1 + .../CommandTests/Run/RunFileTests_CscOnlyAndApi.cs | 4 ++++ .../CommandTests/Run/RunFileTests_Directives.cs | 8 ++++++++ .../dotnet.Tests/CommandTests/Run/RunFileTests_General.cs | 7 ++++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildOptions.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildOptions.cs index d11b8c25323c..14ed5a0473bc 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildOptions.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_BuildOptions.cs @@ -655,6 +655,7 @@ public void BinaryLog_EvaluationData_MultiFile() File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet #:include *.cs {s_programDependingOnUtil} """); diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_CscOnlyAndApi.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_CscOnlyAndApi.cs index ce7558ef2ef0..35a845b28917 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests_CscOnlyAndApi.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_CscOnlyAndApi.cs @@ -1269,6 +1269,7 @@ public void Api() artifacts/$(AssemblyName) artifacts/$(AssemblyName) true + {programPath} .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content false true @@ -1361,6 +1362,7 @@ public void Api_Evaluation() artifacts/$(AssemblyName) artifacts/$(AssemblyName) true + {programPath} .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content false true @@ -1436,6 +1438,7 @@ public void Api_Diagnostic_01() artifacts/$(AssemblyName) artifacts/$(AssemblyName) true + {programPath} .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content false true @@ -1510,6 +1513,7 @@ public void Api_Diagnostic_02() artifacts/$(AssemblyName) artifacts/$(AssemblyName) true + {programPath} .cs=Compile;.resx=EmbeddedResource;.json=None;.razor=Content false true diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs index da36e7664c83..05e2300387eb 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs @@ -322,6 +322,7 @@ public void IncludeDirective( var testInstance = TestAssetsManager.CreateTestDirectory(); File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet #:include {includePattern} {additionalDirectives} #:property MyProp1=cs @@ -350,6 +351,7 @@ public void IncludeDirective_WorkingDirectory() """; File.WriteAllText(Path.Join(srcDir, "A.cs"), $""" + #!/usr/bin/env dotnet #:include B.cs {a} """); @@ -425,6 +427,7 @@ public void IncludeDirective_Transitive() """; File.WriteAllText(Path.Join(testInstance.Path, "dir1/A.cs"), $""" + #!/usr/bin/env dotnet #:include dir2/B.cs {a} """); @@ -555,6 +558,7 @@ public void IncludeDirective_UpToDate_Glob(string glob) var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:include {glob}.cs #:property _Star=* {s_programDependingOnUtil} @@ -613,6 +617,7 @@ public void IncludeDirective_UpToDate_NoGlob() var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:include Util.cs {s_programDependingOnUtil} """); @@ -703,6 +708,7 @@ class UtilClass var programPath = Path.Join(appDir, "Program.cs"); var programCode = """ + #!/usr/bin/env dotnet #:include Util.cs Console.WriteLine("Program(v1) " + UtilClass.GetMessage()); """; @@ -732,6 +738,7 @@ public void IncludeDirective_FeatureFlags() var programPath = Path.Join(testInstance.Path, "Program.cs"); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:include *.cs {s_programDependingOnUtil} """); @@ -788,6 +795,7 @@ public void IncludeDirective_CustomMapping() .And.HaveStdOutContaining("error CS0103"); File.WriteAllText(programPath, $""" + #!/usr/bin/env dotnet #:property FileBasedProgramsItemMapping=.cs=Compile #:include *.cs {s_programDependingOnUtil} diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_General.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_General.cs index 901432183be4..1e2b5664f9c7 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests_General.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_General.cs @@ -726,6 +726,7 @@ public void MultipleFiles_RunEntryPoint() // This can be overridden. File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet #:property EnableDefaultCompileItems=true {s_programDependingOnUtil} """); @@ -745,7 +746,10 @@ public void MultipleFiles_RunEntryPoint() public void MultipleFiles_EnableDefaultCompileItemsViaDirectoryBuildProps() { var testInstance = TestAssetsManager.CreateTestDirectory(); - File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), s_programDependingOnUtil); + File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), $""" + #!/usr/bin/env dotnet + {s_programDependingOnUtil} + """); File.WriteAllText(Path.Join(testInstance.Path, "Util.cs"), s_util); File.WriteAllText(Path.Join(testInstance.Path, "Directory.Build.props"), """ @@ -770,6 +774,7 @@ public void MultipleFiles_DirectivesInOtherFiles() { var testInstance = TestAssetsManager.CreateTestDirectory(); File.WriteAllText(Path.Join(testInstance.Path, "A.cs"), """ + #!/usr/bin/env dotnet Console.WriteLine(B.M()); #if !DEBUG Console.WriteLine("Release config"); From 510af8b71891e4bd308ee17c9008705d0b7fcb56 Mon Sep 17 00:00:00 2001 From: Jan Jones Date: Fri, 24 Apr 2026 09:46:04 +0200 Subject: [PATCH 220/230] Fixup more run-file tests --- .../CommandTests/Project/Convert/DotnetProjectConvertTests.cs | 3 +++ test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs index e92608908ed2..fdf1036f70c7 100644 --- a/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs +++ b/test/dotnet.Tests/CommandTests/Project/Convert/DotnetProjectConvertTests.cs @@ -600,6 +600,7 @@ public void DefaultItems_ImplicitBuildFileInDirectory() Directory.CreateDirectory(srcDir); File.WriteAllText(Path.Join(srcDir, "Program.cs"), """ + #!/usr/bin/env dotnet #:sdk Microsoft.NET.Sdk.Web Console.WriteLine(Util.GetText()); """); @@ -664,6 +665,7 @@ public void DefaultItems_ImplicitBuildFileOutsideDirectory() var subdir = Path.Join(srcDir, "subdir"); Directory.CreateDirectory(subdir); File.WriteAllText(Path.Join(subdir, "Program.cs"), """ + #!/usr/bin/env dotnet Console.WriteLine(Util.GetText()); """); File.WriteAllText(Path.Join(subdir, "Util.cs"), """ @@ -717,6 +719,7 @@ public void DefaultItems_ImplicitBuildFileAndUtilOutsideDirectory() var subdir = Path.Join(srcDir, "subdir"); Directory.CreateDirectory(subdir); File.WriteAllText(Path.Join(subdir, "Program.cs"), """ + #!/usr/bin/env dotnet Console.WriteLine(Util.GetText()); """); File.WriteAllText(Path.Join(srcDir, "Util.cs"), """ diff --git a/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs b/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs index 05e2300387eb..06ff227764d0 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunFileTests_Directives.cs @@ -378,7 +378,6 @@ static class B { public static string M() => "Hello from B"; } new DirectoryInfo(testInstance.Path) .Should().HaveSubtree(""" - Directory.Build.props src/ src/A.cs src/A/ From a86dfb67e94d13aeb0a7c76cccdb4bdd4dc103c5 Mon Sep 17 00:00:00 2001 From: Daniel Plaisted Date: Fri, 24 Apr 2026 14:59:44 -0400 Subject: [PATCH 221/230] Fix merge conflict regression: restore Except->Where fix for duplicate args The fix from 344e433085 on release/10.0.4xx (replacing Except() with Where() to preserve duplicate command arguments) was lost during merge conflict resolution with OTel refactoring on main. This restores the correct behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../CommandFactory/CommandResolution/MuxerCommandSpecMaker.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cli/dotnet/CommandFactory/CommandResolution/MuxerCommandSpecMaker.cs b/src/Cli/dotnet/CommandFactory/CommandResolution/MuxerCommandSpecMaker.cs index 9a958f15d5e7..0473f8c55a9a 100644 --- a/src/Cli/dotnet/CommandFactory/CommandResolution/MuxerCommandSpecMaker.cs +++ b/src/Cli/dotnet/CommandFactory/CommandResolution/MuxerCommandSpecMaker.cs @@ -19,7 +19,7 @@ internal static CommandSpec CreatePackageCommandSpecUsingMuxer(string commandPat arguments.Add(commandPath); var filteredCommandArgs = rollForwardArgument.Any() - ? commandArguments.Except(rollForwardArgument) + ? commandArguments.Where(arg => !arg.Equals("--allow-roll-forward", StringComparison.OrdinalIgnoreCase)) : commandArguments; arguments.AddRange(filteredCommandArgs); From 9bf8092faa46d1e8465c8082a7ef6ffcbc9d8560 Mon Sep 17 00:00:00 2001 From: Nikola Milosavljevic Date: Fri, 24 Apr 2026 15:08:18 -0700 Subject: [PATCH 222/230] System.Text.Json conversion for template engine project and tests (#54022) --- .../Alias/AliasModel.cs | 4 +- .../Alias/AliasRegistry.cs | 65 +++--- .../HostSpecificDataLoader.cs | 18 +- .../HostSpecificTemplateData.cs | 100 +++++++-- .../JExtensions.cs | 198 +++++++++++------- .../ChmodPostActionProcessor.cs | 6 +- .../PostActionProcessorBase.cs | 15 +- .../TemplateSearch/CliHostSearchCacheData.cs | 13 +- .../AliasAssignmentTests.cs | 14 +- .../HostDataLoaderTests.cs | 34 +-- .../TemplateSearchCoordinatorTests.cs | 10 +- 11 files changed, 294 insertions(+), 183 deletions(-) diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/Alias/AliasModel.cs b/src/Cli/Microsoft.TemplateEngine.Cli/Alias/AliasModel.cs index 2228284f581c..ec8b35dd3af8 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/Alias/AliasModel.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/Alias/AliasModel.cs @@ -1,7 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace Microsoft.TemplateEngine.Cli.Alias { @@ -17,7 +17,7 @@ internal AliasModel(IReadOnlyDictionary> commandAl CommandAliases = new Dictionary>(commandAliases.ToDictionary(x => x.Key, x => x.Value), StringComparer.OrdinalIgnoreCase); } - [JsonProperty] + [JsonInclude] internal Dictionary> CommandAliases { get; set; } internal void AddCommandAlias(string aliasName, IReadOnlyList aliasTokens) diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/Alias/AliasRegistry.cs b/src/Cli/Microsoft.TemplateEngine.Cli/Alias/AliasRegistry.cs index faa3c0f34179..05b2f9d7c8e0 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/Alias/AliasRegistry.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/Alias/AliasRegistry.cs @@ -3,7 +3,8 @@ using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Utils; -using Newtonsoft.Json.Linq; +using System.Text.Json; +using System.Text.Json.Nodes; namespace Microsoft.TemplateEngine.Cli.Alias { @@ -135,7 +136,7 @@ private void EnsureLoaded() _aliases = new AliasModel(); return; } - JObject parsed = _environmentSettings.Host.FileSystem.ReadObject(_aliasesFilePath); + JsonObject parsed = _environmentSettings.Host.FileSystem.ReadObject(_aliasesFilePath); IReadOnlyDictionary> commandAliases = ToStringListDictionary(parsed, StringComparer.OrdinalIgnoreCase, "CommandAliases"); _aliases = new AliasModel(commandAliases); @@ -145,7 +146,19 @@ private void Save() { if (_aliases is AliasModel { CommandAliases: { Count: > 0 } }) { - _environmentSettings.Host.FileSystem.WriteObject(_aliasesFilePath, _aliases); + JsonObject root = new(); + JsonObject commandAliases = new(); + foreach (var kvp in _aliases.CommandAliases) + { + JsonArray arr = new(); + foreach (string item in kvp.Value) + { + arr.Add((JsonNode)JsonValue.Create(item)!); + } + commandAliases[kvp.Key] = arr; + } + root["CommandAliases"] = commandAliases; + _environmentSettings.Host.FileSystem.WriteObject(_aliasesFilePath, root); } else { @@ -154,50 +167,52 @@ private void Save() } // reads a dictionary whose values can either be string literals, or arrays of strings. - private IReadOnlyDictionary> ToStringListDictionary(JToken token, StringComparer? comparer = null, string? propertyName = null) + private IReadOnlyDictionary> ToStringListDictionary(JsonObject token, StringComparer? comparer = null, string? propertyName = null) { Dictionary> result = new(comparer ?? StringComparer.Ordinal); - JObject? jObj = token as JObject; - if (jObj == null || propertyName == null || !jObj.TryGetValue(propertyName, StringComparison.OrdinalIgnoreCase, out JToken? element)) + + if (propertyName == null) { return result; } - jObj = element as JObject; - if (jObj == null) + // Case-insensitive property lookup for compatibility with Newtonsoft.Json behavior + JsonNode? element = null; + foreach (var prop in token) + { + if (string.Equals(prop.Key, propertyName, StringComparison.OrdinalIgnoreCase)) + { + element = prop.Value; + break; + } + } + + if (element is not JsonObject jObj) { return result; } - foreach (JProperty property in jObj.Properties()) + foreach (KeyValuePair property in jObj) { if (property.Value == null) { continue; } - else if (property.Value.Type == JTokenType.String) + else if (property.Value.GetValueKind() == JsonValueKind.String) { - result[property.Name] = new List() { property.Value.ToString() }; + result[property.Key] = new List() { property.Value.GetValue() }; } - else if (property.Value.Type == JTokenType.Array) + else if (property.Value is JsonArray arr) { - JArray? arr = property.Value as JArray; - if (arr == null) - { - result[property.Name] = Array.Empty(); - } - else + List values = new(); + foreach (JsonNode? item in arr) { - List values = new(); - foreach (JToken item in arr) + if (item != null && item.GetValueKind() == JsonValueKind.String) { - if (item != null && item.Type == JTokenType.String) - { - values.Add(item.ToString()); - } + values.Add(item.GetValue()); } - result[property.Name] = values; } + result[property.Key] = values; } } diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/HostSpecificDataLoader.cs b/src/Cli/Microsoft.TemplateEngine.Cli/HostSpecificDataLoader.cs index 3f421e11b12a..5ba02797f1d3 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/HostSpecificDataLoader.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/HostSpecificDataLoader.cs @@ -2,13 +2,13 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Concurrent; +using System.Text.Json; +using System.Text.Json.Nodes; using Microsoft.Extensions.Logging; using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Abstractions.Mount; using Microsoft.TemplateEngine.Edge.Settings; using Microsoft.TemplateEngine.Utils; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; namespace Microsoft.TemplateEngine.Cli { @@ -16,6 +16,12 @@ public class HostSpecificDataLoader : IHostSpecificDataLoader { private readonly IEngineEnvironmentSettings _engineEnvironment; + private static readonly JsonDocumentOptions s_jsonDocumentOptions = new() + { + CommentHandling = JsonCommentHandling.Skip, + AllowTrailingCommas = true + }; + private readonly ConcurrentDictionary _cache = new(); @@ -39,7 +45,7 @@ private HostSpecificTemplateData ReadHostSpecificTemplateDataUncached(ITemplateI { if (!string.IsNullOrWhiteSpace(hostData)) { - JObject jObject = JObject.Parse(hostData); + JsonObject? jObject = JsonNode.Parse(hostData, nodeOptions: null, s_jsonDocumentOptions)?.AsObject(); return new HostSpecificTemplateData(jObject); } } @@ -60,12 +66,10 @@ private HostSpecificTemplateData ReadHostSpecificTemplateDataUncached(ITemplateI file = mountPoint.FileInfo(templateInfo.HostConfigPlace); if (file != null && file.Exists) { - JObject jsonData; + JsonObject? jsonData; using (Stream stream = file.OpenRead()) - using (TextReader textReader = new StreamReader(stream, true)) - using (JsonReader jsonReader = new JsonTextReader(textReader)) { - jsonData = JObject.Load(jsonReader); + jsonData = JsonNode.Parse(stream, nodeOptions: null, s_jsonDocumentOptions)?.AsObject(); } return new HostSpecificTemplateData(jsonData); diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/HostSpecificTemplateData.cs b/src/Cli/Microsoft.TemplateEngine.Cli/HostSpecificTemplateData.cs index c5f3f3204546..3ed21b27aac6 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/HostSpecificTemplateData.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/HostSpecificTemplateData.cs @@ -1,8 +1,9 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; namespace Microsoft.TemplateEngine.Cli { @@ -14,7 +15,7 @@ public class HostSpecificTemplateData private const string ShortNameKey = "shortName"; private const string AlwaysShowKey = "alwaysShow"; - internal HostSpecificTemplateData(JObject? jObject) + internal HostSpecificTemplateData(JsonObject? jObject) { var symbolsInfo = new Dictionary>(); @@ -24,34 +25,63 @@ internal HostSpecificTemplateData(JObject? jObject) return; } - if (jObject.GetValue(nameof(UsageExamples), StringComparison.OrdinalIgnoreCase) is JArray usagesArray) + JsonNode? usagesNode = GetPropertyCaseInsensitive(jObject, nameof(UsageExamples)); + if (usagesNode is JsonArray usagesArray) { - UsageExamples = new List(usagesArray.Values().Where(v => v != null).OfType()); + UsageExamples = new List(usagesArray + .Where(v => v != null && v.GetValueKind() == JsonValueKind.String) + .Select(v => v!.GetValue())); } - if (jObject.GetValue(nameof(SymbolInfo), StringComparison.OrdinalIgnoreCase) is JObject symbols) + JsonNode? symbolsNode = GetPropertyCaseInsensitive(jObject, nameof(SymbolInfo)); + if (symbolsNode is JsonObject symbols) { - foreach (var symbolInfo in symbols.Properties()) + foreach (var symbolInfo in symbols) { - if (!(symbolInfo.Value is JObject symbol)) + if (symbolInfo.Value is not JsonObject symbol) { continue; } var symbolProperties = new Dictionary(); - foreach (var symbolProperty in symbol.Properties()) + foreach (var symbolProperty in symbol) { - symbolProperties[symbolProperty.Name] = symbolProperty.Value.Value() ?? ""; + if (symbolProperty.Value is null) + { + symbolProperties[symbolProperty.Key] = ""; + } + else + { + var kind = symbolProperty.Value.GetValueKind(); + symbolProperties[symbolProperty.Key] = kind switch + { + JsonValueKind.String => symbolProperty.Value.GetValue(), + JsonValueKind.True => "true", + JsonValueKind.False => "false", + _ => symbolProperty.Value.ToJsonString() + }; + } } - symbolsInfo[symbolInfo.Name] = symbolProperties; + symbolsInfo[symbolInfo.Key] = symbolProperties; } } SymbolInfo = symbolsInfo; - IsHidden = jObject.Value(nameof(IsHidden)); - + JsonNode? isHiddenNode = GetPropertyCaseInsensitive(jObject, nameof(IsHidden)); + if (isHiddenNode != null) + { + var kind = isHiddenNode.GetValueKind(); + if (kind == JsonValueKind.True) + { + IsHidden = true; + } + else if (kind == JsonValueKind.String && bool.TryParse(isHiddenNode.GetValue(), out bool hidden)) + { + IsHidden = hidden; + } + } } internal HostSpecificTemplateData( @@ -144,7 +174,7 @@ public Dictionary ShortNameOverrides } } - internal static HostSpecificTemplateData Default { get; } = new HostSpecificTemplateData((JObject?)null); + internal static HostSpecificTemplateData Default { get; } = new HostSpecificTemplateData((JsonObject?)null); internal string DisplayNameForParameter(string parameterName) { @@ -157,26 +187,50 @@ internal string DisplayNameForParameter(string parameterName) return parameterName; } - private class HostSpecificTemplateDataJsonConverter : JsonConverter + private static JsonNode? GetPropertyCaseInsensitive(JsonObject obj, string key) { - public override HostSpecificTemplateData ReadJson(JsonReader reader, Type objectType, HostSpecificTemplateData? existingValue, bool hasExistingValue, JsonSerializer serializer) => throw new NotImplementedException(); + if (obj.TryGetPropertyValue(key, out JsonNode? result)) + { + return result; + } - public override void WriteJson(JsonWriter writer, HostSpecificTemplateData? value, JsonSerializer serializer) + foreach (var kvp in obj) { - if (value == null) + if (string.Equals(kvp.Key, key, StringComparison.OrdinalIgnoreCase)) { - return; + return kvp.Value; } + } + + return null; + } + + private class HostSpecificTemplateDataJsonConverter : JsonConverter + { + public override HostSpecificTemplateData Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => throw new NotImplementedException(); + + public override void Write(Utf8JsonWriter writer, HostSpecificTemplateData value, JsonSerializerOptions options) + { writer.WriteStartObject(); if (value.IsHidden) { - writer.WritePropertyName(nameof(IsHidden)); - writer.WriteValue(value.IsHidden); + writer.WriteBoolean(nameof(IsHidden), value.IsHidden); } if (value.SymbolInfo.Any()) { writer.WritePropertyName(nameof(SymbolInfo)); - serializer.Serialize(writer, value.SymbolInfo); + writer.WriteStartObject(); + foreach (var symbol in value.SymbolInfo) + { + writer.WritePropertyName(symbol.Key); + writer.WriteStartObject(); + foreach (var prop in symbol.Value) + { + writer.WriteString(prop.Key, prop.Value); + } + writer.WriteEndObject(); + } + writer.WriteEndObject(); } if (value.UsageExamples != null && value.UsageExamples.Any(e => !string.IsNullOrWhiteSpace(e))) @@ -187,7 +241,7 @@ public override void WriteJson(JsonWriter writer, HostSpecificTemplateData? valu { if (!string.IsNullOrWhiteSpace(example)) { - writer.WriteValue(example); + writer.WriteStringValue(example); } } writer.WriteEndArray(); diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/JExtensions.cs b/src/Cli/Microsoft.TemplateEngine.Cli/JExtensions.cs index 5cd2d77b6f96..e9602d353c1e 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/JExtensions.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/JExtensions.cs @@ -1,45 +1,48 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -#if !NET6_0_OR_GREATER -using System; -using System.Collections.Generic; -using System.IO; -#endif +using System.Text.Json; +using System.Text.Json.Nodes; using Microsoft.TemplateEngine.Abstractions.PhysicalFileSystem; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; namespace Microsoft.TemplateEngine { internal static class JExtensions { - internal static string? ToString(this JToken? token, string? key) + private static readonly JsonDocumentOptions DocOptions = new() { CommentHandling = JsonCommentHandling.Skip, AllowTrailingCommas = true }; + + internal static string? ToString(this JsonNode? token, string? key) { if (key == null) { - if (token == null || token.Type != JTokenType.String) + if (token == null) { return null; } - return token.ToString(); + if (token is JsonValue val && val.GetValueKind() == JsonValueKind.String) + { + return val.GetValue(); + } + + return null; } - if (token is not JObject obj) + if (token is not JsonObject obj) { return null; } - if (!obj.TryGetValue(key, StringComparison.OrdinalIgnoreCase, out JToken? element) || element.Type != JTokenType.String) + JsonNode? element = GetPropertyCaseInsensitive(obj, key); + if (element == null || element.GetValueKind() != JsonValueKind.String) { return null; } - return element.ToString(); + return element.GetValue(); } - internal static bool TryGetValue(this JToken? token, string? key, out JToken? result) + internal static bool TryGetValue(this JsonNode? token, string? key, out JsonNode? result) { result = null; @@ -52,25 +55,42 @@ internal static bool TryGetValue(this JToken? token, string? key, out JToken? re { result = token; } - else if (!((JObject)token).TryGetValue(key, StringComparison.OrdinalIgnoreCase, out result)) + else { - return false; + result = GetPropertyCaseInsensitive(token.AsObject(), key); + if (result == null) + { + return false; + } } return true; } - internal static bool TryParseBool(this JToken token, out bool result) + internal static bool TryParseBool(this JsonNode token, out bool result) { result = false; - return (token.Type == JTokenType.Boolean || token.Type == JTokenType.String) - && - bool.TryParse(token.ToString(), out result); + var kind = token.GetValueKind(); + if (kind == JsonValueKind.True) + { + result = true; + return true; + } + if (kind == JsonValueKind.False) + { + result = false; + return true; + } + if (kind == JsonValueKind.String) + { + return bool.TryParse(token.GetValue(), out result); + } + return false; } - internal static bool ToBool(this JToken? token, string? key = null, bool defaultValue = false) + internal static bool ToBool(this JsonNode? token, string? key = null, bool defaultValue = false) { - if (!token.TryGetValue(key, out JToken? checkToken)) + if (!token.TryGetValue(key, out JsonNode? checkToken)) { return defaultValue; } @@ -83,12 +103,11 @@ internal static bool ToBool(this JToken? token, string? key = null, bool default return result; } - internal static int ToInt32(this JToken? token, string? key = null, int defaultValue = 0) + internal static int ToInt32(this JsonNode? token, string? key = null, int defaultValue = 0) { - int value; if (key == null) { - if (token == null || token.Type != JTokenType.Integer || !int.TryParse(token.ToString(), out value)) + if (token == null || !token.TryParseInt(out int value)) { return defaultValue; } @@ -96,28 +115,21 @@ internal static int ToInt32(this JToken? token, string? key = null, int defaultV return value; } - if (token is not JObject obj) + if (token is not JsonObject obj) { return defaultValue; } - if (!obj.TryGetValue(key, StringComparison.OrdinalIgnoreCase, out JToken? element)) + JsonNode? element = GetPropertyCaseInsensitive(obj, key); + if (element == null || !element.TryParseInt(out int result)) { return defaultValue; } - else if (element.Type == JTokenType.Integer) - { - return element.ToInt32(); - } - else if (int.TryParse(element.ToString(), out value)) - { - return value; - } - return defaultValue; + return result; } - internal static T ToEnum(this JToken token, string? key = null, T defaultValue = default) + internal static T ToEnum(this JsonNode token, string? key = null, T defaultValue = default) where T : struct { string? val = token.ToString(key); @@ -129,7 +141,7 @@ internal static T ToEnum(this JToken token, string? key = null, T defaultValu return result; } - internal static Guid ToGuid(this JToken token, string? key = null, Guid defaultValue = default) + internal static Guid ToGuid(this JsonNode token, string? key = null, Guid defaultValue = default) { string? val = token.ToString(key); if (val == null || !Guid.TryParse(val, out Guid result)) @@ -140,97 +152,84 @@ internal static Guid ToGuid(this JToken token, string? key = null, Guid defaultV return result; } - internal static IEnumerable PropertiesOf(this JToken? token, string? key = null) + internal static IEnumerable> PropertiesOf(this JsonNode? token, string? key = null) { - JObject? currentJObj = token as JObject; - if (currentJObj == null) + if (token is not JsonObject currentJObj) { - return Array.Empty(); + return Array.Empty>(); } if (key != null) { - if (!currentJObj.TryGetValue(key, StringComparison.OrdinalIgnoreCase, out JToken? element)) + JsonNode? element = GetPropertyCaseInsensitive(currentJObj, key); + if (element is not JsonObject nested) { - return Array.Empty(); + return Array.Empty>(); } - currentJObj = element as JObject; - } - if (currentJObj == null) - { - return Array.Empty(); + return nested.ToList(); } - return currentJObj.Properties(); + return currentJObj.ToList(); } - internal static T? Get(this JToken? token, string? key) - where T : JToken + internal static T? Get(this JsonNode? token, string? key) + where T : JsonNode { - if (token is not JObject obj || key == null) - { - return default; - } - - if (!obj.TryGetValue(key, StringComparison.OrdinalIgnoreCase, out JToken? res)) + if (token is not JsonObject obj || key == null) { return default; } + JsonNode? res = GetPropertyCaseInsensitive(obj, key); return res as T; } - internal static IReadOnlyList ArrayAsStrings(this JToken? token, string? propertyName = null) + internal static IReadOnlyList ArrayAsStrings(this JsonNode? token, string? propertyName = null) { if (propertyName != null) { - token = token.Get(propertyName); + token = token.Get(propertyName); } - if (token is not JArray arr) + if (token is not JsonArray arr) { return Array.Empty(); } List values = new(); - foreach (JToken item in arr) + foreach (JsonNode? item in arr) { - if (item != null && item.Type == JTokenType.String) + if (item != null && item.GetValueKind() == JsonValueKind.String) { - values.Add(item.ToString()); + values.Add(item.GetValue()); } } return values; } - internal static JObject ReadObject(this IPhysicalFileSystem fileSystem, string path) + internal static JsonObject ReadObject(this IPhysicalFileSystem fileSystem, string path) { - using (Stream fileStream = fileSystem.OpenRead(path)) - using (var textReader = new StreamReader(fileStream, Encoding.UTF8, true)) - using (var jsonReader = new JsonTextReader(textReader)) - { - return JObject.Load(jsonReader); - } + using Stream fileStream = fileSystem.OpenRead(path); + using var textReader = new StreamReader(fileStream, Encoding.UTF8, true); + string json = textReader.ReadToEnd(); + return (JsonObject?)JsonNode.Parse(json, null, DocOptions) + ?? throw new InvalidOperationException($"Failed to parse JSON from '{path}'."); } - internal static void WriteObject(this IPhysicalFileSystem fileSystem, string path, object obj) + internal static void WriteObject(this IPhysicalFileSystem fileSystem, string path, JsonNode obj) { - using (Stream fileStream = fileSystem.CreateFile(path)) - using (var textWriter = new StreamWriter(fileStream, Encoding.UTF8)) - using (var jsonWriter = new JsonTextWriter(textWriter)) - { - var serializer = new JsonSerializer(); - serializer.Serialize(jsonWriter, obj); - } + using Stream fileStream = fileSystem.CreateFile(path); + using var writer = new Utf8JsonWriter(fileStream); + obj.WriteTo(writer); } - internal static bool TryParse(this string arg, out JToken? token) + internal static bool TryParse(this string arg, out JsonNode? token) { try { - token = JToken.Parse(arg); + token = JsonNode.Parse(arg, null, DocOptions); return true; } catch @@ -240,5 +239,42 @@ internal static bool TryParse(this string arg, out JToken? token) } } + private static bool TryParseInt(this JsonNode token, out int result) + { + result = default; + var kind = token.GetValueKind(); + if (kind == JsonValueKind.Number) + { + if (token is JsonValue jv && jv.TryGetValue(out int intVal)) + { + result = intVal; + return true; + } + return int.TryParse(token.ToJsonString(), out result); + } + if (kind == JsonValueKind.String) + { + return int.TryParse(token.GetValue(), out result); + } + return false; + } + + private static JsonNode? GetPropertyCaseInsensitive(JsonObject obj, string key) + { + if (obj.TryGetPropertyValue(key, out JsonNode? result)) + { + return result; + } + + foreach (var kvp in obj) + { + if (string.Equals(kvp.Key, key, StringComparison.OrdinalIgnoreCase)) + { + return kvp.Value; + } + } + + return null; + } } } diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/ChmodPostActionProcessor.cs b/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/ChmodPostActionProcessor.cs index b3b919c87680..3fb827553386 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/ChmodPostActionProcessor.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/ChmodPostActionProcessor.cs @@ -4,7 +4,7 @@ using System.Diagnostics; using Microsoft.DotNet.Cli.Utils; using Microsoft.TemplateEngine.Abstractions; -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; namespace Microsoft.TemplateEngine.Cli.PostActionProcessors { @@ -22,12 +22,12 @@ protected override bool ProcessInternal(IEngineEnvironmentSettings environment, string[] values; try { - JArray valueArray = JArray.Parse(entry.Value); + JsonArray valueArray = JsonNode.Parse(entry.Value)!.AsArray(); values = new string[valueArray.Count]; for (int i = 0; i < valueArray.Count; ++i) { - values[i] = valueArray[i].ToString(); + values[i] = valueArray[i]?.GetValue() ?? ""; } } catch diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/PostActionProcessorBase.cs b/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/PostActionProcessorBase.cs index 266cfb653e34..35e41b8652a3 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/PostActionProcessorBase.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/PostActionProcessors/PostActionProcessorBase.cs @@ -3,7 +3,8 @@ using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Utils; -using Newtonsoft.Json.Linq; +using System.Text.Json; +using System.Text.Json.Nodes; namespace Microsoft.TemplateEngine.Cli.PostActionProcessors { @@ -122,26 +123,26 @@ protected abstract bool ProcessInternal( private static bool TryParseAsJson(string targetFiles, out IReadOnlyList paths) { paths = new List(); - targetFiles.TryParse(out JToken? config); + targetFiles.TryParse(out JsonNode? config); if (config is null) { return false; } - if (config.Type == JTokenType.String) + if (config.GetValueKind() == JsonValueKind.String) { - paths = config.ToString().Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); + paths = config.GetValue().Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); return true; } - if (config is not JArray arr) + if (config is not JsonArray arr) { return false; } var parts = arr - .Where(token => token.Type == JTokenType.String) - .Select(token => token.ToString()).ToList(); + .Where(token => token != null && token.GetValueKind() == JsonValueKind.String) + .Select(token => token!.GetValue()).ToList(); if (parts.Count == 0) { diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/TemplateSearch/CliHostSearchCacheData.cs b/src/Cli/Microsoft.TemplateEngine.Cli/TemplateSearch/CliHostSearchCacheData.cs index cc1a2d8a1f48..3df2d3d5ee9c 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/TemplateSearch/CliHostSearchCacheData.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/TemplateSearch/CliHostSearchCacheData.cs @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.DotNet.Cli.Utils; -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; namespace Microsoft.TemplateEngine.Cli.TemplateSearch { @@ -13,29 +13,30 @@ public static class CliHostSearchCacheData public static Func Reader => (obj) => { - JObject? cacheObject = obj as JObject; + JsonObject? cacheObject = obj as JsonObject; if (cacheObject == null) { return HostSpecificTemplateData.Default; } try { - if (_hostDataPropertyNames.Contains(cacheObject.Properties().First().Name, StringComparer.OrdinalIgnoreCase)) + var keys = new HashSet(cacheObject.Select(p => p.Key), StringComparer.OrdinalIgnoreCase); + if (_hostDataPropertyNames.Any(keys.Contains)) { return new HostSpecificTemplateData(cacheObject); } //fallback to old behavior Dictionary cliData = new(); - foreach (JProperty data in cacheObject.Properties()) + foreach (KeyValuePair data in cacheObject) { try { - cliData[data.Name] = new HostSpecificTemplateData(data.Value as JObject); + cliData[data.Key] = new HostSpecificTemplateData(data.Value as JsonObject); } catch (Exception ex) { - Reporter.Verbose.WriteLine($"Error deserializing the cli host specific template data for template {data.Name}, details:{ex}"); + Reporter.Verbose.WriteLine($"Error deserializing the cli host specific template data for template {data.Key}, details:{ex}"); } } return cliData; diff --git a/test/Microsoft.TemplateEngine.Cli.UnitTests/AliasAssignmentTests.cs b/test/Microsoft.TemplateEngine.Cli.UnitTests/AliasAssignmentTests.cs index 5ddc70b76a8b..00b23735bb85 100644 --- a/test/Microsoft.TemplateEngine.Cli.UnitTests/AliasAssignmentTests.cs +++ b/test/Microsoft.TemplateEngine.Cli.UnitTests/AliasAssignmentTests.cs @@ -9,7 +9,7 @@ using Microsoft.TemplateEngine.Edge.Settings; using Microsoft.TemplateEngine.Mocks; using Microsoft.TemplateEngine.Utils; -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; namespace Microsoft.TemplateEngine.Cli.UnitTests { @@ -275,8 +275,8 @@ public void CanAssignAliasForParameterWithReservedAlias(string parameterName, st [MemberData(nameof(GetTemplateData))] public void CanOverrideAliasesForParameterWithHostData(string hostJsonData, string expectedJsonResult) { - var hostData = new HostSpecificTemplateData(string.IsNullOrEmpty(hostJsonData) ? null : JObject.Parse(hostJsonData)); - var expectedResults = JObject.Parse(expectedJsonResult); + var hostData = new HostSpecificTemplateData(string.IsNullOrEmpty(hostJsonData) ? null : JsonNode.Parse(hostJsonData)?.AsObject()); + var expectedResults = JsonNode.Parse(expectedJsonResult)!.AsObject(); var template = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group"); foreach (var expectedResult in expectedResults) { @@ -297,10 +297,10 @@ public void CanOverrideAliasesForParameterWithHostData(string hostJsonData, stri Assert.Single(templateCommands); foreach (var expectedResult in expectedResults) { - var expectedValues = expectedResult.Value!.Select(s => ((JValue)s).Value).ToArray(); - var expectedLongAlias = expectedValues[0]; - var expectedShortAlias = expectedValues[1]; - var expectedIsHidden = expectedValues[2]; + var expectedArr = expectedResult.Value!.AsArray(); + var expectedLongAlias = expectedArr[0]?.GetValue(); + var expectedShortAlias = expectedArr[1]?.GetValue(); + var expectedIsHidden = expectedArr[2]?.GetValue() ?? false; var templateOptions = templateCommands.Single().TemplateOptions; Assert.NotNull(templateOptions); Assert.Contains(expectedResult.Key, templateOptions.Keys); diff --git a/test/Microsoft.TemplateEngine.Cli.UnitTests/HostDataLoaderTests.cs b/test/Microsoft.TemplateEngine.Cli.UnitTests/HostDataLoaderTests.cs index 948fd5e0ca50..4403ed4e04a2 100644 --- a/test/Microsoft.TemplateEngine.Cli.UnitTests/HostDataLoaderTests.cs +++ b/test/Microsoft.TemplateEngine.Cli.UnitTests/HostDataLoaderTests.cs @@ -7,7 +7,7 @@ using Microsoft.TemplateEngine.Edge.Settings; using Microsoft.TemplateEngine.TestHelper; using Microsoft.TemplateEngine.Utils; -using Newtonsoft.Json.Linq; +using System.Text.Json; namespace Microsoft.TemplateEngine.Cli.UnitTests { @@ -145,14 +145,14 @@ public void CanSerializeData() } }; var data = new HostSpecificTemplateData(symbolInfo, usageExamples, isHidden: true); - var serialized = JObject.FromObject(data); + var serialized = JsonSerializer.SerializeToNode(data)!.AsObject(); Assert.NotNull(serialized); - Assert.Equal(3, serialized.Children().Count()); + Assert.Equal(3, serialized.Count); - Assert.Single(serialized.Properties(), p => p.Name == "UsageExamples"); - Assert.Single(serialized.Properties(), p => p.Name == "SymbolInfo"); - Assert.Single(serialized.Properties(), p => p.Name == "IsHidden"); + Assert.Contains("UsageExamples", serialized.Select(p => p.Key)); + Assert.Contains("SymbolInfo", serialized.Select(p => p.Key)); + Assert.Contains("IsHidden", serialized.Select(p => p.Key)); } [Fact] @@ -188,23 +188,23 @@ public void CanSerializeData_SkipsEmpty() } }; var data = new HostSpecificTemplateData(symbolInfo, usageExamples, isHidden: false); - var serialized = JObject.FromObject(data); + var serialized = JsonSerializer.SerializeToNode(data)!.AsObject(); Assert.NotNull(serialized); - Assert.Single(serialized.Children()); + Assert.Single(serialized); - Assert.Single(serialized.Properties(), p => p.Name == "SymbolInfo"); + Assert.Contains("SymbolInfo", serialized.Select(p => p.Key)); - var symbolInfoArray = serialized.Properties().Single().Value as JObject; - Assert.NotNull(symbolInfoArray); + var symbolInfoObj = serialized["SymbolInfo"]!.AsObject(); + Assert.NotNull(symbolInfoObj); //empty values should stay when deserializing symbol info - Assert.Equal(3, ((JObject)symbolInfoArray!["param1"]!).Properties().Count()); - Assert.Equal("", symbolInfoArray!["param2"]!["longName"]); - Assert.Equal(3, ((JObject)symbolInfoArray!["param2"]!).Properties().Count()); - Assert.Single(((JObject)symbolInfoArray!["param3"]!).Properties()); + Assert.Equal(3, symbolInfoObj["param1"]!.AsObject().Count); + Assert.Equal("", symbolInfoObj["param2"]!["longName"]!.GetValue()); + Assert.Equal(3, symbolInfoObj["param2"]!.AsObject().Count); + Assert.Single(symbolInfoObj["param3"]!.AsObject()); - Assert.DoesNotContain(serialized.Properties(), p => p.Name == "IsHidden"); - Assert.DoesNotContain(serialized.Properties(), p => p.Name == "UsageExamples"); + Assert.DoesNotContain("IsHidden", serialized.Select(p => p.Key)); + Assert.DoesNotContain("UsageExamples", serialized.Select(p => p.Key)); } } } diff --git a/test/Microsoft.TemplateEngine.Cli.UnitTests/TemplateSearchCoordinatorTests.cs b/test/Microsoft.TemplateEngine.Cli.UnitTests/TemplateSearchCoordinatorTests.cs index c82d678bf69e..472c628d8a82 100644 --- a/test/Microsoft.TemplateEngine.Cli.UnitTests/TemplateSearchCoordinatorTests.cs +++ b/test/Microsoft.TemplateEngine.Cli.UnitTests/TemplateSearchCoordinatorTests.cs @@ -15,7 +15,7 @@ using Microsoft.TemplateSearch.Common; using Microsoft.TemplateSearch.Common.Abstractions; using Microsoft.TemplateSearch.Common.Providers; -using Newtonsoft.Json.Linq; +using System.Text.Json; namespace Microsoft.TemplateEngine.Cli.UnitTests { @@ -600,9 +600,9 @@ private static string SetupTemplateCache(string fileLocation, bool includehostDa var cache = new TemplateSearchCache(new[] { packOne, packTwo, packThree }); - JObject toSerialize = JObject.FromObject(cache); + string json = JsonSerializer.Serialize(cache); string targetPath = Path.Combine(fileLocation, "searchCacheV2.json"); - File.WriteAllText(targetPath, toSerialize.ToString()); + File.WriteAllText(targetPath, json); return targetPath; } @@ -611,9 +611,9 @@ private static string SetupInvalidTemplateCache(string fileLocation) var packOne = new TemplatePackageSearchData(new MockTemplatePackageInfo("PackOne", "1.0.0"), new[] { new TemplateSearchData(new MockTemplateInfo("foo", "foo", "foo").WithParameters("Config type", "Main type", "unknown")) }); var cache = new TemplateSearchCache(new[] { packOne }); - JObject toSerialize = JObject.FromObject(cache); + string jsonToSerialize = JsonSerializer.Serialize(cache); string targetPath = Path.Combine(fileLocation, "searchCacheV2.json"); - File.WriteAllText(targetPath, toSerialize.ToString()); + File.WriteAllText(targetPath, jsonToSerialize); return targetPath; } } From ab5c1ee624350ed30bda82d08bb633dbd235b325 Mon Sep 17 00:00:00 2001 From: Nikola Milosavljevic Date: Fri, 24 Apr 2026 15:57:49 -0700 Subject: [PATCH 223/230] Enable packaging of dotnet-aot (#54056) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../redist/targets/GenerateLayout.targets | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/Layout/redist/targets/GenerateLayout.targets b/src/Layout/redist/targets/GenerateLayout.targets index 7bbc466742eb..89918d1416fa 100644 --- a/src/Layout/redist/targets/GenerateLayout.targets +++ b/src/Layout/redist/targets/GenerateLayout.targets @@ -519,14 +519,58 @@ + + + + + <_DotnetAotNativeLibPrefix Condition="'$(OSName)' != 'win'">lib + <_DotnetAotNativeLibExtension Condition="'$(OSName)' == 'win'">.dll + <_DotnetAotNativeLibExtension Condition="'$(OSName)' == 'osx'">.dylib + <_DotnetAotNativeLibExtension Condition="'$(_DotnetAotNativeLibExtension)' == ''">.so + <_DotnetAotNativeLibName>$(_DotnetAotNativeLibPrefix)dotnet-aot$(_DotnetAotNativeLibExtension) + + <_DotnetAotPublishDir>$(ArtifactsBinDir)dotnet-aot-redist\$(Configuration)\$(SdkTargetFramework)\$(TargetRid)\publish\ + + <_DotnetAotIntermediateDir>$(ArtifactsObjDir)dotnet-aot-redist\$(Configuration)\$(TargetRid)\ + + + + + + + + + + + + + + @@ -574,6 +618,7 @@ GeneratePackagePruneData; PublishContainersSdk; GenerateCliRuntimeConfigurationFiles; + PublishDotnetAot; CreateMSBuildAppHost; MakeFscRunnableAndMoveToPublishDir; RemoveFscFilesAfterPublish; From 751ee3b925a8c22b9d0039f57e87d8aa9e5ae02c Mon Sep 17 00:00:00 2001 From: Michael Yanni Date: Fri, 24 Apr 2026 16:39:26 -0700 Subject: [PATCH 224/230] Add .lscache change to .gitignore test expected output. Added template_feed folder to those required for CI to run. --- .vsts-pr.yml | 1 + .../dotnet-gitignore-file/.gitignore | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.vsts-pr.yml b/.vsts-pr.yml index ca91eabf32b6..3b7249dcc048 100644 --- a/.vsts-pr.yml +++ b/.vsts-pr.yml @@ -17,6 +17,7 @@ pr: - eng - build - src + - template_feed - test - '*.yml' - '*.props' diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#dotnet-gitignore-file#-n#item.verified/dotnet-gitignore-file/.gitignore b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#dotnet-gitignore-file#-n#item.verified/dotnet-gitignore-file/.gitignore index dc49bbf9b46d..723a3f3aede7 100644 --- a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#dotnet-gitignore-file#-n#item.verified/dotnet-gitignore-file/.gitignore +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#dotnet-gitignore-file#-n#item.verified/dotnet-gitignore-file/.gitignore @@ -394,6 +394,9 @@ FodyWeavers.xsd !.vscode/extensions.json *.code-workspace +# Offical VS Code C# Dev Kit Extension exclusion +*.lscache + # Local History for Visual Studio Code .history/ From c41e107524cd1e791eddc42cab87ed27feaf07b0 Mon Sep 17 00:00:00 2001 From: Michael Yanni Date: Fri, 24 Apr 2026 16:51:28 -0700 Subject: [PATCH 225/230] Official was spelled wrong. --- .../content/Gitignore/.gitignore | 2 +- .../dotnet-gitignore-file/.gitignore | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitignore/.gitignore b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitignore/.gitignore index 1fb4cc73a492..7282699f92bc 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitignore/.gitignore +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Gitignore/.gitignore @@ -394,7 +394,7 @@ FodyWeavers.xsd !.vscode/extensions.json *.code-workspace -# Offical VS Code C# Dev Kit Extension exclusion +# Official VS Code C# Dev Kit Extension exclusion *.lscache # Local History for Visual Studio Code diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#dotnet-gitignore-file#-n#item.verified/dotnet-gitignore-file/.gitignore b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#dotnet-gitignore-file#-n#item.verified/dotnet-gitignore-file/.gitignore index 723a3f3aede7..48e2950ec929 100644 --- a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#dotnet-gitignore-file#-n#item.verified/dotnet-gitignore-file/.gitignore +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#dotnet-gitignore-file#-n#item.verified/dotnet-gitignore-file/.gitignore @@ -394,7 +394,7 @@ FodyWeavers.xsd !.vscode/extensions.json *.code-workspace -# Offical VS Code C# Dev Kit Extension exclusion +# Official VS Code C# Dev Kit Extension exclusion *.lscache # Local History for Visual Studio Code From 8d8eeca573048a8d8bf76b2515f566362d104584 Mon Sep 17 00:00:00 2001 From: Michael Yanni Date: Fri, 24 Apr 2026 17:52:33 -0700 Subject: [PATCH 226/230] Add TargetFramework to fix build error. --- src/Layout/redist/targets/GenerateLayout.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Layout/redist/targets/GenerateLayout.targets b/src/Layout/redist/targets/GenerateLayout.targets index 89918d1416fa..76267bac0d74 100644 --- a/src/Layout/redist/targets/GenerateLayout.targets +++ b/src/Layout/redist/targets/GenerateLayout.targets @@ -547,7 +547,7 @@ + Properties="Configuration=$(Configuration);TargetFramework=$(SdkTargetFramework);RuntimeIdentifier=$(TargetRid);PublishDir=$(_DotnetAotPublishDir);IntermediateOutputPath=$(_DotnetAotIntermediateDir)" /> Date: Fri, 24 Apr 2026 18:30:20 -0700 Subject: [PATCH 227/230] Setting the TargetFramework did not work. Instead, just making the target no longer run for now. --- src/Layout/redist/targets/GenerateLayout.targets | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Layout/redist/targets/GenerateLayout.targets b/src/Layout/redist/targets/GenerateLayout.targets index 76267bac0d74..31215d099f8c 100644 --- a/src/Layout/redist/targets/GenerateLayout.targets +++ b/src/Layout/redist/targets/GenerateLayout.targets @@ -528,8 +528,9 @@ Only runs for native builds (TargetRid == HostRid) on supported platforms. Cross-compilation is not supported as NativeAOT requires native toolchain for target platform. --> - + + <_DotnetAotNativeLibPrefix Condition="'$(OSName)' != 'win'">lib From 9c366d26b36899af42eb889e922cb667523ff592 Mon Sep 17 00:00:00 2001 From: Michael Yanni Date: Fri, 24 Apr 2026 19:16:33 -0700 Subject: [PATCH 228/230] Added GlobalPropertiesToRemove="PublishDir" for Microsoft.TemplateEngine.Orchestrator.RunnableProjects project reference to avoid build collisions. --- src/Cli/dotnet/dotnet.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cli/dotnet/dotnet.csproj b/src/Cli/dotnet/dotnet.csproj index a874b4d28697..d56d5f59e12e 100644 --- a/src/Cli/dotnet/dotnet.csproj +++ b/src/Cli/dotnet/dotnet.csproj @@ -83,7 +83,7 @@ - + From 6d4d50adce31cfefc10fac5b96dee2de0617a3dc Mon Sep 17 00:00:00 2001 From: Michael Yanni Date: Fri, 24 Apr 2026 19:17:58 -0700 Subject: [PATCH 229/230] Forgot to remove this addition from testing. --- src/Layout/redist/targets/GenerateLayout.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Layout/redist/targets/GenerateLayout.targets b/src/Layout/redist/targets/GenerateLayout.targets index 31215d099f8c..ff14bf0f54a4 100644 --- a/src/Layout/redist/targets/GenerateLayout.targets +++ b/src/Layout/redist/targets/GenerateLayout.targets @@ -548,7 +548,7 @@ + Properties="Configuration=$(Configuration);RuntimeIdentifier=$(TargetRid);PublishDir=$(_DotnetAotPublishDir);IntermediateOutputPath=$(_DotnetAotIntermediateDir)" /> Date: Mon, 27 Apr 2026 20:27:50 +0000 Subject: [PATCH 230/230] Consolidate Helix shards for quick test assemblies via MethodLimitMultiplier Add per-assembly MethodLimitMultiplier metadata support to reduce wasted Helix compute on assemblies whose shards all complete very quickly. The multiplier increases the methods-per-shard threshold, producing fewer but larger work items and reducing per-item setup overhead. Applied to three assembly groups: - Microsoft.CodeAnalysis.NetAnalyzers (x5) - Microsoft.TemplateEngine.* / TemplateSearch.* (x10) - Microsoft.DotNet.Api{Compatibility,Diff,SymbolExtensions} (x5) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- ...CustomCreateXUnitWorkItemsWithTestExclusion.cs | 14 +++++++++++++- test/UnitTests.proj | 15 +++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs b/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs index 93d52d96d27b..ef7d493e79e6 100644 --- a/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs +++ b/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs @@ -153,7 +153,19 @@ private async Task ExecuteAsync() } var isFullMSBuild = string.Equals(Environment.GetEnvironmentVariable("TestFullMSBuild"), "true", StringComparison.OrdinalIgnoreCase); - var scheduler = new AssemblyScheduler(methodLimit: isFullMSBuild ? 32 : 16); + var baseMethodLimit = isFullMSBuild ? 32 : 16; + if (xunitProject.TryGetMetadata("MethodLimitMultiplier", out string multiplierStr)) + { + if (int.TryParse(multiplierStr, out int multiplier) && multiplier > 0) + { + baseMethodLimit *= multiplier; + } + else + { + Log.LogWarning($"Invalid MethodLimitMultiplier \"{multiplierStr}\" for {assemblyName}; must be a positive integer. Using default method limit."); + } + } + var scheduler = new AssemblyScheduler(methodLimit: baseMethodLimit); var assemblyPartitionInfos = scheduler.Schedule(targetPath); var partitionedWorkItem = new List(); diff --git a/test/UnitTests.proj b/test/UnitTests.proj index da7824c8048d..ed564a6a6f24 100644 --- a/test/UnitTests.proj +++ b/test/UnitTests.proj @@ -62,6 +62,21 @@ + + + + 5 + + + 10 + + + 5 + + +