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

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

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

27.03.2009 15:52:25
Lex Li 31.10.2016 09:44:04
9 ОТВЕТОВ
РЕШЕНИЕ

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

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

5
23.05.2017 11:47:10

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

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

15
1.06.2011 04:12:27
Это становится королевской PITA для чего-то вроде проекта, предназначенного для ссылки на веб-сервис, где вы можете обновлять ссылку и обновлять связанный файл app.config. Я не согласен с вашим анализом - я говорю, что имеет смысл сохранять настройки веб-службы в библиотеке классов, а не ссылаться на них.
Jez 13.03.2013 16:49:43
@Jez Тогда ты должен представить это как ответ. Несогласие это хорошо, но аргументируйте это. =) Тем не менее, проблема в том, что вы должны предпринять шаги вручную, чтобы обновить этот внешний файл конфигурации, тогда как файл app.config не требует этих шагов. Кроме того, если вам приходится переключать конечные точки (что более важно в корпоративных средах / внутренних сетях) в одном приложении, а не в другом, общий подход к наличию отдельного файла конфигурации для библиотеки терпит неудачу из-за ручных обновлений, необходимых для выполнения этих операций. меняется.
casperOne 13.03.2013 17:06:19
Что было бы лучше в этом случае, так это то, что ссылочная конфигурация заменила конфигурацию «по умолчанию», заданную в библиотеке классов. Что действительно отстой, так это то, что конфигурация в библиотеке классов полностью игнорируется. Я не представляю это как ответ, потому что это не ответ на вопрос. Я хотел бы знать, как использовать app.configс библиотекой классов.
Jez 13.03.2013 17:08:21

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

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

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

Он включает в себя написание довольно повторяющегося кода - Дмитрий создал этот инструмент для генерации разделов конфигурации из фрагмента конфигурации XML, который может помочь.

3
27.03.2009 16:19:06

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

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

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

0
23.01.2012 17:11:32

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

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

0
2.02.2012 21:45:33

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

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

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

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

Нет больше DLL.config!

3
25.09.2012 15:17:58
Весь смысл использования библиотеки классов для явной цели не имея к разработчику приложения хоста должна знать обо всех этих вещах. «Теперь конфигурация управляется на уровне владельца» - это именно то, чего мы пытаемся избежать.
as9876 30.11.2015 22:14:59

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

0
31.07.2016 19:36:26

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

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

2
28.03.2017 08:46:52
Как вы собираетесь изменить значение без перекомпиляции проекта? Я изменил значение в файле конфигурации, но вызывающее приложение не получает новое значение файла конфигурации, а старое при вызове библиотеки
Code Pope 14.08.2018 16:23:45

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

0
7.08.2017 14:04:40