繁体   English   中英

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

[英]How to set a global environment variable in .NET Core (user-wide or system-wide)

在完整的 .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)。

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

在非 Windows 平台上使用其他范围(例如用户、机器)在实现中没有被映射。

GitHub issue中还描述了使用一种解决方法来检查是否是非windows平台设置环境变量。 例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM