Предположим, у меня есть библиотека классов, которую я хочу нацелить на 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 МБ.