Припустимо, у мене є бібліотека класів, яку я хочу орієнтувати на 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. Створений мною пакунок перерахує саме цю залежність.
В чудовому новому світі csproj основі Dotnet інструментів (я використовую v1.0.1 з інструментів командного рядка) є більш мається на увазі посилання метапакета пакета для NETStandard.Library 1.6.1
при орієнтації netstandard1.3
. Це означає, що мій файл проекту дійсно малий, тому що він не потребує явної залежності:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... але створений пакунок нугів має залежність від 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 МБ.