C# appsettings.json与appsettings.{Environment}.json在.NET核心应用程序中的比较

C# appsettings.json与appsettings.{Environment}.json在.NET核心应用程序中的比较,c#,docker,asp.net-core,iis,.net-core,C#,Docker,Asp.net Core,Iis,.net Core,我是.NET Core的新手,从我在web上的搜索来看,appsettings.Development.json用于开发应用程序时的开发配置,而appsettings.Production.json用于生产服务器中发布的应用程序。以下是我在这两个方面设置的示例部分: appsettings.Development.json: "ConnectionStrings": { "DefaultConnection": "Server=localho

我是.NET Core的新手,从我在web上的搜索来看,
appsettings.Development.json
用于开发应用程序时的开发配置,而
appsettings.Production.json
用于生产服务器中发布的应用程序。以下是我在这两个方面设置的示例部分:

appsettings.Development.json:

"ConnectionStrings": {
  "DefaultConnection": "Server=localhost,21433;Initial Catalog=DemoDbDev;User Id=demouser;Password=******;" 
},
"ConnectionStrings": {
  "DefaultConnection": "Server=demo-prod-db,1433;Initial Catalog=DemoDbProd;User Id=demouser;Password=******;" 
},

appsettings.Production.json:

"ConnectionStrings": {
  "DefaultConnection": "Server=localhost,21433;Initial Catalog=DemoDbDev;User Id=demouser;Password=******;" 
},
"ConnectionStrings": {
  "DefaultConnection": "Server=demo-prod-db,1433;Initial Catalog=DemoDbProd;User Id=demouser;Password=******;" 
},
以下是我需要澄清的一些问题:


1)appsettings.json的用途是什么?它是用于默认配置还是不在
appsettings.Development.json
appsettings.Production.json
中的其他设置

2)是否在
Properties
文件夹中的
launchSettings.json
上设置了环境?如果是,我们是否应该在将应用发布到生产服务器之前手动更新此文件

3)在开发和发布我的应用程序(到IIS服务器或Docker容器)时,关于开发和生产环境的配置,我应该记住什么

任何帮助都将不胜感激。

1。关于环境

TLDR;您可以从环境变量或启动设置文件获取环境。后者仅用于当地发展

要确定运行时环境,ASP.NET Core将读取以下环境变量:

网络环境 调用ConfigureWebHostDefaults时的ASPNETCORE\u环境。默认ASP.NET核心web应用程序模板调用ConfigureWebHostDefaults。ASPNETCORE_环境值覆盖DOTNET_环境。 IHostEnvironment.EnvironmentName可以设置为任何值,但框架提供以下值:

开发:launchSettings.json文件将ASPNETCORE_环境设置为在本地计算机上开发

登台

生产:如果尚未设置DOTNET_环境和ASPNETCORE_环境,则为默认值

2.设置已填充

TLDR;如前所述,您可以在纯json中设置默认值和不变值,并在json环境中设置覆盖

默认JSONConfiguration提供程序按以下顺序加载配置:

  • appsettings.json
  • appsettings.Environment.json:例如,appsettings.Production.json和appsettings.Development.json文件
  • 根据IHostingEnvironment.EnvironmentName加载文件的环境版本

    appsettings.Environment.json值覆盖appsettings.json中的键

    3.牢记 不应在配置文件中存储生产环境的机密和密码


    考虑使用诸如azure上的密钥库或数据库加密配置之类的服务,或构建将覆盖特定于环境的机密的服务器变量。

    1。没有,你应该把它定义为2。三,。您可以使用ntlm身份验证。对于sql server。根据环境和db风格的不同,解决方案可能会有所不同。关于第一个问题的示例如下:DOTNET_环境将取代Aspnet版本,并且将在web和非web(控制台)场景中工作。虽然asp版本仅适用于web应用程序,但我建议在任何地方使用其他版本进行标准化使用azure keyvault、azure应用程序配置或其他一些机密/配置管理系统。请注意,dotnet有几个内置配置提供程序(例如json文件),并且有许多通过nuget软件包(azure keyvault、hashicorp vault、平面文件、ini、从API检索的自定义设置等)提供的插件提供程序。配置系统将按照添加提供程序的顺序对这些进行分层(最后一次覆盖优先)。因此,您可以在app.settings中使用一些基本配置,在perenvjson中使用env覆盖,然后从其他地方获取机密,所有这些都合并到一个配置对象中