| File: MultiProcessTaskEnvironmentDriver.cs | Web Access |
| Project: src\msbuild\src\Framework\Microsoft.Build.Framework.csproj (Microsoft.Build.Framework) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Build.Internal; namespace Microsoft.Build.Framework { /// <summary> /// Default implementation of <see cref="ITaskEnvironmentDriver"/> that directly interacts with the file system /// and environment variables. Used in multi-process mode of execution. /// </summary> /// <remarks> /// Implemented as a singleton since it has no instance state. /// </remarks> internal sealed class MultiProcessTaskEnvironmentDriver : ITaskEnvironmentDriver { /// <summary> /// The singleton instance. /// </summary> private static readonly MultiProcessTaskEnvironmentDriver s_instance = new MultiProcessTaskEnvironmentDriver(); /// <summary> /// Gets the singleton instance of <see cref="MultiProcessTaskEnvironmentDriver"/>. /// </summary> public static MultiProcessTaskEnvironmentDriver Instance => s_instance; private MultiProcessTaskEnvironmentDriver() { } /// <inheritdoc/> public AbsolutePath ProjectDirectory { get => new AbsolutePath(Environment.CurrentDirectory, ignoreRootedCheck: true); set => NativeMethods.SetCurrentDirectory(value.Value); } /// <inheritdoc/> public AbsolutePath GetAbsolutePath(string path) { return new AbsolutePath(path, ProjectDirectory); } /// <inheritdoc/> public string? GetEnvironmentVariable(string name) { return Environment.GetEnvironmentVariable(name); } /// <inheritdoc/> public IReadOnlyDictionary<string, string> GetEnvironmentVariables() { return CommunicationsUtilities.GetEnvironmentVariables(); } /// <inheritdoc/> public void SetEnvironmentVariable(string name, string? value) { CommunicationsUtilities.SetEnvironmentVariable(name, value); } /// <inheritdoc/> public void SetEnvironment(IDictionary<string, string> newEnvironment) { CommunicationsUtilities.SetEnvironment(newEnvironment); } /// <inheritdoc/> public ProcessStartInfo GetProcessStartInfo() { return new ProcessStartInfo(); } /// <inheritdoc/> public void Dispose() { // Singleton instance, no cleanup needed. } } }