グローバル パッケージ、キャッシュ、および一時フォルダーを管理する

NuGet では、パッケージのインストール、更新、または復元を行う場合は常に、プロジェクト構造の外にある複数のフォルダーで、以下のようなパッケージとパッケージ情報を管理します。

名前 説明および場所 (ユーザーごと)
global-packages "グローバル パッケージ" フォルダーは、ダウンロードされた任意のパッケージが NuGet でインストールされる場所です。 各パッケージは、パッケージ ID とバージョン番号と一致するサブフォルダーに完全に展開されます。 PackageReference 形式を使用するプロジェクトでは常に、このフォルダーから直接パッケージを使用します。 packages.config を使用する場合、パッケージは "グローバル パッケージ" フォルダーにインストールされ、プロジェクトの packages フォルダーにコピーされます。
  • Windows: %userprofile%\.nuget\packages
  • Mac/Linux: ~/.nuget/packages
  • NUGET_PACKAGES 環境変数、globalPackagesFolderまたは repositoryPath構成設定 (それぞれ、PackageReference および packages.config を使用している場合)、あるいは RestorePackagesPath MSBuild プロパティ (MSBuild のみ) を使用して、オーバーライドします。 環境変数は、構成設定よりも優先されます。
http-cache Visual Studio パッケージ マネージャー (NuGet 3.x 以降) および dotnet ツールでは、ダウンロードしたパッケージのコピーをこのキャッシュに格納し (.dat ファイルとして保存)、各パッケージ ソースのサブフォルダーに整理します。 パッケージは展開されず、キャッシュには 30 分の有効期限があります。
  • Windows: %localappdata%\NuGet\v3-cache
  • Mac/Linux: ~/.local/share/NuGet/v3-cache
  • NUGET_HTTP_CACHE_PATH 環境変数を使用してオーバーライドします。
