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

时间:2019-01-28 18:09:48

标签: asp.net-core configuration configurationmanager

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

但是,使用ASP.NET Core应用程序时,没有web.config文件,并且看来ConfigurationManager无法读取appsettings.json。

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

但是,是否存在一种“简单”的方式来迁移这些类库而不必重写它们以使用新的配置系统?可以读取appsettings.json的静态ConfigurationManager.AppSettings["..."]调用的任何基本替代方法吗? (注意:我们最终会重写它们,但我们宁愿一次做一次)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

免责声明:我没有在类库中尝试此操作,但这在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应用程序设置集合的值。