#asp.net #configuration
#asp.net #конфигурация
Вопрос:
У меня есть трехуровневое веб-приложение, которое создает три отдельные библиотеки DLL:
- Web.UI.dll
- Web.Application.dll
- Web.DAL.dll
Оба Web.Application.dll
и Web.DAL.dll
имеют свои собственные app.configs. Мне нужно получить доступ к определенному параметру, который находится в web.config. Я использую следующий код:
[CacheUtil.cs]
string cacheName = ConfigurationManager.AppSettings.Get("CacheName");
Я проверил, что этот параметр существует. Итак, почему тогда, когда я запускаю, я получаю NULL? Должно ли CacheName существовать во всех файлах .config?
Вот настройка в web.config:
<appSettings>
<add key="CacheName" value="staging"/>
К вашему сведению, CacheUtil — это синглтон, который лениво инициализируется при первом доступе. Первый доступ происходит в DAL.dll проект.
Спасибо!
Ответ №1:
Выполняется только web.config
чтение. Другие файлы конфигурации ( Web.Application.dll.config
и Web.DAL.config
) не читаются.
Конфигурация не привязана к библиотекам; только к конечному исполняемому файлу, который выполняется ( AppName.exe.config
или web.config
)
Проекты в Visual Studio, которые создают EXE-файл, могут иметь app.config
файл, и этот файл обрабатывается специально при сборке; Он переименовывается ProgramName.exe.config
и копируется в выходной каталог. app.config
в проектах библиотеки классов или веб-приложений это не будет иметь никакого эффекта.
Комментарии:
1. Хм, любопытно. Кажется, что он нормально читается в режиме отладки, но не после публикации. Итак, app.config бессмысленны?
2.
app.config
предназначен для проектов, которые создают EXE. Частью процесса сборки является то, что он переименовываетсяProgramName.exe.config
и копируется в выходной каталог. Веб-приложения разные — вместо того, чтобы искатьProgramName.exe.config
, они ищутweb.config
. Наличиеapp.config
файлов в проекте библиотеки классов бессмысленно без копирования содержащихся в нем значений в соответствующий конфигурационный файл.
Ответ №2:
Попробуйте это:
cachename = ConfigurationManager.AppSettings["CacheName"];
Это при условии, что вы пытаетесь прочитать AppSettings
из файла app.config проекта. Вы не можете прочитать конфигурацию из другого проекта, если не используете какую-либо другую логику, но это не будет через класс ConfigurationManager . Это должен быть обычный ввод-вывод.