Применить App.config к моей сборке DLL? - PullRequest
8 голосов
/ 15 июля 2010

Я пишу библиотеку классов как абстракцию, чтобы использовать ее для регистрации в любом приложении, услуге и т. Д., Которые я пишу.Я делаю его достаточно надежным, делая его очень настраиваемым в соответствии с моими потребностями для большинства сценариев регистрации приложений / служб, с которыми я сталкиваюсь.

Конфигурация предназначена для указания таких вещей, как:

  • Какой уровень записи для записи
  • Запись в один файл журнала для всех уровней
  • Запись в отдельные файлы для уровня
  • Регистрацияобрезание (периодическое, событие приложения, размер байта ограничен)
  • Истечение срока действия файла журнала (удаление файлов журнала по истечении срока действия файла)
  • Запись в виде простого текста или XML
  • Формат имени файла журналаСпецификация
  • Префикс имени файла с датой
  • Имя родительского приложения
  • и т. д., и т. д. ...

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

Это хороший сценарий для этого случая?Возможно, это лучшая идея, чтобы испечь мою собственную конфигурацию в моем проекте, чтобы мой регистратор считывал из файлов XML для получения значений конфигурации?

Ответы [ 4 ]

9 голосов
/ 15 июля 2010

Что вы могли бы сделать, это

  • создать пользовательский раздел конфигурации (используя, например, Конструктор разделов конфигурации инструмент)

  • поместите конфигурацию вашей сборки в отдельный MyAssembly.config файл

  • ссылка на файл конфигурации сборки из конфигурации вашего хост-приложения:

    <configuration>
       <configSections>
           <section name="YourAssembly" 
                    type="YourAssembly.ConfigSection, YourAssembly" />
       </configSections>
    
       <YourAssembly configSource="MyAssembly.config" />
    </configuration>
    

Таким образом, вы можете «перенести» вашу конфигурацию в отдельный файл конфигурации, который у вас есть только один раз (в проекте вашей сборки), и для любого проекта, которому это необходимо, просто нужны эти настройки в своем собственном файле конфигурации.

3 голосов
/ 15 июля 2010

Механизм конфигурации .NET не предназначен для обработки файлов конфигурации для DLL.Вам следует настроить приложение с соответствующими настройками и передать их классу, который вы создаете из DLL.


Можно добавить настройки в проект DLL, как это обычно делается для приложений.Все, что вам затем нужно сделать, это скопировать соответствующие разделы и записи в app.config приложения вручную, и это будет работать.

Однако все еще верно, что нет смысла копировать файл конфигурации DLL.Это не будет прочитано.

3 голосов
/ 15 июля 2010

Похоже, что пользовательский раздел конфигурации будет работать хорошо в вашем случае. Многие библиотеки, такие как Enterprise Library, делают именно это. Прочтите статью MSDN о ее создании.

2 голосов
/ 15 марта 2011

Другим механизмом является наличие отдельного файла конфигурации (* .dll.config) для вашей сборки. Техника показана здесь: http://blog.rodhowarth.com/2009/07/how-to-use-appconfig-file-in-dll-plugin.html

Вышеизложенное имитирует стандартную технику app.config для сборок.

На мой взгляд, код чтения конфигурации dll должен существовать только в соответствующей dll и в отдельном классе - с единственной ответственностью за чтение записей конфигурации из * .dll.config. Это хороший способ иметь файл конфигурации для сборки аналогично файлу конфигурации (app.config), который может иметь исполняемый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...