本地编译通过,服务器怎么编译没通过?
有时候会遇到本地编译没问题,在服务器编译出错的问题,曾经遇到因为csproj 项目文件中的引用没有被更新而报错的问题。
项目依赖的库版本升级了,所以就手动更改了 packages.config 中的版本和allowedVersions,然后 restore 项目,本地编译通过。
服务器上为什么编译不过,是因为缺少依赖库文件,项目编译时候还是通过csproj 中的依赖来编译的,本地能通过是本地的 packages 文件夹内存在历史引用版本。
引起这个问题的根本原因是更新allowedVersions [2.10.1,2.10.2) 这个区间没有包含到老版本引用的 2.8.1.255,所以正确的方案是先修改allowedVersions的右边区间[2.8.1,2.10.2) 保留左边区间,然后updage-package xxxx 后回头再修改左边区间到[2.10.1,2.10.2)
实验失败细节1:更新allowedVersion,区间不包含老版本,删除本地packages 文件夹中的引用,后尝试 nuget restore,能把老版本的package 拉到 packages 文件夹下,但是Update-Package 提示在升级前请restore。
实验成功细节2:手动更新allowedVersion, 手动把里面的依赖版本也更新到allowedVersion区间,直接update-package xxx 能成功
也就是说,启动update-Package的时候会检查version跟allowedversion的关系,如果不在区间证明存在不同步的情况,所以提示先restore
另外个解决方案,升级到PackageReference 来引用包。
项目中存在packages.config 这种都是nuget 1.0 时代的产物(版本升级需要修改packages.config 和csproj文件中的版本),建议升级为PackageReference 新的库引用(版本升级只需要修改一个地方)
对于 需要同时修改packages.config 和csproj, 通过Update-Package xxxx -Version xxxx来更新,会同时修改两个地方的依赖版本。最好的办法是用 PackageReference 来实现库的引用。
修改后如果提示 需要做restore. 输入 nuget restore 来对项目更新引用
从 packages.config 迁移到 PackageReference