安裝 NuGet 套件時會發生什麼事?
簡單地說,不同的 NuGet 工具通常會在專案檔或 packages.config
中建立套件的參考,然後執行套件還原,從而有效地安裝套件。 例外狀況是 nuget install
,它只會將套件展開到 packages
資料夾,且不會修改其他任何檔案。
一般程序如下:
(除
nuget.exe
外的所有工具) 將套件識別碼和版本記錄到專案檔或packages.config
中。如果安裝工具是 Visual Studio 或 dotnet CLI,則工具會先嘗試安裝套件。 如果不相容,則套件不會新增至專案檔或
packages.config
。取得套件:
檢查套件 (依據確切的識別碼和版本號碼) 是否已安裝在 global-packages 資料夾中,如管理全域套件和快取資料夾中所述。
如果套件不在 global-packages 資料夾中,請嘗試從組態檔中所列的來源擷取它。 此時會套用封裝來源對應 組態。 針對線上來源,除非已使用
nuget.exe
命令指定-NoHttpCache
,或已使用dotnet restore
指定--no-http-cache
,否則會先嘗試從 HTTP 快取擷取套件。 (Visual Studio,且dotnet add package
一律使用快取。如果使用快取中的封裝,輸出中會出現 「CACHE」。。 快取的到期時間為 30 分鐘。如果使用浮動版本或不含最低版本來指定套件,NuGet 會連絡所有來源以找出最相符專案。 範例:
1.*
、(, 2.0.0]
。如果套件不在 HTTP 快取中,則會嘗試從組態中所列的來源下載套件。 如果已下載套件,輸出中會出現 "GET" 和 "OK"。 NuGet 會記錄正常詳細程度的 HTTP 流量。
如果無法從任何來源成功取得套件,此時安裝會失敗,並出現錯誤,例如 NU1103。 請注意,來自
nuget.exe
命令的錯誤只會顯示所檢查的最後一個來源,但表示無法從任何來源使用套件。
取得套件時,可能套用 NuGet 組態中的來源順序為:
- NuGet 會先檢查來源本機資料夾和網路共用,然後才檢查 HTTP 來源。
將套件複本和其他資訊儲存在 http-cache 資料夾中,如管理全域套件和快取資料夾中所述。
如果已下載,則將套件安裝到每個使用者的 global-packages 資料夾中。 NuGet 會針對每個套件識別碼建立子資料夾,然後針對每個已安裝的套件版本建立子資料夾。
NuGet 會視需要安裝套件相依性。 此程序可能更新流程中的套件版本,如相依性解析中所述。
更新其他專案檔和資料夾:
- 針對使用 PackageReference 的專案,更新儲存在
obj/project.assets.json
中的套件相依性關係圖。 套件內容本身不會複製到任何專案資料夾中。 - 如果套件使用來源和組態檔轉換,則更新
app.config
和/或web.config
。
- 針對使用 PackageReference 的專案,更新儲存在
(僅限 Visual Studio) 在 Visual Studio 視窗中顯示套件的讀我檔案 (如果有的話)。
使用 NuGet 套件享受具生產力的程式碼!