Часто мне нужно создать библиотеку классов .Net, которая требует app.config для таких вещей, как строки подключения к базе данных. Однако эти параметры должны быть в вызывающем приложении app.config или web.config. Если я хочу распределить DLL по нескольким приложениям, это становится проблемой, потому что я должен скопировать эти параметры в файл app.config каждого приложения.
Я рассмотрел ручное чтение настроек конфигурации с помощью кода из библиотеки классов, но это также большая проблема. Кто-нибудь есть какие-либо предложения для лучшего способа загрузки настроек app.config внутри библиотеки классов?
Одна вещь, которую вы могли бы сделать, это иметь отдельный файл настроек только для вашей библиотеки, тогда вам нужно всего лишь иметь ссылку на него в вашем файле конфигурации входных приложений.
См. Принятый ответ в этом вопросе для информации об этом.
Я знаю, что это не то, что вы хотите услышать, но файл конфигурации точки входа является логичным местом для установки этих параметров. Если бы каждой библиотеке требовался собственный файл конфигурации, то было бы утомительно редактировать каждый отдельный файл вместо одного.
Я хотел бы иметь текстовый файл с настройками по умолчанию, включенными как часть вашей библиотеки (и как часть проекта), который можно распространять вместе с библиотекой для конфигурации настроек по умолчанию (его можно скопировать и вставить в файл конфигурации).
app.config
с библиотекой классов. Пусть каждая библиотека классов определит параметры конфигурации в пользовательском разделе ConfigurationSection.
Затем добавьте пользовательские обработчики разделов в файл process.exe.config.
Эта статья MSDN довольно обширна в своем объяснении, с примерами как на VB, так и на C #.
Он включает в себя написание довольно повторяющегося кода - Дмитрий создал этот инструмент для генерации разделов конфигурации из фрагмента конфигурации XML, который может помочь.
Нет большой проблемы в том, чтобы использовать собственный конфигурационный файл для каждой библиотеки классов. Если вы используете vb.net, вы можете добавлять значения через панель «Мой проект» на странице «Настройки».
Единственное, что вам нужно сделать, это вызвать «My.Settings.Save» в настройках библиотеки классов (а не только в основном файле настроек приложения).
Это также работает с c # (но, вероятно, требует больше ручной работы).
Если вы используете NUnit , назовите файл app.config с тем же именем, что и имя вашего проекта * .nunit. Так, например, если вы назвали свой проект "ClassLibraryA.nunit", то назовите файл конфигурации библиотеки классов "ClassLibraryA.config". Они также должны находиться в одной папке / каталоге. NUnit фактически использует это как основной файл конфигурации.
Если у вас есть собственный код , вам нужно убедиться, что ваш app.config (или web.config) ссылается на файл app.config библиотеки классов. Приложение заботится только о корне app.config или web.config. Поэтому вам нужно добавить пользовательский раздел конфигурации, который указывает на библиотеку классов app.config.
Вот альтернатива.
Вместо того, чтобы пытаться найти способы «слить» ваши app.configs или даже поместить элементы конфигурации в вашу DLL (и попытаться обойти то, что «разработано») в первую очередь, попробуйте это:
Создайте свою DLL, но там, где вам нужен элемент конфигурации, создайте публичное свойство. Когда вы создаете экземпляр класса в DLL, вы заполняете эти свойства элементами конфигурации из приложения-владельца.
Теперь конфигурация управляется на уровне владельца, а DLL переносима, так как вам нужно передать то, что вам нужно, во время выполнения.
Нет больше DLL.config!
Вы можете создать свой собственный файл XML (назовите его appConfig.xml или что-то еще, если хотите), использовать System.Xml вместо System.Configuration, чтобы прочитать его, и включить его вместе с вашей DLL.
Зайдите в Свойства приложения -> вкладка Настройки; добавьте свои настройки там.
Используйте Properties.Settings.Default.<SettingName>
для доступа к настройке. Это оно!
Создайте свою библиотеку классов в другом решении. Если вы оставите их в одном решении, вместо этого будет прочитан файл app.config с самой высокой иерархией.