Supongamos que tengo una biblioteca de clases que quiero apuntar a netstandard1.3, pero también usar BigInteger
. Aquí hay un ejemplo trivial: el único archivo fuente es 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 vuelta en el mundo de project.json
, apuntaría netstandard1.3
en la frameworks
sección y tendría una dependencia explícita System.Runtime.Numerics
, por ejemplo, la versión 4.0.1. El paquete nuget que creo enumerará solo esa dependencia.
En el valiente nuevo mundo de las herramientas dotnet basadas en csproj (estoy usando la v1.0.1 de las herramientas de línea de comandos) hay una referencia implícita de paquete de metapaquete a la NETStandard.Library 1.6.1
hora de apuntar netstandard1.3
. Esto significa que mi archivo de proyecto es realmente pequeño, porque no necesita la dependencia explícita:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... pero el paquete nuget producido tiene una dependencia de NETStandard.Library
, lo que sugiere que para usar mi pequeña biblioteca, necesita todo lo que está allí.
Resulta que puedo deshabilitar esa funcionalidad usando DisableImplicitFrameworkReferences
, luego agregar la dependencia manualmente nuevamente:
<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>
Ahora mi paquete NuGet dice exactamente de qué depende. Intuitivamente, esto se siente como un paquete "más delgado".
Entonces, ¿cuál es la diferencia exacta para un consumidor de mi biblioteca? Si alguien intenta usarlo en una aplicación para UWP, ¿la segunda forma de dependencias "recortada" significa que la aplicación resultante será más pequeña?
Al no documentar DisableImplicitFrameworkReferences
claramente (por lo que he visto; leí sobre esto en un número ) y al hacer que la dependencia implícita sea la predeterminada al crear un proyecto, Microsoft está animando a los usuarios a depender simplemente del metapaquete, pero ¿cómo puedo hacerlo? ¿Seguro que no tiene desventajas cuando estoy produciendo un paquete de biblioteca de clases?
Hello World!
aplicación autónoma se reduce a <10 MB.