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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.