From 56196b5da20240cddf952abc513916c7e26d34d0 Mon Sep 17 00:00:00 2001 From: Copilot Date: Wed, 15 Apr 2026 22:42:10 +0000 Subject: [PATCH 1/6] Update dotnet run tests for launch settings message on stderr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #53797 moved the 'Using launch settings from...' message from stdout to stderr but only updated dotnet test assertions. This updates the dotnet run test assertions to match: - StdErr.Should().BeEmpty() → StdErr.Should().Contain('Using launch settings from') for tests that use launch profiles - HaveStdOutContaining(UsingLaunchSettingsFromMessage) → HaveStdErrContaining - NotHaveStdOutContaining(UsingLaunchSettingsFromMessage) → NotHaveStdErrContaining Fixes ~11 test failures across Windows, Linux, and macOS CI legs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Run/GivenDotnetRunBuildsCsProj.cs | 18 +++++++----------- .../Run/GivenDotnetRunBuildsVbProj.cs | 10 +++------- .../CommandTests/Run/RunCommandTests.cs | 2 +- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs index c3d1ff0781da..dff69a739f3e 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs @@ -400,7 +400,7 @@ public void ItUsesLaunchProfileOfTheSpecifiedName() cmd.Should().Pass() .And.HaveStdOutContaining("Second"); - cmd.StdErr.Should().BeEmpty(); + cmd.StdErr.Should().Contain("Using launch settings from"); } [Fact] @@ -418,10 +418,8 @@ public void ItDefaultsToTheFirstUsableLaunchProfile() .Execute(); cmd.Should().Pass() - .And.NotHaveStdOutContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) + .And.NotHaveStdErrContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) .And.HaveStdOutContaining("First"); - - cmd.StdErr.Should().BeEmpty(); } [Fact] @@ -441,7 +439,7 @@ public void ItSetsTheDotnetLaunchProfileEnvironmentVariableToDefaultLaunchProfil cmd.Should().Pass() .And.HaveStdOutContaining("DOTNET_LAUNCH_PROFILE=<<>>"); - cmd.StdErr.Should().BeEmpty(); + cmd.StdErr.Should().Contain("Using launch settings from"); } [Fact] @@ -461,7 +459,7 @@ public void ItSetsTheDotnetLaunchProfileEnvironmentVariableToSuppliedLaunchProfi cmd.Should().Pass() .And.HaveStdOutContaining("DOTNET_LAUNCH_PROFILE=<<>>"); - cmd.StdErr.Should().BeEmpty(); + cmd.StdErr.Should().Contain("Using launch settings from"); } [Fact] @@ -518,10 +516,8 @@ public void ItPrintsUsingLaunchSettingsMessageWhenNotQuiet() .Execute("-v:m"); cmd.Should().Pass() - .And.HaveStdOutContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) + .And.HaveStdErrContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) .And.HaveStdOutContaining("First"); - - cmd.StdErr.Should().BeEmpty(); } [Fact] @@ -540,7 +536,7 @@ public void ItPrefersTheValueOfAppUrlFromEnvVarOverTheProp() cmd.Should().Pass() .And.HaveStdOutContaining("http://localhost:12345/"); - cmd.StdErr.Should().BeEmpty(); + cmd.StdErr.Should().Contain("Using launch settings from"); } [Fact] @@ -559,7 +555,7 @@ public void ItUsesTheValueOfAppUrlIfTheEnvVarIsNotSet() cmd.Should().Pass() .And.HaveStdOutContaining("http://localhost:54321/"); - cmd.StdErr.Should().BeEmpty(); + cmd.StdErr.Should().Contain("Using launch settings from"); } [Fact] diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs index a73c7efa3f94..02dff9825077 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs @@ -88,7 +88,7 @@ public void ItUsesLaunchProfileOfTheSpecifiedName(string launchProfileName) .And .HaveStdOutContaining("Second") .And - .NotHaveStdErr(); + .HaveStdErrContaining("Using launch settings from"); } [Fact] @@ -106,10 +106,8 @@ public void ItDefaultsToTheFirstUsableLaunchProfile() .Execute(); cmd.Should().Pass() - .And.NotHaveStdOutContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) + .And.NotHaveStdErrContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) .And.HaveStdOutContaining("First"); - - cmd.StdErr.Should().BeEmpty(); } [Fact] @@ -126,10 +124,8 @@ public void ItPrintsUsingLaunchSettingsMessageWhenNotQuiet() .Execute("-v:m"); cmd.Should().Pass() - .And.HaveStdOutContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) + .And.HaveStdErrContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) .And.HaveStdOutContaining("First"); - - cmd.StdErr.Should().BeEmpty(); } [Fact] diff --git a/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs b/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs index e67a05e4678b..79ff2d0e5cbf 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs @@ -68,7 +68,7 @@ public void EnvironmentVariableExpansion_Project() .And.HaveStdOutContaining("TEST_VAR1=<<>>") .And.HaveStdOutContaining("ARGS=arg1,arg2,arg3"); - cmd.StdErr.Should().BeEmpty(); + cmd.StdErr.Should().Contain("Using launch settings from"); } [Fact] From f9ff3c8c0bf93e0879260e2eaee604d4ba322161 Mon Sep 17 00:00:00 2001 From: Copilot Date: Wed, 15 Apr 2026 23:46:02 +0000 Subject: [PATCH 2/6] Address review feedback: restore BeEmpty for quiet mode, fix VB path - CS ItDefaultsToTheFirstUsableLaunchProfile: restore StdErr.BeEmpty() since --verbosity quiet suppresses the launch settings message - VB ItDefaultsToTheFirstUsableLaunchProfile: fix path from Properties to My Project and assert message IS present on stderr Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../CommandTests/Run/GivenDotnetRunBuildsCsProj.cs | 3 ++- .../CommandTests/Run/GivenDotnetRunBuildsVbProj.cs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs index dff69a739f3e..af71fb7bc0e5 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs @@ -418,8 +418,9 @@ public void ItDefaultsToTheFirstUsableLaunchProfile() .Execute(); cmd.Should().Pass() - .And.NotHaveStdErrContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) .And.HaveStdOutContaining("First"); + + cmd.StdErr.Should().BeEmpty(); } [Fact] diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs index 02dff9825077..cea06ba5fe5a 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs @@ -99,14 +99,14 @@ public void ItDefaultsToTheFirstUsableLaunchProfile() .WithSource(); var testProjectDirectory = testInstance.Path; - var launchSettingsPath = Path.Combine(testProjectDirectory, "Properties", "launchSettings.json"); + var launchSettingsPath = Path.Combine(testProjectDirectory, "My Project", "launchSettings.json"); var cmd = new DotnetCommand(Log, "run") .WithWorkingDirectory(testProjectDirectory) .Execute(); cmd.Should().Pass() - .And.NotHaveStdErrContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) + .And.HaveStdErrContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)) .And.HaveStdOutContaining("First"); } From 7ffe863d6451b831f199c8821360d050b064c5a8 Mon Sep 17 00:00:00 2001 From: Copilot Date: Wed, 15 Apr 2026 23:54:32 +0000 Subject: [PATCH 3/6] Remove unused launchSettingsPath variables to fix warning-as-error Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs index af71fb7bc0e5..a775a55eeba3 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs @@ -431,7 +431,6 @@ public void ItSetsTheDotnetLaunchProfileEnvironmentVariableToDefaultLaunchProfil .WithSource(); var testProjectDirectory = testInstance.Path; - var launchSettingsPath = Path.Combine(testProjectDirectory, "Properties", "launchSettings.json"); var cmd = new DotnetCommand(Log, "run") .WithWorkingDirectory(testProjectDirectory) @@ -451,7 +450,6 @@ public void ItSetsTheDotnetLaunchProfileEnvironmentVariableToSuppliedLaunchProfi .WithSource(); var testProjectDirectory = testInstance.Path; - var launchSettingsPath = Path.Combine(testProjectDirectory, "Properties", "launchSettings.json"); var cmd = new DotnetCommand(Log, "run") .WithWorkingDirectory(testProjectDirectory) From 11b4a6c039133b96293586a900b6aff32805027b Mon Sep 17 00:00:00 2001 From: Copilot Date: Thu, 16 Apr 2026 00:05:36 +0000 Subject: [PATCH 4/6] Use resource string with full path instead of hardcoded substring Replace all hardcoded 'Using launch settings from' checks with string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath) for proper localization support and stronger assertions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Run/GivenDotnetRunBuildsCsProj.cs | 15 ++++++++++----- .../Run/GivenDotnetRunBuildsVbProj.cs | 4 +++- .../CommandTests/Run/RunCommandTests.cs | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs index a775a55eeba3..304e15e16b5c 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs @@ -392,6 +392,7 @@ public void ItUsesLaunchProfileOfTheSpecifiedName() .WithSource(); var testProjectDirectory = testInstance.Path; + var launchSettingsPath = Path.Combine(testProjectDirectory, "Properties", "launchSettings.json"); var cmd = new DotnetCommand(Log, "run") .WithWorkingDirectory(testProjectDirectory) @@ -400,7 +401,7 @@ public void ItUsesLaunchProfileOfTheSpecifiedName() cmd.Should().Pass() .And.HaveStdOutContaining("Second"); - cmd.StdErr.Should().Contain("Using launch settings from"); + cmd.StdErr.Should().Contain(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)); } [Fact] @@ -431,6 +432,7 @@ public void ItSetsTheDotnetLaunchProfileEnvironmentVariableToDefaultLaunchProfil .WithSource(); var testProjectDirectory = testInstance.Path; + var launchSettingsPath = Path.Combine(testProjectDirectory, "Properties", "launchSettings.json"); var cmd = new DotnetCommand(Log, "run") .WithWorkingDirectory(testProjectDirectory) @@ -439,7 +441,7 @@ public void ItSetsTheDotnetLaunchProfileEnvironmentVariableToDefaultLaunchProfil cmd.Should().Pass() .And.HaveStdOutContaining("DOTNET_LAUNCH_PROFILE=<<>>"); - cmd.StdErr.Should().Contain("Using launch settings from"); + cmd.StdErr.Should().Contain(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)); } [Fact] @@ -450,6 +452,7 @@ public void ItSetsTheDotnetLaunchProfileEnvironmentVariableToSuppliedLaunchProfi .WithSource(); var testProjectDirectory = testInstance.Path; + var launchSettingsPath = Path.Combine(testProjectDirectory, "Properties", "launchSettings.json"); var cmd = new DotnetCommand(Log, "run") .WithWorkingDirectory(testProjectDirectory) @@ -458,7 +461,7 @@ public void ItSetsTheDotnetLaunchProfileEnvironmentVariableToSuppliedLaunchProfi cmd.Should().Pass() .And.HaveStdOutContaining("DOTNET_LAUNCH_PROFILE=<<>>"); - cmd.StdErr.Should().Contain("Using launch settings from"); + cmd.StdErr.Should().Contain(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)); } [Fact] @@ -527,6 +530,7 @@ public void ItPrefersTheValueOfAppUrlFromEnvVarOverTheProp() .WithSource(); var testProjectDirectory = testInstance.Path; + var launchSettingsPath = Path.Combine(testProjectDirectory, "Properties", "launchSettings.json"); var cmd = new DotnetCommand(Log, "run") .WithWorkingDirectory(testProjectDirectory) @@ -535,7 +539,7 @@ public void ItPrefersTheValueOfAppUrlFromEnvVarOverTheProp() cmd.Should().Pass() .And.HaveStdOutContaining("http://localhost:12345/"); - cmd.StdErr.Should().Contain("Using launch settings from"); + cmd.StdErr.Should().Contain(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)); } [Fact] @@ -546,6 +550,7 @@ public void ItUsesTheValueOfAppUrlIfTheEnvVarIsNotSet() .WithSource(); var testProjectDirectory = testInstance.Path; + var launchSettingsPath = Path.Combine(testProjectDirectory, "Properties", "launchSettings.json"); var cmd = new DotnetCommand(Log, "run") .WithWorkingDirectory(testProjectDirectory) @@ -554,7 +559,7 @@ public void ItUsesTheValueOfAppUrlIfTheEnvVarIsNotSet() cmd.Should().Pass() .And.HaveStdOutContaining("http://localhost:54321/"); - cmd.StdErr.Should().Contain("Using launch settings from"); + cmd.StdErr.Should().Contain(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)); } [Fact] diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs index cea06ba5fe5a..924583a73aeb 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsVbProj.cs @@ -80,6 +80,8 @@ public void ItUsesLaunchProfileOfTheSpecifiedName(string launchProfileName) var testInstance = TestAssetsManager.CopyTestAsset(testAppName, identifier: $"LaunchProfileSuccess-{launchProfileName}") .WithSource(); + var launchSettingsPath = Path.Combine(testInstance.Path, "My Project", "launchSettings.json"); + new DotnetCommand(Log, "run") .WithWorkingDirectory(testInstance.Path) .Execute("--launch-profile", launchProfileName) @@ -88,7 +90,7 @@ public void ItUsesLaunchProfileOfTheSpecifiedName(string launchProfileName) .And .HaveStdOutContaining("Second") .And - .HaveStdErrContaining("Using launch settings from"); + .HaveStdErrContaining(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)); } [Fact] diff --git a/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs b/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs index 79ff2d0e5cbf..78ff8b3963e8 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs @@ -68,7 +68,7 @@ public void EnvironmentVariableExpansion_Project() .And.HaveStdOutContaining("TEST_VAR1=<<>>") .And.HaveStdOutContaining("ARGS=arg1,arg2,arg3"); - cmd.StdErr.Should().Contain("Using launch settings from"); + cmd.StdErr.Should().Contain(string.Format(CliCommandStrings.UsingLaunchSettingsFromMessage, launchSettingsPath)); } [Fact] From 7ed3b6e6c2223195f52163ca2a2323dfa2500ba6 Mon Sep 17 00:00:00 2001 From: Copilot Date: Thu, 16 Apr 2026 00:07:39 +0000 Subject: [PATCH 5/6] Remove unused launchSettingsPath in quiet-mode test Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs index 304e15e16b5c..51331d31142b 100644 --- a/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs +++ b/test/dotnet.Tests/CommandTests/Run/GivenDotnetRunBuildsCsProj.cs @@ -412,7 +412,6 @@ public void ItDefaultsToTheFirstUsableLaunchProfile() .WithSource(); var testProjectDirectory = testInstance.Path; - var launchSettingsPath = Path.Combine(testProjectDirectory, "Properties", "launchSettings.json"); var cmd = new DotnetCommand(Log, "run", "--verbosity", "quiet") .WithWorkingDirectory(testProjectDirectory) From 65702292fa094fdc0bdc6c3f043647a5d539590e Mon Sep 17 00:00:00 2001 From: Michael Simons Date: Thu, 16 Apr 2026 01:01:12 +0000 Subject: [PATCH 6/6] Add missing using directive for CliCommandStrings in RunCommandTests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs b/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs index 78ff8b3963e8..b8b765ed9d6d 100644 --- a/test/dotnet.Tests/CommandTests/Run/RunCommandTests.cs +++ b/test/dotnet.Tests/CommandTests/Run/RunCommandTests.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. +using Microsoft.DotNet.Cli.Commands; using Microsoft.DotNet.Cli.Commands.Run; using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.ProjectTools;