我有一个类库,我正在转换为.Net Standard 2类库,以便在ASP.Net Core 2.0项目中使用。
库始终从配置文件中读取诸如SMTP设置,连接字符串等项目。
在Web项目中,它会在 web.config 中找到这些值。
在Console / WinForms中,它会在 app.config 中找到这些值。
.Net Core 2.0项目的等效配置文件是否与之前的示例一样“正常”?
我认为答案是否定的,但考虑到整个组织使用库,寻找最佳处理方法,因此保持向后兼容性非常重要。
答案 0 :(得分:26)
在.NETStandard 2.0中添加了System.Configuration.ConfigurationManager。
从nuget中提取并编译 .NETStandard 2.0 类库项目。
然后,该库将使用标准配置文件跨项目工作:
答案 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。
我担心要保持向后兼容性会很困难(试图避免不可能的话)。