为什么 .net 在 运行 时通过 visual studio 代码加载 prod json 值?

Why does .net load the prod json values when running via visual studio code?

我创建了一个新的 .net web api 项目。

有 2 个 json 设置文件 - 1 个用于开发,另一个用于生产。

我将 key1 添加到 dev json 文件并将 key2 添加到 prod json 文件。

在我的 program.cs 中,我有以下代码:

builder.Configuration["key1"]
builder.Configuration["key2"]

即使我通过 visual studio 代码拥有 运行 项目,为什么它从 prod json 文件加载值?

环境不受您运行 应用程序的影响。它是通过检查 DOTNET_ENVIRONMENTASPNETCORE_ENVIRONMENT 环境变量来确定的。您可以配置 IDE 或编辑器以在启动项目时将这些环境变量设置为特定值,但这与打开控制台并设置环境变量没有什么不同。

这在 Used multiple environments in ASP.NET Core 中有所描述,但实际上适用于任何使用通用主机的 .NET Core 应用程序。

不同的 IDE 在启动应用程序时使用不同的方式来指定调试配置文件和设置环境变量。

  • 在Visual Studio中,您可以在“调试属性”页面中指定环境变量。这些值存储在 Properties\launchSettings.json 文件中。 Development and launchsettings.json.

    中对此进行了描述
  • JetBrains Rider 同时支持 launchSettings.json 和它自己的配置文件。

  • Visual Studio 另一方面,代码将 launch configurations 存储在 .vscode 文件夹中的 launch.json 文件中。它还可以通过在 launch.json.

    中设置属性来使用 launchSettings.json

Launch.json attributes 中描述了可用的属性。 env 属性允许指定环境变量。

文章 Configuring launch.json for C# debugging 描述了如何使用该文件启动浏览器、导航到特定 URL、设置环境变量等:

"env": {
    "DOTNET_ENVIRONMENT":"Development"
}

同一文档通过设置 launchSettingsProfile 属性显示 how to use launchSettings.json in VS Code

如果您在 launchSettings.json 中有 Development 个人资料:

{
  "profiles": {
    "Development": {
      "commandName": "Project",
      "environmentVariables": {
        "DONTET_ENVIRONMENT":"Development"
      }
    }
  }
}

您可以通过在 launch.json 中指定 launchSettingsProfile 来在 VS Code 中使用它:

"launchSettingsProfile": "Development"