Предположим, что у меня есть библиотека классов, для которой я хочу настроить netstandard1.3, но также использовать BigInteger. Здесь тривиальный пример - единственный исходный файл Adder.cs:
using System;
using System.Numerics;
namespace Calculator
{
public class Adder
{
public static BigInteger Add(int x, int y)
=> new BigInteger(x) + new BigInteger(y);
}
}
Вернемся в мир project.json, я бы нацелил netstandard1.3 в разделе frameworks и имел явную зависимость от System.Runtime.Numerics, например. версия 4.0.1. В пакете nuget, который я создам, будет отображаться только эта зависимость.
В смелом новом мире инструментария dotnet, основанного на csproj (я использую v1.0.1 инструментов командной строки) там неявная ссылка пакета метапакетов до NETStandard.Library 1.6.1 при таргетинге netstandard1.3. Это означает, что мой файл проекта очень мал, потому что ему не нужна явная зависимость:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... но созданный пакет nuget имеет зависимость от NETStandard.Library, что говорит о том, что для использования моей небольшой библиотеки вам все нужно.
Оказывается, я могу отключить эту функциональность с помощью DisableImplicitFrameworkReferences, а затем снова добавить зависимость:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Runtime.Numerics" Version="4.0.1" />
</ItemGroup>
</Project>
Теперь мой пакет NuGet точно определяет, от чего это зависит. Интуитивно это похоже на "более компактный" пакет.
Итак, какая именно разница для потребителя моей библиотеки? Если кто-то пытается использовать его в приложении UWP, вторая, "обрезанная" форма зависимостей означает, что результирующее приложение будет меньше?
Не документируя DisableImplicitFrameworkReferences ясно (насколько я видел, я читал об этом в проблеме) и неявная зависимость по умолчанию при создании проекта, Microsoft поощряет пользователей просто зависеть от метапакета, но как я могу быть уверен, что у меня нет недостатков, когда я создаю пакет библиотеки классов?