升级ASP.NET Core后,配置的读取是第一个要明确的技术。原先的App.Config、Web.Config、自定义Config在ASP.NET Core中如何正常使用。有必要好好总结整理一下,相信大家都会用到。
首先,看一下ASP.NET Core中的配置提供程序(Configuration ProvIDers):
一、配置提供程序(Configuration ProvIDers)
ASP.NET Core 使用一个或多个配置提供程序来读取配置:
应用程序设置文件(配置文件),例如appsettings.Json环境变量:Environment variables命令行参数:Command-line arguments自定义的配置提供程序目录文件内存中的.NET对象(内存中的配置类)Azure Key Vault,详细说明参考这个连接:https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?vIEw=aspnetcore-3.0&tabs=windowsAzure应用程序配置:Azure App Configuration我们通过下面的代码,输出配置提供程序的加载顺序:
var configRoot = (IConfigurationRoot)Configuration;foreach (var provIDer in configRoot.ProvIDers.ToList()){ DeBUG.Writeline(provIDer.ToString() + "\n");}
输出有5个:
Microsoft.Extensions.Configuration.ChainedConfigurationProvIDer:链式的配置提供程序,可以添加已有的IConfiguration,作为一个配置源JsonConfigurationProvIDer for 'appsettings.Json' (Optional):读取appsettings.Json文件JsonConfigurationProvIDer for 'appsettings.Development.Json' (Optional):按环境读取不同的appsettings.Json文件,例如appsettings.Development.Json、appsettings.Production.JsonEnvironmentvariablesConfigurationProvIDer:读取环境变量CommandlineConfigurationProvIDer:读取命令行参数配置接下来我们我们重点介绍“应用程序配置文件”,“环境变量”,“命令行参数”,“app.config” 这四种最常用的配置读取方式,通过代码的方式,示例给大家:
二、读取应用程序设置文件appsettings.Json
我们使用ASP.NET Core工程中默认的appsettings.Json文件
{ "Logging": { "LogLevel": { "Default": "information","Microsoft": "Warning","Microsoft.Hosting.lifetime": "information" } },"AllowedHosts": "*"}
通过代码读取配置
var allowedHosts = Configuration["AllowedHosts"]; var defaultLogLevel = Configuration["Logging:LogLevel:Default"];DeBUG.Writeline("allowedHosts:" + allowedHosts + "\n");DeBUG.Writeline("defaultLogLevel:"+defaultLogLevel + "\n");
实际输出:
allowedHosts:*
defaultLogLevel:information
如果想读取整个的LogLevel对象,如何实现?
新建LogLevel类和Logging类
[DataContract] public class LogLevel { [DataMember(name = "Default")] public string Default { get; set; } [DataMember(name = "Microsoft")] public string Microsoft { get; set; } [DataMember(name ="Microsoft.Hosting.lifetime")] public string MicrosoftHostinglifetime { get; set; } } [DataContract] public class Logging { [DataMember] public LogLevel LogLevel { get; set; } }
读取Logging配置示例代码:
Logging logConfig = new Logging();Configuration.GetSection("Logging").Bind(logConfig);
var lifetime = Configuration["Logging:LogLevel:Microsoft.Hosting.lifetime"];
logConfig.LogLevel.MicrosoftHostinglifetime = lifetime;
上述代码中,对lifetime属性的设置,通过以下方式实现,Bind的方式因为key匹配的问题,无法完成匹配。
Configuration["Logging:LogLevel:Microsoft.Hosting.lifetime"];
这个地方补充一个带环境类型的应用设置文件的价值顺序:比如说按环境分appsettings.Json文件
默认的JsonConfigurationProvIDer ,按以下顺序加载 appsettings.Json文件:
① appsettings.Json
② appsettings.Environment.Json,例如appsettings.Development.Json ,appsettings.Production.Json
关于appsettings.Environment.Json,Environment的设置主页在Program时指定的变量:
public class Program { public static voID Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseEnvironment("Development"); webBuilder.UseStartup<Startup>(); }); }
三、环境变量读取
按照配置的加载顺序,EnvironmentvariablesConfigurationProvIDer从环境变量中读取配置信息,在appsettings.Json和Secret manager读取配置之后。
这个地方有个分隔符的注意点,因为 :并不是在所有平台上都支持,建议统一使用__(双下划线),运行时会将__统一替换为:
先通过以下命令,设置环境变量:
set Key1="Value1"set Logging__LogLevel__Customer=information
代码中读取环境变量的配置
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostBuilder,config) => { config.AddEnvironmentvariables(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseEnvironment("Development"); webBuilder.UseStartup<Startup>(); });
修改Startup中Configure方法:读取配置并输出
var key1Value = Configuration["Key1"];var logLevel = Configuration["Logging:LogLevel:Customer"];Console.Writeline("key1Value:" + key1Value + "\n");Console.Writeline("logLevel:" + logLevel + "\n");
四、命令行参数读取
命令行配置提供程序CommandlineConfigurationProvIDer,将在以下配置源之后从命令行参数键值对加载配置:
appsettings.Json和appsettings。Environment。Json文件 开发环境中的应用程序机密(秘密管理器) 环境变量继续使用第三章中的示例工程,新建CMD命令行,输入以下dotnet run指令:
dotnet run Key1="Value1" Logging:LogLevel:Customer="information"
五、app.config读取
这个场景最大的作用就是兼容原有ASP.NET Web.Config文件!
首先添加Nuget引用:System.Configuration.ConfigurationManager
新增app.config文件:
<?xml version="1.0" enCoding="utf-8"?><configuration> appSettings> add key="ConfigKey1" value="Value" /> </> >
使用原有ConfigurationManager读取配置:
var value = System.Configuration.ConfigurationManager.AppSettings["ConfigKey1"];Console.Writeline("ConfigKey1:" + value + "\n");
以上就是ASP.NET Core常用的“应用程序配置文件”,“环境变量”,“命令行参数”,“app.config” 配置读取方式,分享给大家。
周国庆
2020/4/1
总结
以上是内存溢出为你收集整理的.NET Core技术研究-最实用最常用的配置读取方式全部内容,希望文章能够帮你解决.NET Core技术研究-最实用最常用的配置读取方式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)