Чтение настроек из app.config или web.config в .NET: пошаговое руководство для новичков
Основная причина ошибки и её решение
Ошибка возникает из-за того, что класс ConfigurationManager находится в сборке System.Configuration.dll, которая не подключена по умолчанию в новых проектах .NET (особенно .NET Core / .NET 5+). Вам нужно явно добавить ссылку на эту сборку.
Шаг 1: Установка пакета (для .NET Core / .NET 5+)
Откройте консоль диспетчера пакетов (Tools → NuGet Package Manager → Package Manager Console) и выполните команду:
Install-Package System.Configuration.ConfigurationManager
Или через UI: ПКМ на проекте → Manage NuGet Packages → найдите и установите System.Configuration.ConfigurationManager.
Шаг 2: Подключение пространства имён
Добавьте в начало вашего файла:
using System.Configuration;
Шаг 3: Чтение настроек
Теперь код будет работать. Вот полный пример с обработкой ошибок и приведением типов:
using System;
using System.Configuration;
class Program
{
static void Main()
{
// Чтение строки
string connectionString = ConfigurationManager.AppSettings["ConnectionString"];
if (string.IsNullOrEmpty(connectionString))
{
Console.WriteLine("Ошибка: строка подключения не найдена.");
return;
}
// Чтение числа с проверкой
string timeoutStr = ConfigurationManager.AppSettings["TimeoutSeconds"];
int timeout;
if (!int.TryParse(timeoutStr, out timeout))
{
Console.WriteLine("Ошибка: неверный формат таймаута.");
timeout = 30; // значение по умолчанию
}
// Чтение булевого значения
string logEnabledStr = ConfigurationManager.AppSettings["LogEnabled"];
bool logEnabled;
if (!bool.TryParse(logEnabledStr, out logEnabled))
{
logEnabled = true; // по умолчанию
}
Console.WriteLine($"Строка подключения: {connectionString}");
Console.WriteLine($"Таймаут: {timeout} секунд");
Console.WriteLine($"Логирование включено: {logEnabled}");
}
}
Работа с разными типами данных
- string — всегда читается как строка. Используйте
ConfigurationManager.AppSettings["key"] - int — используйте
int.TryParse()для безопасного преобразования - bool — используйте
bool.TryParse()(принимает "true"/"false" без учёта регистра) - double — аналогично через
double.TryParse()
Строки подключения (ConnectionStrings)
Для строк подключения лучше использовать специальную секцию <connectionStrings>:
<connectionStrings>
<add name="MyDB" connectionString="Server=...;Database=...;" providerName="System.Data.SqlClient"/>
</connectionStrings>
Чтение:
string connStr = ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString;
Важные замечания
- Файл конфигурации должен называться
app.configдля консольных/десктопных приложений иweb.configдля веб-приложений - После сборки файл автоматически копируется как
ИмяПроекта.exe.config(илиweb.config) - Изменения в файле конфигурации применяются только после перезапуска приложения
- Для .NET Core/.NET 5+ рекомендуется использовать более современный подход с
IConfigurationи файламиappsettings.json, ноConfigurationManagerвсё ещё работает для обратной совместимости
Теперь ваше приложение будет корректно читать настройки из конфигурационного файла!
<<Альтернативный подход: использование пользовательских настроек (Settings)
Если вам нужно не только читать, но и сохранять настройки во время работы приложения, рекомендую использовать встроенный механизм Settings (Settings.settings).
Как это работает
- В Visual Studio: ПКМ на проекте → Properties → вкладка Settings
- Добавьте настройки с указанием имени, типа и значения по умолчанию
- Visual Studio автоматически создаст класс
Properties.Settings
Пример кода
using Properties;
// Чтение
string connStr = Settings.Default.ConnectionString;
int timeout = Settings.Default.TimeoutSeconds;
// Запись (сохраняется при следующем запуске)
Settings.Default.TimeoutSeconds = 60;
Settings.Default.Save();
Преимущества
- Поддержка типов (int, bool, string, Color, Font и др.)
- Автоматическая генерация кода
- Возможность сохранять изменения
- Типобезопасность (не нужно парсить строки)
Недостатки
- Сложнее с миграцией между средами (Dev/Test/Prod)
- Настройки хранятся в user.config в папке пользователя
Выбирайте подход в зависимости от задачи: для простого чтения — ConfigurationManager, для динамических настроек — Settings.