Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
dda7b5d
i18n(no): complete Norwegian Bokmål translation from 19% to 97%
codex May 3, 2026
1f9f41c
fix(i18n): preserve resx XML structure in translate tool and ca.resx
codex May 3, 2026
1107cec
refactor: Phase 2 MVVM refactor, structured logging, and test expansion
codex May 4, 2026
3095ff1
fix: resolve critical security, concurrency, and code quality issues
codex May 4, 2026
e8115b6
chore: complete test migration, CI hardening, and accessibility impro…
codex May 4, 2026
d994495
feat: complete dependency migration, CI hardening, accessibility, and…
codex May 11, 2026
ef67405
chore: remove temporary all_strings.txt and add to .gitignore
codex May 11, 2026
16d827d
test: add unit tests for LltJson serialization and TaskExtensions.For…
codex May 11, 2026
aba98da
test: add unit tests for PathSecurity and extension methods
codex May 11, 2026
9b17eb0
test: add unit tests for Enum, RGB/Spectrum keyboard, LogoFormat, and…
codex May 11, 2026
1a6ae5c
test: expand InstallerLaunchPathValidator and Compatibility edge-case…
codex May 11, 2026
1408db1
test: add unit tests for pure-logic structs and JSON converters (roun…
codex May 11, 2026
a973803
auto: next dev task
codex May 12, 2026
c3d3efe
auto: next dev task
codex May 12, 2026
0f1ca5d
fix: correct namespace in LltJsonTests.cs for CI build
codex May 12, 2026
f8f4e86
fix: add System.Reflection.Emit using and fix nullable warnings
codex May 12, 2026
e5aa581
fix: remove AssemblyBuilder dependency from tests for CI compatibility
codex May 12, 2026
12a1760
fix: correct 7 failing unit tests for CI
codex May 12, 2026
e48229c
fix: use static call for StreamExtensions progress test
codex May 12, 2026
046ff17
fix: add continue-on-error to test reporter step in CI
codex May 12, 2026
269de2b
auto: ci verification 2026-05-16
codex May 16, 2026
9e60174
fix: prevent Zip Slip path traversal in plugin ZIP extraction
codex May 16, 2026
7730ef3
fix: suppress CodeQL false positive for plugin signature status logging
codex May 16, 2026
4f1bc36
fix: add CodeQL config to suppress false positive in Log.cs
codex May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .github/codeql/codeql-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
name: "CodeQL config"

disable-default-queries: false

query-filters:
- exclude:
id: cs/cleartext-storage-of-sensitive-information
5 changes: 5 additions & 0 deletions .github/workflows/Build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ jobs:
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/Directory.Packages.props') }}
- name: Build
run: .\Make.bat
- name: Upload artifact
Expand Down
30 changes: 28 additions & 2 deletions .github/workflows/Ci-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,40 @@ jobs:
with:
dotnet-version: '10.0.x'

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/Directory.Packages.props') }}

- name: Restore solution
run: dotnet restore LenovoLegionToolkit.sln

- name: Build solution
run: dotnet build LenovoLegionToolkit.sln --configuration Release --no-restore

- name: Test stable paths
run: dotnet test LenovoLegionToolkit.Tests/LenovoLegionToolkit.Tests.csproj --framework net10.0-windows --configuration Release --logger "trx;LogFileName=LenovoLegionToolkit.Tests.trx"
# Fast subset: tests that declare [Trait("Category", "Unit")]. Full suite below still runs everything.
- name: Test (Unit category — fail fast)
run: dotnet test LenovoLegionToolkit.Tests/LenovoLegionToolkit.Tests.csproj --framework net10.0-windows --configuration Release --no-build --filter "Category=Unit" --logger "trx;LogFileName=LenovoLegionToolkit.Tests.Unit.trx"

- name: Test stable paths (full suite + coverage)
run: dotnet test LenovoLegionToolkit.Tests/LenovoLegionToolkit.Tests.csproj --framework net10.0-windows --configuration Release --no-build --logger "trx;LogFileName=LenovoLegionToolkit.Tests.trx" --collect:"XPlat Code Coverage" --settings LenovoLegionToolkit.Tests/coverlet.runsettings

- name: Check for vulnerable packages
shell: pwsh
run: |
dotnet list package --vulnerable --include-transitive
if ($LASTEXITCODE -ne 0) {
Write-Host "::warning::Vulnerable packages found. Please review and update packages."
}

- name: Publish test results
uses: dorny/test-reporter@v1
continue-on-error: true
with:
name: Test results
path: '**/LenovoLegionToolkit.Tests.trx'
reporter: dotnet-trx

- name: Smoke CLI help and version
shell: pwsh
Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/CodeQL.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,18 @@ jobs:
with:
dotnet-version: 10.0.x

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/Directory.Packages.props') }}

- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: csharp
build-mode: manual
config-file: ./.github/codeql/codeql-config.yml

- name: Restore solution
run: dotnet restore LenovoLegionToolkit.sln
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/MainAppPluginUi.Smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,12 @@ jobs:
with:
dotnet-version: '10.0.x'

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/Directory.Packages.props') }}

- name: Restore solution
shell: pwsh
run: dotnet restore LenovoLegionToolkit.sln
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/Release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ jobs:
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/Directory.Packages.props') }}
- name: Setup MSBuild
uses: microsoft/setup-msbuild@v3
- name: Install Inno Setup
Expand Down Expand Up @@ -66,7 +71,7 @@ jobs:
run: dotnet build LenovoLegionToolkit.sln --configuration Release --no-restore

- name: Test solution
run: dotnet test LenovoLegionToolkit.Tests/LenovoLegionToolkit.Tests.csproj --framework net10.0-windows --configuration Release --no-build --logger "trx;LogFileName=LenovoLegionToolkit.Release.Tests.trx"
run: dotnet test LenovoLegionToolkit.Tests/LenovoLegionToolkit.Tests.csproj --framework net10.0-windows --configuration Release --no-build --logger "trx;LogFileName=LenovoLegionToolkit.Release.Tests.trx" --collect:"XPlat Code Coverage"

- name: Publish release payload
shell: pwsh
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -607,3 +607,8 @@ true/

# Screenshot artifacts
screenshot.png

# Local AI tool directories
.codex/
.tools-wpfui-inspect/
all_strings.txt
30 changes: 18 additions & 12 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
- **主要功能**: 联想拯救者系列笔记本硬件控制和优化工具

### 🚀 开发流程要点
- **⚡ 重要**: 每完成功能/修复后立即更新 CHANGELOG.md
- **⚡ 重要**: 在准备合并或发布候选时,将**用户可见**且将随下一版本发布的变更整理进 `CHANGELOG.md` 的 `## [Unreleased]`;避免为未合并、未发布的中间稿逐条堆砌条目
- **📝 格式**: 中英文双语,分类清晰 (Added/Fixed/Improved)
- **🔗 参考**: 详见下方"更新日志维护指南"章节
- **🔗 参考**: 详见下方"更新日志维护指南"章节(含 `[Unreleased]` 工作流与不必记录的情形)

### 项目结构
```
Expand Down Expand Up @@ -131,7 +131,7 @@ dotnet publish LenovoLegionToolkit.WPF/LenovoLegionToolkit.WPF.csproj `

### 📋 CHANGELOG.md 快速更新
```bash
# 开发完成后的标准提交流程
# 开发完成后的标准提交流程(合并/发版前整理用户可见变更即可,参见「更新日志维护指南」)
# 1. 更新 CHANGELOG.md(在 [Unreleased] 部分添加变更)
# 2. 提交变更
git add CHANGELOG.md
Expand All @@ -144,12 +144,12 @@ git commit -m "feat: [功能描述] / [功能描述英文和中文双语]"

### 开发流程中的 Changelog 更新

**原则**: 每完成一个重要的功能开发或bug修复后,立即更新主程序或每个插件独立的CHANGELOG.md
**原则**: 完成一项重要功能、用户可见修复或准备发版时,更新主程序或各插件独立的 `CHANGELOG.md`;日常迭代以「合并/发布前整理」为主,而非每个本地草稿都落一条

#### 📋 更新时机
- ✅ **功能完成时**: 新功能实现并测试通过后
- ✅ **Bug修复时**: 重要bug修复并验证后
- ✅ **重构完成时**: 大型重构或代码优化完成后
- ✅ **功能完成时**: 新功能实现并测试通过后(准备进入共享分支或发版前写入 `[Unreleased]`)
- ✅ **Bug修复时**: 用户可见或已发布版本中的缺陷修复并验证后
- ✅ **重构完成时**: 大型重构或对外行为/性能有影响的优化完成后
- ✅ **版本发布前**: 发布候选版本时检查完整性

#### 🎯 更新内容分类
Expand Down Expand Up @@ -187,6 +187,12 @@ git commit -m "feat: [功能描述] / [功能描述英文和中文双语]"
- ✅ 下一版本发现的上一版本 bug 修复
- ✅ 重要的配置或行为变更

#### `[Unreleased]` 工作流(与「不必记录」的补充说明)

- **`[Unreleased]` 不是开发日记 / `[Unreleased]` is not a dev diary**:同一主题(例如一次迁移、一个功能)在**尚未对外发布**的迭代中,若问题在**首次进入共享历史之前**(如首次 commit、合并进主分支之前)就已修掉,且**用户从未接触到**错误对外行为,则**不必**为这次自修再单独加一条 CHANGELOG。
- **概括优于碎条 / Prefer one summary line**:迁移或大型改动最终对外说明时,用**一条**概括性条目(例如「迁移到 X 并保持行为一致」)即可,而不是每个中间 commit 一条。
- **与现有规则一致 / Same bar as above**:这属于「实现过程中的附带修复」的延伸;已发布版本中的缺陷、用户可见变更、安全与破坏性变更仍必须记录。

**示例**:
```markdown
# 正确示例
Expand Down Expand Up @@ -264,10 +270,10 @@ git merge feature/new-plugin-system
```

**提交后检查清单**:
- [ ] 是否影响用户体验?→ 需要更新 CHANGELOG.md
- [ ] 是否修复了重要bug?→ 需要更新 CHANGELOG.md
- [ ] 是否新增了功能?→ 需要更新 CHANGELOG.md
- [ ] 是否是代码重构?→ 可选择性更新 CHANGELOG.md
- [ ] 是否影响用户体验且将随下一版本发布?→ 需要更新 CHANGELOG.md(`[Unreleased]`)
- [ ] 是否修复了已发布版本或用户可见的重要 bug?→ 需要更新 CHANGELOG.md
- [ ] 是否新增了对外功能?→ 需要更新 CHANGELOG.md
- [ ] 纯内部重构或未进入共享历史的自修?→ 参见「`[Unreleased]` 工作流」,通常不必逐条记录

#### 📈 CHANGELOG.md 维护技巧

Expand Down Expand Up @@ -866,7 +872,7 @@ git pull
- [ ] 手动测试关键功能

#### 文档和变更日志 ✅
- [ ] **CHANGELOG.md 已更新** ⭐ (最重要!)
- [ ] **CHANGELOG.md**:凡用户可见、将随下一版本发布的变更已写入 `[Unreleased]`(参见「更新日志维护指南」;未发布前的迭代自修不必逐条堆砌)
- [ ] 中英文格式一致
- [ ] 描述准确反映实际变更
- [ ] 分类正确 (Added/Fixed/Improved)
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Fixed / 修复
- 挪威语 `Resource.no.resx` 中 `CopiedToClipboard_Message_WithParam` 补回 `{0}` 占位符,避免格式化参数丢失 / Restored the `{0}` placeholder in Norwegian `CopiedToClipboard_Message_WithParam` so clipboard notifications preserve the formatted argument
- 中文界面中的传感器频率单位改为标准 `GHz` 缩写 / Changed the sensor frequency unit in Chinese UI to the standard `GHz` abbreviation
- 修复 WPF-UI 4 迁移后的主窗口顶部 `Log`/设备信息按钮位置、交互和 hover 对比度,启动语言选择窗口透明背景、About 页小窗口滚动、插件扩展统计卡和深色主题文字对比回归 / Fixed WPF-UI 4 migration regressions in title-bar `Log`/device button placement, interaction, and hover contrast, startup language-selector transparency, About-page small-window scrolling, Plugin Extensions summary cards, and dark-theme text contrast

### Improved / 改进
- 升级控制台页首次加载为贴近最终布局的骨架扫光动画,并为 CLI 等待主程序响应时增加不污染脚本输出的控制台加载动画 / Upgraded the Dashboard first-load state to a layout-matching shimmer skeleton and added a CLI loading animation while waiting for the main app response without polluting scripted output
- 应用设置、自动化管道与 CLI IPC 的 JSON 序列化迁移至 `System.Text.Json`,并保持与既有配置文件格式的兼容策略(含自动化判别符);Spectrum 配置文件导入导出同样使用该栈 / Migrated JSON serialization for application settings, automation pipelines, and CLI IPC to `System.Text.Json` while preserving compatibility strategies for existing files (including automation discriminators); Spectrum profile import/export uses the same stack
- 已从基准 `Resource.resx` 回填 WPF 插件扩展等相关字符串键至全部卫星资源文件,`missing` 结构性缺口归零(占位文案为英文,可由 Crowdin 后续本地化)/ Backfilled plugin-extensions-related string keys from neutral `Resource.resx` into all WPF satellite resource files so structural `missing` gaps are cleared (English placeholders pending Crowdin localization)
- 新增 `Tools/resx_translation_audit.py`,用于对四个资源模块的 `Resource.*.resx` 做缺失键、多余键、.NET 格式占位符一致性与英文残留(疑似未译)统计,便于发布前本地化自检 / Added `Tools/resx_translation_audit.py` to audit satellite `Resource.*.resx` files across the four resource modules for missing/extra keys, .NET placeholder parity, and English-identical strings for pre-release localization checks
- 扩展 2025 年 Lenovo Legion 与 LOQ 机型识别,补齐 Gen 10 `15AKP`、`15IRX`、`16ADR`、`16AFR`、`17IRX`、`18IAX` 型号前缀 / Expanded 2025 Lenovo Legion and LOQ model detection by adding Gen 10 `15AKP`, `15IRX`, `16ADR`, `16AFR`, `17IRX`, and `18IAX` model prefixes
- 加固发布和仓库治理:安装器改为检测 .NET 10 Desktop Runtime,发布流水线在打包前运行测试,并新增 CodeQL、Dependabot、Issue/PR 模板和分支保护配置 / Hardened release and repository governance by switching the installer to .NET 10 Desktop Runtime detection, running tests before release packaging, and adding CodeQL, Dependabot, Issue/PR templates, and branch protection configuration
- 更新已验证兼容的 NuGet 依赖版本,并修正贡献指南、部署文档和安装器元数据中的旧仓库链接 / Updated verified-compatible NuGet dependency versions and corrected stale repository links in contribution guides, deployment docs, and installer metadata
- 将 CLI 迁移到 `System.CommandLine` 2.0.7 稳定 API,保留现有命令、别名、验证错误和 IPC 失败提示行为 / Migrated the CLI to the stable `System.CommandLine` 2.0.7 APIs while preserving existing commands, aliases, validation errors, and IPC failure messages
- 插件依赖解析:调用方传入各插件版本字典时才做依赖版本区间校验(不再使用虚构默认版本);依赖关系图中未知版本显示为 `?`;移除未使用的 WPF 动画性能监控占位 API / Plugin dependency resolution now validates declared version ranges only when callers supply per-plugin version metadata (no fabricated defaults), shows `?` for unknown versions in the dependency graph, and removes the unused WPF animation performance-monitoring placeholder API
- 完善 `AGENTS.md` 与 `CLAUDE.md` 中关于 `CHANGELOG` 的 `[Unreleased]` 维护说明(合并/发版前整理用户可见变更;未发布迭代中的自修不必逐条堆砌)/ Clarified `[Unreleased]` changelog guidance in `AGENTS.md` and `CLAUDE.md` (consolidate user-visible changes before merge/release; avoid stacking every pre-release self-correction as its own line)

## [3.6.15] - 2026-04-29

Expand Down
6 changes: 3 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ Open-source Lenovo Legion laptop management toolkit. Large C# .NET solution with
- Installer: BuildInstaller/, InnoDependencies/

## Development Rules
- Branch convention: work on `codex/ai-LenovoLegionToolkit` branch
- Always update CHANGELOG.md on releases
- Follow CONTRIBUTING.md guidelines
- Branch naming: follow team or [CONTRIBUTING.md](CONTRIBUTING.md) conventions (avoid hard-coding a single branch name in docs).
- **Changelog**: Record **user-visible** changes that will ship in the next release under `## [Unreleased]` in [CHANGELOG.md](CHANGELOG.md); when cutting a release, move that section under the version heading. Pre-release or pre-merge self-corrections (bugs fixed before the behavior ever shipped, or iterative fixes on the same unreleased feature) do **not** need a separate line each time—see the bilingual **「更新日志维护指南」** / changelog section in [AGENTS.md](AGENTS.md).
- Follow [CONTRIBUTING.md](CONTRIBUTING.md) guidelines
- Build with Visual Studio or `dotnet build`
- Run Clean.bat before fresh builds

Expand Down
55 changes: 35 additions & 20 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,34 @@
<PackageVersion Include="Autofac" Version="9.1.0" />
</ItemGroup>

<!-- JSON Processing -->
<!-- Async Lock -->
<ItemGroup>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
<PackageVersion Include="NeoSmart.AsyncLock" Version="3.2.1" />
</ItemGroup>

<!-- Async Lock -->
<!-- Structured Logging -->
<ItemGroup>
<PackageVersion Include="NeoSmart.AsyncLock" Version="3.2.1" />
<PackageVersion Include="Serilog" Version="4.3.1" />
<PackageVersion Include="Serilog.Sinks.File" Version="7.0.0" />
<PackageVersion Include="Serilog.Sinks.Async" Version="2.1.0" />
</ItemGroup>

<!-- ==================== WPF/UI Dependencies ==================== -->
<ItemGroup>
<PackageVersion Include="Humanizer" Version="2.14.1" />
<PackageVersion Include="Markdig" Version="1.1.3" />
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2" />
<PackageVersion Include="Humanizer" Version="3.0.10" />
<PackageVersion Include="Markdig" Version="1.2.0" />
<PackageVersion Include="Markdig.Wpf" Version="0.5.0.1" />
<PackageVersion Include="PixiEditor.ColorPicker" Version="3.4.2.3" />
<PackageVersion Include="WPF-UI" Version="2.1.0" />
<PackageVersion Include="WPF-UI" Version="4.3.0" />
</ItemGroup>

<!-- ==================== Lib Project Dependencies ==================== -->
<ItemGroup>
<PackageVersion Include="Ben.Demystifier" Version="0.4.1" />
<PackageVersion Include="CoordinateSharp" Version="3.4.1.1" />
<PackageVersion Include="ManagedNativeWifi" Version="2.7.1" />
<PackageVersion Include="Microsoft.Windows.CsWin32" Version="0.3.183" />
<PackageVersion Include="ManagedNativeWifi" Version="3.0.2" />
<PackageVersion Include="Microsoft.Windows.CsWin32" Version="0.3.275" />
<PackageVersion Include="NAudio.Wasapi" Version="2.3.0" />
<PackageVersion Include="PubSub" Version="4.0.2" />
<PackageVersion Include="NvAPIWrapper.Net" Version="0.8.1.101" />
Expand All @@ -46,25 +49,37 @@

<!-- ==================== System Libraries (.NET 10) ==================== -->
<ItemGroup>
<PackageVersion Include="System.Management" Version="10.0.7" />
<PackageVersion Include="System.ServiceProcess.ServiceController" Version="10.0.7" />
<PackageVersion Include="System.Management" Version="10.0.8" />
<PackageVersion Include="System.ServiceProcess.ServiceController" Version="10.0.8" />
</ItemGroup>

<!-- ==================== Testing Dependencies ==================== -->
<ItemGroup>
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageVersion Include="MSTest.TestAdapter" Version="3.6.3" />
<PackageVersion Include="MSTest.TestFramework" Version="3.6.3" />
<PackageVersion Include="xunit" Version="2.9.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
<PackageVersion Include="coverlet.collector" Version="10.0.0" />
<PackageVersion Include="Moq" Version="4.20.72" />
<PackageVersion Include="FluentAssertions" Version="7.0.0" />
<PackageVersion Include="FluentAssertions" Version="8.10.0" />
</ItemGroup>

<!-- ==================== Pinned Transitive Dependencies ==================== -->
<ItemGroup>
<PackageVersion Include="Castle.Core" Version="5.2.1" />
<PackageVersion Include="Microsoft.Win32.SystemEvents" Version="10.0.8" />
<PackageVersion Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.142" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="10.0.8" />
<PackageVersion Include="System.Drawing.Common" Version="10.0.8" />
<PackageVersion Include="System.Security.Cryptography.ProtectedData" Version="10.0.8" />
<PackageVersion Include="System.Security.Permissions" Version="10.0.8" />
<PackageVersion Include="System.Windows.Extensions" Version="10.0.8" />
<PackageVersion Include="xunit.analyzers" Version="1.27.0" />
</ItemGroup>

<!-- ==================== Tools/Other ==================== -->
<ItemGroup>
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.7" />
<PackageVersion Include="System.CommandLine" Version="2.0.7" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.8" />
<PackageVersion Include="System.CommandLine" Version="2.0.8" />
</ItemGroup>
</Project>
Loading
Loading