次の方法で共有


NuGet パッケージの復元を使用してパッケージを復元する

NuGet パッケージの復元では、プロジェクト ファイルまたは packages.config ファイルに一覧表示されているすべてのプロジェクトの依存関係が復元されます。 パッケージは、 nuget restoredotnet restoremsbuild -t:restore、または Visual Studio を使用して手動で復元できます。 dotnet buildコマンドとdotnet run コマンドはパッケージを自動的に復元し、プロジェクトのビルド時にパッケージを自動的に復元するように Visual Studio を構成できます。

よりクリーンな開発環境を促進し、リポジトリのサイズを小さくするために、パッケージの復元では、プロジェクトのすべての依存関係をソース管理に格納しなくても使用できるようになります。 パッケージ バイナリを除外するようにソース管理リポジトリを構成するには、「 パッケージとソース管理」を参照してください。

パッケージ復元の動作

パッケージの復元では、プロジェクト ファイル内の<PackageReference> (.csproj など) またはpackages.configファイル内の<package>に一致する状態にすべてのパッケージ依存関係がインストールされます。 パッケージの復元では、最初に必要に応じてプロジェクトの直接の依存関係がインストールされ、依存関係グラフ全体にそれらのパッケージの依存関係がインストールされます。

必要なパッケージがまだインストールされていない場合、NuGet は最初にローカル グローバル パッケージまたは HTTP キャッシュ フォルダーからパッケージを取得しようとします。 パッケージがローカル フォルダーにない場合、NuGet は Visual Studio で構成されているすべてのソース ( Tools>Options>NuGet パッケージ マネージャー>Package ソース) からパッケージをダウンロードしようとします。

復元中、NuGet はパッケージ ソースの順序を無視し、要求に応答する最初のソースのパッケージを使用します。 復元に失敗した場合、NuGet はすべてのソースをチェックするまで失敗を示しません。 その後、NuGet は、リスト内の最後のソースについてのみエラーを報告します。 このエラーは、他のエラーが個別に一覧表示されない場合でも、どのソースにもパッケージが存在しなかったことを意味します。

NuGet の動作の詳細については、「 一般的な NuGet 構成」を参照してください。

パッケージの復元

プロジェクト ファイルまたは packages.config ファイル内のパッケージ参照が正しい場合は、推奨されるツールを使用してパッケージを復元します。

復元が成功した後:

  • <PackageReference>を使用するプロジェクトの場合、パッケージはローカルのグローバル パッケージ フォルダーに存在し、プロジェクト obj/project.assets.json ファイルが再作成されます。
  • packages.configを使用するプロジェクトの場合、パッケージはプロジェクトの packages フォルダーに表示されます。
  • これで、プロジェクトが正常にビルドされます。

プロジェクト ファイルまたは packages.config ファイル内のパッケージ参照が正しくなく、目的の状態と一致しない場合は、パッケージの復元を使用するのではなく、正しいパッケージをインストールまたは更新します。

ソリューション エクスプローラーのエラー アイコンなど、パッケージの復元を実行した後にパッケージまたはパッケージ関連のエラーが見つからない場合は、「 パッケージの復元エラーのトラブルシューティング」の手順に従うか、パッケージを 再インストールまたは更新 します。 Visual Studio のパッケージ マネージャー コンソールには、パッケージを再インストールするためのオプションがいくつか用意されています。 詳細については、「 パッケージ更新の使用」を参照してください。

Visual Studio でパッケージを復元する

Windows 上の Visual Studio では、パッケージを自動的または手動で復元できます。 まず、 ツール>Options>NuGet パッケージ マネージャーを使用してパッケージの復元を構成します。

Visual Studio パッケージの復元オプションを構成する

Tools>Options>NuGet パッケージ マネージャー>General で、次のパッケージ復元オプションを構成します。

NuGet パッケージ マネージャーのオプションを示すスクリーンショット。

NuGet に不足しているパッケージのダウンロードを許可する

