Доступ к web.config с помощью библиотеки классов профиля клиента - PullRequest
4 голосов
/ 06 декабря 2011

У меня есть некоторый код в библиотеке классов, созданный для целевого профиля клиента .Net Framework 4. Код получает доступ к конфигурации приложений-потребителей. Для клиентских приложений (приложений WinForms, консольных приложений и т. Д.) Получить нужный объект для App.Config очень просто:

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

Моя библиотека классов также должна работать для веб-приложений. Правильный способ получить доступ к Web.Config также прост:

WebConfigurationManager.OpenWebConfiguration("~");

Проблема в том, что WebConfigurationManager является частью System.Web, который недоступен как часть клиентского профиля .Net Framework 4.

Есть ли способ, которым я могу написать свой код или структурировать свой проект так, чтобы он работал в обоих случаях? Он должен работать достаточно хорошо для доступа к app.config в системах, в которых установлен только профиль клиента. Также необходимо иметь доступ к web.config при необходимости. Возможно, есть какой-то способ, которым я могу динамически загрузить system.web или другую сборку, когда она доступна и когда это необходимо?

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Как упомянул Давиде Пирас, ConfigurationManager.AppSettings[] будет работать для записей, которые находятся в разделе AppSettings. За пределами этого раздела можно использовать ConfigurationManager.GetSection().

Странно, но возвращаемое значение на ConfigurationManager.GetSection() отличается от возвращаемого значения на Configuration.GetSection(). Версия ConfigurationManager не возвращает объект, который вы можете привести к AppSettingsSection или к чему-либо еще. Вместо этого вы должны привести его к System.Collections.Specialized.NameValueCollection. Однако, если вы только хотите работать со строками ключ / значение, это работает достаточно хорошо. Полный код выглядит так:

using System.Configuration;
using System.Collections.Specialized;

var settingsSection = ConfigurationManager.GetSection(sectionName) as NameValueCollection;
var configValue = settingsSection[keyName];
1 голос
/ 06 декабря 2011

очень интересный вопрос; -)

если вам нужно прочитать appSettings, просто используйте ConfigurationManager.AppSettings, для которого требуется System.Configuration, и проверьте, как он работает в веб-приложении. Если это сработает, вы можете идти, со временем вы можете ограничиться тем, что вам нужно поместить все, что вам нужно, в раздел appSettings, или исследовать другие классы и опции класса ConfigurationManger и , не использующие как WebConfigurationManager

...