Skip to content

Commit 95567cd

Browse files
authored
[10.0.1xx] Consolidate default verbosity of msbuild-based commands (#50531)
1 parent 3b155a1 commit 95567cd

File tree

4 files changed

+71
-8
lines changed

4 files changed

+71
-8
lines changed

src/Cli/Microsoft.DotNet.Cli.Utils/MSBuildArgs.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,14 @@ private MSBuildArgs(ReadOnlyDictionary<string, string>? properties, ReadOnlyDict
5858
/// processing of the SDK and returns a structured set of MSBuild arguments grouped by purpose.
5959
/// </summary>
6060
/// <param name="forwardedAndUserFacingArgs">the complete set of forwarded MSBuild arguments and un-parsed, potentially MSBuild-relevant arguments</param>
61-
/// <returns></returns>
6261
public static MSBuildArgs AnalyzeMSBuildArguments(IEnumerable<string> forwardedAndUserFacingArgs, params Option[] options)
6362
{
6463
var fakeCommand = new System.CommandLine.Command("dotnet");
6564
foreach (var option in options)
6665
{
6766
fakeCommand.Options.Add(option);
6867
}
69-
;
68+
7069
var parseResult = fakeCommand.Parse([.. forwardedAndUserFacingArgs], _analysisParsingConfiguration);
7170
var globalProperties = parseResult.GetResult("--property") is OptionResult propResult ? propResult.GetValueOrDefault<ReadOnlyDictionary<string, string>?>() : null;
7271
var restoreProperties = parseResult.GetResult("--restoreProperty") is OptionResult restoreResult ? restoreResult.GetValueOrDefault<ReadOnlyDictionary<string, string>?>() : null;

src/Cli/Microsoft.DotNet.Cli.Utils/MSBuildForwardingAppWithoutLogging.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55

66
using System.Diagnostics;
77
using Microsoft.DotNet.Cli.Utils.Extensions;
8-
using Microsoft.DotNet.Cli;
98

109
namespace Microsoft.DotNet.Cli.Utils;
1110

12-
internal class MSBuildForwardingAppWithoutLogging
11+
internal sealed class MSBuildForwardingAppWithoutLogging
1312
{
1413
private static readonly bool AlwaysExecuteMSBuildOutOfProc = Env.GetEnvironmentVariableAsBool("DOTNET_CLI_RUN_MSBUILD_OUTOFPROC");
1514
private static readonly bool UseMSBuildServer = Env.GetEnvironmentVariableAsBool("DOTNET_CLI_USE_MSBUILD_SERVER", false);
@@ -23,6 +22,8 @@ public static string MSBuildVersion
2322

2423
private const string SdksDirectoryName = "Sdks";
2524

25+
internal const VerbosityOptions DefaultVerbosity = VerbosityOptions.m;
26+
2627
// Null if we're running MSBuild in-proc.
2728
private ForwardingAppImplementation? _forwardingApp;
2829

@@ -41,7 +42,7 @@ public static string MSBuildVersion
4142

4243
private readonly Dictionary<string, string?> _msbuildRequiredEnvironmentVariables = GetMSBuildRequiredEnvironmentVariables();
4344

44-
private readonly List<string> _msbuildRequiredParameters = [ "-maxcpucount", "--verbosity:m" ];
45+
private readonly List<string> _msbuildRequiredParameters = ["-maxcpucount", $"--verbosity:{DefaultVerbosity}"];
4546

4647
public MSBuildForwardingAppWithoutLogging(MSBuildArgs msbuildArgs, string? msbuildPath = null, bool includeLogo = false, bool isRestoring = true)
4748
{
@@ -93,7 +94,7 @@ public ProcessStartInfo GetProcessStartInfo()
9394

9495
public string[] GetAllArguments()
9596
{
96-
return [.. _msbuildRequiredParameters, ..EmitMSBuildArgs(_msbuildArgs) ];
97+
return [.. _msbuildRequiredParameters, .. EmitMSBuildArgs(_msbuildArgs)];
9798
}
9899

99100
private string[] EmitMSBuildArgs(MSBuildArgs msbuildArgs) => [

src/Cli/dotnet/Commands/Run/VirtualProjectBuildingCommand.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public VirtualProjectBuildingCommand(
105105
Debug.Assert(Path.IsPathFullyQualified(entryPointFileFullPath));
106106

107107
EntryPointFileFullPath = entryPointFileFullPath;
108-
MSBuildArgs = msbuildArgs.CloneWithAdditionalProperties(new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
108+
MSBuildArgs = msbuildArgs.CloneWithAdditionalProperties(new Dictionary<string, string>(2, StringComparer.OrdinalIgnoreCase)
109109
{
110110
// See https://github.com/dotnet/msbuild/blob/main/documentation/specs/build-nonexistent-projects-by-default.md.
111111
{ "_BuildNonexistentProjectsByDefault", bool.TrueString },
@@ -160,7 +160,7 @@ public ImmutableArray<CSharpDirective> Directives
160160

161161
public override int Execute()
162162
{
163-
var verbosity = MSBuildArgs.Verbosity ?? VerbosityOptions.quiet;
163+
var verbosity = MSBuildArgs.Verbosity ?? MSBuildForwardingAppWithoutLogging.DefaultVerbosity;
164164
var consoleLogger = TerminalLogger.CreateTerminalOrConsoleLogger([$"--verbosity:{verbosity}", .. MSBuildArgs.OtherMSBuildArgs]);
165165
var binaryLogger = GetBinaryLogger(MSBuildArgs.OtherMSBuildArgs);
166166

test/dotnet.Tests/CommandTests/Run/RunFileTests.cs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,6 +1164,69 @@ public void TerminalLogger(bool on)
11641164
}
11651165
}
11661166

1167+
[Fact]
1168+
public void Verbosity_Run()
1169+
{
1170+
var testInstance = _testAssetsManager.CreateTestDirectory();
1171+
var programFile = Path.Join(testInstance.Path, "Program.cs");
1172+
File.WriteAllText(programFile, s_program);
1173+
1174+
new DotnetCommand(Log, "run", "Program.cs", "--no-cache")
1175+
.WithWorkingDirectory(testInstance.Path)
1176+
.Execute()
1177+
.Should().Pass()
1178+
// no additional build messages
1179+
.And.HaveStdOut("Hello from Program")
1180+
.And.NotHaveStdOutContaining("Program.dll")
1181+
.And.NotHaveStdErr();
1182+
}
1183+
1184+
[Fact] // https://github.com/dotnet/sdk/issues/50227
1185+
public void Verbosity_Build()
1186+
{
1187+
var testInstance = _testAssetsManager.CreateTestDirectory();
1188+
var programFile = Path.Join(testInstance.Path, "Program.cs");
1189+
File.WriteAllText(programFile, s_program);
1190+
1191+
new DotnetCommand(Log, "build", "Program.cs")
1192+
.WithWorkingDirectory(testInstance.Path)
1193+
.Execute()
1194+
.Should().Pass()
1195+
// should print path to the built DLL
1196+
.And.HaveStdOutContaining("Program.dll");
1197+
}
1198+
1199+
[Fact]
1200+
public void Verbosity_CompilationDiagnostics()
1201+
{
1202+
var testInstance = _testAssetsManager.CreateTestDirectory();
1203+
1204+
File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """
1205+
string x = null;
1206+
Console.WriteLine("ran" + x);
1207+
""");
1208+
1209+
new DotnetCommand(Log, "run", "Program.cs")
1210+
.WithWorkingDirectory(testInstance.Path)
1211+
.Execute()
1212+
.Should().Pass()
1213+
// warning CS8600: Converting null literal or possible null value to non-nullable type.
1214+
.And.HaveStdOutContaining("warning CS8600")
1215+
.And.HaveStdOutContaining("ran");
1216+
1217+
File.WriteAllText(Path.Join(testInstance.Path, "Program.cs"), """
1218+
Console.Write
1219+
""");
1220+
1221+
new DotnetCommand(Log, "run", "Program.cs")
1222+
.WithWorkingDirectory(testInstance.Path)
1223+
.Execute()
1224+
.Should().Fail()
1225+
// error CS1002: ; expected
1226+
.And.HaveStdOutContaining("error CS1002")
1227+
.And.HaveStdErrContaining(CliCommandStrings.RunCommandException);
1228+
}
1229+
11671230
/// <summary>
11681231
/// Default projects include embedded resources by default.
11691232
/// </summary>

0 commit comments

Comments
 (0)