如何在.NET Core中设置全局环境变量(用户范围或系统范围)

时间:2017-05-29 13:25:16

标签: c# environment-variables cross-platform .net-core

在完整的.NET中,我们可以将EnvironmentVariableTarget枚举传递给Environment.SetEnvironmentVariable来电:

public enum EnvironmentVariableTarget
{
    Process,
    User,
    Machine
}

使用UserMachine选项,我们可以设置用户范围或系统范围的变量,该变量在应用程序结束后保持不变:

Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.User);

...

> echo %foo%
bar

但是,Environment.SetEnvironmentVariable不接受.NET Core中的变量目标。甚至这种方法的XML注释也说:

  

创建,修改或删除存储在当前流程中的环境变量。

如何在面向.NET Core的应用程序中设置用户范围或计算机范围的环境变量?只有跨平台解决方案才有意义(至少Windows和Linux)。

1 个答案:

答案 0 :(得分:2)

对于.NET Core 1.x,它只允许在User上下文中设置环境变量。使用新的.NET Core 2.0预览版,它允许使用EnvironmentVariableTarget。但是,根据this GitHub问题设置用户或机器环境变量不适用于非Windows平台。

  

在实现中未映射在非Windows平台上使用其他范围(例如,用户,计算机)。

GitHub问题中还描述了使用变通方法来检查它是否是一个非Windows平台来设置环境变量。例如:

// omitting check for presence of bash binary
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) System.Diagnostics.Process.Start("/bin/bash", "-c export " + variable + "=" + value);