Supposons que je dispose d'une bibliothèque de classes que je souhaite cibler netstandard1.3, mais que j'utilise également BigInteger
. Voici un exemple trivial - le seul fichier source est 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);
}
}
De retour dans le monde de project.json
, je ciblerais netstandard1.3
dans la frameworks
section, et aurais une dépendance explicite sur System.Runtime.Numerics
, par exemple la version 4.0.1. Le package nuget que je crée ne listera que cette dépendance.
Dans le nouveau monde de l' outillage de base dotnet csproj (J'utilise v1.0.1 des outils de ligne de commande) , il y a une référence paquet métapaquet implicite à NETStandard.Library 1.6.1
lors du ciblage netstandard1.3
. Cela signifie que mon fichier projet est vraiment petit, car il n'a pas besoin de la dépendance explicite:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... mais le paquet nuget produit a une dépendance sur NETStandard.Library
, ce qui suggère que pour utiliser ma petite bibliothèque, vous avez besoin de tout .
Il s'avère que je peux désactiver cette fonctionnalité en utilisant DisableImplicitFrameworkReferences
, puis ajouter à nouveau la dépendance manuellement:
<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>
Maintenant, mon package NuGet dit exactement de quoi il dépend. Intuitivement, cela ressemble à un paquet "allégé".
Alors, quelle est la différence exacte pour un consommateur de ma bibliothèque? Si quelqu'un essaie de l'utiliser dans une application UWP, est-ce que la deuxième forme de dépendances "rognée" signifie que l'application résultante sera plus petite?
En ne documentant pas DisableImplicitFrameworkReferences
clairement (pour autant que je l'ai vu; je l'ai lu dans un numéro ) et en faisant de la dépendance implicite la dépendance par défaut lors de la création d'un projet, Microsoft encourage les utilisateurs à dépendre simplement du métapaquet - mais comment puis-je être sûr que cela n'a pas d'inconvénients lorsque je produis un package de bibliothèque de classes?
Hello World!
application autonome est réduite à <10 Mo.