如何用PowerShell下载NuGet包 解决.NET项目MSBuild构建报错
解决方法
问题根源
本地用Visual Studio能正常构建,是因为VS默认会在构建前自动执行NuGet包还原流程,但直接在PowerShell中调用MSBuild.exe不会自动触发这一步。你的项目是传统.NET Framework项目,采用packages.config格式管理依赖,不会自动拉取缺失包到本地packages目录,自然会报找不到MaterialDesignThemes.targets的错误。
操作步骤
- 准备NuGet命令行工具
你可以提前把nuget.exe放到代码仓库中,或者在PowerShell脚本中拉取对应版本的nuget.exe到CI工作目录,保证运行环境可以直接调用NuGet命令。 - 构建前先执行包还原
一定要在调用MSBuild之前先跑还原命令,优先指向解决方案.sln文件,不要只传单个项目文件,避免漏掉关联依赖。注意指定还原的包目录和你项目里引用的路径一致,也就是报错信息里提到的../packages目录,示例命令:
如果你项目配置了私有NuGet源,追加./nuget.exe restore 你的项目解决方案名.sln -PackagesDirectory ../packages-ConfigFile参数指向项目内的NuGet.Config配置文件即可。 - 执行MSBuild构建
还原完成后再跑构建命令即可。如果是在GitHub Action的Windows运行环境中,不建议硬编码VS2017的MSBuild路径,用系统自带的vswhere工具自动定位MSBuild路径更稳妥,不会因为环境内VS版本变动导致路径失效,定位和构建的示例命令:$msbuildPath = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe | Select-Object -First 1 & $msbuildPath 你的项目解决方案名.sln /t:Rebuild /p:Configuration=Release
避坑提示
- 不要跳过还原步骤直接构建,传统.NET Framework的packages.config格式依赖不支持MSBuild自动还原
- 还原时的包目录路径必须和项目文件里写的引用路径完全匹配,不然就算包下载到本地,还是会报找不到文件的错
- 如果还原时提示找不到某个包,先检查NuGet源配置是否正确,不要直接跳过错误去跑构建
内容的提问来源于stack exchange,提问作者Hyunjin-Kim
相关产品推荐
相关产品推荐

