是否有.Net Standard 2.0类库的通用配置文件?

时间:2017-11-14 19:05:44

标签: asp.net .net asp.net-core

我有一个类库,我正在转换为.Net Standard 2类库,以便在ASP.Net Core 2.0项目中使用。

库始终从配置文件中读取诸如SMTP设置,连接字符串等项目。

在Web项目中,它会在 web.config 中找到这些值。

在Console / WinForms中,它会在 app.config 中找到这些值。

.Net Core 2.0项目的等效配置文件是否与之前的示例一样“正常”?

我认为答案是否定的,但考虑到整个组织使用库,寻找最佳处理方法,因此保持向后兼容性非常重要。

2 个答案:

答案 0 :(得分:26)

在.NETStandard 2.0中添加了System.Configuration.ConfigurationManager

从nuget中提取并编译 .NETStandard 2.0 类库项目。

然后,该库将使用标准配置文件跨项目工作:

  • Net Core 2.0 项目使用app.config
  • 网络项目从web.config
  • 开始工作
  • 控制台 Windows应用使用app.config

答案 1 :(得分:6)

.Net Core大大修改了配置方法。

每当您需要某些设置的价值时,您就不再致电ConfigurationManager.AppSettings["someSetting"]了。而是使用ConfigurationBuilder在应用程序启动时加载配置。可能有多个配置源(json或/和xml配置文件,环境变量,命令行,Azure Key Vault,......)。

然后构建配置并将包含在IOption<T>中的强类型设置对象传递给消费类。

以下是它如何运作的基本概念:

//  Application boostrapping

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("AppSettings.json");
var configuration = configurationBuilder.Build();

//  IServiceCollection services

services.AddOptions();
services.Configure<SomeSettings>(configuration.GetSection("SomeSection"));

//  Strongly typed settings

public class SomeSettings
{
    public string SomeHost { get; set; }

    public int SomePort { get; set; }
}

//  Settings consumer

public class SomeClient : ISomeClient
{
    public SomeClient(IOptions<SomeSettings> someSettings)
    {
        var host = someSettings.Value.SomeHost;
        var port = someSettings.Value.SomePort;
    }
}

//  AppSettings.json

{
  "SomeSection": {
    "SomeHost": "localhost",
    "SomePort": 25
  }
}

有关详情,请参阅文章Configure an ASP.NET Core App

我担心要保持向后兼容性会很困难(试图避免不可能的话)。