代码之家  ›  专栏  ›  技术社区  ›  meds

自动设置appsettings。用于asp中开发和发布环境的json。net core?

  •  170
  • meds  · 技术社区  · 7 年前

    appsettings.json

    有没有办法拥有多个 文件(如 appsettings.live.json

    11 回复  |  直到 6 年前
        1
  •  156
  •   KyleMit Steven Vachon    4 年前

    的更新。NET Core 3.0+

    1. CreateDefaultBuilder 它将自动生成配置对象并将其传递给您的启动类:

      WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
      
      public class Startup
      {
          public Startup(IConfiguration configuration) // automatically injected
          {
              Configuration = configuration;
          }
          public IConfiguration Configuration { get; }
          /* ... */
      }
      
    2. 自动包括适当的 appsettings. Environment .json 文件,因此为每个环境添加一个单独的appsettings文件:

      appsettings.env.json

    3. 然后设置 ASPNETCORE_ENVIRONMENT 运行/调试时

    如何设置环境变量

    根据您的IDE,dotnet项目通常会在几个地方查找环境变量:

    • Visual Studio 转到项目(>);属性>调试(>);环境变量:

      Visual Studio - Environment Variables

    • 对于 .vscode/launch.json &燃气轮机; env

      Visual Studio Code > Launch Environment

    • 使用 编辑 Properties/launchSettings.json &燃气轮机; environmentVariables

      Launch Settings

      也可以从Visual Studio中的工具栏中选择

      Launch Settings Dropdown

    • ,使用适当的语法 setting environment variables per your OS

      笔记 :当应用启动时 dotnet run , launchSettings.json 如果可用,则读取,以及 启动设置中的设置。json覆盖环境变量。

    Host.CreateDefaultBuilder 工作

    .添加了NET Core 3.0 Host.CreateDefaultBuilder 在平台扩展下,将提供默认初始化 IConfiguration 它按以下顺序为应用程序提供默认配置:

    1. appsettings.json 使用 JSON configuration provider .
    2. 环境 .json 使用 . 例如:
      • appsettings. Production .json
      • appsettings. Development .json
    3. App secrets
    4. 使用 Environment Variables configuration provider .
    5. 使用 Command-line configuration provider .

        2
  •  143
  •   KyleMit Steven Vachon    4 年前

    我添加了工作环境的截图,因为这花费了我几个小时的研发时间;D

    1. 首先,为您的 launch.json

      看到下面的截图,我已经添加了 Development 作为我的环境。

      Declaration of the environment variable in launch.json

    2. 然后,在项目中创建一个新的 appsettings.{environment}.json 包含环境名称的文件。

      • appsettings.Development.Json
      • appSetting.json


      Project view of appsettings JSON files

    3. 最后,将其配置为 StartUp

      public Startup(IHostingEnvironment env)
      {
          var builder = new ConfigurationBuilder()
              .SetBasePath(env.ContentRootPath)
              .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
              .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
              .AddEnvironmentVariables();
      
          Configuration = builder.Build();
      }
      
    4. 最后,您可以像这样从命令行运行它:

      dotnet run --environment "Development"
      

      哪里 "Development"

        3
  •  56
  •   KyleMit Steven Vachon    4 年前

    1. 右键单击您的项目>属性>调试(>);环境变量

      environment variables

    2. ASP。NET Core将使用适当的应用程序设置。json文件:

      example of appsettings files in solution explorer

    3. public Startup(IHostingEnvironment env)
      {
          var builder = new ConfigurationBuilder()
              .SetBasePath(env.ContentRootPath)
              .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
              .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
              .AddEnvironmentVariables();
      
          Configuration = builder.Build();
      }
      

    笔记 @Dmitry's answer ,您可能会遇到问题,例如

        4
  •  40
  •   Onkel Toob    7 年前

    您可以使用环境变量和 ConfigurationBuilder 您所在的班级 Startup 构造函数如下:

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
        this.configuration = builder.Build();
    }
    

    然后创建一个 appsettings.xxx.json appsettings.json 文件,并且只将特定于环境的内容放入这些新文件中。

    现在只需要一个名为 ASPNETCORE_ENVIRONMENT

    更新: 应用程序设置。xxx。json 生成配置 . 我提出的解决方案无法实现这一点,我不知道是否有办法做到这一点。然而,“环境变量”方法很有效,也可能是您方法的一个很好的替代方法。

        5
  •  35
  •   Dmitry    6 年前

    您可以使用条件编译:

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    #if SOME_BUILD_FLAG_A
        .AddJsonFile($"appsettings.flag_a.json", optional: true)
    #else
        .AddJsonFile($"appsettings.no_flag_a.json", optional: true)
    #endif
        .AddEnvironmentVariables();
        this.configuration = builder.Build();
    }
    
        6
  •  32
  •   umutesen    6 年前

    只是的更新。NET core 2.0用户,您可以在调用后指定应用程序配置 CreateDefaultBuilder :

    public class Program
    {
       public static void Main(string[] args)
       {
          BuildWebHost(args).Run();
       }
    
       public static IWebHost BuildWebHost(string[] args) =>
          WebHost.CreateDefaultBuilder(args)
                 .ConfigureAppConfiguration(ConfigConfiguration)
                 .UseStartup<Startup>()
                 .Build();
    
       static void ConfigConfiguration(WebHostBuilderContext ctx, IConfigurationBuilder config)
       {
                config.SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("config.json", optional: false, reloadOnChange: true)
                    .AddJsonFile($"config.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
    
       }
     }
    
        7
  •  19
  •   KyleMit Steven Vachon    4 年前
    1. appSettings. $(Configuration) .json 文件如下:

      • appSettings.staging.json
      • appSettings.production.json
    2. appSettings.json :

      copy appSettings.$(Configuration).json appSettings.json
      
    3. 在配置生成器中:

      var builder = new ConfigurationBuilder()
                  .SetBasePath(env.ContentRootPath)
                  .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                  .AddEnvironmentVariables();
      
      Configuration = builder.Build();
      
        8
  •  16
  •   Nick Cordova    4 年前

    这是我在使用没有网页的控制台应用程序时适用的版本:

    var builder = new ConfigurationBuilder()
                 .SetBasePath(Directory.GetCurrentDirectory())
                 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                 .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true);
    
                IConfigurationRoot configuration = builder.Build();
                AppSettings appSettings = new AppSettings();
                configuration.GetSection("AppSettings").Bind(appSettings);
    
        9
  •  8
  •   LuFFy Тип Странный    6 年前

    ASPNETCORE_ENVIRONMENT launchSettings.json 如下所示

      "iisSettings": {
        "windowsAuthentication": false,
        "anonymousAuthentication": true,
        "iisExpress": {
          "applicationUrl": "http://localhost:58446/",
          "sslPort": 0
        }
      },
      "profiles": {
        "IIS Express": {
          "commandName": "IISExpress",
          "environmentVariables": {
            ASPNETCORE_ENVIRONMENT": "$(Configuration)"
          }
        }
      }
    
        10
  •  4
  •   Oks Xen    4 年前

    启动设置。json文件:

    1. 仅在本地开发机器上使用。
    2. 包含配置文件设置。

      • 在launchSettings中设置的环境值。json覆盖在系统环境中设置的值

    使用文件的appSettings。QA。例如json。您可以使用“ASPNETCORE\u环境”。按照以下步骤操作。

    1. 在主机上添加一个新的环境变量,并将其称为“ASPNETCORE\u Environment”。将其值设置为“QA”。
    2. 在步骤1中部署到机器。确认应用程序设置。QA。部署了json。
    3. 加载你的网站。需要appSettings。QA。此处使用的json。
        11
  •  0
  •   TheZero0ne    2 年前

    我有同样的问题,我想改变appsettings。*。基于我在VS中选择的配置的json文件,我刚刚发现您可以将“$(配置)”作为“ASPNETCORE\u环境”的值放在您的启动设置中。json。

    这允许默认HostBuilder自动选择正确的应用程序设置。*。json文件。

    我假设您仍然应该做一些其他的事情,这样您的dev.appsettings就不会像这里所描述的那样被复制到生产服务器 Environment Based appsettings.json Configuration for publishing in .NET 5

    顺便说一句:我测试了VS。我不确定这是否也适用于VS代码。