appsettings.json 和 Class 使用 ConfigurationManager.AppSettings 的库

appsettings.json and Class libraries that use ConfigurationManager.AppSettings

我正在努力将现有的 ASP.NET MVC 应用程序迁移到 ASP.NET Core。该解决方案有几个 class 库(提供数据访问、服务等)。许多 class 库使用静态 ConfigurationManager.AppSettings["..."] 方式从 web.config 文件获取配置。

虽然 ASP.NET 核心应用程序没有 web.config 文件,但似乎 ConfigurationManager 无法读取 appsettings.json。

我非常喜欢 ASP.NET Core 中的新配置系统,并且正在 Web 应用程序中使用它。

但是有没有一种 "simple" 方法可以迁移这些 class 库而不必重写它们以使用新的配置系统?静态 ConfigurationManager.AppSettings["..."] 调用的任何基本替代将显示为 appsettings.json? (注意:我们最终会重写它们,但我们宁愿一次只做一件)

免责声明:我没有尝试使用 class 库,但这在 LinqPad 中有效:

void Main()
{
    var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
        .AddInMemoryCollection(new Dictionary<string, string>
        {
            ["test"] = "test",
            ["test2:test"] = "test2"
        })
        .Build();

    foreach (var pair in config.AsEnumerable())
    {
        // Skips the (test2 = null) pair
        if (pair.Value != null)
        {
            ConfigurationManager.AppSettings.Set(pair.Key, pair.Value);
        }
    }

    ConfigurationManager.AppSettings["test"].Dump();
    ConfigurationManager.AppSettings["test2:test"].Dump();
}

您可以在初始化代码中加入类似这样的内容。 它设置了 System.Configuration 应用设置集合可用的所有值。

如果您使用的是 .NET Standard 2.0,则可以添加对 System.Configuration.ConfigurationManager NuGet 包的引用以访问 appSettings。

您可以将 app.Config 文件(不是 web.Config)添加到 ASP.NET 核心项目以存储 appSettings。这将被复制到输出文件夹并在项目构建期间重命名为 AppName.dll.config