Browse Source

libSkiaSharp.so 包不对问题,引发另外一个乱码问题

refactor/namespace-and-layering
root 4 weeks ago
parent
commit
706536feae
  1. 38
      modify.md

38
modify.md

@ -2,6 +2,44 @@
## 2025年修改记录
### 修复 publish-linux.bat 脚本中 SkiaSharp 版本号不匹配和强制复制问题
- **日期**: 2025年1月
- **问题描述**:
1. 运行 `publish-linux.bat` 时,脚本查找的是 SkiaSharp.NativeAssets.Linux.NoDependencies 版本 3.119.1,但项目实际引用的是 3.119.0 版本
2. 即使修复了版本号,发布目录 `publish\linux-x64` 中产生的 `libSkiaSharp.so` 仍然不正确,因为脚本在发现发布目录已存在文件时会跳过复制,导致使用了 `dotnet publish` 自动复制的错误版本(88.1),而不是从正确的 NuGet 包路径 `C:\Users\changeself\.nuget\packages\skiasharp.nativeassets.linux.nodependencies\3.119.0\runtimes\linux-x64\native\libSkiaSharp.so` 复制的正确版本(119.0)
3. 发布后运行时出现版本不兼容错误:`The version of the native libSkiaSharp library (88.1) is incompatible with this version of SkiaSharp. Supported versions of the native libSkiaSharp library are in the range [119.0, 120.0).`
- **问题原因**:
- 项目文件 `AuroraDesk.csproj` 中引用的是 `SkiaSharp.NativeAssets.Linux.NoDependencies` 版本 3.119.0
- 正确的库文件路径应该是 `C:\Users\changeself\.nuget\packages\skiasharp.nativeassets.linux.nodependencies\3.119.0\runtimes\linux-x64\native\libSkiaSharp.so`
- 脚本中所有查找路径都使用了 3.119.1 版本,导致找不到正确的库文件
- **关键问题**:脚本逻辑有缺陷,如果发布目录中已存在 `libSkiaSharp.so`(可能是 `dotnet publish` 自动复制的错误版本),脚本会跳过复制操作,直接使用错误的版本
- 发布时可能使用了系统旧版本的 libSkiaSharp.so (88.1),而不是从 NuGet 包中复制的正确版本 (119.0)
- **解决方案**:
1. **修复版本号**:将 `publish-linux.bat` 脚本中所有查找 SkiaSharp 本地库的路径从 3.119.1 改为 3.119.0
2. **强制复制逻辑**
- 在复制之前,先删除发布目录中任何已存在的 `libSkiaSharp.so` 文件(包括 `runtimes\linux-x64\native\` 目录和根目录)
- 移除了"如果发布目录已存在文件则跳过复制"的逻辑
- 确保总是从正确的 NuGet 包路径强制复制,无论发布目录中是否已存在文件
- 添加了详细的日志输出,显示源路径和目标路径
3. **优化查找顺序**
- 优先查找用户 NuGet 包目录(最常见位置)
- 其次查找 NUGET_PACKAGES 环境变量路径
- 最后查找本地 packages 目录
4. **改进错误提示**:如果找不到库文件,显示期望的完整路径
- **涉及文件**:
- `AuroraDesk/publish-linux.bat` - 修复版本号并改进复制逻辑,确保总是从正确的 NuGet 包路径复制
- **技术要点**:
- 确保发布脚本中的版本号与项目文件中引用的包版本完全一致
- SkiaSharp 3.119.0 需要本地库版本 119.0-120.0 范围
- **重要**:必须强制从正确的 NuGet 包路径复制,不能依赖 `dotnet publish` 自动复制的版本,因为可能包含错误的版本
- 发布脚本必须在复制前清理已存在的文件,确保使用正确版本
- 版本号不匹配或使用错误的库文件会导致运行时版本不兼容错误
- **测试建议**:
- 重新运行 `publish-linux.bat` 脚本
- 验证脚本输出显示从正确的 NuGet 包路径复制文件
- 检查发布目录 `publish\linux-x64\runtimes\linux-x64\native\libSkiaSharp.so` 是否存在且版本正确
- 在 Linux 系统上运行应用程序,验证不再出现版本不兼容错误
### 新增无线网卡信息读取功能
- **日期**: 2025年1月
- **功能描述**: 添加了读取所有无线网卡信息的功能,支持 Windows 和 Linux 平台,使用工厂模式实现平台特定逻辑

Loading…
Cancel
Save