.NET Core 应用程序中的 appsettings.json 与 appsettings.Environment.json
Posted
技术标签:
【中文标题】.NET Core 应用程序中的 appsettings.json 与 appsettings.Environment.json【英文标题】:appsettings.json vs appsettings.Environment.json in .NET Core apps.NET Core 应用程序中的 appsettings.json 与 appsettings.Environment.json 【发布时间】:2021-05-29 13:18:20 【问题描述】:我是 .NET Core 的新手,从我在网络上的搜索中看到,appsettings.Development.json
用于开发应用程序时的开发配置,appsettings.Production.json
用于生产服务器中已发布的应用程序。这是我在两者上设置的示例部分:
appsettings.Development.json:
"ConnectionStrings":
"DefaultConnection": "Server=localhost,21433;Initial Catalog=DemoDbDev;User Id=demouser;Password=******;"
,
appsettings.Production.json:
"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】:1。关于环境
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-5.0
TLDR;您可以从环境变量或启动设置文件中获取环境。后者仅用于本地开发。
为了确定运行时环境,ASP.NET Core 从以下环境变量中读取:
DOTNET_ENVIRONMENT 调用 ConfigureWebHostDefaults 时的 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://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0
TLDR;如您所述,您在普通 json 中设置默认值和不变值,并在环境 json 中设置覆盖。
默认的 JsonConfigurationProvider 按以下顺序加载配置:
appsettings.json appsettings.Environment.json :例如 appsettings.Production.json 和 appsettings.Development.json 文件。
根据 IHostingEnvironment.EnvironmentName 加载文件的环境版本。
appsettings.Environment.json 值覆盖 appsettings.json 中的键。
3。记住
不应将生产环境的秘密和密码存储在配置文件中。
考虑在 Azure 或数据库加密配置上使用密钥库等服务,或构建将覆盖环境特定机密的服务器变量。
【讨论】:
1.没有,你应该定义它 关于2.和3.可以使用ntlm认证。 ***.com/questions/46295932/ntlm-sql-connection-string 用于 sql 服务器。根据环境和数据库风格,解决方案可能会有所不同。 这里关于第一个问题的例子:***.com/questions/41546943/… DOTNET_ENVIRONMENT 取代了 Aspnet 版本,可在 Web 和非 Web(控制台)方案中使用。虽然 asp 版本仅适用于 web 应用程序,但我建议在任何地方使用其他版本进行标准化 使用 azure keyvault、azure app 配置或其他一些机密/配置管理系统。请注意,dotnet 有几个内置的配置提供程序(例如 json 文件),并且有许多通过 nuget 包提供的插件提供程序(azure keyvault、hashicorp vault、平面文件、ini、从 API 检索的自定义设置等)。配置系统将按照添加提供者的顺序对它们进行分层(最后覆盖优先)。因此,您可以在 app.settings 中进行一些基本配置,在每个 env json 中进行 env 覆盖,然后将来自其他地方的秘密合并为一个配置对象以上是关于.NET Core 应用程序中的 appsettings.json 与 appsettings.Environment.json的主要内容,如果未能解决你的问题,请参考以下文章
Ninject 中的 .NET Core DI 范围生命周期
从 ASP.NET Core Blazor 中的 .NET 方法调用 JavaScript 函数