appsettings.json и библиотеки классов, которые используют ConfigurationManager.AppSettings - PullRequest
0 голосов
/ 28 января 2019

Я работаю над переносом существующего приложения ASP.NET MVC в ASP.NET Core.Решение имеет несколько библиотек классов (обеспечивающих доступ к данным, сервисы и т. Д.).Многие из этих библиотек классов используют статический ConfigurationManager.AppSettings["..."] способ получения конфигурации из файла web.config.

Однако в приложении ASP.NET Core файл web.config отсутствует, и онпоявляется ConfigurationManager не может прочитать appsettings.json.

Мне действительно нравится новая система конфигурации в ASP.NET Core, и я использую ее в веб-приложении.

Но есть ли "простой" способ миграции этих библиотек классов безприходится переписывать их, чтобы использовать новую систему конфигурации?Любая базовая замена для статических ConfigurationManager.AppSettings["..."] вызовов, которые будут читать appsettings.json?(примечание: мы в конечном итоге перепишем их, но мы бы предпочли делать это по одному фрагменту за раз)

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Если вы используете .NET Standard 2.0, вы можете добавить ссылку на пакет System.Configuration.ConfigurationManager NuGet, чтобы получить доступ к appSettings.

Вы можете добавить файл app.Config (не web.Config)в вашем основном проекте ASP.NET для хранения appSettings.Это будет скопировано в выходную папку и переименовано как AppName.dll.config во время сборки проекта.

0 голосов
/ 28 января 2019

Отказ от ответственности: я не пробовал это с библиотекой классов, но это работало в 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.

...