如何在 PowerShell 脚本中使用 NuGet 包

本文关键字:NuGet 脚本 PowerShell | 更新日期: 2023-09-27 18:33:38

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

(为了记录,在问这个问题之前,我确实尝试了谷歌搜索,但出现的只是关于PMC和Visual Studio的结果,这与这个问题无关。

如何在 PowerShell 脚本中使用 NuGet 包

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

PS > install-package gudusoft.gsqlparser -source https://www.nuget.org/api/v2

~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/

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

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

作为替代方案,这里有一个例子,它通过拉下 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
    }
}

找不到好的解决方案,我最终只是通过 NuGet API 手动下载和解压缩包。

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