.NET Core 应用程序中的 appsettings.json 与 appsettings.{Environment}.json

35 c# iis docker .net-core asp.net-core

我是 .NET Core 的新手,据我在网络上的搜索来看,appsettings.Development.json它用于开发应用程序时的开发配置,并appsettings.Production.json用于生产服务器中已发布的应用程序。以下是我在两者上设置的示例部分:

appsettings.Development.json:

"ConnectionStrings": {
  "DefaultConnection": "Server=localhost,21433;Initial Catalog=DemoDbDev;User Id=demouser;Password=******;" 
},
Run Code Online (Sandbox Code Playgroud)

appsettings.Production.json:

"ConnectionStrings": {
  "DefaultConnection": "Server=demo-prod-db,1433;Initial Catalog=DemoDbProd;User Id=demouser;Password=******;" 
},
Run Code Online (Sandbox Code Playgroud)

这里有一些问题我需要澄清:


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

2)环境是否设置在文件夹launchSettings.jsonProperties?如果是这样,我们是否应该在将应用程序发布到生产服务器之前手动更新此文件?

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

任何帮助将非常感激。

Ath*_*ras 23

1.关于环境

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-5.0

太长了;您可以从环境变量或启动设置文件获取环境。后者仅用于本地开发。

为了确定运行时环境,ASP.NET Core 从以下环境变量中读取:

调用ConfigureWebHostDefaults 时的DOTNET_ENVIRONMENT ASPNETCORE_ENVIRONMENT。默认 ASP.NET Core Web 应用模板调用ConfigureWebHostDefaults。ASPNETCORE_ENVIRONMENT 值覆盖 DOTNET_ENVIRONMENT。IHostEnvironment.EnvironmentName 可以设置为任何值,但框架提供了以下值:

Development :launchSettings.json 文件将 ASPNETCORE_ENVIRONMENT 设置为本地计算机上的 Development

分期

Production :如果未设置 DOTNET_ENVIRONMENT 和 ASPNETCORE_ENVIRONMENT,则为默认值。

2.设置填写

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0

太长了;正如您所描述的,您可以在纯 json 中设置默认值和不变的值,并在环境 json 中设置覆盖。

默认的 JsonConfigurationProvider 按以下顺序加载配置:

  1. 应用程序设置.json
  2. appsettings.Environment.json :例如 appsettings.Production.json 和 appsettings.Development.json 文件。

文件的环境版本是根据 IHostingEnvironment.EnvironmentName 加载的。

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

3.记住

生产环境的秘密和密码不应存储在配置文件中。

考虑使用 Azure 上的密钥保管库等服务或数据库加密配置或构建将覆盖环境特定机密的服务器变量。

  • DOTNET_ENVIRONMENT 取代了 Aspnet 版本,并且可以在 Web 和非 Web(控制台)场景中工作。虽然 asp 版本仅适用于 Web 应用程序,但我建议在各处使用其他版本以实现标准化 (2认同)