Чтение из app.config в приложении .NET Core со ссылкой на библиотеку .NET Standard - PullRequest
0 голосов
/ 25 мая 2018

Я преобразую существующий код из .NET Framework в .NET Standard для использования в приложениях .NET Core.Проект библиотеки был переоборудован и строится нормально.Он содержит код доступа к базе данных, который использует EF Core.Из-за устаревшей природы потребителей этого кода я хотел продолжить использовать файлы App.Config или Web.Config с Configuration Manager.Для этого я добавил пакет NuGet System.Configuration.ConfigurationManager в проект библиотеки.

Библиотека проверена с помощью проекта модульного тестирования, использующего MSTest.Проект был нацелен на .NET Framework 4.7.1, который мог использовать пакет библиотеки .NET Standard 2.0.При нацеливании на .NET Framework все модульные тесты проходили.

После изменения проекта модульного тестирования на целевой .NET Core 2.0 код базы данных больше не может найти строки подключения, хранящиеся в приложении.Файл конфигурации проекта модульного тестирования.Когда я отлаживаю тест и проверяю коллекцию ConfigurationManager.ConnectionStrings, я вижу только одно определенное, которое выглядит как соединение SQL Express, вероятно, исходящее из файла Machine.Config.

Был ли кто-нибудь успешный доступ к App.Config изприложение .NET Core, проходящее через стандартную библиотеку .NET с библиотекой совместимости ConfigurationManager?

1 Ответ

0 голосов
/ 25 мая 2018

Все еще существует известная проблема в Microsoft.Net.Test.Sdk , и это потому, что при использовании ConfigurationManager в тестовых приложениях с использованием .Net Core, ConfigurationManager ищет testhost.dll.config , а не ваш стандартный файл конфигурации сборки.

Для этой проблемы существует обходной путь, основанный на это обсуждение в github , в которое вы можете скопировать файл App.Config в выходной каталог с именем testhost.dll.config , поместив этот элемент в ваш тестовый файл csproj:

<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
    <Copy SourceFiles="App.config" DestinationFiles="$(OutDir)\testhost.dll.config" />
</Target>

И затем вы можете использовать ConfigurationManager.OpenMappedExeConfiguration для загрузки вашего конфигурационного файла.

ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = "testhost.dll.config";

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

И, например, для чтения набора настроек вы можете сделать вот так:

var setting = Config.AppSettings.Settings[key];
...