背景

流水线里报错,常常有大量这样的警告,眼花缭乱.如果我们能每次把流水线生成的最新的包的版本号,设置为“下限”.

D:\gitlab-runner\runners\runner3\builds\EszzPu3h4\0\loda.framework.erp\framework\passport\Yee.Passport.Services\Yee.Passport.Services.csproj : warning NU1602: Yee.Passport.Core 未提供依赖项 Yee.Data.Passport.SqlClient 的包含下限。已解决 Yee.Data.Passport.SqlClient 2024.7.8698 的近似最佳匹配。

解决方案

你说得对! 这个 warning 的根本原因是 NuGet 包引用没有指定最小版本约束

🔍 当前问题

<PackageReference Include="Yee.Data.Passport.SqlClient" Version="$(Yee_Web_Security_Version)" />

这样写的问题:

  • 如果变量解析出的版本在 NuGet 服务器上不存在
  • NuGet 会"猜测"一个"近似最佳匹配"
  • 结果拿到了旧版本 2024.7.8698

✅ 解决方案:使用版本范围约束

修改为明确的下限约束

<PackageReference Include="Yee.Data.Passport.SqlClient" Version="[$(Yee_Web_Security_Version),)" />

或者更严格的精确版本

<PackageReference Include="Yee.Data.Passport.SqlClient" Version="[$(Yee_Web_Security_Version)]" />

🔧 立即修复

✅ 已修复版本约束

修改说明:

旧: Version="$(Yee_Web_Security_Version)"
新: Version="[$(Yee_Web_Security_Version),)"

[version,) 的含义:

  • [ = 包含这个版本(下限)
  • ,) = 没有上限,允许更高版本
  • 如果指定版本不存在,NuGet 会报错而不是降级

🚀 提交并触发 CI

cd Z:\gitlab\loda.framework.erp\framework\passport; git add Yee.Passport.Core/Yee.Passport.Core.csproj; git commit -m "添加 Yee.Data.Passport.SqlClient 版本下限约束,防止降级到旧版本"; git push origin master

这样修改后:

  • ✅ 如果新版本存在 → 使用新版本
  • ❌ 如果新版本不存在 → 构建失败并明确报错,而不是悄悄降级
  • 🎯 避免了使用不兼容的旧版本导致的编译错误

要不要立即提交这个修复?