Задать вопрос
CLTanuki
@CLTanuki
Есть ли жизнь после Python...

Как в C# DLL обработать конфигурационный файл?

Задача - вынести некоторые строки в конфигурационный файл плагина, реализованного в DLL. Сразу оговорюсь, что это плагин к чужой системе и доступа к конфигу я не имею ибо песочница для плагина.
Если значения занесены в качестве умолчаний, то запрос вроде Properties.Settings.Default.passwd выдаст желаемый результат. Однако, если до компиляции значения неизвестны, то получим ошибку.
Через несколько часов чтения интернетов обнаружено решение №1:
private void ReadAllSettings()
    private void ReadAllSettings()
    {
        System.Configuration.Configuration config = null;
        string configPath = Path.GetFileName(Assembly.GetExecutingAssembly().Location);
        ExeConfigurationFileMap map = new ExeConfigurationFileMap();
        map.ExeConfigFilename = configPath;
        Log(configPath);
        try
        {
            config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
        }

        catch (Exception ex)
        {
            Log(ex.Message);
        }

        if (config != null)
        {
            Log("NOT NULL");
            Log(GetAppSetting(config, "passwd").Length.ToString());
        }
    }

В итоге получаю 0.
Решение №2 очень похоже, но используется OpenExeConfiguration вместо OpenExeConfiguration с указанием пути. Иногда добавляется ".config". Это также опробовано. Пути проверены. Получаю примерно следующее:
An error occurred loading a configuration file: The parameter 'exePath' is invalid.
Parameter name: exePath

В одном из советов увидел оговорку про права. Так вот наспех собранная ConsoleApp в той же папке показывает изменённое руками в конфигурационном файле значение, а вынос конфигурационного файла к злополучной DLL менят чуть меньше, чем ничего.

Очень надеюсь на помощь, поскольку этот затык, мягко говоря, уже раздражает=)
  • Вопрос задан
  • 582 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@dvig8xi
У меня вот так
dllConfig = ConfigurationManager.OpenExeConfiguration(this.GetType().Assembly.Location);
connection = dllConfig.ConnectionStrings.ConnectionStrings[1].ConnectionString;
Ответ написан
Комментировать
OpenMappedExeConfiguration
тут должен быть путь к config, а не к exe
OpenExeConfiguration тут к exe
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы