从 .net 标准库中读取 appsettings.json

Posted

技术标签:

【中文标题】从 .net 标准库中读取 appsettings.json【英文标题】:Reading appsettings.json from .net standard library 【发布时间】:2018-11-06 20:04:38 【问题描述】:

我已经使用 .NET Core Framework 启动了一个新的 RESTful 项目。

我将我的解决方案分为两部分:框架(一组 .NET 标准库)和 Web(RESTful 项目)。

使用 Framework 文件夹,我为进一步的 Web 项目提供了一些库,并且在其中之一中,我想提供一个具有通用方法 T GetAppSetting<T>(string Key) 的配置类。

我的问题是:如何访问 .NET Standard 中的 AppSettings.json 文件?

我找到了很多关于读取此文件的示例,但所有这些示例都将文件读取到 Web 项目中,而没有人将其写入外部库中。我需要它为 Others 项目提供可重用的代码。

【问题讨论】:

别再这样了。不要尝试从 本身读取配置。配置类是应该注入的依赖项。您的程序集应该定义配置类包含配置设置代码以将它们与设置相匹配(例如 configurationBuilder.Configure()` 但您应该将其留给主应用程序以实际从其读取它们来源 请注意,您将 .NET Standard 库耦合到 .NET Core Web 项目,因为您想要读取特定于此类项目的 json 文件。通常你会将配置传递给库,而不是相反 BTW app.config 从未在程序集上工作过。设置定义了默认值和从应用程序的 app.config 加载它们的架构。您无法通过修改程序集的 app.config 来更改设置,您必须更改默认值 @BgrWorker 没有耦合。事实上,耦合已移除。主应用程序可以是任何东西:Microsoft.Extensions.Configuration、DI、Logging 都是可以在任何运行时使用的 .NET Standard 2.0 程序集。我也在我的完整框架应用程序中使用它们 @PanagiotisKanavos 我指的是问题,而不是您的评论,这实际上是正确的(我也赞成) 【参考方案1】:

正如 cmets 中已经提到的,你真的不应该这样做。 Inject a configured IOptions<MyOptions> using dependency injection instead.

但是,您仍然可以加载 json 文件作为配置:

IConfiguration configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory()) // Directory where the json files are located
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

// Use configuration as in every web project
var myOptions = configuration.GetSection("MyOptions").Get<MyOptions>();

确保引用Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Json 包。更多配置选项see the documentation。

【讨论】:

很好的解决方案,谢谢!但是我明白为什么我不应该这样做......:D 为了构建此代码,我必须添加 3 个 nuget 包:Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.Binder、Microsoft.Extensions.Configuration.Json

以上是关于从 .net 标准库中读取 appsettings.json的主要内容,如果未能解决你的问题,请参考以下文章

从 .NET Core 2 中的类中读取 appsettings.json

无法从 asp dot net 3.1 中的 appsettings.json 读取字符串数组

是否有任何标准方法可以从 .NET 4.6.1 中的 appSettings.config 文件加载数组

NET问答: 不能从 appsettings.json 中以 string[] 形式读取?

如何在标准类库中读取 .Net Core 配置?

ASP.NET Core 类库中取读配置文件 appsettings.json