gpt4 book ai didi

powershell - 在 PowerShell 脚本中,如何还原包以解决错误 : This project references NuGet package(s) that are missing on this computer

转载 作者:行者123 更新时间:2023-12-05 03:58:30 25 4
gpt4 key购买 nike

我的任务是编写一个 PowerShell 脚本来下载给定分支的最新源代码,重建并部署它。我编写的脚本能够下载项目,并且在大多数情况下能够重建它们。但是在一个网络项目中我得到了这个错误:

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 是否有 Update-Package 命令,就像 VS 命令提示符中可用的命令一样,但一直无法找到等效命令。

我知道有一个用于包的 cmdlet,但据我所知,它们用于更新特定包...我需要的是能够让它下载/更新项目中引用的所有包。

一些可能感兴趣的点...

当我了解新的空文件夹的最新解决方案时,包文件夹中唯一的东西是 Modernizr.2.6.2。无论我是在 VS 中还是在我的 PowerShell 脚本中获得最新版本,这都是一样的。

如果我在 VS 2017 中打开解决方案,我可以毫无问题地重建解决方案。它下载/安装了十几个其他包...其中一个是错误消息中提到的 Microsoft.Net.Compilers.props 包。

但是,如果我删除所有内容并重新下载源代码,然后通过我的 PowerShell 脚本调用 MSBuild 来重建解决方案,我会收到上述错误。它似乎从不下载/安装丢失的包。

有人知道如何在我的 PowerShell 脚本中使用 MSBuild 来重建项目并让它自动更新/安装它需要的任何包吗?

谢谢

最佳答案

我能够在此页面上找到问题的解决方案:Quickly Restore NuGet Packages With PowerShell

在那个页面上有一个脚本,它使用 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 脚本中,并首先调用它来下载所有包,这样就完成了工作!

关于powershell - 在 PowerShell 脚本中,如何还原包以解决错误 : This project references NuGet package(s) that are missing on this computer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57876352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com