Предположим, у меня есть библиотека классов, которую я хочу нацелить на 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 будет перечислена только эта зависимость.
В дивном новом мире csproj основе Dotnet инструментов (я использую 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 поощряет пользователей просто полагаться на метапакет - но как я могу быть уверены, что у меня нет недостатков, когда я создаю пакет библиотеки классов?
Hello World!автономного приложения уменьшен до <10 МБ.