[ NuGet に不足しているパッケージのダウンロードを許可する ] を選択して、パッケージの復元と [NuGet パッケージの復元 ] コマンドを有効にします。 グローバル packageRestore/enabled ファイルの Trueで、Windows の %AppData%\Roaming\NuGet または Mac および Linux の ~/.nuget/NuGet/ において、設定をに設定します。

<configuration>
    <packageRestore>
        <add key="enabled" value="True" />
    </packageRestore>
</configuration>

packageRestore/enabled設定をグローバルにオーバーライドするには、Visual Studio を開くかビルドを開始する前に、環境変数 EnableNuGetPackageRestore を True または False に設定します。

コンピューターのすべてのユーザーに対してパッケージ復元を有効または無効にするには、Windows ではグローバル NuGet.Config ファイルに構成設定を追加します。このファイルは、時には特定の IDE\バージョン\SKU Visual Studio フォルダーの下の %ProgramData%\NuGet\Config に存在します。また、Mac/Linux では ~/.local/share にあります。 その後、個々のユーザーは、プロジェクト レベルで必要に応じて選択的に復元を有効にすることができます。 NuGet が複数の構成ファイルに優先順位を付ける方法の詳細については、 一般的な NuGet 構成に関するページを参照してください。

Important

packageRestore設定を直接編集する場合は、オプションに現在の値が表示されるように Visual Studio 再起動します。

ビルド中に不足しているパッケージを自動的にチェックする

Visual Studio からビルドを実行するときに、不足しているパッケージを自動的に復元するには、Visual Studio のビルド中に不足しているパッケージを自動的にチェックするを選択します。 この設定は、MSBuild コマンド ラインからのビルド実行には影響しません。 この選択により、packageRestore/automatic ファイルの True セクションで、packageRestore に設定します。

<configuration>
    <packageRestore>
        <add key="automatic" value="True" />
    </packageRestore>
</configuration>

ビルド中にパッケージの復元を有効にするには、[オプション]Visual Studio で [NuGet で不足しているパッケージのダウンロードを許可する] を選択し、ビルド中に不足しているパッケージを自動的にチェックする必要があります。

既定のパッケージ管理形式を選択する

NuGet には、 PackageReferencepackages.configの 2 つのパッケージ管理形式があります。[ パッケージ管理] のドロップダウン リストから、使用する形式を選択します。 また、最初のパッケージインストールでフォーマットの選択を許可するかどうかを選択することもできます。

  • プロジェクトが両方のパッケージ管理形式をサポートしていない場合、NuGet はプロジェクトと互換性のあるパッケージ管理形式を使用します。これは、オプションで設定した既定値ではない可能性があります。 その後、NuGet では、そのオプションを選択した場合でも、最初のインストール時に選択を求めるメッセージは表示されません。

  • パッケージ マネージャー コンソールを使用してプロジェクトに最初のパッケージをインストールする場合、そのオプションが [オプション] で選択されている場合でも、NuGet は形式の選択を求められません。

パッケージを手動または自動で復元する

[オプション] でパッケージの復元を有効にした後、ソリューション エクスプローラーでソリューションを右クリックし、[NuGet パッケージの復元] を選択してパッケージをいつでも復元できます。

[オプション] で自動復元を有効にした場合、テンプレートからプロジェクトを作成するか、プロジェクトをビルドするときに、パッケージの復元が自動的に行われます。 NuGet 4.0 以降では、SDK スタイルのプロジェクトを変更すると、復元も自動的に行われます。

<PackageReference>を使用するプロジェクトの場合は、Visual Studio ソリューション エクスプローラーの [依存関係>Packages] の下にパッケージ参照が表示されます。 ビルドを手動で復元または実行するときに正しくインストールされないパッケージは 、ソリューション エクスプローラーにエラー アイコンを表示します。 プロジェクトを右クリックし、[ NuGet パッケージの管理] を選択し、 NuGet パッケージ マネージャー を使用して、影響を受けるパッケージをアンインストールして再インストールします。 詳細については、「 パッケージの再インストールと更新」を参照してください。

