Загрузка файлов пользовательской конфигурации

119

Я знаю, что могу открывать файлы конфигурации, связанные со сборкой, с помощью статического ConfigurationManager.OpenExe(exePath)метода, но я просто хочу открыть конфигурацию, не связанную со сборкой. Просто стандартный файл конфигурации .NET.

Адам
источник

Ответы:

245

Статьи, опубликованные Рики, очень хороши, но, к сожалению, они не отвечают на ваш вопрос.

Чтобы решить вашу проблему, вы должны попробовать этот фрагмент кода:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

Если необходимо получить доступ к значению в конфигурации, вы можете использовать оператор индекса:

config.AppSettings.Settings["test"].Value;
Оливер
источник
1
@ Оливер Бай whateverYouLikeExtension, ты имеешь в виду, что тебе нужно что- то после config.?
Svish
4
@Oliver Сейчас есть возможность попробовать, и, кажется, все работает нормально :)
Svish
1
Я сделал это, но когда я обращаюсь к ConfigurationManager.ConnectionStrings, я все еще получаю старые данные. Что мне не хватает?
MAW74656 07
1
@ MAW74656: Вам не нужен доступ ConfigurationManager.ConnectionStrings. Вместо этого вам нужно прочитать значение из configобъекта, возвращенного последним оператором выше.
Оливер
3
Для всех, кто ищет, как получить appSettings после этого: var foo = config.AppSettings.Settings ["test"]. Value;
Роро
8

Конфигурационный файл - это просто XML-файл, вы можете открыть его:

private static XmlDocument loadConfigDocument()
{
    XmlDocument doc = null;
    try
    {
        doc = new XmlDocument();
        doc.Load(getConfigFilePath());
        return doc;
    }
    catch (System.IO.FileNotFoundException e)
    {
        throw new Exception("No configuration file found.", e);
    }
    catch (Exception ex)
    {
        return null;
    }
}

а затем получение значений:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");
Отавио Десио
источник
Обнаружен недоступный код после throw new Exception("No configuration file found.", e);.
Ойбек
Удаляю возвращаемый ноль, на самом деле он не будет достигнут.
Otávio Décio
7
зачем использовать XML, когда у вас есть такие замечательные классы из библиотеки .Net. Я бы не советовал использовать это, бедный по дизайну. Что дальше? реализовать другой строковый класс ... подумайте об этом.
Юки
@ OtávioDécio Могу ли я добавить system.diagnostics для включения трассировки в настраиваемый файл .config?
FaizanHussainRabbani
@FaizanRabbani не уверен в настраиваемой трассировке, но, согласно msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx, вы должны иметь возможность добавить диагностику в файл конфигурации.
Otávio Décio 01