Коли ми повинні використовувати одне над іншим?
Це рішення є компромісом між сумісністю та доступом до API.
Використовуйте бібліотеку .NET Standard, коли ви хочете збільшити кількість прикладних програм, сумісних з вашою бібліотекою, і у вас все в порядку зі зменшенням поверхні .NET API, до якої може отримати доступ бібліотека.
Використовуйте бібліотеку .NET Core, коли ви хочете збільшити поверхню .NET API, до якої може отримати доступ ваша бібліотека, і ви все в порядку, дозволяючи лише додаткам .NET Core бути сумісними з вашою бібліотекою.
Наприклад, бібліотека, націлена на .NET Standard 1.3, буде сумісна з програмами, націленими на .NET Framework 4.6, .NET Core 1.0, Universal Windows Platform 10.0 та будь-яку іншу платформу, яка підтримує .NET Standard 1.3. Однак бібліотека не матиме доступу до деяких частин API .NET. Наприклад, 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 API: .NET Стандартні бібліотеки поставляються із усім, у NETStandard.Library
той час як .NET Core бібліотеки поставляються із усім, що знаходиться в Microsoft.NETCore.App
. Остання включає приблизно 20 додаткових бібліотек, деякі з яких ми можемо додати вручну до нашої бібліотеки .NET Standard (такі як System.Threading.Thread
), а деякі з них не сумісні зі стандартом .NET (наприклад Microsoft.NETCore.CoreCLR
).
Крім того, бібліотеки .NET Core задають час виконання та поставляються з моделлю програми. Наприклад, це важливо зробити так, щоб зробити бібліотеки модульних тестових класів запущеними.
Чому обидва існують?
На деякий час ігноруючи бібліотеки, причина існування .NET Standard полягає в мобільності; він визначає набір API, які платформи .NET погоджуються реалізувати. Будь-яка платформа, яка реалізує .NET Standard, сумісна з бібліотеками, націленими на .NET Standard. Однією з таких сумісних платформ є .NET Core.
Повертаючись до бібліотек, існують шаблони бібліотек .NET Standard, які працюють у декількох режимах виконання (за рахунок поверхні поверхні API). Зрозуміло, існують шаблони бібліотек .NET Core для доступу до більшої площі API (за рахунок сумісності) та для визначення платформи, на якій можна створити виконуваний файл.
Ось інтерактивна матриця, яка показує, який .NET Standard підтримує які .NET реалізації (-и) та кількість поверхні API доступна.