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

时间:2019-03-12 20:24:32

标签: c# asp.net-core .net-core appsettings

我们有.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 Service项目中调用相同的方法。

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

2 个答案:

答案 0 :(得分:1)

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

mode | findstr /RC:"\C\O\M[0-9*]."

编辑:删除了CreateDefaultBuilder()

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

答案 1 :(得分:0)

看看CreateDefaultBuilder()

的文档
  

备注

     

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

     
      
  • 将Kestrel用作Web服务器,并使用应用程序的配置提供程序对其进行配置,
  •   
  • 将ContentRootPath设置为GetCurrentDirectory()的结果

  •   
  • appsettings.jsonappsettings.[EnvironmentName].json

  • 加载IConfiguration   
  • 使用入口程序集

  • 在EnvironmentName为'Development'时从用户密钥加载IConfiguration。   
  • 从环境变量

  • 加载IConfiguration   
  • 从提供的命令行参数

  • 中加载IConfiguration   
  • 配置ILoggerFactory以登录到控制台并调试输出,

  •   
  • 并启用IIS集成。

  •   

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

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

您的launchSettings.json文件的工作方式如下:

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

不要与CreateDefaultBuilder()进行斗争-您发布的代码执行了许多步骤,因此该方法已经为您完成(加载文件,设置基本路径等)。

这是ASP.Net Core项目提供给您的默认Program.cs,它可以为您正常工作:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

另外,仅需注意,您要在主appsettings.json文件之前 加载环境特定的文件。通常,您会希望以其他顺序进行操作。