2026-06-04 22:02:15 +03:00
2026-06-04 22:14:56 +03:00
2026-06-04 22:54:24 +03:00
2026-06-04 22:02:15 +03:00

SMS Task Two — редактор переменных среды

Десктопное приложение на Avalonia и WPF (.NET 8) для чтения и изменения пользовательских переменных среды. Ядро, ViewModels и модуль окружения вынесены в общие проекты.

Solution

Файл решения: Sms.TaskTwo.slnx (формат XML solution).

Структура проектов

Проект Назначение
Sms.Environment Интерфейс IEnvironmentVariableStore
Sms.Environment.Windows User env через реестр HKCU\Environment
Sms.Environment.Linux ~/.config/environment.d/99-sms-task-two.conf
Sms.TaskTwo.Core Конфигурация, сервис, логирование
Sms.TaskTwo.ViewModels MVVM (CommunityToolkit.Mvvm)
Sms.TaskTwo.Avalonia UI-хост (Avalonia)
Sms.TaskTwo.Wpf UI-хост (WPF)

Сборка и запуск

dotnet restore Sms.TaskTwo.slnx
dotnet build Sms.TaskTwo.slnx
dotnet run --project src/Sms.TaskTwo.Avalonia/Sms.TaskTwo.Avalonia.csproj

Конфигурация

src/Sms.TaskTwo.Avalonia/appsettings.json:

  • EnvironmentVariables:Names — массив имён переменных (обязательно по ТЗ).
  • EnvironmentVariables:CommentsVariableName — служебная переменная с JSON-комментариями (имя → текст).
  • EnvironmentVariables:Defaults — значения по умолчанию, если переменная ещё не существует в ОС.
  • Logging:LogDirectory — каталог логов (по умолчанию logs).

Комментарии

Комментарии к полям хранятся в одной переменной среды (например SMS_TASK_TWO_COMMENTS) в формате JSON:

{"SMS_MEAL_SERVER_URL":"URL сервера","SMS_MEAL_API_KEY":"ключ API"}

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

Логирование

Класс Sms.TaskTwo.Core.Logging.ConsoleLog — дублирует записи в консоль и файл.

По умолчанию для GUI: logs/test-sms-wpf-app-yyyyMMdd-hh:mm:ss.log (на Windows двоеточия во времени заменяются на -). При вызове ConsoleLog.Open() без имени — test-sms-console-app-yyyyMMdd_HHmmss.log.

Пример строки:

2026-06-04 18:30:01 [INFO] Changed value: SMS_MEAL_SERVER_URL=https://example.com (previous: <none>)

UI

  • Добавить — создаёт пользовательскую переменную (имя + значение); список имён хранится в env-переменной SMS_TASK_TWO_CUSTOM_VARS (JSON-массив). Пользовательские строки подсвечиваются жёлтым, идут после переменных из конфига. Удалить у пользовательской переменной убирает её из списка и из user store.
  • При старте переменные из appsettings.json, отсутствующие в пользовательском хранилище, создаются автоматически (со значением из Defaults или пустой строкой).
  • Строки из конфига всегда вверху таблицы (в порядке из Names), остальные — ниже по алфавиту.
  • Изменение одной строки обновляет только её ViewModel (без пересборки всей таблицы); при переключении «все переменные» строки добавляются/удаляются/переставляются инкрементально.
  • Отображать все переменные — показывает все переменные процесса; значения можно записать в пользовательское хранилище (реестр / environment.d).
  • Строки из appsettings.json подсвечиваются голубым (#E3F2FD).
  • Переменные в пользовательском хранилище помечаются USER и зелёной полосой; кнопка Удалить снимает их из HKCU / environment.d.
  • Совпадение обоих признаков — фон #C8E6C9.

Платформы

Windows

  • Чтение/запись: реестр HKEY_CURRENT_USER\Environment.

Linux

  • Запись в ~/.config/environment.d/ (systemd KEY=value); переменные подхватываются после перезапуска login-сессии.
Description
No description provided
Readme 124 KiB
Languages
C# 100%