今天是 2020.11.13 我在 CI 服务器上更新 dotnet 到 dotnet 5 以及 VS 到 16.8.1 最新版本,但是我在刚刚不得不回滚了环境…… 因为构建不通过
现象
使用经典的 NuGet 还原加上 msbuild 的构建,如以下代码将会构建失败
nuget restore
msbuild /p:Configuration=Release
构建失败核心提示如下
C:\Program Files\dotnet\sdk\5.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(241,5): error NETSDK1005: 资产文件“C:\gitlab\builds\SKH4KvNc\0\Lindexi\Lindexi-Doubi\demo\Lindexi.Doubi.DesktopModeDemo\obj\project.assets.json”没有“net45”的目标。确保已运行还原,且“net45”已包含在项目的 TargetFrameworks 中。 [C:\gitlab\builds\SKH4KvNc\0\Lindexi\Lindexi-Doubi\demo\Lindexi.Doubi.DesktopModeDemo\Lindexi.Doubi.DesktopModeDemo.csproj]
原因
本质原因是 NuGet 没有跟上步伐,因为通过 dotnet restore 是可以的
不完美解决方法
如果项目里面不存在旧项目格式,以及 VS 插件项目等等项目,试试用 dotnet 命令构建
dotnet build -c release
或者使用 dotnet 的还原配合 msbuild 的构建
dotnet restore
msbuild /p:Configuration=Release
但是以上方法都有缺点,在一些使用旧版本格式的 csproj 项目文件里面,以及一些 VSTO 项目,或者引用了 COM 的项目和 VS 插件项目等类型里面,将因为 dotnet restore 的不支持导致后续构建不通过。或者在 dotnet build 里面使用了 dotnet core 版本的 msbuild 丢失了旧版本 dotnet framework 版本的 msbuild 支持的旧版本功能,让一些旧版本项目构建不通过
我当前的 CI 服务器上依然承担了一定数量的旧版本项目的任务,因此 dotnet 5 环境暂时还不能支持,只能回滚了
彻底的解决方法
彻底的解决方法是: 再等几天
更新到 NuGet 5.8 就能解决
我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入
如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流