Предположим, что у меня есть библиотека классов, для которой я хочу настроить 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 поощряет пользователей просто зависеть от метапакета, но как я могу быть уверен, что у меня нет недостатков, когда я создаю пакет библиотеки классов?