Использование app.config с библиотекой classов

Часто мне нужно создать библиотеку classов .Net, для которой требуется app.config для таких вещей, как строки подключения к базе данных. Однако эти параметры должны быть в app.config или web.config вызывающего приложения. Если я хочу распространять DLL через несколько приложений, это становится больно, потому что я должен скопировать эти параметры в каждый app.config приложения.

Я рассмотрел вручную чтение настроек конфигурации с помощью кода изнутри библиотеки classов, но это также большая боль. У кого-нибудь есть предложения по наилучшему способу загрузки параметров app.config внутри библиотеки classов?

Одна вещь, которую вы можете сделать, – это иметь отдельный файл настроек только для вашей библиотеки, тогда вам нужно только иметь ссылку на него в конфигурационном файле приложений входа.

См. Принятый ответ в этом вопросе для получения информации об этом.

Я знаю, что это не то, что вы хотите услышать, но конфигурационный файл точки входа является логическим местом для размещения этих настроек. Если бы каждая библиотека нуждалась в собственном файле конфигурации, то было бы утомительно редактировать каждый файл, а не только один.

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

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

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

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

Это связано с написанием довольно повторяющегося кода – Dmitryr создал этот инструмент для создания разделов конфигурации из fragmentа XML-конфигурации, что могло бы помочь.

Вот альтернатива.

Вместо того, чтобы пытаться найти способы «объединить» ваши app.configs или даже размещать элементы конфигурации в вашей DLL (и пытаться обойти то, что «по дизайну»), в первую очередь, попробуйте следующее:

Создайте свою DLL, но там, где вам нужен элемент Config, создайте общедоступное свойство. Когда вы создаете экземпляр classа в DLL, вы заполняете эти свойства элементами конфигурации из приложения-владельца.

Теперь конфигурация управляется на уровне владельца, а DLL переносима, так как вам нужно передать то, что вам нужно, во время выполнения.

Больше нет DLL.config!

Перейдите в Свойства приложения -> вкладка «Настройки»; добавьте свои настройки там.

Используйте Properties.Settings.Default. для доступа к настройке. Это оно!

Нет (большой) проблемы использовать собственный конфигурационный файл для каждой библиотеки classов. Если вы используете vb.net, вы можете добавлять значения через панель «Мой проект» на странице «Настройки».

Единственное, что вам нужно сделать, это называть «My.Settings.Save» в настройках библиотеки classов (и не только в файле настроек основного приложения).

Это тоже работает с c # (но, вероятно, требуется больше ручной работы).

Если вы используете NUnit , назовите файл app.config с тем же именем, что и имя файла проекта .nunit. Например, если вы назвали свой проект «ClassLibraryA.nunit», тогда назовите файл конфигурации библиотеки classов «ClassLibraryA.config». Они также должны находиться в той же папке / каталоге. На самом деле NUnit использует это как основной файл конфигурации.

Если у вас есть собственный код , вам нужно убедиться, что ваш app.config (или web.config) ссылается на файл app.config библиотеки classов. Приложение заботится только о корневом app.config или web.config. Поэтому вам нужно добавить настраиваемый раздел конфигурации, который указывает на библиотеку classов app.config.

Вы можете создать свой собственный XML-файл (назовите его appConfig.xml или что-то, если хотите), используйте System.Xml вместо System.Configuration, чтобы прочитать его, и включите его вместе со своей dll.

Создайте свою библиотеку classов в другом решении. Если вы сохраните их в одном решении, вместо этого вместо этого будет отображаться app.config в самой высокой иерархии.

  • Как проверить учетные записи Active Directory по протоколу LDAP + SSL?
  • Что такое свойства навигации в Entity Framework?
  • Есть ли функция Lower Bound на SortedList ?
  • Escape аргументы командной строки в c #
  • Аспектно-ориентированное программирование (AOP) для C # (.Net) и их функций
  • Синглтон, поясняющий Джон Скит
  • Что обычно лучше всего использовать - StringComparison.OrdinalIgnoreCase или StringComparison.InvariantCultureIgnoreCase?
  • Как я могу получить базовый URL моего webapp в ASP.NET MVC?
  • Создание classа Entity для изменений
  • Что префикс @ делает для строковых литералов в C #?
  • Понимание ковариантных и контравариантных интерфейсов в C #
  • Давайте будем гением компьютера.