Поиск…


AppSettings из ConfigurationSettings в .NET 1.x

Устаревшее использование

Класс ConfigurationSettings был исходным способом получения настроек для сборки в .NET 1.0 и 1.1. Он был заменен классом ConfigurationManager и классом WebConfigurationManager .

Если у вас есть два ключа с тем же именем в разделе appSettings файла конфигурации, используется последний.

app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="keyName" value="anything, as a string"/>
    <add key="keyNames" value="123"/>
    <add key="keyNames" value="234"/>
  </appSettings>
</configuration>

Program.cs

using System;
using System.Configuration;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string keyValue = ConfigurationSettings.AppSettings["keyName"];
            Debug.Assert("anything, as a string".Equals(keyValue));

            string twoKeys = ConfigurationSettings.AppSettings["keyNames"];
            Debug.Assert("234".Equals(twoKeys));

            Console.ReadKey();
        }
    }
}

Чтение AppSettings из ConfigurationManager в .NET 2.0 и более поздних версиях

Класс ConfigurationManager поддерживает свойство AppSettings , которое позволяет продолжить чтение параметров из раздела appSettings файла конфигурации так же, как и .NET 1.x.

app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="keyName" value="anything, as a string"/>
    <add key="keyNames" value="123"/>
    <add key="keyNames" value="234"/>
  </appSettings>
</configuration>

Program.cs

using System;
using System.Configuration;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string keyValue = ConfigurationManager.AppSettings["keyName"];
            Debug.Assert("anything, as a string".Equals(keyValue));

            var twoKeys = ConfigurationManager.AppSettings["keyNames"];
            Debug.Assert("234".Equals(twoKeys));

            Console.ReadKey();
        }
    }
}

Введение в строго типизированную поддержку приложений и пользовательских настроек из Visual Studio

Visual Studio помогает управлять настройками пользователя и приложения. Использование этого подхода имеет эти преимущества перед использованием раздела appSettings файла конфигурации.

  1. Настройки можно сделать строго типизированными. Любой тип, который может быть сериализован, может использоваться для значения настроек.

  2. Настройки приложения можно легко отделить от пользовательских настроек. Параметры приложения хранятся в одном файле конфигурации: web.config для веб-сайтов и веб-приложений и app.config, переименованных в сборку .exe.config, где сборка - это имя исполняемого файла. Пользовательские настройки (не используемые веб-проектами) хранятся в файле user.config в папке Application Data (в зависимости от версии операционной системы).

  3. Параметры приложения из библиотек классов могут быть объединены в один файл конфигурации без риска конфликтов имен, поскольку каждая библиотека классов может иметь свой собственный раздел настроек.

В большинстве типов проектов конструктор свойств проекта имеет вкладку « Параметры », которая является отправной точкой для создания пользовательских приложений и пользовательских настроек. Первоначально вкладка «Параметры» будет пустой, с одной ссылкой для создания файла настроек по умолчанию. Щелчок по ссылке приводит к следующим изменениям:

  1. Если файл конфигурации ( app.config или web.config ) не существует для проекта, он будет создан.

  2. Вкладка «Настройки» будет заменена элементом управления сеткой, который позволит вам создавать, редактировать и удалять записи отдельных настроек.

  3. В обозревателе решений в элементе свойств Properties добавлен элемент Settings.settings . Открытие этого элемента откроет вкладку «Настройки».

  4. В папке « Properties » в папке проекта добавлен новый файл с новым частичным классом. Этот новый файл называется Settings.Designer.__ (.cs, .vb и т. Д.), А класс называется Settings . Класс генерируется кодом, поэтому его нельзя редактировать, но класс является частичным классом, поэтому вы можете расширить класс, добавив дополнительные элементы в отдельный файл. Кроме того, класс реализуется с использованием шаблона Singleton, выставляя экземпляр singleton с свойством Default .

Когда вы добавляете каждую новую запись на вкладку «Настройки», Visual Studio выполняет следующие две задачи:

  1. Сохраняет настройку в файле конфигурации в настраиваемом разделе конфигурации, предназначенном для управления классом Settings.

  2. Создает новый член в классе «Параметры» для чтения, записи и представления настроек в определенном типе, выбранном на вкладке «Настройки».

Чтение строго типизированных параметров из пользовательского раздела файла конфигурации

Начиная с нового класса настроек и настраиваемой конфигурации:

Вкладка «Параметры» в «Дизайнере свойств проекта»

Добавьте параметр приложения с именем ExampleTimeout, используя время System.Timespan и установите значение 1 минута:

Вкладка «Параметры» при добавлении параметра приложения «Пример»

Сохраните свойства проекта, в котором сохраняются записи вкладки «Настройки», а также повторно создается собственный класс «Параметры» и обновляется файл конфигурации проекта.

Используйте настройку из кода (C #):

Program.cs

using System;
using System.Diagnostics;
using ConsoleApplication1.Properties;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            TimeSpan exampleTimeout = Settings.Default.ExampleTimeout;
            Debug.Assert(TimeSpan.FromMinutes(1).Equals(exampleTimeout));

            Console.ReadKey();
        }
    }
}

Под крышками

Просмотрите файл конфигурации проекта, чтобы узнать, как была создана запись параметра приложения:

app.config (Visual Studio автоматически обновляет)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="ConsoleApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <appSettings />
  <applicationSettings>
    <ConsoleApplication1.Properties.Settings>
      <setting name="ExampleTimeout" serializeAs="String">
        <value>00:01:00</value>
      </setting>
    </ConsoleApplication1.Properties.Settings>
  </applicationSettings>
</configuration>

Обратите внимание, что раздел appSettings не используется. Раздел applicationSettings содержит настраиваемый раздел, соответствующий определенному пространству имен, который имеет элемент setting для каждой записи. Тип значения не сохраняется в файле конфигурации; он известен только классу Settings .

Посмотрите в классе « Settings », чтобы узнать, как он использует класс ConfigurationManager для чтения этого настраиваемого раздела.

Settings.designer.cs (для проектов C #)

...
    [global::System.Configuration.ApplicationScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("00:01:00")]
    public global::System.TimeSpan ExampleTimeout {
        get {
            return ((global::System.TimeSpan)(this["ExampleTimeout"]));
        }
    }
...

Обратите внимание, что был создан DefaultSettingValueAttribute для сохранения значения, введенного на вкладке «Параметры» в «Дизайнере свойств проекта». Если в файле конфигурации отсутствует запись, это значение по умолчанию используется.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow