MSBuild命令行报Nuget包缺失错误但Visual Studio编译正常如何解决
问题原因
该报错是因为命令行MSBuild的NuGet包查找逻辑和Visual Studio不一致:Microsoft.Extensions.Configuration.UserSecrets这类包默认会优先还原到全局NuGet缓存路径%userprofile%\.nuget\packages,但你的项目配置里强制要求从本地相对路径..\packages读取该包的.props导入文件,因此触发校验失败。
可行解决方案
方案1:指定MSBuild使用全局NuGet缓存路径编译(最推荐)
执行编译命令时额外添加NuGet包路径参数,让MSBuild可以识别全局缓存里的UserSecrets包,和Visual Studio编译逻辑完全对齐,不需要修改任何项目配置:
msbuild vi8.server.core.csproj -t:Restore,Clean,Rebuild -p:RestorePackagesPath=%userprofile%\.nuget\packages
方案2:强制所有包还原到本地相对路径
在解决方案根目录新建nuget.config文件,添加如下配置,强制所有依赖包都还原到..\packages路径:
<?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="globalPackagesFolder" value="..\packages" /> </config> </configuration>
配置添加完成后重新执行带restore参数的MSBuild命令即可。
方案3:移除NuGet导入校验逻辑
不需要校验包导入的场景可以直接编辑vi8.server.core.csproj文件,找到名为EnsureNuGetPackageBuildImports的Target节点,直接删除或者注释该节点,编译时就不会再校验.props文件是否存在于本地相对路径。
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

