Многоцелевые 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.

Из документов Microsoft:

✔️ включить 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 не будут установлены.

Другие вопросы по тегам