ApplicationSettings и Web.config
У меня есть DLL, которая предоставляет протоколирование, которое я использую для проектов WebForms, и теперь хочу использовать его в проекте ASP.Net MVC 2.
Некоторые аспекты этой DLL настроены в app.config:
<configuration>
<configSections>
<section name="Tools.Instrumentation.Properties.Settings"
type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Tools.Instrumentation.Properties.Settings>
<setting name="LogLevel" serializeAs="String">
<value>DEBUG</value>
</setting>
<setting name="AppName" serializeAs="String">
<value>MyApp</value>
</setting>
<setting name="Port" serializeAs="String">
<!--value>33333</value-->
<value>0</value>
</setting>
</Tools.Instrumentation.Properties.Settings>
</configuration>
Однако, когда я создаю аналогичную запись в Web.config
, я получаю ошибку:
Нераспознанный раздел конфигурации applicationSettings
Мой вопрос из двух частей:
- Как сделать эту запись в файле конфигурации
Web.config
?
- Где я могу прочитать концептуальные различия между конфигурацией WinForms и конфигурацией ASP.Net?
Ответы
Ответ 1
В вашем конфигурационном файле просто отсутствовала группа разделов applicationSettings:
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Tools.Instrumentation.Properties.Settings"
type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</sectionGroup>
</configSections>
Если вы добавите это, вы можете поместить раздел настроек в тег, и ваша сборка должна быть прочитана из него как обычно.
Ответ 2
Здесь версия .NET 4 отсутствующей конфигурации:
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Tools.Instrumentation.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
Обязательно обновите пространство имен значения атрибута <section>
name
, чтобы оно соответствовало вашему.
Ответ 3
Обратите внимание на атрибут name
раздела?
попробуйте удалить ваш элемент из оболочки <applicationSettings>
<Tools.Instrumentation.Properties.Settings>
<setting name="LogLevel" serializeAs="String">
<value>DEBUG</value>
</setting>
<setting name="AppName" serializeAs="String">
<value>MyApp</value>
</setting>
<setting name="Port" serializeAs="String">
<!--value>33333</value-->
<value>0</value>
</setting>
</Tools.Instrumentation.Properties.Settings>
Теперь вы можете использовать раздел. Но у вас нет сгенерированного класса-оболочки, вам нужно будет немного поработать, чтобы получить ваши значения, используя ConfigurationManager
.
Что касается второй части вашего вопроса, с одной точки зрения, нет никакой разницы в том, как файлы конфигурации обрабатываются веб-приложением и приложениями форм.
Одна существенная разница, которая может быть или не может быть релевантной здесь, - это способ, которым файлы web.config могут быть иерархически отображены, каждый последующий файл эффективно дополняет или модифицирует родительскую конфигурацию, когда это разрешено. Но, по моему мнению, это скорее поведенческая разница, а не функциональная разница.