web-dev-qa-db-ja.com

PowerShellスクリプト内でNuGetパッケージを使用するにはどうすればよいですか?

Mono.Cecil ライブラリを利用するPowerShellスクリプトを作成しています。スクリプト内からパッケージを使用できるようにするには、どのようにパッケージをインストールしますか?ありがとう!

(記録のために、これを尋ねる前にグーグルを試しましたが、出てきたのは [〜#〜] pmc [〜#〜] とVisualStudioに関する結果だけでした。これはこれには関係ありません。質問。)

14
James Ko

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の場合、Visual Studio内ではなく、PowerShellからInstall-Packageだけでnugetパッケージをインストールできました。 this SO answer からアイデアを得ました。

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
    }
}
8
Chris Magnuson

ソースを指定することで、PowerShell 6(コア)にパッケージをインストールできました。

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