.Net Core 2.0 appsettings 与 .net 完整框架使用 ConfigurationManager
Posted
技术标签:
【中文标题】.Net Core 2.0 appsettings 与 .net 完整框架使用 ConfigurationManager【英文标题】:.Net Core 2.0 appsettings with .net full framework using ConfigurationManager 【发布时间】:2018-10-19 20:38:08 【问题描述】:假设项目结构如下:
项目 A:
.net 完整框架(4.6.2) 通过内部访问配置:ConfigurationManager.AppSettings["key"];
项目 B:
.net core 2.0(编译成.net 4.6.2) 引用并使用项目A问题: .net 核心使用新的配置机制 - 有没有办法连接 .net 核心配置(在项目 B 中),使项目 A 能够通过 ConfigurationManager 使用配置 - 即项目 A 中没有代码更改?
在this answer 中添加 NuGet 包 System.Configuration.ConfigurationManager 仅将 ConfigurationManager 添加到项目 B 但在项目 A 中无法通过 ConfigurationManager 进行配置
【问题讨论】:
【参考方案1】:诀窍是使用 ConfigurationManager.AppSettings.Set
方法从 .NET Core 预填充 ConfigurationManager.AppSettings
,以便类库以后可以使用它。
我正在使用以下类将 json 设置添加到 ConfigurationManager
。
public class CustomJsonConfigurationProvider : JsonConfigurationProvider
public CustomJsonConfigurationProvider(JsonConfigurationSource source) : base(source)
public override void Load()
base.Load();
foreach (string key in Data.Keys)
string[] keyParts = key.Split(new[] ":" , StringSplitOptions.RemoveEmptyEntries);
ConfigurationManager.AppSettings.Set(keyParts[keyParts.Length - 1], Data[key]);
public class CustomJsonConfigurationSource : JsonConfigurationSource
public override IConfigurationProvider Build(IConfigurationBuilder builder)
FileProvider = FileProvider ?? builder.GetFileProvider();
return new CustomJsonConfigurationProvider(this);
public static class CustomConfiguratorExtensions
public static IConfigurationBuilder AddCustomJsonFile(this IConfigurationBuilder builder, string path)
return AddCustomJsonFile(builder, provider: null, path: path, optional: false, reloadOnChange: false);
public static IConfigurationBuilder AddCustomJsonFile(this IConfigurationBuilder builder, string path, bool optional)
return AddCustomJsonFile(builder, provider: null, path: path, optional: optional, reloadOnChange: false);
public static IConfigurationBuilder AddCustomJsonFile(this IConfigurationBuilder builder, string path, bool optional, bool reloadOnChange)
return AddCustomJsonFile(builder, provider: null, path: path, optional: optional, reloadOnChange: reloadOnChange);
public static IConfigurationBuilder AddCustomJsonFile(this IConfigurationBuilder builder, IFileProvider provider, string path, bool optional, bool reloadOnChange)
if (provider == null && Path.IsPathRooted(path))
provider = new PhysicalFileProvider(Path.GetDirectoryName(path));
path = Path.GetFileName(path);
var source = new CustomJsonConfigurationSource
FileProvider = provider,
Path = path,
Optional = optional,
ReloadOnChange = reloadOnChange
;
builder.Add(source);
return builder;
用法:
builder.ConfigureAppConfiguration((w, c) =>
c.AddCustomJsonFile("appsettings.json");
);
【讨论】:
谢谢!所以只是为了澄清一下 - 在您的网络核心应用程序中使用这个类会使您的完整框架中的 ConfigurationManger 类能够使用核心应用程序配置? 是的@JanivZ。我正是在我的应用程序中使用了这个场景,它使用了完整的框架类库。以上是关于.Net Core 2.0 appsettings 与 .net 完整框架使用 ConfigurationManager的主要内容,如果未能解决你的问题,请参考以下文章
ASP.net Core 2.0 Preview 配置中的 appsettings.json GetSection null
从 appsettings.json 获取 ConnectionString,而不是在 .NET Core 2.0 App 中硬编码
dotnet core 2.0中appSettings.json中的SMTP设置
ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.