.NET Core Web API:自动加载不正确的appsettings.json文件

问题描述 投票:0回答:2

我们有.NET Core 2.2 Web API项目,我们使用以下代码加载基于appsettings.jsonDEBUG构建标志的相应RELEASE文件。

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseConfiguration(new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
#if DEBUG
        .AddJsonFile("appsettings.Development.json")
#endif
#if RELEASE
        .AddJsonFile("appsettings.Production.json")
#endif
        .AddJsonFile("appsettings.json")
        .Build()
    )
    .UseStartup<Startup>()
    .Build();

我们创建了一个外部项目,它在Topshelf Windows服务项目中调用相同的方法。

奇怪的是,无论我们是在调试还是发布项目,appsettings.Production.json文件总是被加载。

c# asp.net-core .net-core appsettings
2个回答
1
投票

执行以下操作,然后在托管系统OS中设置环境变量:

var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

public static IWebHost BuildWebHost(string[] args) =>
  WebHost
    .UseConfiguration(new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())

    .AddJsonFile($"appsettings.json", true, true)
    .AddJsonFile($"appsettings.{environmentName}.json", true, true)

    .Build()
  )
  .UseStartup<Startup>()
  .Build();

编辑:删除CreateDefaultBuilder()

看看https://andrewlock.net/exploring-program-and-startup-in-asp-net-core-2-preview1-2/#setting-up-app-configuration-in-configureappconfiguration


0
投票

看看CreateDefaultBuilder()的文档

备注

以下默认值应用于返回的WebHostBuilder:

  • 使用Kestrel作为Web服务器并使用应用程序的配置提供程序对其进行配置,
  • 将ContentRootPath设置为GetCurrentDirectory()的结果,
  • 从qazxsw poi和qazxsw poi加载配置,
  • 使用条目程序集环境名称为“开发”时从用户秘密加载IConfiguration,
  • 从环境变量加载配置,
  • 从提供的命令行参数加载IConfiguration,
  • 配置ILoggerFactory以记录控制台和调试输出,
  • 并启用IIS集成。

该列表中的数字3始终将查看appsettings.json环境变量的值(如果未指定,则默认为“Production”),并尝试加载具有该名称的appsettings文件。

而不是更改代码或使用预处理程序指令,只需更改该环境变量的值(例如,“开发”)。

这就是你的appsettings.[EnvironmentName].json文件的工作原理:

ASPNETCORE_ENVIRONMENT

不要与launchSettings.json战斗 - 您发布的代码执行了该方法已经为您执行的许多步骤(加载文件,设置基本路径等)。

这是ASP.Net Core项目给你的默认Program.cs,它对你很有用:

"profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
  ...

另外,只需注意,您将在主appsettings.json文件之前加载特定于环境的文件。通常你会想要以其他顺序这样做。

© www.soinside.com 2019 - 2024. All rights reserved.