Suponha que eu tenha uma biblioteca de classes que quero direcionar para netstandard1.3, mas também usar BigInteger
. Aqui está um exemplo trivial - o único arquivo de origem é 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 volta ao mundo de project.json
, eu teria como alvo netstandard1.3
noframeworks
seção e teria uma dependência explícita System.Runtime.Numerics
, por exemplo, da versão 4.0.1. O pacote nuget que crio listará apenas essa dependência.
No admirável mundo novo de ferramentas dotnet baseada csproj (estou usando v1.0.1 das ferramentas de linha de comando) há uma referência pacote metapackage implícita para NETStandard.Library 1.6.1
quando o direcionamento netstandard1.3
. Isso significa que meu arquivo de projeto é muito pequeno, porque não precisa da dependência explícita:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... mas o pacote nuget produzido tem uma dependência de NETStandard.Library
, o que sugere que, para usar minha pequena biblioteca, você precisa de tudo lá.
Acontece que posso desativar essa funcionalidade usando e DisableImplicitFrameworkReferences
, em seguida, adicionar a dependência manualmente novamente:
<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>
Agora meu pacote NuGet diz exatamente do que depende. Intuitivamente, parece um pacote "mais enxuto".
Então, qual é a diferença exata para um consumidor da minha biblioteca? Se alguém tentar usá-lo em um aplicativo UWP, a segunda forma "aparada" de dependências significa que o aplicativo resultante será menor?
Por não documentar DisableImplicitFrameworkReferences
claramente (pelo que vi; li sobre isso em uma edição ) e por tornar a dependência implícita o padrão ao criar um projeto, a Microsoft está encorajando os usuários a depender apenas do metapacote - mas como posso ser certeza de que não tem desvantagens quando estou produzindo um pacote de biblioteca de classes?
Hello World!
aplicativo independente é reduzido para <10 MB.