.NET Framework
настройки
Поиск…
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
файла конфигурации.
Настройки можно сделать строго типизированными. Любой тип, который может быть сериализован, может использоваться для значения настроек.
Настройки приложения можно легко отделить от пользовательских настроек. Параметры приложения хранятся в одном файле конфигурации:
web.config
для веб-сайтов и веб-приложений и app.config, переименованных в сборку .exe.config, где сборка - это имя исполняемого файла. Пользовательские настройки (не используемые веб-проектами) хранятся в файлеuser.config
в папке Application Data (в зависимости от версии операционной системы).Параметры приложения из библиотек классов могут быть объединены в один файл конфигурации без риска конфликтов имен, поскольку каждая библиотека классов может иметь свой собственный раздел настроек.
В большинстве типов проектов конструктор свойств проекта имеет вкладку « Параметры », которая является отправной точкой для создания пользовательских приложений и пользовательских настроек. Первоначально вкладка «Параметры» будет пустой, с одной ссылкой для создания файла настроек по умолчанию. Щелчок по ссылке приводит к следующим изменениям:
Если файл конфигурации (
app.config
илиweb.config
) не существует для проекта, он будет создан.Вкладка «Настройки» будет заменена элементом управления сеткой, который позволит вам создавать, редактировать и удалять записи отдельных настроек.
В обозревателе решений в элементе свойств Properties добавлен элемент
Settings.settings
. Открытие этого элемента откроет вкладку «Настройки».В папке «
Properties
» в папке проекта добавлен новый файл с новым частичным классом. Этот новый файл называетсяSettings.Designer.__
(.cs, .vb и т. Д.), А класс называетсяSettings
. Класс генерируется кодом, поэтому его нельзя редактировать, но класс является частичным классом, поэтому вы можете расширить класс, добавив дополнительные элементы в отдельный файл. Кроме того, класс реализуется с использованием шаблона Singleton, выставляя экземпляр singleton с свойствомDefault
.
Когда вы добавляете каждую новую запись на вкладку «Настройки», Visual Studio выполняет следующие две задачи:
Сохраняет настройку в файле конфигурации в настраиваемом разделе конфигурации, предназначенном для управления классом Settings.
Создает новый член в классе «Параметры» для чтения, записи и представления настроек в определенном типе, выбранном на вкладке «Настройки».
Чтение строго типизированных параметров из пользовательского раздела файла конфигурации
Начиная с нового класса настроек и настраиваемой конфигурации:
Добавьте параметр приложения с именем 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
для сохранения значения, введенного на вкладке «Параметры» в «Дизайнере свойств проекта». Если в файле конфигурации отсутствует запись, это значение по умолчанию используется.