powershell - 在 PowerShell 脚本中,如何还原包以解决错误:此项目引用此计算机上缺少的 NuGet 包
问题描述
我的任务是编写一个 PowerShell 脚本来下载给定分支的最新源代码,重新构建并部署它。我编写的脚本能够下载项目,并且在大多数情况下能够重建它们。但是在一个 web 项目中,我得到了这个错误:
error : This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is ..\packages\Microsoft.Net.Compilers.2.0.1\build\Microsoft.Net.Compilers.props.
我已经研究过 PowerShell 是否具有类似于 VS 命令提示符中可用的 Update-Package 命令,但找不到等效命令。
我知道 Packages 有一个 cmdlet,但据我所知,它们用于更新特定的包......我需要的是能够让它下载/更新项目中引用的所有包。
一些可能感兴趣的点...
当我获得有关新空文件夹解决方案的最新信息时,包文件夹中唯一的东西是 Modernizr.2.6.2。无论我是在 VS 还是在我的 PowerShell 脚本中获得最新版本,这都是一样的。
如果我在 VS 2017 中打开解决方案,我可以毫无问题地重建解决方案。它下载/安装十几个其他包...其中一个是错误消息中提到的 Microsoft.Net.Compilers.props 包。
但是,如果我删除所有内容并重新下载源代码,然后通过我的 PowerShell 脚本调用 MSBuild 来重建解决方案,我会收到上述错误。它似乎永远不会下载/安装丢失的软件包。
任何人都知道如何在我的 PowerShell 脚本中使用 MSBuild 来重建项目并让它自动更新/安装它需要的任何包?
谢谢
解决方案
我能够在此页面上找到解决问题的方法:使用 PowerShell 快速还原 NuGet 包
该页面上有一个脚本,它使用 Nuget.exe 根据 packages.config 下载包:
#This will be the root folder of all your solutions - we will search all children of
this folder
$SOLUTIONROOT = "C:\Projects\"
#This is where your NuGet.exe is located
$NUGETLOCATION = "C:\Projects\NuGet\NuGet.exe"
Function RestoreAllPackages ($BaseDirectory)
{
Write-Host "Starting Package Restore - This may take a few minutes ..."
$PACKAGECONFIGS = Get-ChildItem -Recurse -Force $BaseDirectory -ErrorAction SilentlyContinue | Where-Object { ($_.PSIsContainer -eq $false) -and ( $_.Name -eq "packages.config")}
ForEach($PACKAGECONFIG in $PACKAGECONFIGS)
{
Write-Host $PACKAGECONFIG.FullName
$NugetRestore = $NUGETLOCATION + " install " + " '" + $PACKAGECONFIG.FullName + "' -OutputDirectory '" + $PACKAGECONFIG.Directory.parent.FullName + "\packages'"
Write-Host $NugetRestore
Invoke-Expression $NugetRestore
}
}
RestoreAllPackages $SOLUTIONROOT
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
我修改了这个函数并将其添加到我的 PS 脚本中,并首先调用它来下载所有包,这样就完成了!
推荐阅读
- javascript - 将 JSON 转成表格纯 javascript
- c++ - 在两个线程都在使用时将一个线程移动到另一个线程
- macos - macOS 升级到 Big Sur 后 Virtualbox 启动失败
- python - cs50 pset7 房屋名册
- java - 以编程方式设置骆驼 ActiveMQ 组件选项
- python - Python - 如何在 CSV 输出中添加分隔符和删除换行符?
- javascript - 如何在 Angular 中的 NodeJS 发送的错误对象中查找错误消息
- python - window.blit(textR,name) UnboundLocalError: 在赋值之前引用了局部变量“name”
- python - 使用布尔数组的不同组合作为键的熊猫 groupby 结果
- python - 如何在python中的所有元音上使用“开头”?