From 3f14c1da992a77b79a15c7132cd597cf94ae9ce1 Mon Sep 17 00:00:00 2001 From: "Matt Mitchell (.NET)" Date: Mon, 22 Jun 2026 17:29:01 -0700 Subject: [PATCH 1/3] [Experiment] Combine CI Build and Queue Tests into a single invocation Today the sdk-build.yml job runs two sequential build.{ps1,sh} invocations: a "Build" step (-restore -build -pack) and a "Queue Tests" step (-restore -test, scoped to test/UnitTests.proj). The second step re-restores and recompiles much of the product because UnitTests.proj publishes every *.Tests.csproj with a RuntimeIdentifier, propagating the RID through all product ProjectReferences into RID-qualified output folders. This experimental change merges the two into one invocation to measure the savings: - sdk.slnx now includes test/UnitTests.proj (the Helix orchestrator) so test queuing can happen as part of the same build. - sdk.slnf is a new default/build-only filter: sdk.slnx minus UnitTests.proj. Build-only legs (runTests=false) and the dotnet-format integration leg use it so they neither pull in the orchestrator nor queue Helix work. - eng/XUnitV3/XUnitV3.Runner.targets guards the in-process RunTests target on CustomHelixTargetQueue being empty, so building the full solution with -test does NOT run every *.Tests.csproj on the build agent; UnitTests.proj still submits them to Helix. - sdk-build.yml replaces the separate Build + Queue Tests steps with a single combined "Build and Test" step when runTests=true (full sdk.slnx, -build -pack -test + Helix props) and a "Build" step otherwise (sdk.slnf). Known caveats (this is a draft/experiment): - Build ordering: UnitTests.proj has no ProjectReferences to the product, so a single solution build may schedule its publish relative to the product in a new way; the draft CI run is intended to surface this. - Local `build.cmd`/`build.sh` with no args auto-detects sdk.slnx, which now includes UnitTests.proj and its heavy RID publish; devs wanting a lean build should pass `-projects sdk.slnf`. - sdk.slnf enumerates all projects except UnitTests.proj and must be kept in sync as projects are added/removed. - The RID double-compile itself is not eliminated (it originates in UnitTests.proj's publish); this measures the restore/bootstrap savings from not running two full invocations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/XUnitV3/XUnitV3.Runner.targets | 2 +- .../dotnet-format-integration.yml | 2 +- eng/pipelines/templates/jobs/sdk-build.yml | 171 ++++++++------ sdk.slnf | 209 ++++++++++++++++++ sdk.slnx | 1 + 5 files changed, 314 insertions(+), 71 deletions(-) create mode 100644 sdk.slnf diff --git a/eng/XUnitV3/XUnitV3.Runner.targets b/eng/XUnitV3/XUnitV3.Runner.targets index f60168b4dfef..fb3e377de0af 100644 --- a/eng/XUnitV3/XUnitV3.Runner.targets +++ b/eng/XUnitV3/XUnitV3.Runner.targets @@ -3,7 +3,7 @@ + Condition="'@(TestToRun)' != '' and '$(CustomHelixTargetQueue)' == ''"> diff --git a/eng/dotnet-format/dotnet-format-integration.yml b/eng/dotnet-format/dotnet-format-integration.yml index 8df9e7fe7b05..e518480f1f15 100644 --- a/eng/dotnet-format/dotnet-format-integration.yml +++ b/eng/dotnet-format/dotnet-format-integration.yml @@ -20,7 +20,7 @@ parameters: - Name: sdk _repo: "https://github.com/dotnet/sdk" _repoName: "dotnet/sdk" - _targetSolution: "sdk.slnx" + _targetSolution: "sdk.slnf" _branchName: "main" _sha: "e6bc966cc3d1348265b0831c6daca23267169d8f" _useParentSdk: 0 diff --git a/eng/pipelines/templates/jobs/sdk-build.yml b/eng/pipelines/templates/jobs/sdk-build.yml index 6d1df9e32862..a8a9aed82968 100644 --- a/eng/pipelines/templates/jobs/sdk-build.yml +++ b/eng/pipelines/templates/jobs/sdk-build.yml @@ -92,96 +92,129 @@ jobs: checkDownloadedFiles: true displayName: 🟣 Download Manifest MSI Packages - ############### BUILDING ############### + ############### BUILDING (+ TESTING) ############### + # EXPERIMENT: The former separate 'Build' and 'Queue Tests' steps are combined into a + # single build.{ps1,sh} invocation to evaluate eliminating the duplicate restore/build + # between them (the test publish in test/UnitTests.proj re-restores and recompiles the + # product with a RuntimeIdentifier, which previously happened only in the second step). + # + # When running tests, the full sdk.slnx is built with -test. sdk.slnx now includes + # test/UnitTests.proj (the Helix orchestrator) so that test queuing happens as part of + # the same invocation. Per-project in-process test execution is suppressed via the + # RunTests guard in eng/XUnitV3/XUnitV3.Runner.targets (keyed off CustomHelixTargetQueue), + # so the individual *.Tests.csproj do not run on the build agent; UnitTests.proj still + # submits them to Helix. + # + # Build-only legs (runTests=false) build sdk.slnf, which is sdk.slnx minus + # test/UnitTests.proj, so they neither queue Helix work nor pull in the orchestrator. - ${{ if eq(parameters.pool.os, 'windows') }}: - - powershell: eng/common/build.ps1 - -restore -build -pack -ci -nativeToolsOnMachine - -configuration $(buildConfiguration) - ${{ parameters.publishArgument }} - ${{ parameters.signArgument }} - /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} - /p:TargetArchitecture=${{ parameters.targetArchitecture }} - /p:PgoInstrument=${{ parameters.pgoInstrument }} - ${{ parameters.runtimeSourceProperties }} - ${{ parameters.officialBuildProperties }} - /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) - displayName: 🟣 Build - env: - BuildConfig: $(buildConfiguration) - TestFullMSBuild: ${{ parameters.testFullMSBuild }} - MSBUILDALWAYSRETRY: true - - - ${{ else }}: - - script: | - source $(Build.SourcesDirectory)/eng/common/native/init-os-and-arch.sh - source $(Build.SourcesDirectory)/eng/common/native/init-distro-rid.sh - initDistroRidGlobal "$os" "$arch" "" - - . $(Build.SourcesDirectory)/eng/common/build.sh \ - -restore -build -pack -ci \ - -configuration $(buildConfiguration) \ - ${{ parameters.publishArgument }} \ - ${{ parameters.signArgument }} \ - /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} \ - /p:TargetArchitecture=${{ parameters.targetArchitecture }} \ - /p:PgoInstrument=${{ parameters.pgoInstrument }} \ - /p:TargetRid=${{ parameters.runtimeIdentifier }} \ - ${{ parameters.osProperties }} \ - ${{ parameters.runtimeSourceProperties }} \ - ${{ parameters.officialBuildProperties }} \ - /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) - displayName: 🟣 Build - env: - BuildConfig: $(buildConfiguration) - OPENSSL_ENABLE_SHA1_SIGNATURES: 1 - MSBUILDALWAYSRETRY: true - TARGET_ARCHITECTURE: ${{ parameters.targetArchitecture }} - - ############### TESTING ############### - - ${{ if eq(parameters.runTests, true) }}: - - # For the /p:Projects syntax for PowerShell, see: https://github.com/dotnet/msbuild/issues/471#issuecomment-1146466335 - - ${{ if eq(parameters.pool.os, 'windows') }}: + - ${{ if eq(parameters.runTests, true) }}: - powershell: eng/common/build.ps1 - -restore -test -ci -prepareMachine -nativeToolsOnMachine + -restore -build -pack -test -ci -prepareMachine -nativeToolsOnMachine -configuration $(buildConfiguration) - /p:Projects=\`"${{ replace(parameters.testProjects, ';', '`;') }}\`" - /p:TestRunnerAdditionalArguments="${{ parameters.testRunnerAdditionalArguments }}" + ${{ parameters.publishArgument }} + ${{ parameters.signArgument }} + /p:Projects=$(Build.SourcesDirectory)/sdk.slnx + /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} /p:TargetArchitecture=${{ parameters.targetArchitecture }} + /p:PgoInstrument=${{ parameters.pgoInstrument }} ${{ parameters.runtimeSourceProperties }} + ${{ parameters.officialBuildProperties }} + /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) + /p:TestRunnerAdditionalArguments="${{ parameters.testRunnerAdditionalArguments }}" /p:CustomHelixTargetQueue=${{ parameters.helixTargetQueue }} /p:EnableHelixJobMonitor=true - /bl:$(Build.SourcesDirectory)/artifacts/log/$(buildConfiguration)/${{ parameters.categoryName }}Tests.binlog - displayName: 🟣 Queue Tests + /bl:$(Build.SourcesDirectory)/artifacts/log/$(buildConfiguration)/${{ parameters.categoryName }}Build.binlog + displayName: 🟣 Build and Test env: + BuildConfig: $(buildConfiguration) + TestFullMSBuild: ${{ parameters.testFullMSBuild }} + MSBUILDALWAYSRETRY: true # Required by Arcade for running in Helix. SYSTEM_ACCESSTOKEN: $(System.AccessToken) HelixAccessToken: $(HelixApiAccessToken) RunAoTTests: ${{ parameters.runAoTTests }} - TestFullMSBuild: ${{ parameters.testFullMSBuild }} - - ${{ else }}: - # For the /p:Projects syntax for Bash, see: https://github.com/dotnet/msbuild/issues/471#issuecomment-1690189034 - # The /p:CustomHelixTargetQueue syntax is: @ - # For the Helix containers, see the 'simpleTags' arrays here: https://github.com/dotnet/versions/blob/main/build-info/docker/image-info.dotnet-dotnet-buildtools-prereqs-docker-main.json - - script: eng/common/build.sh - -restore -test -ci -prepareMachine + - powershell: eng/common/build.ps1 + -restore -build -pack -ci -nativeToolsOnMachine -configuration $(buildConfiguration) - '/p:Projects="${{ parameters.testProjects }}"' - /p:TestRunnerAdditionalArguments="${{ parameters.testRunnerAdditionalArguments }}" + ${{ parameters.publishArgument }} + ${{ parameters.signArgument }} + /p:Projects=$(Build.SourcesDirectory)/sdk.slnf + /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} /p:TargetArchitecture=${{ parameters.targetArchitecture }} - /p:TargetRid=${{ parameters.runtimeIdentifier }} - ${{ parameters.osProperties }} + /p:PgoInstrument=${{ parameters.pgoInstrument }} ${{ parameters.runtimeSourceProperties }} - /p:CustomHelixTargetQueue=${{ parameters.helixTargetQueue }}${{ parameters.helixTargetContainer }} - /p:EnableHelixJobMonitor=true - /bl:$(Build.SourcesDirectory)/artifacts/log/$(buildConfiguration)/${{ parameters.categoryName }}Tests.binlog - displayName: 🟣 Queue Tests + ${{ parameters.officialBuildProperties }} + /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) + displayName: 🟣 Build env: + BuildConfig: $(buildConfiguration) + TestFullMSBuild: ${{ parameters.testFullMSBuild }} + MSBUILDALWAYSRETRY: true + + - ${{ else }}: + # The /p:CustomHelixTargetQueue syntax is: @ + # For the Helix containers, see the 'simpleTags' arrays here: https://github.com/dotnet/versions/blob/main/build-info/docker/image-info.dotnet-dotnet-buildtools-prereqs-docker-main.json + - ${{ if eq(parameters.runTests, true) }}: + - script: | + source $(Build.SourcesDirectory)/eng/common/native/init-os-and-arch.sh + source $(Build.SourcesDirectory)/eng/common/native/init-distro-rid.sh + initDistroRidGlobal "$os" "$arch" "" + + . $(Build.SourcesDirectory)/eng/common/build.sh \ + -restore -build -pack -test -ci -prepareMachine \ + -configuration $(buildConfiguration) \ + ${{ parameters.publishArgument }} \ + ${{ parameters.signArgument }} \ + '/p:Projects=$(Build.SourcesDirectory)/sdk.slnx' \ + /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} \ + /p:TargetArchitecture=${{ parameters.targetArchitecture }} \ + /p:PgoInstrument=${{ parameters.pgoInstrument }} \ + /p:TargetRid=${{ parameters.runtimeIdentifier }} \ + ${{ parameters.osProperties }} \ + ${{ parameters.runtimeSourceProperties }} \ + ${{ parameters.officialBuildProperties }} \ + /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) \ + /p:TestRunnerAdditionalArguments="${{ parameters.testRunnerAdditionalArguments }}" \ + /p:CustomHelixTargetQueue=${{ parameters.helixTargetQueue }}${{ parameters.helixTargetContainer }} \ + /p:EnableHelixJobMonitor=true \ + /bl:$(Build.SourcesDirectory)/artifacts/log/$(buildConfiguration)/${{ parameters.categoryName }}Build.binlog + displayName: 🟣 Build and Test + env: + BuildConfig: $(buildConfiguration) + OPENSSL_ENABLE_SHA1_SIGNATURES: 1 + MSBUILDALWAYSRETRY: true + TARGET_ARCHITECTURE: ${{ parameters.targetArchitecture }} # Required by Arcade for running in Helix. SYSTEM_ACCESSTOKEN: $(System.AccessToken) HelixAccessToken: $(HelixApiAccessToken) RunAoTTests: ${{ parameters.runAoTTests }} + - ${{ else }}: + - script: | + source $(Build.SourcesDirectory)/eng/common/native/init-os-and-arch.sh + source $(Build.SourcesDirectory)/eng/common/native/init-distro-rid.sh + initDistroRidGlobal "$os" "$arch" "" + + . $(Build.SourcesDirectory)/eng/common/build.sh \ + -restore -build -pack -ci \ + -configuration $(buildConfiguration) \ + ${{ parameters.publishArgument }} \ + ${{ parameters.signArgument }} \ + '/p:Projects=$(Build.SourcesDirectory)/sdk.slnf' \ + /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} \ + /p:TargetArchitecture=${{ parameters.targetArchitecture }} \ + /p:PgoInstrument=${{ parameters.pgoInstrument }} \ + /p:TargetRid=${{ parameters.runtimeIdentifier }} \ + ${{ parameters.osProperties }} \ + ${{ parameters.runtimeSourceProperties }} \ + ${{ parameters.officialBuildProperties }} \ + /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) + displayName: 🟣 Build + env: + BuildConfig: $(buildConfiguration) + OPENSSL_ENABLE_SHA1_SIGNATURES: 1 + MSBUILDALWAYSRETRY: true TARGET_ARCHITECTURE: ${{ parameters.targetArchitecture }} ############### POST ############### diff --git a/sdk.slnf b/sdk.slnf new file mode 100644 index 000000000000..2286dc2a6b6e --- /dev/null +++ b/sdk.slnf @@ -0,0 +1,209 @@ +{ + "solution": { + "path": "sdk.slnx", + "projects": [ + "src\\Cli\\Microsoft.DotNet.FileBasedPrograms\\Microsoft.DotNet.FileBasedPrograms.shproj", + "src\\Microsoft.DotNet.ProjectTools\\Microsoft.DotNet.ProjectTools.csproj", + "src\\Microsoft.DotNet.TemplateLocator\\Microsoft.DotNet.TemplateLocator.csproj", + "src\\Microsoft.Net.Sdk.Compilers.Toolset\\Microsoft.Net.Sdk.Compilers.Toolset.csproj", + "src\\Microsoft.Win32.Msi\\Microsoft.Win32.Msi.csproj", + "src\\System.CommandLine.StaticCompletions\\System.CommandLine.StaticCompletions.csproj", + "src\\BlazorWasmSdk\\Tasks\\Microsoft.NET.Sdk.BlazorWebAssembly.Tasks.csproj", + "src\\BlazorWasmSdk\\Tool\\Microsoft.NET.Sdk.BlazorWebAssembly.Tool.csproj", + "src\\Dotnet.Format\\dotnet-format\\dotnet-format.csproj", + "src\\Dotnet.Watch\\AspireService\\Microsoft.WebTools.AspireService.Package.csproj", + "src\\Dotnet.Watch\\AspireService\\Microsoft.WebTools.AspireService.shproj", + "src\\Dotnet.Watch\\BrowserRefresh\\Microsoft.AspNetCore.Watch.BrowserRefresh.csproj", + "src\\Dotnet.Watch\\dotnet-watch\\dotnet-watch.csproj", + "src\\Dotnet.Watch\\DotNetDeltaApplier\\Microsoft.Extensions.DotNetDeltaApplier.csproj", + "src\\Dotnet.Watch\\DotNetWatchTasks\\DotNetWatchTasks.csproj", + "src\\Dotnet.Watch\\HotReloadAgent.Data\\Microsoft.DotNet.HotReload.Agent.Data.Package.csproj", + "src\\Dotnet.Watch\\HotReloadAgent.Data\\Microsoft.DotNet.HotReload.Agent.Data.shproj", + "src\\Dotnet.Watch\\HotReloadAgent.Host\\Microsoft.DotNet.HotReload.Agent.Host.Package.csproj", + "src\\Dotnet.Watch\\HotReloadAgent.Host\\Microsoft.DotNet.HotReload.Agent.Host.shproj", + "src\\Dotnet.Watch\\HotReloadAgent.PipeRpc\\Microsoft.DotNet.HotReload.Agent.PipeRpc.Package.csproj", + "src\\Dotnet.Watch\\HotReloadAgent.PipeRpc\\Microsoft.DotNet.HotReload.Agent.PipeRpc.shproj", + "src\\Dotnet.Watch\\HotReloadAgent.WebAssembly.Browser\\Microsoft.DotNet.HotReload.WebAssembly.Browser.csproj", + "src\\Dotnet.Watch\\HotReloadAgent\\Microsoft.DotNet.HotReload.Agent.Package.csproj", + "src\\Dotnet.Watch\\HotReloadAgent\\Microsoft.DotNet.HotReload.Agent.shproj", + "src\\Dotnet.Watch\\HotReloadClient\\Microsoft.DotNet.HotReload.Client.Package.csproj", + "src\\Dotnet.Watch\\HotReloadClient\\Microsoft.DotNet.HotReload.Client.shproj", + "src\\Dotnet.Watch\\Watch.Aspire\\Microsoft.DotNet.HotReload.Watch.Aspire.csproj", + "src\\Dotnet.Watch\\Watch\\Microsoft.DotNet.HotReload.Watch.csproj", + "src\\Dotnet.Watch\\Web.Middleware\\Microsoft.DotNet.HotReload.Web.Middleware.Package.csproj", + "src\\Dotnet.Watch\\Web.Middleware\\Microsoft.DotNet.HotReload.Web.Middleware.shproj", + "src\\Cli\\dn\\dn.csproj", + "src\\Cli\\dn\\dn-native-debug.vcxproj", + "src\\Cli\\dotnet-aot\\dotnet-aot.csproj", + "src\\Cli\\dotnet\\dotnet.csproj", + "src\\Cli\\Microsoft.DotNet.Cli.CommandLine\\Microsoft.DotNet.Cli.CommandLine.csproj", + "src\\Cli\\Microsoft.DotNet.Cli.CoreUtils\\Microsoft.DotNet.Cli.CoreUtils.csproj", + "src\\Cli\\Microsoft.DotNet.Cli.Definitions\\Microsoft.DotNet.Cli.Definitions.csproj", + "src\\Cli\\Microsoft.DotNet.Cli.Utils\\Microsoft.DotNet.Cli.Utils.csproj", + "src\\Cli\\Microsoft.DotNet.Configurer\\Microsoft.DotNet.Configurer.csproj", + "src\\Cli\\Microsoft.DotNet.FileBasedPrograms\\Microsoft.DotNet.FileBasedPrograms.Package.csproj", + "src\\Cli\\Microsoft.DotNet.InternalAbstractions\\Microsoft.DotNet.InternalAbstractions.csproj", + "src\\Cli\\Microsoft.TemplateEngine.Cli\\Microsoft.TemplateEngine.Cli.csproj", + "src\\Compatibility\\Microsoft.DotNet.ApiSymbolExtensions\\Microsoft.DotNet.ApiSymbolExtensions.csproj", + "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.ApiCompat.Shared\\Microsoft.DotNet.ApiCompat.Shared.shproj", + "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.ApiCompat.Task\\Microsoft.DotNet.ApiCompat.Task.csproj", + "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.ApiCompat.Tool\\Microsoft.DotNet.ApiCompat.Tool.csproj", + "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.ApiCompatibility\\Microsoft.DotNet.ApiCompatibility.csproj", + "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.PackageValidation\\Microsoft.DotNet.PackageValidation.csproj", + "src\\Compatibility\\ApiDiff\\Microsoft.DotNet.ApiDiff.Tool\\Microsoft.DotNet.ApiDiff.Tool.csproj", + "src\\Compatibility\\ApiDiff\\Microsoft.DotNet.ApiDiff\\Microsoft.DotNet.ApiDiff.csproj", + "src\\Compatibility\\GenAPI\\Microsoft.DotNet.GenAPI.Task\\Microsoft.DotNet.GenAPI.Task.csproj", + "src\\Compatibility\\GenAPI\\Microsoft.DotNet.GenAPI.Tool\\Microsoft.DotNet.GenAPI.Tool.csproj", + "src\\Compatibility\\GenAPI\\Microsoft.DotNet.GenAPI\\Microsoft.DotNet.GenAPI.csproj", + "src\\Containers\\containerize\\containerize.csproj", + "src\\Containers\\Microsoft.NET.Build.Containers\\Microsoft.NET.Build.Containers.csproj", + "src\\Containers\\packaging\\package.csproj", + "src\\Layout\\finalizer\\finalizer.csproj", + "src\\Layout\\pkg\\dotnet-sdk.proj", + "src\\Layout\\redist\\redist.csproj", + "src\\Layout\\redist\\tools\\tool_fsc.csproj", + "src\\Layout\\redist\\tools\\tool_msbuild.csproj", + "src\\Layout\\redist\\tools\\tool_nuget.csproj", + "src\\Layout\\VS.Redist.Common.Net.Core.SDK.MSBuildExtensions\\VS.Redist.Common.Net.Core.SDK.MSBuildExtensions.proj", + "src\\Layout\\VS.Redist.Common.Net.Core.SDK.RuntimeAnalyzers\\VS.Redist.Common.Net.Core.SDK.RuntimeAnalyzers.proj", + "src\\Layout\\VS.Redist.Common.Net.Core.SDK.VSTemplateLocator\\VS.Redist.Common.Net.Core.SDK.VSTemplateLocator.proj", + "src\\Layout\\VS.Redist.Common.NetCore.SdkPlaceholder\\VS.Redist.Common.NetCore.SdkPlaceholder.proj", + "src\\Layout\\VS.Redist.Common.NetCore.Templates\\VS.Redist.Common.NetCore.Templates.proj", + "src\\Layout\\VS.Redist.Common.NetCore.Toolset\\VS.Redist.Common.NetCore.Toolset.proj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.CSharp.NetAnalyzers\\Microsoft.CodeAnalysis.CSharp.NetAnalyzers.csproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.NetAnalyzers.Package.csproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.NetAnalyzers.Setup\\Microsoft.CodeAnalysis.NetAnalyzers.Setup.csproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.NetAnalyzers\\Microsoft.CodeAnalysis.NetAnalyzers.csproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers\\Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers.vbproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Utilities\\Compiler.CSharp\\Analyzer.CSharp.Utilities.shproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Utilities\\Compiler\\Analyzer.Utilities.shproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Utilities\\FlowAnalysis\\FlowAnalysis.Utilities.shproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Utilities\\Workspaces\\Workspaces.Utilities.shproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\tests\\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests\\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests.csproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\tests\\Test.Utilities\\Test.Utilities.csproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\tests\\TestReferenceAssembly\\TestReferenceAssembly.csproj", + "src\\Microsoft.CodeAnalysis.NetAnalyzers\\tools\\GenerateDocumentationAndConfigFiles\\GenerateDocumentationAndConfigFiles.csproj", + "src\\RazorSdk\\Tasks\\Microsoft.NET.Sdk.Razor.Tasks.csproj", + "src\\RazorSdk\\Tool\\Microsoft.NET.Sdk.Razor.Tool.csproj", + "src\\Resolvers\\Microsoft.DotNet.MSBuildSdkResolver\\Microsoft.DotNet.MSBuildSdkResolver.csproj", + "src\\Resolvers\\Microsoft.DotNet.NativeWrapper\\Microsoft.DotNet.NativeWrapper.csproj", + "src\\Resolvers\\Microsoft.DotNet.SdkResolver\\Microsoft.DotNet.SdkResolver.csproj", + "src\\Resolvers\\Microsoft.NET.Sdk.WorkloadManifestReader\\Microsoft.NET.Sdk.WorkloadManifestReader.csproj", + "src\\Resolvers\\Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver\\Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.csproj", + "src\\StaticWebAssetsSdk\\benchmarks\\Microsoft.NET.Sdk.StaticWebAssets.Benchmarks.csproj", + "src\\StaticWebAssetsSdk\\Tasks\\Microsoft.NET.Sdk.StaticWebAssets.Tasks.csproj", + "src\\StaticWebAssetsSdk\\Tool\\Microsoft.NET.Sdk.StaticWebAssets.Tool.csproj", + "src\\Tasks\\Microsoft.NET.Build.Extensions.Tasks\\Microsoft.NET.Build.Extensions.Tasks.csproj", + "src\\Tasks\\Microsoft.NET.Build.Tasks\\Microsoft.NET.Build.Tasks.csproj", + "src\\Tasks\\sdk-tasks\\sdk-tasks.csproj", + "src\\WasmSdk\\Tasks\\Microsoft.NET.Sdk.WebAssembly.Tasks.csproj", + "src\\WebSdk\\ProjectSystem\\Tasks\\Microsoft.NET.Sdk.Web.ProjectSystem.Tasks.csproj", + "src\\WebSdk\\Publish\\Tasks\\Microsoft.NET.Sdk.Publish.Tasks.csproj", + "src\\WebSdk\\Web\\Tasks\\Microsoft.NET.Sdk.Web.Tasks.csproj", + "src\\WebSdk\\Worker\\Tasks\\Microsoft.NET.Sdk.Worker.Tasks.csproj", + "src\\Workloads\\Manifests\\manifest-packages.csproj", + "src\\Workloads\\VSInsertion\\workloads.csproj", + "src\\TemplateEngine\\Microsoft.TemplateEngine.Abstractions\\Microsoft.TemplateEngine.Abstractions.csproj", + "src\\TemplateEngine\\Microsoft.TemplateEngine.Core\\Microsoft.TemplateEngine.Core.csproj", + "src\\TemplateEngine\\Microsoft.TemplateEngine.Core.Contracts\\Microsoft.TemplateEngine.Core.Contracts.csproj", + "src\\TemplateEngine\\Microsoft.TemplateEngine.Edge\\Microsoft.TemplateEngine.Edge.csproj", + "src\\TemplateEngine\\Microsoft.TemplateEngine.IDE\\Microsoft.TemplateEngine.IDE.csproj", + "src\\TemplateEngine\\Microsoft.TemplateEngine.Orchestrator.RunnableProjects\\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.csproj", + "src\\TemplateEngine\\Microsoft.TemplateEngine.Utils\\Microsoft.TemplateEngine.Utils.csproj", + "src\\TemplateEngine\\Microsoft.TemplateSearch.Common\\Microsoft.TemplateSearch.Common.csproj", + "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.Authoring.CLI\\Microsoft.TemplateEngine.Authoring.CLI.csproj", + "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.Authoring.Tasks\\Microsoft.TemplateEngine.Authoring.Tasks.csproj", + "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.Authoring.TemplateApiVerifier\\Microsoft.TemplateEngine.Authoring.TemplateApiVerifier.csproj", + "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.Authoring.TemplateVerifier\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj", + "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.TemplateLocalizer.Core\\Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj", + "src\\TemplateEngine\\Tools\\Microsoft.TemplateSearch.TemplateDiscovery\\Microsoft.TemplateSearch.TemplateDiscovery.csproj", + "template_feed\\Microsoft.DotNet.Common.ItemTemplates\\Microsoft.DotNet.Common.ItemTemplates.csproj", + "template_feed\\Microsoft.DotNet.Common.ProjectTemplates.11.0\\Microsoft.DotNet.Common.ProjectTemplates.11.0.csproj", + "template_feed\\Microsoft.TemplateEngine.Authoring.Templates\\Microsoft.TemplateEngine.Authoring.Templates.csproj", + "documentation\\TemplateEngine\\Samples\\Microsoft.TemplateEngine.Samples.csproj", + "benchmarks\\MicroBenchmark\\MicroBenchmark.csproj", + "test\\Microsoft.NET.Build.Extensions.Tasks.Tests\\Microsoft.NET.Build.Extensions.Tasks.Tests.csproj", + "test\\Microsoft.NET.Build.Tasks.Tests\\Microsoft.NET.Build.Tasks.Tests.csproj", + "test\\ArgumentForwarding.Tests\\ArgumentForwarding.Tests.csproj", + "test\\ArgumentsReflector\\ArgumentsReflector.csproj", + "test\\containerize.UnitTests\\containerize.UnitTests.csproj", + "test\\dotnet-format.UnitTests\\dotnet-format.UnitTests.csproj", + "test\\dotnet-MsiInstallation.Tests\\dotnet-MsiInstallation.Tests.csproj", + "test\\dotnet-new.IntegrationTests\\dotnet-new.IntegrationTests.csproj", + "test\\dotnet-watch-test-browser\\dotnet-watch-test-browser.csproj", + "test\\dotnet-watch.Tests\\dotnet-watch.Tests.csproj", + "test\\dotnet-aot.Tests\\dotnet-aot.Tests.csproj", + "test\\dotnet.Tests\\dotnet.Tests.csproj", + "test\\EndToEnd.Tests\\EndToEnd.Tests.csproj", + "test\\HelixTasks\\HelixTasks.csproj", + "test\\Microsoft.AspNetCore.Watch.BrowserRefresh.Tests\\Microsoft.AspNetCore.Watch.BrowserRefresh.Tests.csproj", + "test\\Microsoft.DotNet.Cli.Utils.Tests\\Microsoft.DotNet.Cli.Utils.Tests.csproj", + "test\\Microsoft.DotNet.HotReload.Client.Tests\\Microsoft.DotNet.HotReload.Client.Tests.csproj", + "test\\Microsoft.DotNet.HotReload.Test.Utilities\\Microsoft.DotNet.HotReload.Test.Utilities.csproj", + "test\\Microsoft.DotNet.HotReload.Watch.Aspire.Tests\\Microsoft.DotNet.HotReload.Watch.Aspire.Tests.csproj", + "test\\Microsoft.DotNet.MSBuildSdkResolver.Tests\\Microsoft.DotNet.MSBuildSdkResolver.Tests.csproj", + "test\\Microsoft.DotNet.PackageInstall.Tests\\Microsoft.DotNet.PackageInstall.Tests.csproj", + "test\\Microsoft.DotNet.TemplateLocator.Tests\\Microsoft.DotNet.TemplateLocator.Tests.csproj", + "test\\Microsoft.DotNet.Test.MSTest.Utilities\\Microsoft.DotNet.Test.MSTest.Utilities.csproj", + "test\\Microsoft.DotNet.Tools.Tests.ComponentMocks\\Microsoft.DotNet.Tools.Tests.ComponentMocks.csproj", + "test\\Microsoft.Extensions.DotNetDeltaApplier.Tests\\Microsoft.Extensions.DotNetDeltaApplier.Tests.csproj", + "test\\Microsoft.NET.Build.Containers.IntegrationTests\\Microsoft.NET.Build.Containers.IntegrationTests.csproj", + "test\\Microsoft.NET.Build.Containers.UnitTests\\Microsoft.NET.Build.Containers.UnitTests.csproj", + "test\\Microsoft.NET.Build.Tests\\Microsoft.NET.Build.Tests.csproj", + "test\\Microsoft.NET.Clean.Tests\\Microsoft.NET.Clean.Tests.csproj", + "test\\Microsoft.NET.Pack.Tests\\Microsoft.NET.Pack.Tests.csproj", + "test\\Microsoft.NET.Publish.Tests\\Microsoft.NET.Publish.Tests.csproj", + "test\\Microsoft.NET.Rebuild.Tests\\Microsoft.NET.Rebuild.Tests.csproj", + "test\\Microsoft.NET.Restore.Tests\\Microsoft.NET.Restore.Tests.csproj", + "test\\Microsoft.NET.Sdk.BlazorWebAssembly.AoT.Tests\\Microsoft.NET.Sdk.BlazorWebAssembly.AoT.Tests.csproj", + "test\\Microsoft.NET.Sdk.BlazorWebAssembly.Tests\\Microsoft.NET.Sdk.BlazorWebAssembly.Tests.csproj", + "test\\Microsoft.NET.Sdk.Publish.Tasks.Tests\\Microsoft.NET.Sdk.Publish.Tasks.Tests.csproj", + "test\\Microsoft.NET.Sdk.Razor.Tests\\Microsoft.NET.Sdk.Razor.Tests.csproj", + "test\\Microsoft.NET.Sdk.Razor.Tool.Tests\\Microsoft.NET.Sdk.Razor.Tool.Tests.csproj", + "test\\Microsoft.NET.Sdk.StaticWebAssets.Tests\\Microsoft.NET.Sdk.StaticWebAssets.Tests.csproj", + "test\\Microsoft.NET.Sdk.Web.Tests\\Microsoft.NET.Sdk.Web.Tests.csproj", + "test\\Microsoft.NET.Sdk.WorkloadManifestReader.Tests\\Microsoft.NET.Sdk.WorkloadManifestReader.Tests.csproj", + "test\\Microsoft.NET.TestFramework\\Microsoft.NET.TestFramework.csproj", + "test\\Microsoft.NET.TestFramework.MSTest\\Microsoft.NET.TestFramework.MSTest.csproj", + "test\\Microsoft.NET.ToolPack.Tests\\Microsoft.NET.ToolPack.Tests.csproj", + "test\\Microsoft.TemplateEngine.Cli.UnitTests\\Microsoft.TemplateEngine.Cli.UnitTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests\\Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.CLI.UnitTests\\Microsoft.TemplateEngine.Authoring.CLI.UnitTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests\\Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.Templates.IntegrationTests\\Microsoft.TemplateEngine.Authoring.Templates.IntegrationTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Core.UnitTests\\Microsoft.TemplateEngine.Core.UnitTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Edge.UnitTests\\Microsoft.TemplateEngine.Edge.UnitTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.IDE.IntegrationTests\\Microsoft.TemplateEngine.IDE.IntegrationTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Mocks\\Microsoft.TemplateEngine.Mocks.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests\\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests\\Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.TestHelper\\Microsoft.TemplateEngine.TestHelper.csproj", + "test\\TemplateEngine\\Microsoft.TemplateEngine.Utils.UnitTests\\Microsoft.TemplateEngine.Utils.UnitTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateSearch.Common.UnitTests\\Microsoft.TemplateSearch.Common.UnitTests.csproj", + "test\\TemplateEngine\\Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests\\Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests.csproj", + "test\\Microsoft.WebTools.AspireService.Tests\\Microsoft.WebTools.AspireService.Tests.csproj", + "test\\Microsoft.Win32.Msi.Manual.Tests\\Microsoft.Win32.Msi.Manual.Tests.csproj", + "test\\Microsoft.Win32.Msi.Tests\\Microsoft.Win32.Msi.Tests.csproj", + "test\\msbuild.Integration.Tests\\msbuild.Integration.Tests.csproj", + "test\\Msbuild.Tests.Utilities\\Msbuild.Tests.Utilities.csproj", + "test\\SDDLTests\\SDDLTests.csproj", + "test\\sdk-tasks.Tests\\sdk-tasks.Tests.csproj", + "test\\System.CommandLine.StaticCompletions.Tests\\System.CommandLine.StaticCompletions.Tests.csproj", + "test\\TelemetryStdOutLogger\\TelemetryStdOutLogger.csproj", + "test\\trustedroots.Tests\\trustedroots.Tests.csproj", + "test\\TestAssets\\TestPackages\\dotnet-new\\Microsoft.TemplateEngine.TestTemplates.csproj", + "test\\TestAssets\\TestPackages\\TemplateEngine\\Microsoft.TemplateEngine.TestTemplates.csproj", + "test\\Microsoft.DotNet.ApiCompat.IntegrationTests\\Microsoft.DotNet.ApiCompat.IntegrationTests.csproj", + "test\\Microsoft.DotNet.ApiCompat.Tests\\Microsoft.DotNet.ApiCompat.Tests.csproj", + "test\\Microsoft.DotNet.ApiCompatibility.Tests\\Microsoft.DotNet.ApiCompatibility.Tests.csproj", + "test\\Microsoft.DotNet.ApiSymbolExtensions.Tests\\Microsoft.DotNet.ApiSymbolExtensions.Tests.csproj", + "test\\Microsoft.DotNet.PackageValidation.Tests\\Microsoft.DotNet.PackageValidation.Tests.csproj", + "test\\Microsoft.DotNet.ApiDiff.IntegrationTests\\Microsoft.DotNet.ApiDiff.IntegrationTests.csproj", + "test\\Microsoft.DotNet.ApiDiff.Tests\\Microsoft.DotNet.ApiDiff.Tests.csproj", + "test\\Microsoft.DotNet.GenAPI.IntegrationTests\\Microsoft.DotNet.GenAPI.IntegrationTests.csproj", + "test\\Microsoft.DotNet.GenAPI.Tests\\Microsoft.DotNet.GenAPI.Tests.csproj" + ] + } +} diff --git a/sdk.slnx b/sdk.slnx index 2d1f89b3c7c4..b2c2284e1df9 100644 --- a/sdk.slnx +++ b/sdk.slnx @@ -345,6 +345,7 @@ + From 7c82fadb6225590f4c1c09c129b5c86f7b618428 Mon Sep 17 00:00:00 2001 From: "Matt Mitchell (.NET)" Date: Tue, 23 Jun 2026 11:24:40 -0700 Subject: [PATCH 2/3] Fix: build product solution + orchestrator via /p:Projects instead of adding .proj to .slnx The first attempt added test/UnitTests.proj to sdk.slnx and generated sdk.slnf to exclude it. That broke every CI leg: the .slnx solution format (SolutionPersistence) has no registered project type for the .proj extension, so loading sdk.slnx failed with "ProjectType '' not found" (MSB4025) for all consumers of the solution/filter. Instead, keep sdk.slnx unchanged and have the combined "Build and Test" step build both the product solution and the Helix orchestrator in one invocation via /p:Projects=sdk.slnx;test/UnitTests.proj MSBuild builds listed projects in order, so the product is built before UnitTests.proj publishes/queues the tests. Build-only legs build just sdk.slnx, exactly as the former 'Build' step did. This removes sdk.slnf entirely (and its sync fragility) and reverts the sdk.slnx and dotnet-format-integration.yml edits. The RunTests in-process guard in eng/XUnitV3/XUnitV3.Runner.targets is retained so the per-project *.Tests.csproj do not run on the build agent when queuing to Helix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../dotnet-format-integration.yml | 2 +- eng/pipelines/templates/jobs/sdk-build.yml | 27 ++- sdk.slnf | 209 ------------------ sdk.slnx | 1 - 4 files changed, 16 insertions(+), 223 deletions(-) delete mode 100644 sdk.slnf diff --git a/eng/dotnet-format/dotnet-format-integration.yml b/eng/dotnet-format/dotnet-format-integration.yml index e518480f1f15..8df9e7fe7b05 100644 --- a/eng/dotnet-format/dotnet-format-integration.yml +++ b/eng/dotnet-format/dotnet-format-integration.yml @@ -20,7 +20,7 @@ parameters: - Name: sdk _repo: "https://github.com/dotnet/sdk" _repoName: "dotnet/sdk" - _targetSolution: "sdk.slnf" + _targetSolution: "sdk.slnx" _branchName: "main" _sha: "e6bc966cc3d1348265b0831c6daca23267169d8f" _useParentSdk: 0 diff --git a/eng/pipelines/templates/jobs/sdk-build.yml b/eng/pipelines/templates/jobs/sdk-build.yml index a8a9aed82968..89947c966db4 100644 --- a/eng/pipelines/templates/jobs/sdk-build.yml +++ b/eng/pipelines/templates/jobs/sdk-build.yml @@ -98,23 +98,25 @@ jobs: # between them (the test publish in test/UnitTests.proj re-restores and recompiles the # product with a RuntimeIdentifier, which previously happened only in the second step). # - # When running tests, the full sdk.slnx is built with -test. sdk.slnx now includes - # test/UnitTests.proj (the Helix orchestrator) so that test queuing happens as part of - # the same invocation. Per-project in-process test execution is suppressed via the - # RunTests guard in eng/XUnitV3/XUnitV3.Runner.targets (keyed off CustomHelixTargetQueue), - # so the individual *.Tests.csproj do not run on the build agent; UnitTests.proj still - # submits them to Helix. + # When running tests, the combined step builds the product solution (sdk.slnx) AND the + # Helix orchestrator (test/UnitTests.proj) in a single invocation via /p:Projects, with + # -test. Because MSBuild builds the listed projects in order, the product is built before + # UnitTests.proj publishes/queues the tests. Per-project in-process test execution is + # suppressed via the RunTests guard in eng/XUnitV3/XUnitV3.Runner.targets (keyed off + # CustomHelixTargetQueue), so the individual *.Tests.csproj do not run on the build agent; + # UnitTests.proj still submits them to Helix. # - # Build-only legs (runTests=false) build sdk.slnf, which is sdk.slnx minus - # test/UnitTests.proj, so they neither queue Helix work nor pull in the orchestrator. + # Build-only legs (runTests=false) build only sdk.slnx, exactly as the former 'Build' + # step did, so they neither queue Helix work nor pull in the orchestrator. - ${{ if eq(parameters.pool.os, 'windows') }}: - ${{ if eq(parameters.runTests, true) }}: + # For the /p:Projects syntax for PowerShell, see: https://github.com/dotnet/msbuild/issues/471#issuecomment-1146466335 - powershell: eng/common/build.ps1 -restore -build -pack -test -ci -prepareMachine -nativeToolsOnMachine -configuration $(buildConfiguration) ${{ parameters.publishArgument }} ${{ parameters.signArgument }} - /p:Projects=$(Build.SourcesDirectory)/sdk.slnx + /p:Projects=\`"$(Build.SourcesDirectory)/sdk.slnx`;$(Build.SourcesDirectory)/test/UnitTests.proj\`" /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} /p:TargetArchitecture=${{ parameters.targetArchitecture }} /p:PgoInstrument=${{ parameters.pgoInstrument }} @@ -140,7 +142,7 @@ jobs: -configuration $(buildConfiguration) ${{ parameters.publishArgument }} ${{ parameters.signArgument }} - /p:Projects=$(Build.SourcesDirectory)/sdk.slnf + /p:Projects=$(Build.SourcesDirectory)/sdk.slnx /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} /p:TargetArchitecture=${{ parameters.targetArchitecture }} /p:PgoInstrument=${{ parameters.pgoInstrument }} @@ -157,6 +159,7 @@ jobs: # The /p:CustomHelixTargetQueue syntax is: @ # For the Helix containers, see the 'simpleTags' arrays here: https://github.com/dotnet/versions/blob/main/build-info/docker/image-info.dotnet-dotnet-buildtools-prereqs-docker-main.json - ${{ if eq(parameters.runTests, true) }}: + # For the /p:Projects syntax for Bash, see: https://github.com/dotnet/msbuild/issues/471#issuecomment-1690189034 - script: | source $(Build.SourcesDirectory)/eng/common/native/init-os-and-arch.sh source $(Build.SourcesDirectory)/eng/common/native/init-distro-rid.sh @@ -167,7 +170,7 @@ jobs: -configuration $(buildConfiguration) \ ${{ parameters.publishArgument }} \ ${{ parameters.signArgument }} \ - '/p:Projects=$(Build.SourcesDirectory)/sdk.slnx' \ + '/p:Projects=$(Build.SourcesDirectory)/sdk.slnx;$(Build.SourcesDirectory)/test/UnitTests.proj' \ /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} \ /p:TargetArchitecture=${{ parameters.targetArchitecture }} \ /p:PgoInstrument=${{ parameters.pgoInstrument }} \ @@ -201,7 +204,7 @@ jobs: -configuration $(buildConfiguration) \ ${{ parameters.publishArgument }} \ ${{ parameters.signArgument }} \ - '/p:Projects=$(Build.SourcesDirectory)/sdk.slnf' \ + '/p:Projects=$(Build.SourcesDirectory)/sdk.slnx' \ /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} \ /p:TargetArchitecture=${{ parameters.targetArchitecture }} \ /p:PgoInstrument=${{ parameters.pgoInstrument }} \ diff --git a/sdk.slnf b/sdk.slnf deleted file mode 100644 index 2286dc2a6b6e..000000000000 --- a/sdk.slnf +++ /dev/null @@ -1,209 +0,0 @@ -{ - "solution": { - "path": "sdk.slnx", - "projects": [ - "src\\Cli\\Microsoft.DotNet.FileBasedPrograms\\Microsoft.DotNet.FileBasedPrograms.shproj", - "src\\Microsoft.DotNet.ProjectTools\\Microsoft.DotNet.ProjectTools.csproj", - "src\\Microsoft.DotNet.TemplateLocator\\Microsoft.DotNet.TemplateLocator.csproj", - "src\\Microsoft.Net.Sdk.Compilers.Toolset\\Microsoft.Net.Sdk.Compilers.Toolset.csproj", - "src\\Microsoft.Win32.Msi\\Microsoft.Win32.Msi.csproj", - "src\\System.CommandLine.StaticCompletions\\System.CommandLine.StaticCompletions.csproj", - "src\\BlazorWasmSdk\\Tasks\\Microsoft.NET.Sdk.BlazorWebAssembly.Tasks.csproj", - "src\\BlazorWasmSdk\\Tool\\Microsoft.NET.Sdk.BlazorWebAssembly.Tool.csproj", - "src\\Dotnet.Format\\dotnet-format\\dotnet-format.csproj", - "src\\Dotnet.Watch\\AspireService\\Microsoft.WebTools.AspireService.Package.csproj", - "src\\Dotnet.Watch\\AspireService\\Microsoft.WebTools.AspireService.shproj", - "src\\Dotnet.Watch\\BrowserRefresh\\Microsoft.AspNetCore.Watch.BrowserRefresh.csproj", - "src\\Dotnet.Watch\\dotnet-watch\\dotnet-watch.csproj", - "src\\Dotnet.Watch\\DotNetDeltaApplier\\Microsoft.Extensions.DotNetDeltaApplier.csproj", - "src\\Dotnet.Watch\\DotNetWatchTasks\\DotNetWatchTasks.csproj", - "src\\Dotnet.Watch\\HotReloadAgent.Data\\Microsoft.DotNet.HotReload.Agent.Data.Package.csproj", - "src\\Dotnet.Watch\\HotReloadAgent.Data\\Microsoft.DotNet.HotReload.Agent.Data.shproj", - "src\\Dotnet.Watch\\HotReloadAgent.Host\\Microsoft.DotNet.HotReload.Agent.Host.Package.csproj", - "src\\Dotnet.Watch\\HotReloadAgent.Host\\Microsoft.DotNet.HotReload.Agent.Host.shproj", - "src\\Dotnet.Watch\\HotReloadAgent.PipeRpc\\Microsoft.DotNet.HotReload.Agent.PipeRpc.Package.csproj", - "src\\Dotnet.Watch\\HotReloadAgent.PipeRpc\\Microsoft.DotNet.HotReload.Agent.PipeRpc.shproj", - "src\\Dotnet.Watch\\HotReloadAgent.WebAssembly.Browser\\Microsoft.DotNet.HotReload.WebAssembly.Browser.csproj", - "src\\Dotnet.Watch\\HotReloadAgent\\Microsoft.DotNet.HotReload.Agent.Package.csproj", - "src\\Dotnet.Watch\\HotReloadAgent\\Microsoft.DotNet.HotReload.Agent.shproj", - "src\\Dotnet.Watch\\HotReloadClient\\Microsoft.DotNet.HotReload.Client.Package.csproj", - "src\\Dotnet.Watch\\HotReloadClient\\Microsoft.DotNet.HotReload.Client.shproj", - "src\\Dotnet.Watch\\Watch.Aspire\\Microsoft.DotNet.HotReload.Watch.Aspire.csproj", - "src\\Dotnet.Watch\\Watch\\Microsoft.DotNet.HotReload.Watch.csproj", - "src\\Dotnet.Watch\\Web.Middleware\\Microsoft.DotNet.HotReload.Web.Middleware.Package.csproj", - "src\\Dotnet.Watch\\Web.Middleware\\Microsoft.DotNet.HotReload.Web.Middleware.shproj", - "src\\Cli\\dn\\dn.csproj", - "src\\Cli\\dn\\dn-native-debug.vcxproj", - "src\\Cli\\dotnet-aot\\dotnet-aot.csproj", - "src\\Cli\\dotnet\\dotnet.csproj", - "src\\Cli\\Microsoft.DotNet.Cli.CommandLine\\Microsoft.DotNet.Cli.CommandLine.csproj", - "src\\Cli\\Microsoft.DotNet.Cli.CoreUtils\\Microsoft.DotNet.Cli.CoreUtils.csproj", - "src\\Cli\\Microsoft.DotNet.Cli.Definitions\\Microsoft.DotNet.Cli.Definitions.csproj", - "src\\Cli\\Microsoft.DotNet.Cli.Utils\\Microsoft.DotNet.Cli.Utils.csproj", - "src\\Cli\\Microsoft.DotNet.Configurer\\Microsoft.DotNet.Configurer.csproj", - "src\\Cli\\Microsoft.DotNet.FileBasedPrograms\\Microsoft.DotNet.FileBasedPrograms.Package.csproj", - "src\\Cli\\Microsoft.DotNet.InternalAbstractions\\Microsoft.DotNet.InternalAbstractions.csproj", - "src\\Cli\\Microsoft.TemplateEngine.Cli\\Microsoft.TemplateEngine.Cli.csproj", - "src\\Compatibility\\Microsoft.DotNet.ApiSymbolExtensions\\Microsoft.DotNet.ApiSymbolExtensions.csproj", - "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.ApiCompat.Shared\\Microsoft.DotNet.ApiCompat.Shared.shproj", - "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.ApiCompat.Task\\Microsoft.DotNet.ApiCompat.Task.csproj", - "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.ApiCompat.Tool\\Microsoft.DotNet.ApiCompat.Tool.csproj", - "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.ApiCompatibility\\Microsoft.DotNet.ApiCompatibility.csproj", - "src\\Compatibility\\ApiCompat\\Microsoft.DotNet.PackageValidation\\Microsoft.DotNet.PackageValidation.csproj", - "src\\Compatibility\\ApiDiff\\Microsoft.DotNet.ApiDiff.Tool\\Microsoft.DotNet.ApiDiff.Tool.csproj", - "src\\Compatibility\\ApiDiff\\Microsoft.DotNet.ApiDiff\\Microsoft.DotNet.ApiDiff.csproj", - "src\\Compatibility\\GenAPI\\Microsoft.DotNet.GenAPI.Task\\Microsoft.DotNet.GenAPI.Task.csproj", - "src\\Compatibility\\GenAPI\\Microsoft.DotNet.GenAPI.Tool\\Microsoft.DotNet.GenAPI.Tool.csproj", - "src\\Compatibility\\GenAPI\\Microsoft.DotNet.GenAPI\\Microsoft.DotNet.GenAPI.csproj", - "src\\Containers\\containerize\\containerize.csproj", - "src\\Containers\\Microsoft.NET.Build.Containers\\Microsoft.NET.Build.Containers.csproj", - "src\\Containers\\packaging\\package.csproj", - "src\\Layout\\finalizer\\finalizer.csproj", - "src\\Layout\\pkg\\dotnet-sdk.proj", - "src\\Layout\\redist\\redist.csproj", - "src\\Layout\\redist\\tools\\tool_fsc.csproj", - "src\\Layout\\redist\\tools\\tool_msbuild.csproj", - "src\\Layout\\redist\\tools\\tool_nuget.csproj", - "src\\Layout\\VS.Redist.Common.Net.Core.SDK.MSBuildExtensions\\VS.Redist.Common.Net.Core.SDK.MSBuildExtensions.proj", - "src\\Layout\\VS.Redist.Common.Net.Core.SDK.RuntimeAnalyzers\\VS.Redist.Common.Net.Core.SDK.RuntimeAnalyzers.proj", - "src\\Layout\\VS.Redist.Common.Net.Core.SDK.VSTemplateLocator\\VS.Redist.Common.Net.Core.SDK.VSTemplateLocator.proj", - "src\\Layout\\VS.Redist.Common.NetCore.SdkPlaceholder\\VS.Redist.Common.NetCore.SdkPlaceholder.proj", - "src\\Layout\\VS.Redist.Common.NetCore.Templates\\VS.Redist.Common.NetCore.Templates.proj", - "src\\Layout\\VS.Redist.Common.NetCore.Toolset\\VS.Redist.Common.NetCore.Toolset.proj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.CSharp.NetAnalyzers\\Microsoft.CodeAnalysis.CSharp.NetAnalyzers.csproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.NetAnalyzers.Package.csproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.NetAnalyzers.Setup\\Microsoft.CodeAnalysis.NetAnalyzers.Setup.csproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.NetAnalyzers\\Microsoft.CodeAnalysis.NetAnalyzers.csproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers\\Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers.vbproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Utilities\\Compiler.CSharp\\Analyzer.CSharp.Utilities.shproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Utilities\\Compiler\\Analyzer.Utilities.shproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Utilities\\FlowAnalysis\\FlowAnalysis.Utilities.shproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\src\\Utilities\\Workspaces\\Workspaces.Utilities.shproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\tests\\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests\\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests.csproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\tests\\Test.Utilities\\Test.Utilities.csproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\tests\\TestReferenceAssembly\\TestReferenceAssembly.csproj", - "src\\Microsoft.CodeAnalysis.NetAnalyzers\\tools\\GenerateDocumentationAndConfigFiles\\GenerateDocumentationAndConfigFiles.csproj", - "src\\RazorSdk\\Tasks\\Microsoft.NET.Sdk.Razor.Tasks.csproj", - "src\\RazorSdk\\Tool\\Microsoft.NET.Sdk.Razor.Tool.csproj", - "src\\Resolvers\\Microsoft.DotNet.MSBuildSdkResolver\\Microsoft.DotNet.MSBuildSdkResolver.csproj", - "src\\Resolvers\\Microsoft.DotNet.NativeWrapper\\Microsoft.DotNet.NativeWrapper.csproj", - "src\\Resolvers\\Microsoft.DotNet.SdkResolver\\Microsoft.DotNet.SdkResolver.csproj", - "src\\Resolvers\\Microsoft.NET.Sdk.WorkloadManifestReader\\Microsoft.NET.Sdk.WorkloadManifestReader.csproj", - "src\\Resolvers\\Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver\\Microsoft.NET.Sdk.WorkloadMSBuildSdkResolver.csproj", - "src\\StaticWebAssetsSdk\\benchmarks\\Microsoft.NET.Sdk.StaticWebAssets.Benchmarks.csproj", - "src\\StaticWebAssetsSdk\\Tasks\\Microsoft.NET.Sdk.StaticWebAssets.Tasks.csproj", - "src\\StaticWebAssetsSdk\\Tool\\Microsoft.NET.Sdk.StaticWebAssets.Tool.csproj", - "src\\Tasks\\Microsoft.NET.Build.Extensions.Tasks\\Microsoft.NET.Build.Extensions.Tasks.csproj", - "src\\Tasks\\Microsoft.NET.Build.Tasks\\Microsoft.NET.Build.Tasks.csproj", - "src\\Tasks\\sdk-tasks\\sdk-tasks.csproj", - "src\\WasmSdk\\Tasks\\Microsoft.NET.Sdk.WebAssembly.Tasks.csproj", - "src\\WebSdk\\ProjectSystem\\Tasks\\Microsoft.NET.Sdk.Web.ProjectSystem.Tasks.csproj", - "src\\WebSdk\\Publish\\Tasks\\Microsoft.NET.Sdk.Publish.Tasks.csproj", - "src\\WebSdk\\Web\\Tasks\\Microsoft.NET.Sdk.Web.Tasks.csproj", - "src\\WebSdk\\Worker\\Tasks\\Microsoft.NET.Sdk.Worker.Tasks.csproj", - "src\\Workloads\\Manifests\\manifest-packages.csproj", - "src\\Workloads\\VSInsertion\\workloads.csproj", - "src\\TemplateEngine\\Microsoft.TemplateEngine.Abstractions\\Microsoft.TemplateEngine.Abstractions.csproj", - "src\\TemplateEngine\\Microsoft.TemplateEngine.Core\\Microsoft.TemplateEngine.Core.csproj", - "src\\TemplateEngine\\Microsoft.TemplateEngine.Core.Contracts\\Microsoft.TemplateEngine.Core.Contracts.csproj", - "src\\TemplateEngine\\Microsoft.TemplateEngine.Edge\\Microsoft.TemplateEngine.Edge.csproj", - "src\\TemplateEngine\\Microsoft.TemplateEngine.IDE\\Microsoft.TemplateEngine.IDE.csproj", - "src\\TemplateEngine\\Microsoft.TemplateEngine.Orchestrator.RunnableProjects\\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.csproj", - "src\\TemplateEngine\\Microsoft.TemplateEngine.Utils\\Microsoft.TemplateEngine.Utils.csproj", - "src\\TemplateEngine\\Microsoft.TemplateSearch.Common\\Microsoft.TemplateSearch.Common.csproj", - "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.Authoring.CLI\\Microsoft.TemplateEngine.Authoring.CLI.csproj", - "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.Authoring.Tasks\\Microsoft.TemplateEngine.Authoring.Tasks.csproj", - "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.Authoring.TemplateApiVerifier\\Microsoft.TemplateEngine.Authoring.TemplateApiVerifier.csproj", - "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.Authoring.TemplateVerifier\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.csproj", - "src\\TemplateEngine\\Tools\\Microsoft.TemplateEngine.TemplateLocalizer.Core\\Microsoft.TemplateEngine.TemplateLocalizer.Core.csproj", - "src\\TemplateEngine\\Tools\\Microsoft.TemplateSearch.TemplateDiscovery\\Microsoft.TemplateSearch.TemplateDiscovery.csproj", - "template_feed\\Microsoft.DotNet.Common.ItemTemplates\\Microsoft.DotNet.Common.ItemTemplates.csproj", - "template_feed\\Microsoft.DotNet.Common.ProjectTemplates.11.0\\Microsoft.DotNet.Common.ProjectTemplates.11.0.csproj", - "template_feed\\Microsoft.TemplateEngine.Authoring.Templates\\Microsoft.TemplateEngine.Authoring.Templates.csproj", - "documentation\\TemplateEngine\\Samples\\Microsoft.TemplateEngine.Samples.csproj", - "benchmarks\\MicroBenchmark\\MicroBenchmark.csproj", - "test\\Microsoft.NET.Build.Extensions.Tasks.Tests\\Microsoft.NET.Build.Extensions.Tasks.Tests.csproj", - "test\\Microsoft.NET.Build.Tasks.Tests\\Microsoft.NET.Build.Tasks.Tests.csproj", - "test\\ArgumentForwarding.Tests\\ArgumentForwarding.Tests.csproj", - "test\\ArgumentsReflector\\ArgumentsReflector.csproj", - "test\\containerize.UnitTests\\containerize.UnitTests.csproj", - "test\\dotnet-format.UnitTests\\dotnet-format.UnitTests.csproj", - "test\\dotnet-MsiInstallation.Tests\\dotnet-MsiInstallation.Tests.csproj", - "test\\dotnet-new.IntegrationTests\\dotnet-new.IntegrationTests.csproj", - "test\\dotnet-watch-test-browser\\dotnet-watch-test-browser.csproj", - "test\\dotnet-watch.Tests\\dotnet-watch.Tests.csproj", - "test\\dotnet-aot.Tests\\dotnet-aot.Tests.csproj", - "test\\dotnet.Tests\\dotnet.Tests.csproj", - "test\\EndToEnd.Tests\\EndToEnd.Tests.csproj", - "test\\HelixTasks\\HelixTasks.csproj", - "test\\Microsoft.AspNetCore.Watch.BrowserRefresh.Tests\\Microsoft.AspNetCore.Watch.BrowserRefresh.Tests.csproj", - "test\\Microsoft.DotNet.Cli.Utils.Tests\\Microsoft.DotNet.Cli.Utils.Tests.csproj", - "test\\Microsoft.DotNet.HotReload.Client.Tests\\Microsoft.DotNet.HotReload.Client.Tests.csproj", - "test\\Microsoft.DotNet.HotReload.Test.Utilities\\Microsoft.DotNet.HotReload.Test.Utilities.csproj", - "test\\Microsoft.DotNet.HotReload.Watch.Aspire.Tests\\Microsoft.DotNet.HotReload.Watch.Aspire.Tests.csproj", - "test\\Microsoft.DotNet.MSBuildSdkResolver.Tests\\Microsoft.DotNet.MSBuildSdkResolver.Tests.csproj", - "test\\Microsoft.DotNet.PackageInstall.Tests\\Microsoft.DotNet.PackageInstall.Tests.csproj", - "test\\Microsoft.DotNet.TemplateLocator.Tests\\Microsoft.DotNet.TemplateLocator.Tests.csproj", - "test\\Microsoft.DotNet.Test.MSTest.Utilities\\Microsoft.DotNet.Test.MSTest.Utilities.csproj", - "test\\Microsoft.DotNet.Tools.Tests.ComponentMocks\\Microsoft.DotNet.Tools.Tests.ComponentMocks.csproj", - "test\\Microsoft.Extensions.DotNetDeltaApplier.Tests\\Microsoft.Extensions.DotNetDeltaApplier.Tests.csproj", - "test\\Microsoft.NET.Build.Containers.IntegrationTests\\Microsoft.NET.Build.Containers.IntegrationTests.csproj", - "test\\Microsoft.NET.Build.Containers.UnitTests\\Microsoft.NET.Build.Containers.UnitTests.csproj", - "test\\Microsoft.NET.Build.Tests\\Microsoft.NET.Build.Tests.csproj", - "test\\Microsoft.NET.Clean.Tests\\Microsoft.NET.Clean.Tests.csproj", - "test\\Microsoft.NET.Pack.Tests\\Microsoft.NET.Pack.Tests.csproj", - "test\\Microsoft.NET.Publish.Tests\\Microsoft.NET.Publish.Tests.csproj", - "test\\Microsoft.NET.Rebuild.Tests\\Microsoft.NET.Rebuild.Tests.csproj", - "test\\Microsoft.NET.Restore.Tests\\Microsoft.NET.Restore.Tests.csproj", - "test\\Microsoft.NET.Sdk.BlazorWebAssembly.AoT.Tests\\Microsoft.NET.Sdk.BlazorWebAssembly.AoT.Tests.csproj", - "test\\Microsoft.NET.Sdk.BlazorWebAssembly.Tests\\Microsoft.NET.Sdk.BlazorWebAssembly.Tests.csproj", - "test\\Microsoft.NET.Sdk.Publish.Tasks.Tests\\Microsoft.NET.Sdk.Publish.Tasks.Tests.csproj", - "test\\Microsoft.NET.Sdk.Razor.Tests\\Microsoft.NET.Sdk.Razor.Tests.csproj", - "test\\Microsoft.NET.Sdk.Razor.Tool.Tests\\Microsoft.NET.Sdk.Razor.Tool.Tests.csproj", - "test\\Microsoft.NET.Sdk.StaticWebAssets.Tests\\Microsoft.NET.Sdk.StaticWebAssets.Tests.csproj", - "test\\Microsoft.NET.Sdk.Web.Tests\\Microsoft.NET.Sdk.Web.Tests.csproj", - "test\\Microsoft.NET.Sdk.WorkloadManifestReader.Tests\\Microsoft.NET.Sdk.WorkloadManifestReader.Tests.csproj", - "test\\Microsoft.NET.TestFramework\\Microsoft.NET.TestFramework.csproj", - "test\\Microsoft.NET.TestFramework.MSTest\\Microsoft.NET.TestFramework.MSTest.csproj", - "test\\Microsoft.NET.ToolPack.Tests\\Microsoft.NET.ToolPack.Tests.csproj", - "test\\Microsoft.TemplateEngine.Cli.UnitTests\\Microsoft.TemplateEngine.Cli.UnitTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests\\Microsoft.TemplateEngine.Authoring.CLI.IntegrationTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.CLI.UnitTests\\Microsoft.TemplateEngine.Authoring.CLI.UnitTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests\\Microsoft.TemplateEngine.Authoring.Tasks.IntegrationTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.Templates.IntegrationTests\\Microsoft.TemplateEngine.Authoring.Templates.IntegrationTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.IntegrationTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests\\Microsoft.TemplateEngine.Authoring.TemplateVerifier.UnitTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Core.UnitTests\\Microsoft.TemplateEngine.Core.UnitTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Edge.UnitTests\\Microsoft.TemplateEngine.Edge.UnitTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.IDE.IntegrationTests\\Microsoft.TemplateEngine.IDE.IntegrationTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Mocks\\Microsoft.TemplateEngine.Mocks.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests\\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.UnitTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests\\Microsoft.TemplateEngine.TemplateLocalizer.Core.UnitTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.TestHelper\\Microsoft.TemplateEngine.TestHelper.csproj", - "test\\TemplateEngine\\Microsoft.TemplateEngine.Utils.UnitTests\\Microsoft.TemplateEngine.Utils.UnitTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateSearch.Common.UnitTests\\Microsoft.TemplateSearch.Common.UnitTests.csproj", - "test\\TemplateEngine\\Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests\\Microsoft.TemplateSearch.TemplateDiscovery.IntegrationTests.csproj", - "test\\Microsoft.WebTools.AspireService.Tests\\Microsoft.WebTools.AspireService.Tests.csproj", - "test\\Microsoft.Win32.Msi.Manual.Tests\\Microsoft.Win32.Msi.Manual.Tests.csproj", - "test\\Microsoft.Win32.Msi.Tests\\Microsoft.Win32.Msi.Tests.csproj", - "test\\msbuild.Integration.Tests\\msbuild.Integration.Tests.csproj", - "test\\Msbuild.Tests.Utilities\\Msbuild.Tests.Utilities.csproj", - "test\\SDDLTests\\SDDLTests.csproj", - "test\\sdk-tasks.Tests\\sdk-tasks.Tests.csproj", - "test\\System.CommandLine.StaticCompletions.Tests\\System.CommandLine.StaticCompletions.Tests.csproj", - "test\\TelemetryStdOutLogger\\TelemetryStdOutLogger.csproj", - "test\\trustedroots.Tests\\trustedroots.Tests.csproj", - "test\\TestAssets\\TestPackages\\dotnet-new\\Microsoft.TemplateEngine.TestTemplates.csproj", - "test\\TestAssets\\TestPackages\\TemplateEngine\\Microsoft.TemplateEngine.TestTemplates.csproj", - "test\\Microsoft.DotNet.ApiCompat.IntegrationTests\\Microsoft.DotNet.ApiCompat.IntegrationTests.csproj", - "test\\Microsoft.DotNet.ApiCompat.Tests\\Microsoft.DotNet.ApiCompat.Tests.csproj", - "test\\Microsoft.DotNet.ApiCompatibility.Tests\\Microsoft.DotNet.ApiCompatibility.Tests.csproj", - "test\\Microsoft.DotNet.ApiSymbolExtensions.Tests\\Microsoft.DotNet.ApiSymbolExtensions.Tests.csproj", - "test\\Microsoft.DotNet.PackageValidation.Tests\\Microsoft.DotNet.PackageValidation.Tests.csproj", - "test\\Microsoft.DotNet.ApiDiff.IntegrationTests\\Microsoft.DotNet.ApiDiff.IntegrationTests.csproj", - "test\\Microsoft.DotNet.ApiDiff.Tests\\Microsoft.DotNet.ApiDiff.Tests.csproj", - "test\\Microsoft.DotNet.GenAPI.IntegrationTests\\Microsoft.DotNet.GenAPI.IntegrationTests.csproj", - "test\\Microsoft.DotNet.GenAPI.Tests\\Microsoft.DotNet.GenAPI.Tests.csproj" - ] - } -} diff --git a/sdk.slnx b/sdk.slnx index b2c2284e1df9..2d1f89b3c7c4 100644 --- a/sdk.slnx +++ b/sdk.slnx @@ -345,7 +345,6 @@ - From e8c253af7c708d934f0e644f58b644cc64d1b073 Mon Sep 17 00:00:00 2001 From: "Matt Mitchell (.NET)" Date: Tue, 23 Jun 2026 11:50:00 -0700 Subject: [PATCH 3/3] Fix MSB1006: quote the multi-project /p:Projects value in the bash leg MSBuild's /p: switch uses ';' to separate multiple property assignments, so passing /p:Projects=sdk.slnx;test/UnitTests.proj unquoted caused MSBuild to parse the second path as its own (invalid) switch: MSBUILD : error MSB1006: Property is not valid. Switch: .../test/UnitTests.proj Wrap the value in inner double quotes ('/p:Projects="a;b"') so MSBuild treats the semicolon-separated list as a single property value, matching the original Queue Tests step. The Windows leg already used the equivalent escaped-quote form. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/templates/jobs/sdk-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/jobs/sdk-build.yml b/eng/pipelines/templates/jobs/sdk-build.yml index 89947c966db4..9aa79e5c75f3 100644 --- a/eng/pipelines/templates/jobs/sdk-build.yml +++ b/eng/pipelines/templates/jobs/sdk-build.yml @@ -170,7 +170,7 @@ jobs: -configuration $(buildConfiguration) \ ${{ parameters.publishArgument }} \ ${{ parameters.signArgument }} \ - '/p:Projects=$(Build.SourcesDirectory)/sdk.slnx;$(Build.SourcesDirectory)/test/UnitTests.proj' \ + '/p:Projects="$(Build.SourcesDirectory)/sdk.slnx;$(Build.SourcesDirectory)/test/UnitTests.proj"' \ /p:EnableDefaultArtifacts=${{ parameters.enableDefaultArtifacts }} \ /p:TargetArchitecture=${{ parameters.targetArchitecture }} \ /p:PgoInstrument=${{ parameters.pgoInstrument }} \