.NET Core 和 .NET 標準類庫項目類型有什麼區別?
在 Visual Studio 中,您至少可以創建三種不同類型的類庫:
- 類庫(.NET 框架)
- 類庫(.NET 標準)
- 類庫 (.NET Core)
雖然第一個是我們多年來一直使用的,但我一直有一個主要的困惑點是何時使用 .NET Standard 和 .NET Core 類庫類型。我最近在嘗試多目標不同的框架版本和創建單元測試項目時被這個問題困擾。
*那麼,類庫(.NET Standard)和類庫(.NET Core)*有什麼區別,為什麼兩者都存在,我們什麼時候應該使用一個而不是另一個?
我們什麼時候應該使用一個而不是另一個?
該決定是兼容性和 API 訪問之間的權衡。
如果您想增加與您的庫兼容的應用程序的數量,並且您可以減少庫可以訪問的 .NET API 表面積,請使用 .NET Standard 庫。
當您想增加庫可以訪問的 .NET API 表面積時,請使用 .NET Core 庫,並且您可以只允許 .NET Core 應用程序與您的庫兼容。
例如,面向 .NET Standard 1.3 的庫將與面向 .NET Framework 4.6、.NET Core 1.0、通用 Windows 平台 10.0 以及支持 .NET Standard 1.3 的任何其他平台的應用程序兼容。不過,該庫將無法訪問 .NET API 的某些部分。例如,該
Microsoft.NETCore.CoreCLR包與 .NET Core 兼容,但與 .NET Standard 不兼容。類庫(.NET Standard)和類庫(.NET Core)有什麼區別?
兼容性:以 .NET Standard 為目標的庫將在任何符合 .NET Standard 的執行時上執行,例如 .NET Core、.NET Framework、Mono / Xamarin。另一方面,面向 .NET Core 的庫只能在 .NET Core 執行時上執行。
API 外圍應用:.NET Standard 庫包含 .NET 中的所有內容
NETStandard.Library,而 .NET Core 庫包含 .NET 中的所有內容Microsoft.NETCore.App。後者包括大約 20 個附加庫,其中一些我們可以手動添加到我們的 .NET Standard 庫中(例如System.Threading.Thread),而其中一些與 .NET Standard 不兼容(例如Microsoft.NETCore.CoreCLR)。此外,.NET Core 庫指定執行時並附帶應用程序模型。例如,使單元測試類庫可執行是很重要的。
為什麼兩者都存在?
暫時忽略庫,.NET Standard 存在的原因是為了可移植性;它定義了一組 .NET 平台同意實現的 API。任何實現 .NET Standard 的平台都與面向該 .NET Standard 的庫兼容。這些兼容平台之一是 .NET Core。
回到庫,.NET Standard 庫模板可以在多個執行時上執行(以犧牲 API 表面積為代價)。相反,.NET Core 庫模板的存在是為了訪問更多 API 表面區域(以犧牲兼容性為代價)並指定建構執行檔的平台。
這是一個互動式矩陣,它顯示了哪個 .NET Standard 支持哪個 .NET 實現以及有多少 API 表面積可用。