背景
流水线里报错,常常有大量这样的警告,眼花缭乱.如果我们能每次把流水线生成的最新的包的版本号,设置为“下限”.
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
这样修改后:
如果新版本存在 → 使用新版本
如果新版本不存在 → 构建失败并明确报错,而不是悄悄降级
避免了使用不兼容的旧版本导致的编译错误
要不要立即提交这个修复?