Как использовать внешний файл конфигурации с WPF? - PullRequest
0 голосов
/ 23 декабря 2010

Я хотел бы настроить внешний файл конфигурации, который я могу сохранить в каталоге для моего приложения WPF, не обязательно в каталоге моего exe-файла, когда я создаю свою программу.

Я создал приложение.Конфиг файл и добавил System.Configuration в мою сборку.Мой App.Config имеет:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings file="sd.config">
   <add key="username" value="joesmith" />
  </appSettings>
</configuration>

, а мой sd.config (внешний файл), который сейчас находится в корне моего проекта, имеет

<?xml version="1.0"?>
 <appSettings>
   <add key="username1" value="janedoe" />
</appSettings>

в моем классе cs MainWindowЯ использовал

string username = ConfigurationManager.AppSettings.Get("username1");

, который возвращает пустую строку.когда я просто извлекаю поле имени пользователя из App.Config, оно работает.Что я упустил?Большое спасибо!

1 Ответ

4 голосов
/ 23 декабря 2010

См. Документацию по ConfigurationManager :

Свойство AppSettings:

Получает данные AppSettingsSection для текущего приложения по умолчанию конфигурации.

Вам нужно проделать небольшую дополнительную работу, чтобы получить данные, которые не в файле конфигурации по умолчанию вашего приложения.

Вместо использования атрибута file=, добавьте ключ к вашему <appSettings>, который определяет местоположение вторичного файла конфигурации, например:

<add key="configFile" value="sd.config"/>

Затем, чтобы использовать ConfigurationManager для извлечения настроек из вторичного файла конфигурации, вам нужно использовать его OpenMappedExeConfiguration метод , который должен выглядеть примерно так:

var map = new ExeConfigurationFileMap();
map.ExeConfigFilename = Path.Combine(
      AppDomain.CurrentDomain.SetupInformation.ApplicationBase, 
      ConfigurationManager.AppSettings["configFile"]
);

//Once you have a Configuration reference to the secondary config file, 
//you can access its appSettings collection:
var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

var userName1 = config.AppSettings["username1"];

Этот код не может быть мертвым для вашего примера, но, надеюсь, он выведет вас на правильный путь!

...