【问题标题】:How do environment variables get picked up with .NET Core? [duplicate].NET Core 如何获取环境变量? [复制]
【发布时间】:2018-08-20 16:00:28
【问题描述】:

我知道要使用 .NET Core 获取环境变量,理论上要使用的库是 System.Environment,方法是 GetEnvironmentVariable("environmentVariableKeyHere")。但是,在 Linux (Ubuntu 18.04) 上,这并没有选择我基于用户的环境变量。我设置了变量 export THEVARIABLE="THEVALUE" 并且 .NET Core lib 库和方法不会选择它。我什至使用了 GetEnvironmentVariables() 方法并查看了它确实提取的整个列表。该列表中没有任何用户环境变量。

我通过 bash 和 boom 在终端中运行了一个简单的 echo $THEVARIABLE,变量就在那里。该值按预期返回,但仍然没有通过 .NET 程序返回。说到这里,repo 就在这里 > https://github.com/Adron/InteroperabilityBlackBox 如果你想看看的话。它使用 Rider + .NET Core 2.1 构建,包括一个库(在运行和尝试获取用户环境变量时会出现问题吗?)、控制台应用程序和测试库。

【问题讨论】:

    标签: c# linux environment-variables ubuntu-18.04


    【解决方案1】:

    根据docs

    在 MacOS 和 Linux 上,GetEnvironmentVariables 方法检索从启动 dotnet 进程的父进程或在 dotnet 进程本身范围内定义的所有环境变量的名称和值.一旦dotnet 进程结束,后面的这些环境变量将不复存在。

    .NET Core 不支持按机器或按用户的环境变量。

    【讨论】:

    • 不确定我是否理解正确。这是否意味着我们不能在 Unix 机器上指定全局环境变量?例如,如果我在一台 Linux 机器上开发所有应用程序 - 我可以在机器上设置一个 ASPNETCORE_ENVIRONMENT 变量,还是我的每个应用程序都必须指定这个(例如,在 vscode 的 launch.json 中)?
    • 嘿@devklick 不,绝对可以设置全局环境变量或特定于用户。它与 Windows 机器上的普通 .NET 环境不同,这让我在错误的地方寻找这个问题。
    【解决方案2】:

    似乎事情是在与 Jetbrains Rider 的用户会话之外执行的,我用于此代码和此项目的初始开发。从那以后,我想出了两个解决方案。第一,环境变量可以添加到 Jetbrains Rider 中的大多数项目中,以便它们在该特定会话中执行并可用。如果使用 Visual Studio Code 或仅从 Bash 终端执行,则用户会话的值当然可用。

    【讨论】:

      猜你喜欢
      • 2016-02-17
      • 1970-01-01
      • 2011-06-21
      • 2020-09-04
      • 1970-01-01
      • 2019-01-21
      • 2020-01-02
      • 1970-01-01
      • 2018-02-12
      相关资源
      最近更新 更多