A:修复托盘图标加载问题并完善代码审查文档

- 修复TrayIconManager托盘图标加载失败问题,增加多路径尝试和异常处理
- 调整SettingsWindow界面布局,优化网速显示区域宽度和间距
- 添加完整的代码审查TODO文档,涵盖安全问题、性能优化和代码清理建议

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
jimmyandClaude committed 2025-08-14 23:14:31 +08:00
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" />
+185
View File
@@ -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&lt;char&gt;** - 对于大量字符串处理场景
### 3. 异步优化
- [ ] **减少Task.Run包装** - FirewallService.cs过度使用Task.Run包装同步方法
- [ ] **使用ConfigureAwait(false)** - 非UI线程的异步调用应添加ConfigureAwait(false)
---
*代码审查完成时间:2025-01-25*
*审查范围:NetVizor.Backend 全项目*
*补充审查时间:2025-01-25*