| File: ForwardingAppImplementation.cs | Web Access |
| Project: src\sdk\src\Cli\Microsoft.DotNet.Cli.Utils\Microsoft.DotNet.Cli.Utils.csproj (Microsoft.DotNet.Cli.Utils) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #if NET using System.Diagnostics; using Microsoft.DotNet.Cli.Utils.Extensions; namespace Microsoft.DotNet.Cli.Utils; /// <summary> /// A class which encapsulates logic needed to forward arguments from the current process to another process /// invoked with the dotnet.exe host. /// </summary> internal class ForwardingAppImplementation { private readonly string _forwardApplicationPath; private readonly IEnumerable<string> _argsToForward; private readonly string? _depsFile; private readonly string? _runtimeConfig; private readonly string? _additionalProbingPath; private Dictionary<string, string?> _environmentVariables; private readonly string[] _allArgs; public ForwardingAppImplementation( string forwardApplicationPath, IEnumerable<string> argsToForward, string? depsFile = null, string? runtimeConfig = null, string? additionalProbingPath = null, Dictionary<string, string?>? environmentVariables = null) { _forwardApplicationPath = forwardApplicationPath; _argsToForward = argsToForward; _depsFile = depsFile; _runtimeConfig = runtimeConfig; _additionalProbingPath = additionalProbingPath; _environmentVariables = environmentVariables ?? []; List<string> allArgs = ["exec"]; if (_depsFile != null) { allArgs.Add("--depsfile"); allArgs.Add(_depsFile); } if (_runtimeConfig != null) { allArgs.Add("--runtimeconfig"); allArgs.Add(_runtimeConfig); } if (_additionalProbingPath != null) { allArgs.Add("--additionalprobingpath"); allArgs.Add(_additionalProbingPath); } allArgs.Add(_forwardApplicationPath); allArgs.AddRange(_argsToForward); _allArgs = allArgs.ToArray(); } public int Execute() { return GetProcessStartInfo().Execute(); } public ProcessStartInfo GetProcessStartInfo() { var processInfo = new ProcessStartInfo { FileName = GetHostExeName(), Arguments = ArgumentEscaper.EscapeAndConcatenateArgArrayForProcessStart(_allArgs), UseShellExecute = false }; foreach (var entry in _environmentVariables) { processInfo.Environment[entry.Key] = entry.Value; } return processInfo; } public ForwardingAppImplementation WithEnvironmentVariable(string name, string? value) { _environmentVariables.Add(name, value); return this; } private string GetHostExeName() => new Muxer().MuxerPath; } #endif