运行nuget restore project.csproj时遇MSB4086错误,寻求解决
错误原因
你遇到的错误是因为NuGet生成的临时restore目标文件中,存在条件判断'$(MSBuildAssemblyVersion)' < '15.0',但你的MSBuild 4.8版本并未定义MSBuildAssemblyVersion属性,导致该属性值为空,无法完成数值比较,从而触发MSB4086错误。
解决办法
方法1:手动指定MSBuildAssemblyVersion属性
执行nuget restore时,通过/p参数手动传入该属性值(对应MSBuild 4.8版本可设为4.8):nuget restore project.csproj /p:MSBuildAssemblyVersion=4.8或者直接用MSBuild命令执行restore:
msbuild project.csproj /t:Restore /p:MSBuildAssemblyVersion=4.8方法2:升级MSBuild版本
该错误本质是旧版MSBuild与新版NuGet工具不兼容导致。若环境允许,升级到MSBuild 15.0及以上版本(比如Visual Studio 2017及以上自带的MSBuild,路径通常为C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin),新版本会自动定义MSBuildAssemblyVersion属性,从根源避免问题。方法3:临时修改NuGet目标文件(仅应急用)
找到报错的临时目标文件(如C:\Windows\TEMP\NuGetScratch\q43aqbtc.toq.nugetrestore.targets),定位到第459行的条件,修改为同时判断属性是否为空:Condition="'$(MSBuildAssemblyVersion)' == '' OR '$(MSBuildAssemblyVersion)' < '15.0'"注意:此方法是临时修复,NuGet每次restore都会重新生成临时文件,下次执行仍可能报错,仅适合紧急场景。
内容的提问来源于stack exchange,提问作者mansing shinde