temp NuGet が、さまざまな操作中に一時ファイルを格納するフォルダーです。
  • Windows: %temp%\NuGetScratch
  • Mac: /tmp/NuGetScratch
  • Linux: /tmp/NuGetScratch<username>
  • NUGET_SCRATCH 環境変数を使用してオーバーライドします。
  • plugins-cache 4.8+ NuGet が、操作要求の結果を格納するフォルダーです。
    • Windows: %localappdata%\NuGet\plugins-cache
    • Mac/Linux: ~/.local/share/NuGet/plugins-cache
    • NUGET_PLUGINS_CACHE_PATH 環境変数を使用してオーバーライドします。

    Note

    NuGet 3.5 以前では、"HTTP キャッシュ" ではなく、%localappdata%\NuGet\Cache にある "パッケージ キャッシュ" を使用していました。

    キャッシュと "グローバル パッケージ" フォルダーを使用することで、NuGet は多くの場合、コンピューター上に既に存在するパッケージのダウンロードを回避して、インストール、更新、および復元処理のパフォーマンスを改善しました。 また、PackageReference を使用する場合、"グローバル パッケージ" フォルダーによって、プロジェクト フォルダー内にダウンロードされたパッケージを保持することを回避できます。プロジェクト フォルダーでは、パッケージがソース コントロールに誤って追加される可能性があります。グローバル パッケージ フォルダーによって、コンピューター ストレージでの NuGet の全体の影響が緩和されます。

    パッケージの取得を求められたら、NuGet は最初に "グローバル パッケージ" フォルダー内を調べます。 パッケージの正確なバージョンがここになかった場合、NuGet は HTTP 以外のすべてのパッケージ ソースを確認します。 それでもパッケージが見つからない場合、--no-http-cache を付加した dotnet.exe コマンドまたは -NoHttpCache を付加した nuget.exe コマンドを指定していないかぎり、NuGet は "HTTP キャッシュ" でパッケージを探します。 パッケージがキャッシュになかった場合、またはキャッシュが使用されていない場合、NuGet は HTTP 経由でパッケージを取得します。

    詳細については、「パッケージ インストールのしくみ」を参照してください。

    フォルダーの場所を表示する

    次のように nuget locals コマンドを使用して場所を表示できます。

    # Display locals for all folders: global-packages, http cache, temp and plugins cache
    nuget locals all -list
    

    典型的な出力は次のとおりです (Windows、"user1" は現在のユーザー名)。

    http-cache: C:\Users\user1\AppData\Local\NuGet\v3-cache
    global-packages: C:\Users\user1\.nuget\packages\
    temp: C:\Users\user1\AppData\Local\Temp\NuGetScratch
    plugins-cache: C:\Users\user1\AppData\Local\NuGet\plugins-cache
    

    (package-cache は NuGet 2.x で使用され、NuGet 3.5 以前で表示されます。)

    次のように dotnet nuget locals コマンドを使用して、フォルダーの場所を表示することもできます。

    dotnet nuget locals all --list
    

    典型的な出力は次のとおりです (Mac の場合、"user1" は現在のユーザー名)。

    info : http-cache: /home/user1/.local/share/NuGet/v3-cache
    info : global-packages: /home/user1/.nuget/packages/
    info : temp: /tmp/NuGetScratch
    info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
    

    典型的な出力は次のとおりです (Linux の場合、"user1" は現在のユーザー名)。

    info : http-cache: /home/user1/.local/share/NuGet/v3-cache
    info : global-packages: /home/user1/.nuget/packages/
    info : temp: /tmp/NuGetScratchuser1
    info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
    

    単一フォルダーの場所を表示するには、all ではなく、http-cacheglobal-packagestemp、または plugins-cache を使用します。

    ローカル フォルダーをクリアする

    パッケージのインストールに関する問題が発生した場合、または、リモート ギャラリーからパッケージをインストールしていることを確認する場合は、フォルダーを指定してクリアする locals --clear オプションまたは locals -clear (nuget.exe) を使用するか、すべてのフォルダーをクリアする all を使用します。

    # Clear the 3.x+ cache (use either command)
    dotnet nuget locals http-cache --clear
    nuget locals http-cache -clear
    
    # Clear the 2.x cache (NuGet CLI 3.5 and earlier only)
    nuget locals packages-cache -clear
    
    # Clear the global packages folder (use either command)
    dotnet nuget locals global-packages --clear
    nuget locals global-packages -clear
    
    # Clear the temporary cache (use either command)
    dotnet nuget locals temp --clear
    nuget locals temp -clear
    
    # Clear the plugins cache (use either command)
    dotnet nuget locals plugins-cache --clear
    nuget locals plugins-cache -clear
    
    # Clear all caches (use either command)
    dotnet nuget locals all --clear
    nuget locals all -clear
    

    現在 Visual Studio で開いているプロジェクトで使用されているパッケージはすべて、"グローバル パッケージ" フォルダーからクリアされません。

    Visual Studio 2017 以降では、[ツール] > [NuGet パッケージ マネージャー] > [パッケージ マネージャー設定] メニュー コマンドを使用して、[すべての NuGet キャッシュをクリア] を選択します。 キャッシュの管理は現在、パッケージ マネージャー コンソール経由では利用できません。 Visual Studio 2015 では、代わりに CLI コマンドを使用します。

    NuGet option command for clearing caches

    トラブルシューティング エラー

    以下のエラーは、nuget locals または dotnet nuget localsを使用した場合に発生する可能性があります。

    • "別のプロセスで使用されているため、プロセスはファイル '<パッケージ>' にアクセスできません" または "ローカル リソースをクリアできませんでした。1 つ以上のファイルを削除できません"

      フォルダーにある 1 つまたは複数のファイルが、別のプロセスで使用中です。たとえば、"グローバル パッケージ" フォルダー内のパッケージを参照する Visual Studio プロジェクトが開いています。 それらのプロセスを閉じて、もう一度やり直してください。

    • "エラー: パス '<パス>' へのアクセスが拒否されました" または "ディレクトリが空ではありません"

      キャッシュのファイルを削除するためのアクセス許可がありません。 可能であれば、フォルダーのアクセス許可を変更して、もう一度やり直してください。 それができない場合は、システム管理者に問い合わせてください。

    • "エラー: 指定されたパスかファイル名、またはその両方が長すぎます。 完全に記述されたファイル名は 260 文字未満である必要があり、ディレクトリ名は 248 文字未満である必要があります。

      フォルダー名を短くして、もう一度やり直してください。