在 MacOS 上,无法在 C# 中查看系统环境变量,.Net Core 3.1 / .Net 5.0。(Visual Studio)

5

我正在尝试在代码中使用环境变量。 首先,我已经在~/.zprofile中设置了它们,我可以通过shell中的getenv和Java、NodeJS、Python中的相关方法接收它们。

然而,这在C#中不起作用。


我尝试过:

foreach (String name in Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process).Keys)
{
    Console.Write(name + "="); 
    Console.WriteLine(Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process)[name]);
}

这会打印出几个环境变量,但不是我需要的那些。


当我尝试:

foreach (String name in Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User).Keys)
{
    // Never get here                                                                                             
}

foreach (String name in Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine).Keys)
{
    // Never get here                                                                                                }
}

这将不会打印任何内容。


我该如何找到我的环境变量?谢谢。

编辑:通过GUI重新启动Visual Studio没有帮助。环境变量并没有更新。


1
EnvironmentVariableTarget.MachineEnvironmentVariableTarget.User的文档明确指出:“此值仅应在运行在Windows系统上的.NET实现中使用。” - Jon Skeet
3个回答

3

我曾关闭 Visual Studio 并从终端打开它

open /Applications/Visual\ Studio.app 

我在这里看到了所有的环境变量:

Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process)

它与以下代码等效:

Environment.GetEnvironmentVariables()

所以问题似乎是特定于Mac上的Visual Studio,需要一个特定的解决方案。


我认为,进程的环境变量在进程启动后不会改变。子进程也会继承它们。这就是为什么重新启动 VS 有所帮助的原因。 - Steeeve
通过 GUI 重启没有帮助,只有从 shell 启动 Visual Studio 才能解决问题。 - Andrei
我不知道如何在Mac上重新启动VS GUI。它是否完全停止并启动一个新进程? - Steeeve
“将它们设置在〜/ .zprofile中”是问题的实际原因,因为您只为zsh设置了环境变量。这就是为什么终端中的zsh和所有子进程(从那里启动VS for Mac)可以看到这些变量的原因。但是,当您从Launchpad等位置打开VS for Mac时,不涉及zsh,因此那些仅限于zsh的变量永远不会出现。” - Lex Li
Lex Li。除了在Unix系统的.zprofile/.bash profile中设置环境变量之外,我还可以在哪里设置? - Andrei

0

修改代码

String API_Key = System.Environment.GetEnvironmentVariable("API_KEY", EnvironmentVariableTarget.Machine)

String API_Key = System.Environment.GetEnvironmentVariable("API_KEY", EnvironmentVariableTarget.Process)

在 MacOS 上对我有效,因为EnvironmentVariableTarget.Machine只应该在运行于 Windows 系统上的.NET 实现中使用。


-2
从Visual Studio 2022 for Mac的版本17.5.1开始,您可以进入项目属性>>运行>>配置>>默认>>环境变量部分,您可以在模态对话框中单击添加变量和值,那里VS可以看到。这样,您就不需要从终端启动它。 现在对于我自己来说,我的路径是正确的,但我的单元测试无法启动NuGet Chrome驱动程序。我需要找出为什么chromedriver.exe被复制到输出文件夹(bin/Debug)而不是Unix/mac可执行文件。Geckodriver却工作正常。

这似乎与所提出的问题无关,该问题涉及用户特定和机器特定的环境变量,除了在Windows上(如文档中所述)不支持其他操作系统。 - Jon Skeet
编辑仍然没有使其与这个问题相关... - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接