Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 48 additions & 1 deletion src/Build/BackEnd/BuildManager/BuildManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,16 @@ public static BuildManager DefaultBuildManager
/// </summary>
LegacyThreadingData IBuildComponentHost.LegacyThreadingData => _legacyThreadingData;

/// <summary>
/// Enumeration describing the severity of a deferred build message.
/// </summary>
public enum DeferredBuildMessageSeverity
{
Message = 1,
Warning,
Error
}

/// <summary>
/// <see cref="BuildManager.BeginBuild(BuildParameters,IEnumerable{DeferredBuildMessage})"/>
/// </summary>
Expand All @@ -407,18 +417,42 @@ public readonly struct DeferredBuildMessage

public string? FilePath { get; }

public DeferredBuildMessageSeverity MessageSeverity { get; } = DeferredBuildMessageSeverity.Message;

/// <summary>
/// Build event code (e.g., "MSB1070").
/// </summary>
public string? Code { get; }

public DeferredBuildMessage(string text, MessageImportance importance)
{
Importance = importance;
Text = text;
FilePath = null;
Code = null;
}

public DeferredBuildMessage(string text, MessageImportance importance, string filePath)
{
Importance = importance;
Text = text;
FilePath = filePath;
Code = null;
}

/// <summary>
/// Creates a deferred warning message.
/// </summary>
/// <param name="text">The warning message text.</param>
/// <param name="code">The build message code (e.g., "MSB1070").</param>
/// <param name="messageSeverity">The severity of the deferred build message.</param>
public DeferredBuildMessage(string text, string code, DeferredBuildMessageSeverity messageSeverity)
{
Importance = MessageImportance.Normal;
Text = text;
FilePath = null;
Code = code;
MessageSeverity = messageSeverity;
}
}

Expand Down Expand Up @@ -3154,7 +3188,20 @@ private static void LogDeferredMessages(ILoggingService loggingService, IEnumera

foreach (var message in deferredBuildMessages)
{
loggingService.LogCommentFromText(BuildEventContext.Invalid, message.Importance, message.Text);
if (message.MessageSeverity is DeferredBuildMessageSeverity.Warning)
{
loggingService.LogWarningFromText(
BuildEventContext.Invalid,
subcategoryResourceName: null,
warningCode: message.Code,
helpKeyword: null,
file: BuildEventFileInfo.Empty,
message: message.Text);
}
else
{
loggingService.LogCommentFromText(BuildEventContext.Invalid, message.Importance, message.Text);
}

// If message includes a file path, include that file
if (message.FilePath is not null)
Expand Down
2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.cs.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.de.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.es.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.fr.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.it.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.ja.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.ko.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.pl.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.pt-BR.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.ru.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.tr.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.zh-Hans.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Build/Resources/xlf/Strings.zh-Hant.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions src/Framework/Traits.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,28 @@ public Traits()
/// </summary>
public const string UseMSBuildServerEnvVarName = "MSBUILDUSESERVER";

/// <summary>
/// Name of environment variable for logging arguments (e.g., -bl, -check).
/// </summary>
public const string MSBuildLoggingArgsEnvVarName = "MSBUILD_LOGGING_ARGS";

/// <summary>
/// Name of environment variable that controls the logging level for diagnostic messages
/// emitted when processing the MSBUILD_LOGGING_ARGS environment variable.
/// Set to "message" to emit as low-importance build messages instead of console warnings.
/// </summary>
public const string MSBuildLoggingArgsLevelEnvVarName = "MSBUILD_LOGGING_ARGS_LEVEL";

/// <summary>
/// Value of the MSBUILD_LOGGING_ARGS environment variable.
/// </summary>
public static string? MSBuildLoggingArgs => Environment.GetEnvironmentVariable(MSBuildLoggingArgsEnvVarName);

/// <summary>
/// Gets if the logging level for MSBUILD_LOGGING_ARGS diagnostic is message.
/// </summary>
public readonly bool EmitLogsAsMessage = string.Equals(Environment.GetEnvironmentVariable(MSBuildLoggingArgsLevelEnvVarName), "message", StringComparison.OrdinalIgnoreCase);

public readonly bool DebugEngine = !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("MSBuildDebugEngine"));
public readonly bool DebugScheduler;
public readonly bool DebugNodeCommunication;
Expand Down
Loading