在完整的.NET中我们可以通过EnvironmentVariableTarget
枚举到Environment.SetEnvironmentVariable
call:
public enum EnvironmentVariableTarget
{
Process,
User,
Machine
}
With User
or Machine
我们可以设置一个用户范围或系统范围的变量,该变量在应用程序结束后仍然有效:
Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.User);
...
> echo %foo%
bar
然而,Environment.SetEnvironmentVariable
不接受.NET Core 中的变量目标。甚至该方法的 XML 注释也说:
创建、修改或删除存储在当前环境中的环境变量process.
如何在面向 .NET Core 的应用程序中设置用户范围或计算机范围的环境变量?只有跨平台解决方案才有意义(至少 Windows 和 Linux)。
对于 .NET Core 1.x,它只允许在用户上下文中设置环境变量。通过新的 .NET Core 2.0 预览版,它允许使用EnvironmentVariableTarget
。然而,根据this https://github.com/dotnet/corefx/issues/20147GitHub 问题设置用户或计算机环境变量在非 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)