Visual Studio 2022 的 System.Environment.GetEnvironmentVariable 方法无法工作

13

我知道这还处于预览阶段,但我想确保我没有做错任何事情,因为我以前也做过类似的事情。 我已经在属性中设置了环境变量: enter image description here

现在我正在尝试设置我的测试:

[TestInitialize]
public void Initialize()
{
    var test = Environment.GetEnvironmentVariables();
    // test enumerates all the Env variables, don't see it there
    var connectionString = Environment.GetEnvironmentVariable("CONNECTION_STRING");
    if (string.IsNullOrWhiteSpace(connectionString)) // so this is obviously null
        throw new ArgumentNullException("CONNECTION_STRING");
    _ConnectionString = connectionString;
}

通过我的评论,您可以看到环境变量未被找到或加载。

我错过了什么?谢谢。


你是在调试还是运行测试? - Hans Passant
调试测试 - naspinski
你在哪个项目上设置了变量?测试项目还是Web应用程序? - mason
2个回答

14

我假设你正在使用Visual Studio 2022,因为你正在使用.NET 6和最小主机(即没有Startup.cs)?

通常不建议在环境变量中存储信息,因为这些信息经常会被上传到GitHub,并可能被用来攻击你。

对于本地开发的秘密信息,最好使用secrets.json文件进行存储。关于如何实现此目标,可以参考Safe Storage of Secrets,以及有关访问配置文件的详细信息,请参见Accessing Configuration File Information

以下步骤可能有助于打破TL;DR众所周知(这就是我在我的使用.NET 6编写的Blazor应用程序中所做的):

  1. 在Visual Studio 2022中,右键单击相关项目,然后选择“管理用户密码”。 这将创建一个本地secrets.json文件并打开它。 它还将为您的项目标题添加GUID UserSecretsId
  2. 像设置环境变量一样,在此文件中创建您的秘密JSON键值对。
  3. 进入项目中的“连接服务”并配置Secrets.json服务。
  4. 将“用户密码”添加到您的配置文件中; 这将取决于正在发生这种情况的确切位置。
  5. IConfiguration注入到您的控制器中,并将其保存到字段中。
  6. 使用以下方法调用所需的数据:
{yourConfigurationFieldName}.GetValue<string>({yourJsonKey})

这很棒,但我没有使用控制器,这只是一个测试项目 - 我会研究一下,但如果你已经知道,那就太好了 - 谢谢! - naspinski
这在测试中很容易设置:https://patrickhuber.github.io/2017/07/26/avoid-secrets-in-dot-net-core-tests.html - naspinski
6
这并未回答原始问题。 - Kuranes
1
@Kuranes 我同意。问题在于如何获取环境变量。根据此MS文档 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0#set-the-ports-via-the-aspnetcore_urls-environment-variable - Ronald Abellano

9
在Visual Studio 2022中,您可以通过修改launchSettings.json文件的以下部分来访问开发环境中的环境变量。
"environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "VaultUri": "https://xxx.vault.azure.net/", "AZURE_USERNAME": "xxx@user.com" }
其中,VaultUri是您的环境变量名称。

很遗憾,这在测试项目中不起作用。 - undefined

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