エラーが表示された場合 、このプロジェクトは、このコンピューターに存在しない NuGet パッケージを参照しています。または、 1 つ以上の NuGet パッケージを復元する必要がありますが、同意が付与されていないために復元できなかった場合は、自動復元を有効にしていることを確認してください。 古いプロジェクトについては、「 パッケージの自動復元への移行」を参照してください。 パッケージ復元エラーのトラブルシューティングも参照してください。

dotnet CLI を使用した復元

dotnet restore コマンドは、プロジェクト ファイルに一覧表示されるパッケージを<PackageReference>で復元します。 詳細については、 プロジェクト ファイルの PackageReference を参照してください。

.NET Core 2.0 以降の dotnet build コマンドと dotnet run コマンドは、パッケージを自動的に復元します。 NuGet 4.0 の時点で、 dotnet restorenuget restoreと同じコードを実行します。

dotnet restoreを使用してパッケージを復元するには:

  1. コマンド ラインを開き、プロジェクト ファイルを含むディレクトリに切り替えます。
  2. dotnet restore を実行します。

Important

不足しているパッケージ参照をプロジェクト ファイルに追加するには、 dotnet add package を使用します。これは、 restoreも実行します。

NuGet CLI を使用した復元

NuGet CLI 復元 コマンドは、不足しているパッケージをダウンロードしてインストールします。 このコマンドは、 PackageReference またはパッケージ 参照 にpackages.config を使用するプロジェクトで動作します。

installと同様に、restore コマンドはパッケージをディスクにのみ追加しますが、プロジェクト ファイルや packages.configは変更しません。プロジェクトの依存関係を追加するには、Visual Studio パッケージ マネージャー UI またはコンソールを使用します。

パッケージを復元するには、次のコマンドを実行します。

nuget restore <projectPath>

restore コマンドは、指定したプロジェクト パス内のソリューション ファイルまたは package.config ファイルを使用します。

たとえば、現在のディレクトリ内の MySolution.sln のすべてのパッケージを復元するには、次のコマンドを実行します。

nuget restore MySolution.sln

PackageReferenceを使用する SDK スタイル以外のプロジェクトの場合は、代わりに msbuild -t:restore を使用してパッケージを復元します。

MSBuild を使用した復元

msbuild -t:restore を使用して、Visual Studio 2017 以降に含まれている NuGet 4.x+ および MSBuild 15.1 以降のパッケージを復元できます。

このコマンドは、パッケージ参照に PackageReference を使用するプロジェクトのパッケージを復元します。 MSBuild 16.5 以降では、で使用する場合、-p:RestorePackagesConfig=true パッケージ参照もサポートされます。

MSBuild 復元を使用するには:

  1. 開発者コマンド プロンプトを検索し、Windows の [スタート] メニューからプロンプトを開始して、MSBuild に必要なすべてのパスを構成して、開発者コマンド プロンプトを開きます。

  2. プロジェクト フォルダーに切り替えて、「 msbuild -t:restore」と入力します。

  3. 復元が完了したら、「 msbuild 」と入力してプロジェクトをリビルドします。 ビルドが正常に完了したことが MSBuild 出力に示されていることを確認します。

msbuild -restoreを使用すると、ビルドが既定のターゲットであるため、restoreの実行、プロジェクトの再読み込み、ビルドを行うことができます。 詳細については、「 1 つの MSBuild コマンドを使用した復元とビルド」を参照してください。

Azure Pipelines または Azure DevOps Server を使用した復元

Azure Pipelines でビルド定義を作成するときに、ビルド タスクの前に NuGet CLI 復元 タスクまたは dotnet CLI 復元 タスクを定義に含めることができます。 一部のビルド テンプレートには、既定で復元タスクが含まれています。

