Многоцелевые netstandard1.0 и netstandard2.0 бок о бок?
Когда я создаю многоцелевой.NET csproj, который нацелен на netstandard1.2, netstandard2.0 и net45, я должен включить оба netstandard monikers в раздел.csproj или достаточно упомянуть netstandard1.2 (нижняя нестандартная версия)?
Предложение А:
<TargetFrameworks>netstandard1.2;net45</TargetFrameworks>
Предложение Б:
<TargetFrameworks>netstandard1.2;netstandard2.0;net45</TargetFrameworks>
2 ответа
Да, есть разница между поведением netstandard1.x и netstandard2.x.
✔️ включить
netstandard2.0
цель, если вам требуетсяnetstandard1.x
цель.Все платформы, поддерживающие.NET Standard 2.0, будут использовать
netstandard2.0
цель и выгода от наличия меньшего графа пакетов, в то время как старые платформы все еще будут работать и прибегнут к использованиюnetstandard1.x
цель.
И один абзац выше объясняет разницу:
.NET Standard 1.x распространяется в виде детального набора пакетов NuGet, который создает большой граф зависимостей пакетов и приводит к тому, что разработчики загружают много пакетов при сборке. Современные платформы.NET, включая.NET Framework 4.6.1, UWP и Xamarin, поддерживают.NET Standard 2.0. Вы должны ориентироваться на.NET Standard 1.x только в том случае, если вам конкретно нужно ориентироваться на старую платформу
netstandard1.x
поддерживает 2 фреймворка, используя nugets, что вызывает импорт многих пакетов.
Когда я проверяю зависимости обоих пакетов NuGet (1) с <TargetFrameworks>netstandard1.2;net45</TargetFrameworks>
и (2) с <TargetFrameworks>netstandard1.2;netstandard2.0;net45</TargetFrameworks>
Я вижу, что netstandard1.2 включает NETStandard.Library (>=1.6.1), который, вероятно, является "графом зависимости", который описан в ответе @Baruch.
ObjectDumper.Net зависимости (1)
ObjectDumper.Net зависимости (2)
Насколько мне известно, я могу использовать <TargetFrameworks>netstandard1.2;net45</TargetFrameworks>
если я хочу поддержать оба, netstandard1.2 и netstandard2.0. Проект netstandard2.0, использующий пакет netstandard1.2 NuGet, ссылается на NETStandard.Library 2.0.3 (который удовлетворяет минимальным требованиям>=1.6.1). Таким образом, ненужные пакеты NuGet не будут установлены.