共用方式為


NuGet 與 SDK 作為項目參考

本文旨在協助開發人員選擇將其軟體封裝為 NuGet 套件或軟體開發工具包(SDK)。 具體而言,它會討論在Visual Studio專案中參考兩者之間的差異。

  • NuGet 是開放原始碼套件管理系統,可簡化將函式庫加入專案的過程。 針對 .NET(包括 .NET Core),NuGet 是 Microsoft 支援的共用程式碼機制。 NuGet 會定義如何建立、裝載和取用 .NET 的套件,並提供每個角色的工具。 在 Visual Studio 中,您可以使用 套件管理員 使用者介面,將 NuGet 套件新增至專案。

  • SDK 是 Visual Studio 視為單一參考項目的檔案集合。 當您選擇 [新增參考]時,Visual Studio 中的 [參考管理員] 對話框會列出與目前專案相關的所有 SDK。 當您將 SDK 新增至專案時,您可以透過 IntelliSense、工具箱視窗、設計工具、物件瀏覽器、MSBuild、部署、偵錯和封裝來存取該 SDK 的所有內容。

我應該使用哪一種機制?

下表可協助您比較 SDK 的參考功能與 NuGet 的參考功能。

特徵 SDK 支援 SDK 附注 NuGet 支援 NuGet 附注
機制會參考一個實體,然後所有檔案和功能都可供使用。 Y 您可以使用 [參考管理員] 對話框來新增 SDK,而且所有檔案和功能都可在開發工作流程期間使用。 Y
MSBuild 會自動取用元件和 Windows 元數據 (.winmd) 檔案。 Y SDK 中的參考會自動傳遞至編譯程式。 Y
MSBuild 會自動取用 .h 或 .lib 檔案。 Y SDKName.props 檔案會告訴 Visual Studio 如何設定 Visual C++ 目錄與相關設定,以便自動使用 .h.lib 檔案。 N
MSBuild 會自動取用 .js.css 檔案。 Y [方案總管]中,您可以展開 [JavaScript SDK 參考] 節點以顯示個別 .js.css 檔案,然後將這些檔案拖曳至原始程序檔,以產生 <source include/> 標記。 SDK 支援 F5 和自動套件設定。 Y
MSBuild 會自動在 工具箱中新增 控制件 Y 工具箱 可以調用 SDK,並在您指定的索引標籤中顯示控制項。 N
機制支援 Visual Studio Installer for extensions (VSIX)。 Y VSIX 有特殊的指令清單和邏輯來建立 SDK 套件 Y VSIX 可以內嵌在另一個安裝程式中。
物件瀏覽器 列舉參考。 Y 物件瀏覽器 會自動取得 SDK 中的參考清單並加以列舉。 N
檔案和鏈接會自動新增至 [參考管理員] 對話框(說明連結等等自動填入) Y [參考管理員] 對話方塊會自動列舉 SDK,以及提供說明連結和 SDK 相依性清單。 N NuGet 提供自己的 [管理 NuGet 套件] 對話框。
機制支援多個架構。 Y SDK 可以運送多個組態。 MSBuild 會針對每個專案組態取用適當的檔案。 N
機制支援多個組態。 Y SDK 可以運送多個組態。 根據項目架構,MSBuild 會針對每個項目架構取用適當的檔案。 N
機制可以指定「不要複製」。 Y 根據檔案是放在 \redist 還是 \designtime 資料夾中,您可以控制要複製到應用程式套件中的哪些檔案。 N 您在套件清單中宣告要複製的檔案。
內容會出現在本地化的檔案中。 Y SDK 中的當地語系化 XML 檔案會自動包含在內,以取得更佳的設計時間體驗。 N
MSBuild 支援同時取用多個版本的 SDK。 Y SDK 支援同時取用多個版本。 N 這不算是參考。 您無法在專案中同時使用多個版本的 NuGet 檔案。
機制支援指定適用的目標架構、Visual Studio 版本和項目類型。 Y [參考管理員] 對話框和 [工具箱] 只會顯示套用至專案的 SDK,讓使用者更輕鬆地選擇適當的 SDK。 Y (部分) Pivot 是目標框架。 使用者介面沒有篩選。 在安裝期間,可能會傳回錯誤。
機制支援為原生 WinMD 文件指定註冊資訊。 Y 您可以在 SDKManifest.xml中指定 .winmd 檔案與 .dll 檔案之間的相互關聯。 N
該機制支援指定對其他 SDK 的相依性。 Y SDK 只會通知使用者;使用者仍必須安裝它們,並手動參考它們。 Y NuGet 會自動提取它們;使用者未收到通知。
機制會與 Microsoft Store 概念整合,例如應用程式指令清單和架構標識符。 Y SDK 必須傳遞商店特有的概念,以便封裝和 F5 能夠正確地使用該商店中可用的 SDK。 N
機制會與 Windows 8.x 市集應用程式的應用程式偵錯管線整合。 Y SDK 必須傳遞市集特定概念,讓封裝和 F5 能夠正確搭配市集中提供的 SDK 運作。 Y NuGet 內容會成為專案的一部分。 不需要特別的 F5 考慮。
機制會與應用程式指令清單整合。 Y SDK 必須傳遞市集特定概念,讓封裝和 F5 能夠正確搭配市集中提供的 SDK 運作。 Y NuGet 內容會成為專案的一部分。 不需要特別的 F5 考量。
機制會部署非參考檔案(例如,部署執行 Windows 8.x 市集應用程式測試的測試架構)。 Y 如果您在 \redist 資料夾中卸除檔案,則會自動部署檔案。 Y
機制會自動在Visual Studio IDE 中新增平臺SDK。 Y 如果您在具有特定配置的特定位置卸除 Windows 8 SDK 或 Windows Phone SDK,SDK 會自動與所有 Visual Studio 功能整合。 N
機制支援乾淨的開發人員環境。 (也就是說,不需要安裝,而且從原始程式碼控管進行簡單的擷取即可正常運作。) N 因為您參考 SDK,因此您必須個別提交解決方案和 SDK。 您可以從 MSBuild 反覆運算 SDK 的兩個非登錄預設位置簽入 SDK(如需詳細資訊,請參閱 建立軟體開發工具包)。 或者,如果自定義位置是由 SDK 所組成,您可以在項目檔中指定下列程式代碼:

