Supposons que j'ai une bibliothèque de classes qui je veux cible netstandard1.3, mais aussi utiliser 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 l' project.json
, je cible netstandard1.3
dans la frameworks
section, et explicite la dépendance de l' System.Runtime.Numerics
, par exemple, la version 4.0.1. Le package nuget je créer listera que la dépendance.
Dans le meilleur des mondes csproj à base de dotnet outillage (je suis en v1.0.1 des outils de ligne de commande) il y a un implicite méta-paquet paquet de référence pour NETStandard.Library 1.6.1
lorsque le ciblage netstandard1.3
. Cela signifie que mon fichier de 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 package nuget produit a une dépendance sur l' NETStandard.Library
, ce qui suggère que, pour utiliser ma petite bibliothèque, vous devez tout .
Il s'avère que je peux désactiver cette fonctionnalité à l'aide de DisableImplicitFrameworkReferences
, puis ajouter dans la dépendance à nouveau 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 ce dont il dépend. Intuitivement, cela se sent comme un "maigre".
Alors, quelle est la différence exacte pour un consommateur de ma bibliothèque? Si quelqu'un essaie de l'utiliser dans un UWP demande, la deuxième, "garnis" forme de dépendances dire que l'application qui en résulte sera plus petits?
En ne documentant pas DisableImplicitFrameworkReferences
clairement (autant que je l'ai vu; j'ai lu à ce sujet dans un numéro) et en faisant de l'implicite de la dépendance de la valeur par défaut lors de la création d'un projet, de Microsoft sont en encourageant les utilisateurs à juste dépendra de la méta-paquet - mais comment puis-je être sûr que n'ont pas les inconvénients quand je suis produisant une bibliothèque de classes du package?