diff --git a/src/Assets/TestProjects/TestAppThatWaits/Properties/launchSettings.json b/src/Assets/TestProjects/TestAppThatWaits/Properties/launchSettings.json new file mode 100644 index 000000000000..781a8d29bde8 --- /dev/null +++ b/src/Assets/TestProjects/TestAppThatWaits/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "TestAppThatWaits": { + "commandName": "Project", + "dotnetRunMessages": "false", + "commandLineArgs": "TestAppCommandLineArguments SecondTestAppCommandLineArguments", + "environmentVariables": { + "MyCoolEnvironmentVariableKey": "MyCoolEnvironmentVariableValue" + } + } + } +} \ No newline at end of file diff --git a/src/Assets/TestProjects/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse/Program.cs b/src/Assets/TestProjects/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse/Program.cs new file mode 100644 index 000000000000..644ce5b625be --- /dev/null +++ b/src/Assets/TestProjects/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse/Program.cs @@ -0,0 +1,25 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; + +namespace ConsoleApplication +{ + public class Program + { + public static void Main(string[] args) + { + Console.WriteLine("Hello world"); + Console.WriteLine($"MyCoolEnvironmentVariableKey={Environment.GetEnvironmentVariable("MyCoolEnvironmentVariableKey")}"); + Console.WriteLine($"DOTNET_LAUNCH_PROFILE={Environment.GetEnvironmentVariable("DOTNET_LAUNCH_PROFILE")}"); + if (args.Length > 0) + { + Console.WriteLine(args[0]); + } + if (args.Length > 1) + { + Console.WriteLine(args[1]); + } + } + } +} diff --git a/src/Assets/TestProjects/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse/Properties/launchSettings.json b/src/Assets/TestProjects/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse/Properties/launchSettings.json new file mode 100644 index 000000000000..6fadb30c3953 --- /dev/null +++ b/src/Assets/TestProjects/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "TestAppWithLaunchSettings": { + "commandName": "Project", + "dotnetRunMessages": "false", + "commandLineArgs": "TestAppCommandLineArguments SecondTestAppCommandLineArguments", + "environmentVariables": { + "MyCoolEnvironmentVariableKey": "MyCoolEnvironmentVariableValue" + } + } + } +} \ No newline at end of file diff --git a/src/Assets/TestProjects/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse.csproj b/src/Assets/TestProjects/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse.csproj new file mode 100644 index 000000000000..3ad0617d8666 --- /dev/null +++ b/src/Assets/TestProjects/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse/TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse.csproj @@ -0,0 +1,8 @@ + + + + + $(CurrentTargetFramework) + Exe + + \ No newline at end of file diff --git a/src/Cli/dotnet/commands/dotnet-run/RunCommand.cs b/src/Cli/dotnet/commands/dotnet-run/RunCommand.cs index 6c4e7ac53cf6..a5faf5f7ca4e 100644 --- a/src/Cli/dotnet/commands/dotnet-run/RunCommand.cs +++ b/src/Cli/dotnet/commands/dotnet-run/RunCommand.cs @@ -43,7 +43,7 @@ public int Execute() if (ShouldBuild) { - if (string.Equals("true", launchSettings?.DotNetRunMessages, StringComparison.OrdinalIgnoreCase)) + if (string.Equals("true", launchSettings?.DotNetRunMessages, StringComparison.OrdinalIgnoreCase) || launchSettings?.DotNetRunMessages is null) { Reporter.Output.WriteLine(LocalizableStrings.RunCommandBuilding); } diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToControlGeneratedAssemblyInfo.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToControlGeneratedAssemblyInfo.cs index f1241fdd5717..f2c6703c3bac 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToControlGeneratedAssemblyInfo.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToControlGeneratedAssemblyInfo.cs @@ -847,6 +847,16 @@ static void Main(string[] args) var str = typeof(LibraryClass).Assembly.GetCustomAttribute().FrameworkDisplayName; Console.WriteLine(str); } +}"; + // disabling "Building..." message + testProject.SourceFiles["Properties/launchSettings.json"] = @" +{ + ""profiles"": { + ""TestApp"": { + ""commandName"": ""Project"", + ""dotnetRunMessages"": ""false"" + } + } }"; var testAsset = _testAssetsManager.CreateTestProject(testProject, identifier: targetFrameworkVersion); var buildCommand = new BuildCommand(testAsset); diff --git a/src/Tests/Microsoft.NET.TestFramework/ProjectConstruction/TestProject.cs b/src/Tests/Microsoft.NET.TestFramework/ProjectConstruction/TestProject.cs index e6374ef33144..4f54ee112ecf 100644 --- a/src/Tests/Microsoft.NET.TestFramework/ProjectConstruction/TestProject.cs +++ b/src/Tests/Microsoft.NET.TestFramework/ProjectConstruction/TestProject.cs @@ -421,7 +421,15 @@ public class {safeThisName}Class { foreach (var kvp in SourceFiles) { - File.WriteAllText(Path.Combine(targetFolder, kvp.Key), kvp.Value); + var path = Path.Combine(targetFolder, kvp.Key); + + var fi = new FileInfo(path); + if (!fi.Directory.Exists) + { + fi.Directory.Create(); + } + + File.WriteAllText(path, kvp.Value); } } diff --git a/src/Tests/dotnet-run.Tests/GivenDotnetRunRunsCsProj.cs b/src/Tests/dotnet-run.Tests/GivenDotnetRunRunsCsProj.cs index 083bb14fdf9a..944c28b25be7 100644 --- a/src/Tests/dotnet-run.Tests/GivenDotnetRunRunsCsProj.cs +++ b/src/Tests/dotnet-run.Tests/GivenDotnetRunRunsCsProj.cs @@ -129,7 +129,7 @@ public void ItCanRunAMSBuildProjectWhenSpecifyingAFramework() .WithWorkingDirectory(testProjectDirectory) .Execute("--framework", ToolsetInfo.CurrentTargetFramework) .Should().Pass() - .And.HaveStdOut("Hello World!"); + .And.HaveStdOutContaining("Hello World!"); } [Fact] @@ -783,9 +783,9 @@ public void ItForwardsEmptyArgumentsToTheApp() } [Fact] - public void ItDoesNotPrintBuildingMessageByDefault() + public void ItPrintsBuildingMessageByDefault() { - var expectedValue = "Building..."; + var expectedValue = LocalizableStrings.RunCommandBuilding; var testAppName = "TestAppSimple"; var testInstance = _testAssetsManager.CopyTestAsset(testAppName) .WithSource(); @@ -796,13 +796,13 @@ public void ItDoesNotPrintBuildingMessageByDefault() .Should() .Pass() .And - .NotHaveStdOutContaining(expectedValue); + .HaveStdOutContaining(expectedValue); } [Fact] public void ItPrintsBuildingMessageIfLaunchSettingHasDotnetRunMessagesSet() { - var expectedValue = "Building..."; + var expectedValue = LocalizableStrings.RunCommandBuilding; var testAppName = "TestAppWithLaunchSettings"; var testInstance = _testAssetsManager.CopyTestAsset(testAppName) .WithSource(); @@ -816,6 +816,40 @@ public void ItPrintsBuildingMessageIfLaunchSettingHasDotnetRunMessagesSet() .HaveStdOutContaining(expectedValue); } + [Fact] + public void ItPrintsBuildingMessageIfNoLaunchSettings() + { + var expectedValue = LocalizableStrings.RunCommandBuilding; + var testAppName = "TestAppSimple"; + var testInstance = _testAssetsManager.CopyTestAsset(testAppName) + .WithSource(); + + new DotnetCommand(Log, "run") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should() + .Pass() + .And + .HaveStdOutContaining(expectedValue); + } + + [Fact] + public void ItDoesNotPrintBuildingMessageIfLaunchSettingIsFalse() + { + var expectedValue = LocalizableStrings.RunCommandBuilding; + var testAppName = "TestAppWithLaunchSettingsAndDotNetRunMessagesIsFalse"; + var testInstance = _testAssetsManager.CopyTestAsset(testAppName) + .WithSource(); + + new DotnetCommand(Log, "run") + .WithWorkingDirectory(testInstance.Path) + .Execute() + .Should() + .Pass() + .And + .NotHaveStdOutContaining(expectedValue); + } + [Fact] public void ItIncludesEnvironmentVariablesSpecifiedInLaunchSettings() {