Плюсы и минусы параметр appsettings против applicationsettings так (.Net приложение.config / Web.конфиг)



при разработке приложения .NET Windows Forms у нас есть выбор между ними App.config теги для хранения наших значений конфигурации. Какой из них лучше?



<configuration>

<!-- Choice 1 -->
<appSettings>
<add key="RequestTimeoutInMilliseconds" value="10000"/>
</appSettings>

<!-- Choice 2 -->
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" >
<section name="Project1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Project1.Properties.Settings>
<setting name="TABLEA" serializeAs="String">
<value>TABLEA</value>
</setting>
</Project1.Properties.Settings>
</applicationSettings>

</configuration>
1592   5  

5 ответов:

базовый <appSettings> легче иметь дело с - просто шлепнуть в <add key="...." value="..." /> вход и вы сделали.

недостатком является: Нет проверки типа, например, вы не можете безопасно предположить, что ваш номер, который вы хотели настроить, действительно есть номер-кто-то может поместить строку в эту настройку..... вы просто получите доступ к нему как ConfigurationManager["(key)"] и тогда это до вас, чтобы знать, с чем вы имеете дело.

также, со временем,<appSettings> может стать довольно запутанным и грязным, если много части вашего приложения начинают помещать туда вещи (помните старые окна.ini-файл? :-)).

если вы можете, я бы предпочел и рекомендовал использовать свои собственные разделы конфигурации - с .NET 2.0, это действительно стало довольно легко, таким образом, вы можете:

  • a) определите свои параметры конфигурации в коде и сделайте их типобезопасными и проверил
  • b) вы можете чисто отделить код настройки все и вы можете повторно использовать свою конфигурацию и код тоже!

есть ряд действительно хороших статей о вас, чтобы демистифицировать систему конфигурации .NET 2.0 на CodeProject:

  1. разгадывание тайн конфигурации .NET 2.0

  2. расшифровка тайн конфигурации .NET 2.0

  3. взлом тайны конфигурации .NET 2.0

высоко рекомендуется! Джон Риста проделал большую работу, объясняя систему конфигурации в .NET 2.0.

настройки приложения можно управлять из дизайнера (обычно настройками.файл настроек по умолчанию), поэтому его легче изменить, и вы можете получить к ним доступ программно через класс настроек, где они отображаются как строго типизированное свойство. Вы также можете иметь приложения и настройки пользователя, а также настройки по умолчанию для отката.

Это доступно с .NET 2.0 и далее и осуждает другой способ сделать это (насколько я могу рассказывать.)

более подробная информация приведена по адресу:msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

Я использую шаблон, который я нашел некоторое время назад, где вы используете основные теги xml, но переносите настройки в статический класс конфигурации. Так - приложение.Настройки.

DotNetPearls Статический Шаблон Конфигурации

Если вы делаете это таким образом, вы можете:

  • используйте разные наборы значений конфигурации для разных сред (dev, test, prod)
  • обеспечить разумные значения по умолчанию для каждого параметра
  • контролировать, как значения определен и создан экземпляр

это утомительно настроить, но работает хорошо, скрывает ссылки на имена ключей и строго типизирован. Этот тип шаблона хорошо работает для конфигурации, которая не изменяется приложением, хотя вы, вероятно, могли бы работать и в поддержку изменений.

Config:

<add key="machineName" value="Prod" />
<add key="anotherMachineName" value="Test" />
<add key="EnvTypeDefault" value="Dev" />

<add key="RootURLProd" value="http://domain.com/app/" />
<add key="RootURLTest" value="http://test.domain.com/app/" />
<add key="RootURLDev" value="http://localhost/app/" />

<add key="HumanReadableEnvTypeProd" value="" />
<add key="HumanReadableEnvTypeTest" value="Test Mode" />
<add key="HumanReadableEnvTypeDev" value="Development Mode" />

класса конфигурации:

using System;
using System.Collections.Generic;
using System.Web;
using WebConfig = System.Web.Configuration.WebConfigurationManager;

    public static class Config
    {
        #region Properties

        public static string EnvironmentType { get; private set; }

        public static Uri RootURL { get; private set; }

        public static string HumanReadableEnvType { get; private set; }

        #endregion

        #region CTOR

        /// <summary>
        /// Initializes all settings when the app spins up
        /// </summary>
        static Config()
        {
            // Init all settings here to prevent repeated NameValueCollection lookups
            // Can increase performance on high volume apps

            EnvironmentType =
                WebConfig.AppSettings[System.Environment.MachineName] ??
                "Dev";

            RootURL =
                new Uri(WebConfig.AppSettings["RootURL" + EnvironmentType]);

            HumanReadableEnvType =
                WebConfig.AppSettings["HumanReadableEnvType" + Config.EnvironmentType] ??
                string.Empty;
        }

        #endregion
    }

Мне нравится работать с более простой версией для хранения и доступа к отдельным значениям.

<appSettings>
    <add key="MyConfigKey" value="true"/>
</appSettings>

Я написал служебный класс для доступа к значениям типобезопасным способом, который позволяет использовать значения по умолчанию. Если значения по умолчанию не указаны, то выдаются полезные сообщения об исключениях.

вы можете посмотреть/скачать здесь класс:

http://www.drewnoakes.com/code/util/app-settings-util/

понять плюсы и минусы параметры app.config, Я предлагаю вам заглянуть в технические детали. Я включил ссылки, где вы можете найти исходный код для обработки, описывая более технические детали ниже.

позвольте мне кратко суммировать то, что я узнал, когда я работал с ними (Примечание: то же самое относится к web.config файл веб-сайта / web применение):


applicationSettings
(нажмите выше для просмотра исходного кода и технических деталей)

плюсы

  • Они позволяют хранить типизированные данные, в том числе типы объектов (через serializeAs собственность)

  • Они имеют область пользователя и приложения, что позволяет хранить значения по умолчанию

  • Они поддерживается в разделе конфигурации Visual Studio

  • длинные строки и / или данные со специальными символами очень хорошо поддерживаются (например, встроенные строки JSON, содержащие двойные кавычки)


минусы

  • пользовательские настройки хранятся в другом месте в профиле пользователя (с загадочным путем), может быть трудно очистить

  • приложения параметры области доступны только для чтения во время выполнения приложения (только пользовательские параметры области могут быть изменены во время выполнения)

  • чтение / запись методов код, созданный дизайнером параметров Visual Studio, не предоставляется непосредственно сторонними инструментами (см. ссылку выше для решения обходного пути)


AppSettings
(нажмите выше, чтобы просмотреть исходный код и технические подробности)

плюсы

  • являются "легкий вес", т. е. легко обрабатывать

  • чтение и запись во время выполнения приложения

  • Они могут быть легко отредактированы администраторами в
    информационные службы Интернета (IIS) руководитель
    (особенности просмотра - > Настройки Приложения, обратите внимание, что имя значка вводит в заблуждение, так как он может обрабатывать только AppSettings, а не ApplicationSettings)


минусы

  • поддержка только строковых данных; длина строки и специальные символы ограничены

  • у них нет пользовательской области

  • Они не поддерживают значения по умолчанию

  • не поддерживаются непосредственно в конфигурации Visual Studio раздел


Comments

    Ничего не найдено.