次の方法で共有


NuGet パッケージがインストールされるとどうなりますか?

簡単に言うと、さまざまな NuGet ツールは、通常、プロジェクト ファイルまたは packages.config内のパッケージへの参照を作成し、パッケージの復元を実行して、パッケージを効果的にインストールします。 例外は nuget install。パッケージは packages フォルダーにのみ展開され、他のファイルは変更されません。

一般的なプロセスは次のとおりです。

  1. ( nuget.exeを除くすべてのツール)パッケージ識別子とバージョンをプロジェクト ファイルまたは packages.configに記録します。

    インストール ツールが Visual Studio または dotnet CLI の場合、ツールは最初にパッケージのインストールを試みます。 互換性がない場合、パッケージはプロジェクト ファイルまたは packages.configに追加されません。

  2. パッケージを取得します。

    • グローバル パッケージとキャッシュ フォルダーの管理に関するページで説明されているように、パッケージが (正確な識別子とバージョン番号で) グローバル パッケージ フォルダーに既にインストールされているかどうかを確認します。

    • パッケージが グローバル パッケージ フォルダーにない場合は、 構成ファイルに一覧表示されているソースからパッケージの取得を試みます。 この時点で、パッケージ ソース マッピングの構成が適用されます。 オンライン ソースの場合は、-NoHttpCachenuget.exe コマンドで指定されているか、--no-http-cachedotnet restoreが指定されていない限り、まず HTTP キャッシュからパッケージを取得するように試みます。 (Visual Studio と dotnet add package は常にキャッシュを使用します)。パッケージがキャッシュから使用されている場合は、出力に "CACHE" が表示されます。 キャッシュの有効期限は 30 分です。

    • パッケージがフローティング バージョンを使用して指定されている場合、または最小バージョンがない場合、NuGet はすべてのソースに連絡して最適な一致を確認します。 例: 1.*(, 2.0.0]

    • パッケージが HTTP キャッシュにない場合は、構成に一覧表示されているソースからパッケージのダウンロードを試みます。 パッケージがダウンロードされると、出力に "GET" と "OK" が表示されます。 NuGet は、http トラフィックを通常の詳細度でログに記録します。

    • ソースからパッケージを正常に取得できない場合、この時点で NU1103 などのエラーでインストールが失敗します。 nuget.exeコマンドからのエラーは、チェックされた最後のソースのみを示しますが、パッケージはどのソースからも使用できなかったことを意味します。

    パッケージを取得するときに、NuGet 構成のソースの順序が適用される場合があります。

    • NuGet は、HTTP ソースを確認する前に、ソースのローカル フォルダーとネットワーク共有を確認します。
  3. グローバル パッケージとキャッシュ フォルダーの管理の説明に従って、パッケージとその他の情報のコピーをhttp キャッシュ フォルダーに保存します。

  4. ダウンロードした場合は、ユーザーごとのグローバル パッケージ フォルダーに パッケージを インストールします。 NuGet は、パッケージ識別子ごとにサブフォルダーを作成し、インストールされているパッケージの各バージョンのサブフォルダーを作成します。

  5. NuGet は、必要に応じてパッケージの依存関係をインストールします。 このプロセスでは、「 依存関係の解決」の説明に従って、プロセス内のパッケージのバージョンが更新される可能性があります。

  6. 他のプロジェクト ファイルとフォルダーを更新します。

    • PackageReference を使用するプロジェクトの場合は、 obj/project.assets.jsonに格納されているパッケージ依存関係グラフを更新します。 パッケージの内容自体は、どのプロジェクト フォルダーにもコピーされません。
    • パッケージでapp.configを使用する場合は、web.configを更新します。
  7. (Visual Studio のみ)パッケージの readme ファイル (使用可能な場合) を Visual Studio ウィンドウに表示します。

NuGet パッケージを使用して生産性の高いコーディングをお楽しみください。