Использование файла конфигурации в .NET Standard не работает

Как можно использовать файл конфигурации консоли (App.config) в проекте .NET Standard.

У меня есть одно консольное приложение в App.config:

<appSettings>
    <add key="Test" value="test" />
</appSettings>

В моем проекте .NET Standard я добавил пакет NuGet:

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0 

И у вас есть класс, который возвращает значение этого ключа:

public string Test()
        {  
            return ConfigurationManager.AppSettings["Test"];
        }

Это просто для проверки, могу ли я использовать настройки App.config в проекте .NET Standard.

Но я получаю это сообщение об ошибке:

System.IO.FileNotFoundException: «Не удалось загрузить файл или сборку» System.Configuration.ConfigurationManager, Version = 4.0.1.0, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51 или одна из его зависимостей. Система не может найти указанный файл. '

Когда я делаю это в Program.cs:

Class class = new Class();
string result = class.Test();

person user7849697    schedule 07.09.2018    source источник
comment
У меня есть консольное приложение, которое делает именно то, что вы делаете. Может быть проблема с версией?   -  person Duston    schedule 07.09.2018
comment
Возможно проблема с версиями пакетов? Вы установили версию 4.5.0, а она ищет 4.0.1.0.   -  person Christoph Lütjen    schedule 07.09.2018
comment
@Duston действительно xD ...   -  person user7849697    schedule 07.09.2018
comment
@ DanielA.White ну Дастон говорит в своем комментарии, что это работает для него?   -  person user7849697    schedule 07.09.2018
comment
@ user7849697, но он не указывает, что использует те же версии, что и вы   -  person KinSlayerUY    schedule 07.09.2018
comment
Я попытался отредактировать свой комментарий, чтобы сказать, что я не использовал те же версии (проект - .NET 4, а библиотеки DLL - 4.0.0.0), но мои 5 минут истекли до того, как я добрался до них.   -  person Duston    schedule 07.09.2018
comment
Что ж, это работает, если вы установите в обоих проектах пакет NuGet System.Configuration.ConfigurationManager -Version 4.5.0, как сказал Лео Хинохоса.   -  person user7849697    schedule 07.09.2018


Ответы (1)


Мне удалось воспроизвести поведение, о котором вы упомянули, и чтобы исправить это, я сослался на System.Configuration.ConfigurationManager -Version 4.5.0 в проекте консоли, который использует тестовый класс.

Ошибка в основном говорит вам, что не может найти эту сборку в выходном пути, вы указали на нее в своем стандартном проекте .net, но на нее также необходимо ссылаться в консольном приложении, запускающем проект.

При этом также убедитесь, что ваш раздел конфигурационного файла <appSettings> находится в разделе <configuration>, например:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
    <appSettings>
        <add key="Test" value="test" />
    </appSettings>
</configuration>

Надеюсь это поможет!

person Leo Hinojosa    schedule 07.09.2018
comment
Это действительно работает. Итак, вам нужно добавить эту ссылку Install-Package System.Configuration.ConfigurationManager -Version 4.5.0 как в проект .NET Standard, так и в проект Console / UWP / WPF / ...? - person user7849697; 07.09.2018
comment
Да, консольному проекту требуется ссылка на типы конфигурации, чтобы иметь возможность обрабатывать файл. Затем дополнительные проекты, которым необходимо прочитать эти параметры, могут ссылаться на объекты ConfigurationManager, и тогда класс ConfigurationManager знает, как получить ту же сохраненную информацию. - person Leo Hinojosa; 07.09.2018