TFS 2013 以降のチーム ビルド テンプレートを使用する場合、Azure DevOps Server および TFS 2013 以降では、ビルド中にパッケージが自動的に復元されます。 また、コマンド ライン復元オプションを実行するビルド ステップを含めたり、必要に応じてビルド テンプレートを新しいバージョンに移行したりすることもできます。 詳細については、「 Team Foundation Build を使用してパッケージの復元を設定する」を参照してください。

パッケージのバージョンを制約する

任意のメソッドを使用した NuGet 復元では、 packages.config またはプロジェクト ファイルで指定したバージョン制約が適用されます。

  • packages.configでは、依存関係のallowedVersions範囲を指定できます。 詳細については、「 アップグレード バージョンの制約」を参照してください。 例えば次が挙げられます。

    <package id="Newtonsoft.json" version="6.0.4" allowedVersions="[6,7)" />
    
  • プロジェクト ファイルでは、依存関係の Version プロパティでバージョン範囲を指定できます。 例えば次が挙げられます。

    <PackageReference Include="Newtonsoft.json" Version="[6,7)" />
    

どちらの場合も、「パッケージのバージョン管理」で説明されている表記 を使用します

リモート パッケージ ソースからの復元を強制する

既定では、「グローバル パッケージとキャッシュ フォルダーの管理」の説明に従って、NuGet の復元操作では、ローカル グローバル パッケージと http キャッシュ フォルダーのパッケージが使用されます これらのローカル パッケージを使用しないようにするには、次のオプションを使用します。

すべてのローカル キャッシュをクリアするには:

  • Visual Studio で、Tools>>> の [すべての NuGet キャッシュのクリア] ボタンを選択します。
  • dotnet CLI では、 dotnet nuget locals all --clearを使用します。
  • NuGet CLI で、 nuget locals all -clearを使用します。

グローバル パッケージ フォルダー内のパッケージを使用しないようにするには、

  • nuget locals global-packages -clearまたはdotnet nuget locals global-packages --clearを使用してフォルダーをクリアします。
  • NUGET_PACKAGES環境変数を別のフォルダーに一時的に設定します。
  • NuGet.Configファイルを作成し、またはglobalPackagesFolderPackageReferenceを別のフォルダーに設定します。 詳細については、 構成設定を参照してください。
  • MSBuild の場合のみ、 RestorePackagesPath プロパティを使用して別のフォルダーを指定します。

HTTP キャッシュでパッケージを使用しないようにするには:

  • nuget locals http-cache -clearまたはdotnet nuget locals http-cache --clearを使用してキャッシュをクリアします。
  • NUGET_HTTP_CACHE_PATH環境変数を別のフォルダーに一時的に設定します。
  • nuget restoreの場合は、-NoHttpCache オプションを使用するか、dotnet restoreの場合は --no-http-cache オプションを使用します。 これらのオプションは、Visual Studio パッケージ マネージャーまたはコンソールを使用した復元操作には影響しません。

パッケージの自動復元に移行する

以前のバージョンの NuGet では、MSBuild 統合パッケージの復元がサポートされました。 非推奨の MSBuild 統合パッケージ復元を使用するプロジェクトは、パッケージの自動復元に移行する必要があります。

通常、これらのプロジェクトには、 NuGet.config、nuget.exeNuGet.targets の 3 つのファイルを含む .nuget フォルダーが含まれています。 NuGet.targets ファイルを使用すると、NuGet は MSBuild 統合アプローチを使用するため、削除する必要があります。

パッケージの自動復元に移行するには:

  1. パッケージの自動復元を有効にします。
  2. Visual Studio を閉じます。
  3. .nuget/nuget.exe.nuget/NuGet.targets を削除します
  4. プロジェクト ファイルごとに、 <RestorePackages> 要素を削除し、 NuGet.targets への参照を削除します。

パッケージの自動復元をテストするには:

  1. ソリューションから packages フォルダーを削除します。
  2. Visual Studio でソリューションを開き、ビルドを開始します。 パッケージの自動復元では、ソース管理に追加せずに、各依存関係パッケージをダウンロードしてインストールする必要があります。

次のステップ