| File: Commands\Run\CommonRunHelpers.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// 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.Utils; namespace Microsoft.DotNet.Cli.Commands.Run; internal static class CommonRunHelpers { /// <summary> /// Creates a dictionary of global properties for MSBuild from the command line arguments. /// This includes properties that are passed via the command line, as well as some /// properties that are set to improve performance at the cost of correctness - /// specifically Compile, None, and EmbeddedResource items are not globbed by default. /// See <see cref="Commands.Restore.RestoringCommand.RestoreOptimizationProperties"/> for more details. /// </summary> public static Dictionary<string, string> GetGlobalPropertiesFromArgs(MSBuildArgs msbuildArgs) { var globalProperties = msbuildArgs.GlobalProperties?.ToDictionary() ?? new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); globalProperties[Constants.MSBuildExtensionsPath] = AppContext.BaseDirectory; return globalProperties; } /// <summary> /// Applies adjustments to MSBuild arguments to better suit LLM/agentic environments, if such an environment is detected. /// </summary> public static MSBuildArgs AdjustMSBuildForLLMs(MSBuildArgs msbuildArgs) { if (new Telemetry.LLMEnvironmentDetectorForTelemetry().IsLLMEnvironment()) { // disable the live-update display of the TerminalLogger, which wastes tokens return msbuildArgs.CloneWithAdditionalArgs(Constants.TerminalLogger_DisableNodeDisplay); } else { return msbuildArgs; } } #if !CLI_AOT /// <summary> /// Creates a TerminalLogger or ConsoleLogger based on the provided MSBuild arguments. /// If the environment is detected to be an LLM environment, the logger is adjusted to /// better suit that environment. /// </summary> /// <remarks> /// This uses the in-process MSBuild logging APIs (<c>Microsoft.Build.*</c>) and so is excluded /// from the AOT build, which only ever forwards MSBuild out-of-process. /// </remarks> public static Microsoft.Build.Framework.ILogger GetConsoleLogger(MSBuildArgs args) => Microsoft.Build.Logging.TerminalLogger.CreateTerminalOrConsoleLogger([.. AdjustMSBuildForLLMs(args).OtherMSBuildArgs]); #endif }