C# Microsoft.Extensions.Configuration到底如何依赖于ASP.NET核心?

C# Microsoft.Extensions.Configuration到底如何依赖于ASP.NET核心?,c#,asp.net-core,.net-core,asp.net-core-configuration,C#,Asp.net Core,.net Core,Asp.net Core Configuration,ASP.NET Core是否实现对配置值的访问 我的问题很可能是因为我不明白ASP.NET核心到底是什么。嗯,我知道这是一个web框架,不确定,但它看起来像是.NET中的名称空间,或者是一个包。。。我知道在php中,框架可以是一组类(名称空间)或作为扩展提供的编译库,因此我假设.NET中也有类似的方法 起初,我还不打算对ASP.NET核心抱太大的兴趣。我需要为我的简单控制台C#应用程序(VS代码和.NET核心)存储一些配置。我发现有很多主题(例如这里:)需要阅读JSON(推荐)配置。鉴于此,我添

ASP.NET Core是否实现对配置值的访问

我的问题很可能是因为我不明白ASP.NET核心到底是什么。嗯,我知道这是一个web框架,不确定,但它看起来像是.NET中的名称空间,或者是一个包。。。我知道在php中,框架可以是一组类(名称空间)或作为扩展提供的编译库,因此我假设.NET中也有类似的方法

起初,我还不打算对ASP.NET核心抱太大的兴趣。我需要为我的简单控制台C#应用程序(VS代码和.NET核心)存储一些配置。我发现有很多主题(例如这里:)需要阅读JSON(推荐)配置。鉴于此,我添加了三个必要的nugget包:

使用Microsoft.Extensions.Configuration;
使用Microsoft.Extensions.Configuration.FileExtensions;
使用Microsoft.Extensions.Configuration.Json;
我需要使用:

new ConfigurationBuilder()
.SetBasePath(目录.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”).Build();
这将返回一个实现
IConfigurationRoot
/
IConfiguration
接口的对象。但所有示例都是在ASP.NET核心上下文中给出的。我有一个非常简单的应用程序,我还不需要任何ASP.NET功能

因此,我尝试在没有ASP.NET的情况下访问
IConfigurationRoot
。结果对象存储配置文件中的值,但不具有其接口的所有方法来访问这些值

如何在.NET名称空间的上下文中解释这一点?ASP.NET核心是否实现了从
IConfiguration
访问值的方法,如
Get()

如果
Microsoft.Extensions.Configuration
属于或严重依赖
Microsoft.AspNetCore.App
,为什么它位于不同的命名空间中

如果我添加ASP.NETCore(NuGet包和名称空间),这会是一种过度杀伤力吗

也许我应该使用非
ConfigurationBuilder
的soemthing来读取JSON?

,就像
Microsoft命名空间中的其他包一样。扩展
命名空间(例如,或)是作为ASP.NET核心框架的一部分创建的包。然而,ASP.NET核心及其所有相关软件包的构建方式是非常模块化的,因此所有库都可以在ASP.NET核心上下文中使用,也可以不在ASP.NET核心上下文中使用

您必须像理解库一样理解这些包。它们包含在ASP.NET Core中,因为框架构建在它们之上,但是如果您不需要ASP.NET Core web框架,您仍然可以单独使用这些库,而不必提及ASP.NET Core。这就是为什么它们生活在
Microsoft.Extensions
命名空间中,而不是
Microsoft.AspNetCore
:它们是完全独立的项目。当然,这些包的开发是由ASP.NET核心团队完成的,ASP.NET核心的设计决策确实会影响这些扩展包的发展;但是团队对这些软件包非常小心,这样就不会影响一般的使用

这么说吧,你是如何使用这些软件包的?就像任何其他库一样,只需添加一个NuGet引用即可。由于
Microsoft.Extensions.Configuration
是基本库,没有任何加载文件的工具,因此如果要加载JSON文件,您还需要

但这其实很简单:

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

// retrieve configuration values
Console.WriteLine(configuration["foo"]); // bar
Console.WriteLine(configuration["baz:bar"]); // qux
对于本例,
config.json
如下所示:

{
    "foo": "bar",
    "baz": {
        "bar": "qux"
    }
}
因此,您可以像这样加载配置。但一定要检查一下。它可能与ASP.NET核心内部使用的配置有关,但基本概念仍然适用(例如,或)

最后,请注意,这实际上只是用于配置。从JSON加载数据只是使用
Microsoft.Extensions.configuration
可以使用的众多配置源之一。但是,不管您将使用什么样的提供程序,最终都将使用具有节和键路径概念的相同配置格式


如果您在查看如何解析JSON时看到了这个包,那么很可能是使用了错误的工具。如果您想解析JSON以检索适当的数据结构,就像使用JSON作为序列化数据的方法一样,那么您应该考虑一些不同的东西。解析JSON(也序列化)最常见的解决方案是使用它,这是一个非常强大和灵活的工具来处理任何类型的JSON数据。

这在我看来有点过分了。你可以只做
string JSON=File.ReadAllLines(“path”);var deserialized=JsonConvert.DeserializeObject(json)使用JSON.NET库(NewtonSoft.JSON NuGet)哇。这是一个全面(快速)的答案。谢谢。我可能会使用Json.NET,因为我只需要存储要从excel wb读取的工作表名称和表标题行号。尽管如此,我还是会尝试让
Microsoft.Extensions.Configuration
用于学习目的。回答得很好!