<PropertyGroup>
  <SDKReferenceDirectoryRoot>
  C:\MySDKs
  </SDKReferenceDirectoryRoot>
</PropertyGroup>

然後將 SDK 放置在該位置。
Y 您可以檢視解決方案,Visual Studio 會立即辨識並且對檔案採取動作。
您可以加入大量的現有套件作者社群。 N/A 社群是新的。 Y
您可以加入龐大的現有套件使用者社群。 N/A 社群是新的。 Y
您可以加入合作夥伴的生態系統(自訂資源庫、存放庫等等)。 N/A 可用的存放庫包括 Visual Studio Marketplace、Microsoft 下載中心,以及 Microsoft Store。 Y
此機制會與持續整合建置伺服器整合,以便進行套件的建立和使用。 Y SDK 必須將命令行上的簽入位置 (SDKReferenceDirectoryRoot 屬性) 傳遞至 MSBuild。 Y
機制同時支援穩定和發行前版本套件版本。 Y 支援將多個版本的參考新增至 SDK。 Y
機制支援已安裝套件的自動更新。 Y 當 SDK 作為 VSIX 或 Visual Studio 自動更新的一部分隨附時,會自動提供通知。 Y
機制包含用於建立及取用套件的獨立 .exe 檔案。 Y SDK 包含 MSBuild.exe Y
套件可以檢入版本控制。 Y 您無法檢入 [檔] 節點以外的任何專案,這表示延伸模組 SDK 可能不會被檢入。 擴充功能 SDK 的大小可能很大。 Y
您可以使用 PowerShell 介面來建立及取用套件。 Y (消費),N(創建) 沒有用來建立 SDK 的工具。 耗用量會在命令行上執行 MSBuild。 Y
您可以使用符號套件進行偵錯支援。 Y 如果您將 .pdb 檔案放入 SDK 中,系統會自動處理這些檔案。 Y
機制支援套件管理員自動更新。 N/A SDK 會使用 MSBuild 進行修訂。 Y
機制支援輕量型指令清單格式。 Y SDKManifest.xml 支援許多屬性,但通常需要小型子集。 Y
此機制適用於所有 Visual Studio 版本。 Y SDK 支援所有 Visual Studio 版本。 Y NuGet 支援所有 Visual Studio 版本。