来源: .Net Core里面appsettings.json的使用_65号腕的博客-CSDN博客
从.NET Core开始,项目的配置文件就换成了appsettings.json,以下整理了她的常见用法。
1. IConfiguration
IConfiguration是用来读取配置的接口,她在Microsoft.Extensions.Configuration.Abstractions包里面,命名空间为Microsoft.Extensions.Configuration。通常需要在使用的地方将她作为依赖注入,对于ASP.NET Core来说,已经默认实现了基于Json的配置,即这次要用到的appsettings.json。
2. 读取连接字符串
appsettings.json这样定义:
{
“ConnectionStrings”: {
“DbConn”: “Server=.;Database=Db;Trusted_Connection=True;”
}
}
1
2
3
4
5
调用IConfiguration的GetConnectionString方法即可
public class Startup
{
public Startup(IConfiguration configuration)
{
string connString = configuration.GetConnectionString(“DbConn”);
}
}
1
2
3
4
5
6
7
8
3. 读取单值
对于如下配置
{
“App”: {
“Name”: “Bigname65”,
“Version”: “v1.0”
}
}
1
2
3
4
5
6
如果想读取Name的值,可以有以下四种方式,各级之间用冒号连接:
string appName = configuration[“App:Name”];
appName = configuration.GetValue<string>(“App:Name”);
appName = configuration.GetSection(“App:Name”).Value;
appName = configuration.GetSection(“App”)[“Name”];
1
2
3
4
4. 读取对象
还是上面的配置文件,如果有以下C#类,应该如何直接从配置文件,读取一个实例呢?
public class AppInfo
{
public string Name { get; set; }
public string Version { get; set; }
}
1
2
3
4
5
IConfiguration有一个Bind的方法,她在Microsoft.Extensions.Configuration.Binder包里面,命名空间也是Microsoft.Extensions.Configuration,ASP.NET Core项目已经默认包含了,有以下两种写法:
AppInfo app = new AppInfo();
configuration.GetSection(“App”).Bind(app);
app = new AppInfo();
configuration.Bind(“App”, app);
1
2
3
4
5
5. IOptions
对于以上的AppInfo类以及配置,有可能需要在项目的多个地方使用到,虽然使用IConfiguration也可以,但是会产生很多重复代码。这时我们可以使用IOptions接口,她在Microsoft.Extensions.Options包里面,而且ASP.NET Core项目也已经默认包含了.
首先在Startup的ConfigureServices里面添加如下代码,这样就直接把AppInfo和配置文件关联起来了:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppInfo>(this.Configuration.GetSection(“App”));
}
1
2
3
4
需要的时候直接使用IOptions<AppInfo>即可:
public class HomeController : Controller
{
AppInfo _app;
public HomeController(IOptions<AppInfo> appOpt)
{
_app = appOpt.Value;
}
public IActionResult Index()
{
return Content($”{_app.Name}:{_app.Version}”);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
6. 多配置文件
ASP.NET Core项目默认会包含两个文件appsettings.json和appsettings.Development.json。看名字,后者肯定是用在开发环境的。
对于同一个配置字段,如果同时存在于appsettings.json和appsettings.Development.json两个文件当中,系统会优先取后者里面的。
正因为如此,我们还可以添加更多的配置文件,将特定环境的值(如连接字符串)放在特定的配置文件里面,比如appsettings.QA.json用于QA环境,appsettings.UAT.json用于UAT环境等。
那么不同的环境如何跟配置文件关联起来的呢?
对于开发环境,Visual Studio的项目属性中可以看到环境变量的设置。
部署以后则是在Web.config里面。
通过该环境变量则可指定配套的json文件。
6.1 发布时指定配置文件
如下图,在Visual Studio中可以看到有多个配置文件,但如果我们希望发布之后只包含需要的文件应该怎么做呢?
首先,双击项目,或者用记事本打开项目文件夹下面的.csproj文件, 添加以下代码,目的是根据不同的环境变量移除其他的配置文件。
<Project Sdk=”Microsoft.NET.Sdk.Web”>
….
<ItemGroup Condition=” ‘$(EnvironmentName)’ == ‘Development'”>
<Content Remove=”appsettings.QA.json” />
<Content Remove=”appsettings.UAT.json” />
</ItemGroup>
<ItemGroup Condition=” ‘$(EnvironmentName)’ == ‘UAT'”>
<Content Remove=”appsettings.QA.json” />
<Content Remove=”appsettings.Development.json” />
</ItemGroup>
<ItemGroup Condition=” ‘$(EnvironmentName)’ == ‘QA'”>
<Content Remove=”appsettings.UAT.json” />
<Content Remove=”appsettings.Development.json” />
</ItemGroup>
</Project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
接着就是发布,发布之前会生成Profile文件,如下图,我们生成了两个Profile,分别对应QA环境和UAT环境:
打开其中的QA.pubxml文件,添加如下代码:
<Project>
<PropertyGroup>
….
<EnvironmentName>QA</EnvironmentName>
</PropertyGroup>
</Project>
1
2
3
4
5
6
同理UAT.pubxml则添加环境变量为UAT。
最后发布,在发布目录的web.config会自动包含对应的环境变量,同时剔除了不需要的配置文件。
7. console/winform
那么如何在控制台程序或者Winform项目中使用appsettings.json配置文件呢?
首先需要添加包:Microsoft.Extensions.Configuration.Json
然后使用以下代码即可得到IConfiguration了
IConfiguration config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”)
.Build();
1
2
3
4
最后附上源代码:
https://gitee.com/bigname65/csharp-practise/tree/master/UseAppsettings
————————————————
版权声明:本文为CSDN博主「65号腕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46295080/article/details/115219255