在完整的.NET中,我们可以将EnvironmentVariableTarget
枚举传递给Environment.SetEnvironmentVariable
来电:
public enum EnvironmentVariableTarget
{
Process,
User,
Machine
}
使用User
或Machine
选项,我们可以设置用户范围或系统范围的变量,该变量在应用程序结束后保持不变:
Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.User);
...
> echo %foo%
bar
但是,Environment.SetEnvironmentVariable
不接受.NET Core中的变量目标。甚至这种方法的XML注释也说:
创建,修改或删除存储在当前流程中的环境变量。
如何在面向.NET Core的应用程序中设置用户范围或计算机范围的环境变量?只有跨平台解决方案才有意义(至少Windows和Linux)。
答案 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);