代码之家  ›  专栏  ›  技术社区  ›  André Haupt saber safavi

.NET Core Web API:自动加载错误的应用程序设置。json文件

  •  0
  • André Haupt saber safavi  · 技术社区  · 7 年前

    我们有。NET Core 2.2 Web API项目,我们使用以下代码加载适当的 appsettings.json 基于 DEBUG 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 无论我们是调试还是发布项目,文件总是被加载的。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Community Mohan Dere    6 年前

    请查看以下文档: CreateDefaultBuilder()

    评论

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

    • 将Kestrel用作web服务器,并使用应用程序的配置提供程序对其进行配置,

    • 将ContentRootPath设置为GetCurrentDirectory()的结果,

    • 从中加载I配置 appsettings.json appsettings.[EnvironmentName].json ,

    • 当EnvironmentName为“Development”时,使用条目程序集从用户机密加载IConfiguration,

    • 从环境变量加载IConfiguration,

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

    • 将iLogger工厂配置为登录到控制台并调试输出,

    • 并启用IIS集成。

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

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

    这就是你的 launchSettings.json 文件工作:

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

    别跟我打架 CreateDefaultBuilder() -您发布的代码执行了很多步骤,而该方法已经为您完成了这些步骤(加载文件、设置基本路径等)。

    这是默认程序。用ASP给你发cs。Net核心项目,它会很好地为您服务:

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }
    
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
    

    另外,请注意,您正在加载特定于环境的文件 之前 主要应用程序设置。json文件。通常你会想按另一个顺序做。

        2
  •  1
  •   serious    7 年前

    执行以下操作,然后在宿主系统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