C# appsettings.json与appsettings.{Environment}.json在.NET核心应用程序中的比较
我是.NET Core的新手,从我在web上的搜索来看,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
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提供程序按以下顺序加载配置:
考虑使用诸如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覆盖,然后从其他地方获取机密,所有这些都合并到一个配置对象中