更新到 ASP.NET Core 2 后无法获取配置部分
Posted
技术标签:
【中文标题】更新到 ASP.NET Core 2 后无法获取配置部分【英文标题】:Can't get config section after update to ASP.NET Core 2 【发布时间】:2016-10-31 15:04:49 【问题描述】:我将我的项目从 1.0.0-rc1-final 更新为 1.0.0-rc2-final,现在称为 ASP.NET Core 2。这就是我初始化配置生成器的方式:
var builder = new ConfigurationBuilder().SetBasePath(Environment.GetEnvironmentVariable("ASPNETCORE_CONTENTROOT")).AddJsonFile(file).AddEnvironmentVariables();
IConfiguration configuration = builder.Build();
我确定初始化没问题,因为我可以做到
configuration.AsEnumerable()
在调试器中查看配置文件中的所有值。
但是,如果我尝试像这样获得整个配置部分
configuration.GetSection(section.Name);
它不起作用。无论我将什么传递给 GetSection,它都会返回一个对象。但是,该对象的 Value 字段始终为 null,无论该部分是否存在。
请注意,这曾经可以很好地工作。 有什么线索吗?
【问题讨论】:
【参考方案1】:事实证明,人们不能再做这样的事情了:
var allSettingsInSection = configuration.Get(typeof(StronglyTypedConfigSection), sectionName);
相反,现在必须这样做:
IConfigurationSection sectionData = configuration.GetSection(sectionName);
var section = new StronglyTypedConfigSection();
sectionData.Bind(section);
请注意,必须在 project.json 中包含 Microsoft.Extensions.Configuration.Binder。
【讨论】:
只是为那些在 2017 年或以后阅读本文的人提供的更新。从ASP.NET Core 2.0
开始,不需要添加这个额外的 NuGet。
我刚刚做了一个 .Net Core 2.1 应用程序,我仍然需要这个 nuget 包,所以我不相信上面的评论是正确的
Liam 所说的 - 它仍在 Microsoft.Extensions.Configuration.Binder 中。但是,如果您引用 Microsoft.AspNetCore.App 或 Microsoft.AspNetCore.All,您当然会得到它。
您也可以像这样简单地注入强类型配置: var jwtSettingsSection = Configuration.GetSection(nameof(JwtSettings)); services.Configure只是已接受答案的更简洁版本:
public void ConfigureServices(IServiceCollection services)
services.Configure<MySettings>(options => Configuration.GetSection("MySettings").Bind(options));
Source
【讨论】:
【参考方案3】:在 dot net core 2.1 中,您可以这样做:
我在这里使用 nameof 来获取类的名称作为字符串,而不是使用实际的字符串。这是基于 Uwe Kleins 的回复,它更干净。
var myConfigClass = Configuration.GetSection(nameof(MyConfigClass)).Get<MyConfigClass>();
如下所示轻松注入强类型配置:
services.Configure<MyConfigClass>(myConfigClass);
【讨论】:
我喜欢var MyConfigClass = Configuration.GetSection(nameof(MyConfigClass)).Get<MyConfigClass>();
来摆脱字符串。【参考方案4】:
我正在使用 GetSection 分配,因此我创建了一个扩展方法来帮助我使用泛型获取部分
public static class ConfigurationExtensions
public static T GetConfig<T>(this IConfiguration config) where T : new()
var settings = new T();
config.Bind(settings);
return settings;
public static T GetConfig<T>(this IConfiguration config, string section) where T : new()
var settings = new T();
config.GetSection(section).Bind(settings);
return settings;
【讨论】:
以上是关于更新到 ASP.NET Core 2 后无法获取配置部分的主要内容,如果未能解决你的问题,请参考以下文章
解决ASP.NET Core部署到IIS,更新项目"另一个程序正在使用此文件,进程无法访问"...
解决ASP.NET Core部署到IIS,更新项目"另一个程序正在使用此文件,进程无法访问"...
解决ASP.NET Core部署到IIS,更新项目"另一个程序正在使用此文件,进程无法访问"...
解决ASP.NET Core部署到IIS,更新项目"另一个程序正在使用此文件,进程无法访问"...