Подтвердить что ты не робот

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?
4b9b3361

Ответ 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 могут быть иерархически отображены, каждый последующий файл эффективно дополняет или модифицирует родительскую конфигурацию, когда это разрешено. Но, по моему мнению, это скорее поведенческая разница, а не функциональная разница.