NetConfigus — продвинутая библиотека для управления конфигурацией приложений .NET, объединяющая параметры командной строки, переменные среды и JSON-файлы в единую систему с четкой приоритезацией источников.
- Мультиисточниковость: Объединение конфигурации из трех источников:
- Аргументы командной строки (наивысший приоритет)
- Переменные среды
- JSON-файлы конфигурации
- Гибкий парсинг:
- Позиционные (
app.exe file.txt) - Именованные (
--output=result.json) - Комбинированные флаги (
-ab) - Пустые значения (
-c=)
- Позиционные (
- Автоматическая конвертация типов:
int,bool,double,string, массивы - Валидация конфигурации: Обязательные параметры, проверка конфликтов
- Поддержка массивов: Множественные объявления параметров
- Кросс-платформенность: Работает на любой ОС с .NET 5+
Добавьте пакет через NuGet:
dotnet add package NetConfigusИли укажите в .csproj:
<PackageReference Include="NetConfigus" Version="1.0.0" />- Определите класс конфигурации:
public class AppConfig
{
[CommandLine(Position = 0, Required = true)]
public string Source { get; set; } = default!;
[CommandLine(ShortName = 't', EnvironmentVariableName = "APP_THREADS")]
public int Threads { get; set; } = 1;
[CommandLine(LongName = "verbose")]
public bool Verbose { get; set; }
}- Загрузите конфигурацию:
var config = CommandLineParser.Load<AppConfig>(
"config.json", // Путь к JSON-файлу
Environment.GetCommandLineArgs()[1..], // Аргументы
isConfigFileRequired: false
);- Используйте:
Console.WriteLine($"Processing {config.Source} with {config.Threads} threads");
if (config.Verbose) Console.WriteLine("Verbose mode enabled");| Свойство | Описание | По умолчанию |
|---|---|---|
ShortName (char) |
Краткое имя параметра (-v) |
'\0' |
LongName (string) |
Полное имя параметра (--verbose) |
null |
Description (string) |
Описание для справки | null |
EnvironmentVariableName |
Имя переменной среды | null |
Required (bool) |
Обязательность параметра | false |
Position (int) |
Позиция аргумента (0-based) | -1 (не задан) |
Загружает конфигурацию из нескольких источников.
Параметры:
fn: Путь к JSON-файлу конфигурацииargs: Аргументы командной строкиisConfigFileRequired: Выбрасывать исключение если файл не найден
Парсит только аргументы командной строки.
public class Flags {
[CommandLine(ShortName = 'a')] public bool A { get; set; }
[CommandLine(ShortName = 'b')] public bool B { get; set; }
}
// Использование: app -ab
// Результат: A=true, B=truepublic class LogConfig {
[CommandLine(ShortName = 'l')]
public string[] Logs { get; set; } = [];
}
// Использование: app -l=error -l=debug
// Результат: Logs = ["error", "debug"]// config.json
{ "ApiKey": "default-key" }public class ServiceConfig {
[CommandLine(EnvironmentVariableName = "API_KEY")]
public string ApiKey { get; set; } = default!;
}
// При наличии переменной среды API_KEY=prod-key
// Результат: ApiKey = "prod-key"- Поддерживаемые типы:
string,int,bool,double, массивы - Булевы параметры не могут быть позиционными
- Не поддерживаются вложенные объекты конфигурации
Проект распространяется под лицензией MIT. Полный текст лицензии доступен в файле LICENSE.
virst
GitHub профиль
graph LR
A[Загрузка из JSON] --> B[Переменные среды]
B --> C[Аргументы CLI]
C --> D[Валидация]
D --> E[Готовый конфиг]
NetConfigus упрощает жизнь разработчика, предоставляя единый интерфейс для работы с разными источниками конфигурации с минимальным количеством кода.