如何在PowerShell脚本中使用NuGet包?

Jam*_* Ko 13 .net c# powershell nuget nuget-package

我正在编写一个使用Mono.Cecil库的PowerShell脚本.我如何安装软件包,以便在脚本中使用它?谢谢!

(为了记录,我在询问之前尝试了谷歌搜索,但所有出现的结果都是关于PMC和Visual Studio的结果,这与这个问题无关.)

Chr*_*son 8

~5.x版本的PowerShell默认包含nuget包源,但它不起作用:

PS > Get-PackageSource 
Name                             ProviderName     IsTrusted  Location
----                             ------------     ---------  --------
nuget.org                        NuGet            False      https://api.nuget.org/v3/index.json
PSGallery                        PowerShellGet    False      https://www.powershellgallery.com/api/v2/
Run Code Online (Sandbox Code Playgroud)

如果你Unregister-PackageSource -Source nuget.orgRegister-PackageSource -Location https://www.nuget.org/api/v2 -name nuget.org -Trusted我能够Install-Package从PowerShell 安装nuget papckages ,而不是在visual studio中.从这个SO答案中得到了想法.

我不知道除去nuget.org源码的v3版本还有什么其他可能的负面影响,但我已经用这种方式运行一段时间了,事情看起来还不错,你的里程可能会有所不同.

作为替代方案,这里有一个例子,通过拉下nuget.exe来完成工作,即使它是一个非常糟糕的方式来执行此操作:

function Install-InvokeOracleSQL {
    $ModulePath = (Get-Module -ListAvailable InvokeSQL).ModuleBase
    Set-Location -Path $ModulePath

    if ($PSVersionTable.Platform -ne "Unix") {
        $SourceNugetExe = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
        $TargetNugetExe = ".\nuget.exe"
        Invoke-WebRequest $sourceNugetExe -OutFile $targetNugetExe
        .\nuget.exe install Oracle.ManagedDataAccess
        Remove-Item -Path $TargetNugetExe
    } elseif ($PSVersionTable.Platform -eq "Unix") {
        nuget install Oracle.ManagedDataAccess.Core -Version 2.12.0-beta2
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我发现 `Register-PackageSource nugetV2 https://www.nuget.org/api/v2 -ProviderName NuGet` 后面跟着 `install-package` _packageName_ `-Source nugetV2` 让我无需取消注册任何内容。@JamesKo我确实必须手动执行 `add-type -path` _longPathName_ - 我不确定您期望其中有多少是自动的。`Get-Package` 将显示它的安装位置(并且它会自动解压)。如果您想在没有管理员权限的情况下运行,请包含“-Scope CurrentUser” (4认同)

cra*_*aig 7

通过指定源,我能够在PowerShell 6(核心)中安装软件包:

PS > install-package gudusoft.gsqlparser -source https://www.nuget.org/api/v2
Run Code Online (Sandbox Code Playgroud)


Jam*_* Ko -22

由于找不到好的解决方案,我最终只能通过 NuGet API 手动下载并解压该包。

对于那些感兴趣的人/其他有此问题的人,是我使用的代码。

  • “我放弃了”并不真正有资格作为答案,当然也不是公认的答案。它充其量只是作为评论,因此问题似乎仍未得到解答(并且可以被可能知道该怎么做的人找到)。 (27认同)
  • @Tullo_x86:接受的分数始终完全取决于提问者。这确实符合答案,因为它试图提出解决方案。我们可以使用投票来表明我们认为它作为答案有多大帮助。 (9认同)