diff --git a/modify.md b/modify.md index 28d44da..9c9e9f4 100644 --- a/modify.md +++ b/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 平台,使用工厂模式实现平台特定逻辑