.Net Core里面appsettings.json的使用

本文详细介绍了.NET Core项目中appsettings.json配置文件的使用,包括通过IConfiguration读取连接字符串、单值和对象,利用IOptions进行依赖注入,以及如何处理多环境配置文件。此外,还展示了如何在控制台和Winform应用中使用appsettings.json,并提供了源代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从.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;"
  }
}

调用IConfiguration的GetConnectionString方法即可

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        string connString = configuration.GetConnectionString("DbConn");

    }
}

3. 读取单值

对于如下配置

{
  "App": {
    "Name": "Bigname65",
    "Version": "v1.0"
  }
}

如果想读取Name的值,可以有以下四种方式,各级之间用冒号连接:

string appName = configuration["App:Name"];
appName = configuration.GetValue<string>("App:Name");
appName = configuration.GetSection("App:Name").Value;
appName = configuration.GetSection("App")["Name"];

4. 读取对象

还是上面的配置文件,如果有以下C#类,应该如何直接从配置文件,读取一个实例呢?

public class AppInfo
{
    public string Name { get; set; }
    public string Version { get; set; }
}

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);

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"));
}

需要的时候直接使用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}");
    }
}

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>

接着就是发布,发布之前会生成Profile文件,如下图,我们生成了两个Profile,分别对应QA环境和UAT环境:

在这里插入图片描述

打开其中的QA.pubxml文件,添加如下代码:

<Project>
  <PropertyGroup>
    ....
    <EnvironmentName>QA</EnvironmentName>
  </PropertyGroup>
</Project>

同理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();

最后附上源代码:

https://gitee.com/bigname65/csharp-practise/tree/master/UseAppsettings

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值