Я разрабатываю компонент доступа к данным, который будет использоваться на веб-сайте, который содержит сочетание классических страниц ASP и ASP.NET, и мне нужен хороший способ управления его параметрами конфигурации.
Я хотел бы использовать обычай ConfigurationSection
, и для страниц ASP.NET это отлично работает. Но когда компонент вызывается через COM-взаимодействие с классической страницы ASP, компонент не работает в контексте запроса ASP.NET и, следовательно, не знает web.config.
Есть ли способ указать ConfigurationManager
просто загрузить конфигурацию по произвольному пути (например, ..\web.config
если моя сборка находится в /bin
папке)? Если есть, то я думаю, что мой компонент может вернуться к этому, если для моего настраиваемого раздела ConfigurationManager.GetSection
вернется значение по умолчанию null
.
Приветствуются любые другие подходы к этому!
источник
Ответы:
Попробуй это:
источник
var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/web.config");
Другое решение - переопределить путь к файлу конфигурации среды по умолчанию.
Я считаю, что это лучшее решение для загрузки файла конфигурации нетривиального пути, в частности лучший способ прикрепить файл конфигурации к dll.
Пример:
Более подробную информацию можно найти в этом блоге .
Кроме того, у этого другого ответа есть отличное решение, в комплекте с кодом для обновления конфигурации приложения и
IDisposable
объектом, чтобы вернуть его в исходное состояние. С помощью этого решения вы можете сохранить временную конфигурацию приложения в определенной области:источник
Ответ Ishmaeel обычно работает, однако я обнаружил одну проблему, заключающуюся в том, что использование,
OpenMappedMachineConfiguration
похоже, теряет ваши унаследованные группы разделов из machine.config. Это означает, что вы можете получить доступ к своим собственным пользовательским разделам (а это все, что нужно OP), но не к обычным системным разделам. Например, такой код работать не будет:По сути, если вы
configuration.SectionGroups
включите часы , вы увидите, что system.net не зарегистрирован как SectionGroup, поэтому он практически недоступен через обычные каналы.Я нашел два способа обойти это. Первое, что мне не нравится, - это повторно реализовать группы системных разделов, скопировав их из machine.config в свой собственный web.config, например
Я не уверен, что само веб-приложение после этого будет работать правильно, но вы можете правильно получить доступ к sectionGroups.
Второе решение - вместо этого открыть ваш web.config как конфигурацию EXE, которая, вероятно, в любом случае ближе к предполагаемой функции:
Осмелюсь предположить, что ни один из приведенных здесь ответов, ни мой, ни Ишмаил, не использует эти функции так, как задумано разработчиками .NET. Но, похоже, это работает для меня.
источник
В дополнение к ответу Ishmaeel метод
OpenMappedMachineConfiguration()
всегда будет возвращатьConfiguration
объект. Итак, чтобы проверить, загрузился ли он, вы должны проверитьHasFile
свойство, где true означает, что оно было получено из файла.источник
Принятый ответ неверен !!
Он вызывает следующее исключение при доступе к свойству AppSettings:
Вот правильное решение:
источник
Я предоставил значения конфигурации для Word hosted .nET Compoent следующим образом.
Компонент библиотеки классов .NET вызывается / размещается в MS Word. Чтобы предоставить значения конфигурации моему компоненту, я создал файл winword.exe.config в папке C: \ Program Files \ Microsoft Office \ OFFICE11. Вы должны уметь читать значения конфигурации, как в традиционном .NET.
источник
Для ASP.NET используйте WebConfigurationManager:
источник
Использовать обработку XML:
источник
Это должно помочь:
Источник: https://www.codeproject.com/Articles/616065/Why-Where-and-How-of-NET-Configuration-Files
источник