如何通过CLI像Visual Studio一样还原NuGet包至./packages目录
解决旧.NET Framework项目NuGet包还原到./packages目录的问题
针对旧.NET Framework项目(依赖packages.config管理NuGet包),要实现和Visual Studio打开项目时一致的包还原行为,可采用以下方案:
方法1:使用NuGet CLI执行还原
这是最贴合VS内部还原逻辑的方式,因为VS本质也是调用NuGet处理packages.config类型的依赖:
- 可以直接使用Visual Studio 2022自带的NuGet CLI,路径通常为:
C:\Program Files (x86)\Microsoft Visual Studio\2022\<你的VS版本>\Common7\IDE\CommonExtensions\Microsoft\NuGet\nuget.exe,建议将其加入系统PATH方便调用。 - 在解决方案根目录执行命令:
该命令会扫描解决方案下所有项目,将nuget restore <你的解决方案路径>.sln -PackagesDirectory ./packagespackages.config中声明的依赖包下载到指定的./packages目录。
方法2:通过MSBuild指定还原参数
若不想单独调用NuGet CLI,可通过MSBuild强制触发packages.config的还原逻辑:
msbuild <你的解决方案路径>.sln /t:Restore /p:RestorePackagesConfig=true /p:PackagesDirectory=./packages
/p:RestorePackagesConfig=true:强制MSBuild处理packages.config类型的依赖还原/p:PackagesDirectory=./packages:明确指定包的下载目录
为什么之前的命令无效?
msbuild <csproj> -t:restore:默认优先处理PackageReference类型的依赖,而旧.NET Framework项目用的是packages.config,因此仅会还原netstandard这类用PackageReference的子项目dotnet msbuild /t:restore:dotnet CLI对旧.NET Framework的packages.config支持有限,会误判项目已处于最新状态,不会触发实际的包下载
额外提示
确保解决方案根目录存在nuget.config文件(VS创建项目时自动生成),其中配置了正确的NuGet源;若项目混合了PackageReference和packages.config,上述两种方法均可同时处理两类依赖的还原。
内容的提问来源于stack exchange,提问作者Jirka Picek
相关产品推荐
相关产品推荐

