A:修复托盘图标加载问题并完善代码审查文档
- 修复TrayIconManager托盘图标加载失败问题,增加多路径尝试和异常处理 - 调整SettingsWindow界面布局,优化网速显示区域宽度和间距 - 添加完整的代码审查TODO文档,涵盖安全问题、性能优化和代码清理建议 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
1 parent
04cc443464
commit
c8f6735aae
3 files changed
+215
-5
No files matched your search
@@ -8,6 +8,9 @@ using System.Windows.Media;
|
||||
using System.Windows.Threading;
|
||||
using Shell.Views;
|
||||
using Common.Logger;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Shell.Utils;
|
||||
|
||||
@@ -247,10 +250,32 @@ public class TrayIconManager : IDisposable
|
||||
{
|
||||
try
|
||||
{
|
||||
return new Icon("Assets/Icons/app.ico");
|
||||
// 尝试多种路径来加载图标
|
||||
string[] possiblePaths = {
|
||||
"Assets/Icons/app.ico",
|
||||
"./Assets/Icons/app.ico",
|
||||
"Shell/Assets/Icons/app.ico",
|
||||
"./Shell/Assets/Icons/app.ico",
|
||||
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets", "Icons", "app.ico"),
|
||||
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Shell", "Assets", "Icons", "app.ico")
|
||||
};
|
||||
|
||||
foreach (string path in possiblePaths)
|
||||
{
|
||||
if (File.Exists(path))
|
||||
{
|
||||
Log.Info($"成功加载托盘图标: {path}");
|
||||
return new Icon(path);
|
||||
}
|
||||
}
|
||||
|
||||
// 如果找不到图标文件,记录警告并使用系统默认图标
|
||||
Log.Warning("未找到app.ico文件,使用系统默认图标");
|
||||
return SystemIcons.Application;
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Warning($"加载托盘图标失败: {ex.Message},使用系统默认图标");
|
||||
return SystemIcons.Application;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
BorderThickness="1"
|
||||
CornerRadius="6" Padding="16,12" HorizontalAlignment="Center">
|
||||
<StackPanel x:Name="PreviewPanel" Orientation="Horizontal">
|
||||
<Grid>
|
||||
<Grid Width="80">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
@@ -207,14 +207,14 @@
|
||||
FontSize="12"
|
||||
FontWeight="Bold" VerticalAlignment="Center" />
|
||||
</Grid>
|
||||
<Grid Margin="15,0,0,0">
|
||||
<Grid Width="80" Margin="15,0,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" Text="↓" Foreground="Green" FontSize="12"
|
||||
FontWeight="Bold"
|
||||
VerticalAlignment="Center" Margin="0,0,2,0" />
|
||||
VerticalAlignment="Center" Margin="0,0,6,0" />
|
||||
<TextBlock Grid.Column="1" x:Name="PreviewDownloadText" Text="15.67 MB/s"
|
||||
FontSize="12"
|
||||
FontWeight="Bold" VerticalAlignment="Center" />
|
||||
|
||||
@@ -0,0 +1,185 @@
|
||||
# NetVizor 代码审查待修复事项
|
||||
|
||||
## 🚨 严重问题(立即修复 - P0)
|
||||
|
||||
### 1. 调试代码清理
|
||||
- [ ] **删除 MainWindow.xaml.cs:13** - `Console.WriteLine("1211111111111111111111111111。");`
|
||||
- [ ] **删除 NetworkRepository.cs:145** - `Console.WriteLine($"[Result] Found {appNetworks.Count()} rows.");`
|
||||
- [ ] **删除 WindowsFirewallApi.cs:439** - `Console.WriteLine(format);`
|
||||
- [ ] **删除 WebSocketManager.cs:306** - 无意义的时间日志输出
|
||||
|
||||
### 2. 配置管理修复
|
||||
- [ ] **修复 ConfigLoader.cs:26-27** - 修复空对象绑定问题,避免运行时异常
|
||||
```csharp
|
||||
// 当前问题:_config 为 null 时执行 Bind
|
||||
configuration.GetSection("AppSettings").Bind(_config);
|
||||
|
||||
// 需要先初始化对象
|
||||
_config = new AppConfig();
|
||||
configuration.GetSection("AppSettings").Bind(_config);
|
||||
```
|
||||
|
||||
### 3. 异常处理改进
|
||||
- [ ] **GlobalExceptionHandler.cs:27** - 改进用户错误提示消息,避免"恭喜你发现了BUG"这样的表达
|
||||
- [ ] 统一异常处理格式,提供用户友好的错误信息
|
||||
|
||||
## ⚠️ 安全问题(短期修复 - P1)
|
||||
|
||||
### 1. CORS配置强化
|
||||
- [ ] **EmbeddedWebServer.cs:322** - 限制CORS允许的来源,避免使用通配符 `"*"`
|
||||
```csharp
|
||||
// 当前:允许所有来源
|
||||
context.Response.Headers.Add("Access-Control-Allow-Origin", !string.IsNullOrEmpty(origin) ? origin : "*");
|
||||
|
||||
// 建议:指定具体域名
|
||||
context.Response.Headers.Add("Access-Control-Allow-Origin", "http://localhost:3000");
|
||||
```
|
||||
|
||||
### 2. 错误信息泄露防护
|
||||
- [ ] **NetworkController.cs:102** - 避免异常消息直接返回给客户端
|
||||
- [ ] **EmbeddedWebServer.cs:280** - 在错误响应中过滤敏感异常详情
|
||||
- [ ] 实现统一的错误码和用户友好的错误消息系统
|
||||
|
||||
### 3. 输入验证加强
|
||||
- [ ] **NetworkController.cs:82** - `guid.Substring(0, 8)` 添加长度检查
|
||||
```csharp
|
||||
// 添加安全检查
|
||||
name = guid.Length >= 8 ? $"Network Interface {guid.Substring(0, 8)}" : $"Network Interface {guid}";
|
||||
```
|
||||
|
||||
## 🔧 代码质量优化(中期改进 - P2)
|
||||
|
||||
### 1. 架构重构
|
||||
- [ ] **App.xaml.cs** - 违反单一职责原则,将辅助方法迁移到专门的Helper类
|
||||
- GetAllNetworkCardsHourlyDataAsync
|
||||
- GetAllNetworkCardsDailyDataAsync
|
||||
- HasNetworkDataInTimeRangeAsync
|
||||
- GetTrafficTrendsAsync
|
||||
- GetPortServiceName 等方法
|
||||
|
||||
### 2. 资源管理优化
|
||||
- [ ] **WindowsFirewallApi.cs** - 添加 IDisposable 实现,确保COM对象正确释放
|
||||
- [ ] **WebSocketManager.cs** - 优化并发操作,减少竞态条件风险
|
||||
|
||||
### 3. 依赖包更新
|
||||
- [ ] **Shell.csproj:27** - 更新预览版依赖包
|
||||
```xml
|
||||
<!-- 当前预览版 -->
|
||||
<PackageReference Include="System.Drawing.Common" Version="10.0.0-preview.6.25358.103"/>
|
||||
|
||||
<!-- 建议使用稳定版 -->
|
||||
<PackageReference Include="System.Drawing.Common" Version="8.0.0"/>
|
||||
```
|
||||
|
||||
## 📈 性能优化(长期改进 - P3)
|
||||
|
||||
### 1. 数据库查询优化
|
||||
- [ ] **NetworkRepository.cs:126-130** - 移除不必要的字符串处理
|
||||
```csharp
|
||||
// 当前代码
|
||||
if (!string.IsNullOrEmpty(appId))
|
||||
{
|
||||
appId = appId.Trim().Trim('"');
|
||||
}
|
||||
// 这个处理逻辑可能不必要,需要确认数据源
|
||||
```
|
||||
|
||||
### 2. 异步模式改进
|
||||
- [ ] **FirewallService.cs** - 减少不必要的 `Task.Run` 包装
|
||||
- [ ] **WebSocketManager.cs:302** - 将 `async void` 改为适当的异步模式
|
||||
|
||||
### 3. 缓存机制强化
|
||||
- [ ] **NetworkController.cs** - 实现线程安全的缓存机制
|
||||
- [ ] 考虑使用 MemoryCache 替代简单的 Dictionary 缓存
|
||||
|
||||
## 🧪 测试和监控(持续改进)
|
||||
|
||||
### 1. 单元测试补充
|
||||
- [ ] 为关键业务逻辑添加单元测试
|
||||
- [ ] 为异常处理路径添加测试用例
|
||||
|
||||
### 2. 日志记录完善
|
||||
- [ ] 统一日志记录格式
|
||||
- [ ] 添加关键操作的性能监控日志
|
||||
|
||||
### 3. 错误监控
|
||||
- [ ] 实现结构化错误报告
|
||||
- [ ] 添加应用程序健康检查机制
|
||||
|
||||
## 📋 优先级建议
|
||||
|
||||
**立即处理(本周内):**
|
||||
1. 删除所有调试代码
|
||||
2. 修复 ConfigLoader 问题
|
||||
3. 改进异常消息
|
||||
|
||||
**短期处理(2周内):**
|
||||
1. CORS 配置安全化
|
||||
2. 错误信息过滤
|
||||
3. 输入验证加强
|
||||
|
||||
**中长期处理(1个月内):**
|
||||
1. 代码重构和架构优化
|
||||
2. 性能提升
|
||||
3. 测试覆盖率提升
|
||||
|
||||
## 🗑️ 未使用代码清理(新发现)
|
||||
|
||||
### 1. 空模板类删除
|
||||
- [ ] **删除 Core/Class1.cs** - 空的模板类,无实际功能
|
||||
- [ ] **删除 Common.Wpf/ExceptionHandler/Class1.cs** - 空的模板类,无实际功能
|
||||
- [ ] **删除 Common.Wpf/Class1.cs** - 空的模板类,无实际功能
|
||||
|
||||
### 2. 示例代码清理
|
||||
- [ ] **删除 WinDivertNet/Class1.cs** - 包含Main方法的示例程序,非生产代码
|
||||
- [ ] **删除 Common.Net/WebSocketConn/Index.cs** - WebSocket使用示例程序,非生产代码
|
||||
- [ ] **删除 Shell/ TaskbarEmbedSample.cs** - 文件名包含空格,疑似示例代码
|
||||
- [ ] **删除 Infrastructure/Utils/FirewallManager.cs** - 注释掉的代码块
|
||||
|
||||
### 3. 重复代码合并
|
||||
- [ ] **Common/TaskQueue/Index.cs 和 Index1.cs** - 功能重复,Index.cs全部被注释,可删除
|
||||
- [ ] **合并NetworkSpeed类** - `NetworkHelper.cs:412` 和 `NetworkInfoUtil.cs:41` 都定义了NetworkSpeed
|
||||
- [ ] **统一NetworkInfo相关类** - 多个Helper类功能重复:
|
||||
- NetworkAdapterHelper.cs
|
||||
- NetworkInfoUtil.cs (NetworkMonitorHelper)
|
||||
- NetworkHelper.cs
|
||||
- EnhancedNetworkMonitorHelper.cs
|
||||
|
||||
## 🔧 依赖包优化(新发现)
|
||||
|
||||
### 1. 预览版包更新
|
||||
- [ ] **所有预览版包统一升级为稳定版**:
|
||||
- `Microsoft.Extensions.Configuration: 10.0.0-preview.4.25258.110` → `8.0.0`
|
||||
- `Microsoft.Extensions.Configuration.Json: 10.0.0-preview.4.25258.110` → `8.0.0`
|
||||
- `System.Management: 10.0.0-preview.6.25358.103` → `8.0.0`
|
||||
- `System.Drawing.Common: 10.0.0-preview.6.25358.103` → `8.0.0`
|
||||
- `System.Drawing.Common: 10.0.0-preview.4.25258.110` → `8.0.0`
|
||||
|
||||
### 2. 开发版包更新
|
||||
- [ ] **Serilog相关包升级为稳定版**:
|
||||
- `Serilog: 4.3.1-dev-02373` → `4.0.0`
|
||||
- `Serilog.Settings.Configuration: 9.0.1-dev-02317` → `8.0.0`
|
||||
- `Serilog.Sinks.Console: 6.0.1-dev-00953` → `6.0.0`
|
||||
|
||||
### 3. 重复依赖清理
|
||||
- [ ] **Application.csproj** - Fleck包重复引用(第10行和第14行)
|
||||
- [ ] **Utils.Firewall.csproj** - FirewallManager包可能与自实现的WindowsFirewallApi重复
|
||||
|
||||
## ⚡ 性能优化建议(新发现)
|
||||
|
||||
### 1. LINQ查询优化
|
||||
- [ ] **WindowsFirewallApi.cs:243-299** - 连续多次Where调用,可合并为单个Where条件
|
||||
- [ ] **防火墙规则统计优化** - ToList()调用过早,应延迟到最终需要时
|
||||
|
||||
### 2. 字符串操作优化
|
||||
- [ ] **NetworkController.cs:82** - 使用StringBuilder代替字符串拼接
|
||||
- [ ] **使用Span<char>** - 对于大量字符串处理场景
|
||||
|
||||
### 3. 异步优化
|
||||
- [ ] **减少Task.Run包装** - FirewallService.cs过度使用Task.Run包装同步方法
|
||||
- [ ] **使用ConfigureAwait(false)** - 非UI线程的异步调用应添加ConfigureAwait(false)
|
||||
|
||||
---
|
||||
*代码审查完成时间:2025-01-25*
|
||||
*审查范围:NetVizor.Backend 全项目*
|
||||
*补充审查时间:2025-01-25*
|
||||
Reference in new issue
Block a user