在 .NET Core 控制台应用程序中使用 appsettings.ENV.json

Pau*_*ito 3 c# configuration console-application asp.net-core

我正在构建一个控制台应用程序来为我做一些数据库工作,并希望设置不同的 appsettings 文件来存储每个环境的适当连接字符串。我目前在我的 Main 函数中有这样的工作:

static void Main(string[] args)
{
            IConfiguration config = new ConfigurationBuilder()
              .AddJsonFile("appsettings.json", true, true)
              .Build();

            var dbconnection = config["db"];
}
Run Code Online (Sandbox Code Playgroud)

但是,虽然这是有效的,但它只是一个全局 appsettings 文件。我希望能够为每个环境(例如appsettings.Dev.jsonappsettings.Staging.json等)创建不同的应用程序设置,但是当我将应用程序运行到 addjsonfile 字符串时,我无法弄清楚如何提供配置管理器中的任何选择。

对于一些其他上下文,如果这会影响任何内容,我想稍后在应用程序中将其输入到我的 dbcontext 中。

say*_*mad 5

您可以拥有任意数量的配置文件,只需向配置生成器添加一行代码,如下所示:

IConfiguration config = new ConfigurationBuilder()
          .AddJsonFile("appsettings.json", false)
          .AddJsonFile($"appsettings.{environmentName}.json", true)
          .Build();
Run Code Online (Sandbox Code Playgroud)

您还需要为您的应用程序配置环境名称,如下所示:

在此输入图像描述


Pau*_*ito 5

此处的其他答案很有帮助,但我想详细说明我为遇到此问题的其他人所做的工作。

您要做的第一件事是进入您的启动 settings.json 并添加如下内容:

{
  "profiles": {
    "DataMigration (Local)": {
      "commandName": "Project",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Local"
      }
    },
    "DataMigration (Dev)": {
      "commandName": "Project",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Dev"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这将使您能够访问环境变量,具体取决于您使用哪个配置文件启动项目(请注意,配置管理器在这里没有影响)。

然后您可以创建不同的 appsetting.json 文件。例如,我制作了一个appsettings.Local.json和一个appsettings.Dev.json文件。

appsettings.Local.json

{
  "db": "connectionstringhere"
}
Run Code Online (Sandbox Code Playgroud)

appsettings.Dev.json

{
  "db": "connectionstringhere"
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以访问运行应用程序的环境变量,如下所示:

{
  "profiles": {
    "DataMigration (Local)": {
      "commandName": "Project",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Local"
      }
    },
    "DataMigration (Dev)": {
      "commandName": "Project",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Dev"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

为了更进一步,我没有在这里做,而是通过 db context 灵活地制作,如下所示:

{
  "db": "connectionstringhere"
}
Run Code Online (Sandbox Code Playgroud)

  • 如果未设置 ASPNETCORE_ENVIRONMENT,则支持包含默认的 appsettings.Local.json (2认同)