我正在开发一个 .NET Core 项目,其中每个环境(Dev、Prod)都有一个
appsettings.json
文件。我想从各自的属性文件加载这些应用程序设置文件的值(application.dev.properties
,application.prod.properties
)。
我尝试使用如下所示的 Addpropertiesfile 方法来实现此目的。
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.JSON;
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{environment}.json");
我怎样才能实现我想要做的事情?
您不需要直接执行此操作。这是在 .net core 中默认完成的。请参阅下面的第 4 点,来自 Microsoft 文档。
使用 dotnet new 或 Visual Studio 创建的 ASP.NET Core Web 应用程序 生成以下代码:
C#
var builder = WebApplication.CreateBuilder(args);
WebApplication.CreateBuilder 初始化一个新的实例 具有预配置默认值的 WebApplicationBuilder 类。这 初始化的WebApplicationBuilder(构建器)提供默认值 按以下顺序对应用程序进行配置,从最高到 最低优先级:
- 使用命令行配置提供程序的命令行参数。
- 使用非前缀环境变量配置提供程序的非前缀环境变量。
- 应用程序在开发环境中运行时的用户机密。
- appsettings.{Environment}.json 使用 JSON 配置提供程序。 例如,appsettings.Production.json 和 appsettings.Development.json.
- appsettings.json 使用 JSON 配置提供者。
- 回退到所描述的主机配置 在下一节中。
上面的c#代码将被放置在项目的Program.cs文件的Main函数中,如果其名称如图所示,可以自动检测并使用正确的appsettings.json文件。
在asp.net core中我们有
appsettings.json
,appsettings.{Environment}.json
这样的结构:
无前缀环境变量是指除 ASPNETCORE_ 或 DOTNET_ 前缀之外的环境变量。 例如, ASP.NET Core Web 应用程序模板在
launchSettings.json
中设置 "ASPNETCORE_ENVIRONMENT": "Development"
"profiles": {
"emp": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7271;http://localhost:5058",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
使用默认配置, EnvironmentVariablesConfigurationProvider 从以下位置加载配置 读取后的环境变量键值对
,appsettings.json
,以及用户秘密。因此,关键 从环境中读取的值会覆盖从appsettings.{Environment}.json
、appsettings.json
和用户机密中读取的值。appsettings.{Environment}.json
要加载不同
appsettings.json
文件的值,我们可以尝试先获取环境变量,然后在读取appsettings.json
,appsettings.{Environment}.json
后从环境变量键值对加载配置,如下代码:
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
var environment= Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ;
var config = new ConfigurationBuilder()
.SetBasePath(pathToContentRoot)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();