Как ссылаться на информацию о конфигурации из нескольких библиотек классов? - PullRequest
3 голосов
/ 13 марта 2009

У меня есть куча проектов DLL, которые я добавляю в свое приложение, каждый из которых содержит свои собственные файлы Settings.settings / app.config. Когда я компилирую приложение и запускаю для отладки, все работает отлично, но наступает время развертывания, я не могу заставить свои библиотеки DLL читать свои собственные файлы настроек.

Я немного читал, и стало очевидно, что есть пара способов заставить каждую dll читать свою собственную конфигурацию - один - выделить файл .dll.config для библиотеки, а другой - встроить Конфигурация dll в файле process.exe.config.

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

Я бы хотел, если это возможно, отдельный файл .dll.config для каждой из библиотек, но в крайнем случае, подойдет каждая из моих библиотек для чтения своего собственного раздела process.exe.config.

Может ли кто-нибудь указать мне правильное направление, потому что я так близок к тому, чтобы выкатить это приложение, но этот камень преткновения вызывает у меня сильную головную боль.

Редактировать: Когда я объединяю файлы конфигурации, я начинаю получать исключения TypeInitializer, когда инициализирую объекты в моих библиотеках. Вероятно, это только из-за того, что я отсталый, но есть ли у кого-нибудь рабочий пример объединенного конфигурационного файла и некоторого базового демонстрационного кода для чтения его из нескольких сборок?

Ответы [ 3 ]

2 голосов
/ 13 марта 2009

С какими «существенными проблемами» вы столкнулись? Я начал с встраивания конфига dll в конфиг exe, который работал, но был громоздким. Теперь у меня есть все вещи конфигурации в одном проекте DLL. Единственное, что мне нужно было сделать, чтобы это работало (помимо копирования настроек), это изменить класс настроек на общедоступный.

Вот пример объединенного файла app.config, который работает:

  <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
    <configSections>
      <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="SharedConfig.Client.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        <!-- Begin copy from library app.config -->
        <section name="SharedConfig.Library.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        <!-- End copy from library app.config -->
      </sectionGroup>
    </configSections>
    <applicationSettings>
      <SharedConfig.Client.Properties.Settings>
        <setting name="Bar" serializeAs="String">
          <value>BarFromClient</value>
        </setting>
      </SharedConfig.Client.Properties.Settings>
      <!-- Begin copy from library app.config -->
      <SharedConfig.Library.Properties.Settings>
        <setting name="Bar" serializeAs="String">
          <value>BarFromLibrary</value>
        </setting>
      </SharedConfig.Library.Properties.Settings>
      <!-- End copy from library app.config -->
    </applicationSettings>
  </configuration>
0 голосов
/ 13 марта 2009

Пусть каждая библиотека классов определит параметры конфигурации в пользовательском разделе ConfigurationSection.

Затем добавьте пользовательские обработчики разделов в файл process.exe.config.

Эта статья MSDN довольно обширна в своем объяснении, с примерами как на VB, так и на C #.

...