我正在编写一个使用 Mono.Cecil 库的 PowerShell 脚本。我该如何安装这个包,以便在脚本中使用它?谢谢!
(顺便说一下,我在提问前尝试过谷歌搜索,但搜到的都是关于 PMC 和 Visual Studio 的结果,与这个问题无关。)
我正在编写一个使用 Mono.Cecil 库的 PowerShell 脚本。我该如何安装这个包,以便在脚本中使用它?谢谢!
(顺便说一下,我在提问前尝试过谷歌搜索,但搜到的都是关于 PMC 和 Visual Studio 的结果,与这个问题无关。)
我能够通过指定源在PowerShell 6 (Core)中安装一个软件包:
PS > install-package gudusoft.gsqlparser -source https://www.nuget.org/api/v2
默认情况下,PowerShell 的 ~5.x 版本包含了一个 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.org
和Register-PackageSource -Location https://www.nuget.org/api/v2 -name nuget.org-Trusted
,则可以仅使用Install-Package
在PowerShell中安装NuGet包,而不是在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
}
}
无法找到一个好的解决方案,最终我只能通过 NuGet API 手动下载和解压缩包。
对于那些感兴趣或遇到同样问题的人,这里是我使用的代码。
Unregister-PackageSource
-Source
nuget.org
- Josh GustUnregister-PackageSource -Name nuget.org -WhatIf
,这个命令似乎可以工作,但-Source
更加正确,因此我已经编辑了答案。 - Chris MagnusonRegister-PackageSource nugetV2 https://www.nuget.org/api/v2 -ProviderName NuGet
,然后再用install-package
packageName-Source nugetV2
命令就可以直接安装所需的包,无需注销任何内容。@JamesKo,我确实需要手动添加add-type -path
_longPathName_,我不确定你是否期望所有这些操作都是自动完成的。使用Get-Package
命令可以查看已安装的位置(并且它会自动解压缩)。如果你想以非管理员权限运行,请使用-Scope CurrentUser
参数。 - unbob