Załóżmy, że mam bibliotekę klas, którą chcę kierować do netstandard1.3, ale także używam BigInteger
. Oto trywialny przykład - jedyny plik źródłowy to 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);
}
}
Wracając do świata project.json
, celowałbym netstandard1.3
w tę frameworks
sekcję i mam wyraźną zależność System.Runtime.Numerics
np. Od wersji 4.0.1. Utworzony przeze mnie pakiet nuget będzie zawierał tylko tę zależność.
W nowym, odważnym świecie narzędzi dotnet opartych na csproj (używam wersji 1.0.1 narzędzi wiersza polecenia) istnieje niejawne odwołanie do pakietu metapakietuNETStandard.Library 1.6.1
podczas określania celu netstandard1.3
. Oznacza to, że mój plik projektu jest naprawdę mały, ponieważ nie wymaga wyraźnej zależności:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... ale utworzony pakiet nuget ma zależność od NETStandard.Library
, co sugeruje, że aby korzystać z mojej małej biblioteki, potrzebujesz wszystkiego .
Okazuje się, że mogę wyłączyć tę funkcję za pomocą DisableImplicitFrameworkReferences
, a następnie ręcznie dodać zależność:
<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>
Teraz mój pakiet NuGet mówi dokładnie, od czego zależy. Intuicyjnie wydaje się, że jest to „odchudzony” pakiet.
Jaka jest więc dokładna różnica dla konsumenta mojej biblioteki? Jeśli ktoś spróbuje go użyć w aplikacji UWP, czy druga, „przycięta” forma zależności oznacza, że wynikowa aplikacja będzie mniejsza?
Nie dokumentując DisableImplicitFrameworkReferences
jasno (o ile widziałem; przeczytałem o tym w numerze ) i ustawiając niejawną zależność jako domyślną podczas tworzenia projektu, Microsoft zachęca użytkowników do polegania tylko na metapakiecie - ale jak mogę to zrobić na pewno to nie ma wad, kiedy tworzę pakiet biblioteki klas?
Hello World!
samodzielnej aplikacji jest zmniejszony do <10 MB.