准备

.NET core和.NET项目配置上有了很大的改变,支持的也更加丰富了比如命令行,环境变量,内存中.NET对象,设置文件等等。.NET项目我们常常把配置信息放到webConfig 或者appConfig中。配置相关的源码https://github.com/aspnet/Extensions;如果打开源码项目 如果遇到以下错误,未遇到直接跳过。

错误提示: error : The project file cannot be opened by the project system, because it is missing some critical imports or the referenced SDK cannot be found. Detailed Information:

解决办法:查看本地安装的sdk 与 global.json中制定的版本是否一致:然后修改即可

开始

新建个Asp.net Core web应用程序系统默认创建了appsettings.json ;在应用启动生成主机时调用CreateDefaultBuilder方法,默认会加载appsettings.json。代码如下:

public static IHostBuilder CreateDefaultBuilder(string[] args)
{
var builder = new HostBuilder();

builder.UseContentRoot(Directory.GetCurrentDirectory());
builder.ConfigureHostConfiguration(config =>
{
config.AddEnvironmentVariables(prefix: "DOTNET_");
if (args != null)
{
config.AddCommandLine(args);
}
});

builder.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;

config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);

if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName))
{
var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
if (appAssembly != null)
{
config.AddUserSecrets(appAssembly, optional: true);
}
}
利用 GetValue,GetSection,GetChildren读取appsettings.json 键值对 。我们打开appsettings.json文件:

将文件读入配置时,会创建一下唯一的分层健来保存配置值:

  • Logging:LogLevel:Default

  • Logging:LogLevel:System

  • Logging:LogLevel:Microsoft

  • Logging:LogLevel:Microsoft.Hosting.Lifetime

  • AllowedHosts

 var jsonValue = $"AllowedHosts:{_config["AllowedHosts"]}"+ "\r\n";
jsonValue += "Logging:LogLevel:Default:" + _config.GetValue<string>("Logging:LogLevel:Default")+ "\r\n";

//GetSection 返回IConfigurationSection;如果未匹配到 返回null
//jsonValue += "---" + _config.GetSection("Logging:LogLevel:System");
jsonValue += "Logging:LogLevel:System:" + _config.GetSection("Logging:LogLevel:System").Value+ "\r\n\n"; var logSection = _config.GetSection("Logging:LogLevel");
var configurationSections = logSection.GetChildren();
foreach (var sections in configurationSections)
{
jsonValue += $"{sections.Path}:{sections.Value}";
jsonValue += "\r\n";
}
jsonValue += "\r\n";
 

配置指定json文件绑定至类

新建一个json文件-AAAppSettings.json

{
"AA": {
"RabbitMqHostUrl": "rabbitmq://localhost:5672",
"RabbitMqHostName": "localhost",
"RabbitMqUserName": "admin",
"RabbitMqPassword": ""
}
}

使用ConfigureAppConfiguration方法配置指定的json文件

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddJsonFile("AAAppSettings.json", optional: true, reloadOnChange: true);
})

使用bind方法绑定到新建的类上如:

 public partial class AAConfig
{
public string RabbitMqHostUrl { get; set; }
public string RabbitMqHostName { get; set; }
public string RabbitMqUserName { get; set; }
public string RabbitMqPassword { get; set; }
}
var aaConfig = new AAConfig();
_config.GetSection("AA").Bind(aaConfig);
jsonValue += aaConfig.RabbitMqHostUrl + "\r\n";
jsonValue += aaConfig.RabbitMqHostName + "\r\n";
jsonValue += aaConfig.RabbitMqUserName + "\r\n";
jsonValue += aaConfig.RabbitMqPassword + "\r\n";
return jsonValue;

运行输出:

最新文章

  1. Android:Activity+Fragment及它们之间的数据交换.
  2. 【python】点分十进制ip与数字互转
  3. WPF 实现带标题的TextBox
  4. BZOJ 2049 [Sdoi2008]Cave 洞穴勘测 ——Link-Cut Tree
  5. 云计算相关的一些概念Baas、Saas、Iaas、Paas
  6. SqlServer修改数据库文件及日志文件存放位置
  7. DevOps on Android: 加速 App 从代码到上线
  8. Quartz1.8.5例子(五)
  9. [javascirpt] Regex
  10. C盘hosts
  11. [置顶] SPL讲解(7)--Query高级篇
  12. python基础教程第3章——字符串
  13. 对&ldquo;针对接口编程,而不是针对实现编程&rdquo;的理解
  14. 身份证识别OCR,开启视频模式扫一扫即可识别身份证信息
  15. HDFS中namenode启动失败
  16. sortable.js 拖拽排序及配置项说明
  17. 省市区地址三级联动jQuery插件Distpicker使用
  18. Ubuntu下载报错“文件尺寸不符”
  19. C#多线程——优先级
  20. mysql select 字段别名是否可以用在 select中或者where中

热门文章

  1. linux常见报错
  2. Chrome 查看产品原型图
  3. 四、springBoot 优雅的创建定时任务
  4. kubernetes实战(二十六):kubeadm 安装 高可用 k8s v1.16.x dashboard 2.x
  5. 微信小程序开发简述
  6. gcc编译命令总结
  7. unzip 命令指定解压路径
  8. .net core 3.0 Signalr - 09 待改进&amp;交流
  9. mysql root密码忘记
  10. navicat for mysql中使用模型?