Was sind die Anwendung, die Auswirkungen einer netstandard Bibliothek je ein Metapaket?

Angenommen ich habe eine Klassenbibliothek, die ich möchte Ziel netstandard1.3, aber auch BigInteger. Hier ist ein triviales Beispiel - die einzige Quelle die Datei ist 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);            
    }
}

Zurück in die Welt der project.json würde ich den Gegner netstandard1.3 im frameworks Abschnitt, und haben eine explizite Abhängigkeit von System.Runtime.Numerics, z.B. version 4.0.1. Das nuget-Paket erstelle ich eine Liste nur, die Abhängigkeit.

In die schöne neue Welt der csproj-basierte dotnet-Werkzeuge (ich bin mit v1.0.1 des Kommandozeilen-tools) gibt es eine implizite Metapaket-Paket reference zu NETStandard.Library 1.6.1 bei der Ausrichtung netstandard1.3. Dies bedeutet, dass meine Projekt-Datei ist wirklich klein, denn es muss nicht die explizite Abhängigkeit:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.3</TargetFramework>
  </PropertyGroup>
</Project>

... aber das nuget-Paket erzeugt eine Abhängigkeit von NETStandard.Library, was darauf schließen lässt, dass, um, um meine kleine Bibliothek, die Sie brauchen alles es.

Es stellt sich heraus, ich kann es deaktivieren, die Funktionalität mit DisableImplicitFrameworkReferences ist, dann fügen Sie in die Abhängigkeit manuell wieder:

<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>

Nun mein NuGet-Paket genau das sagt, was es abhängt. Intuitiv, das fühlt sich an wie ein "schlanker" - Paket.

Also, was ist der genaue Unterschied für einen Verbraucher, der meine Bibliothek? Wenn jemand versucht, es zu benutzen in einem UWP-Anwendung, nicht die zweite, "getrimmt" form von Abhängigkeiten bedeutet, dass die resultierende Anwendung wird kleiner sein?

Durch nicht dokumentieren DisableImplicitFrameworkReferences klar (soweit ich das gesehen habe; ich habe darüber gelesen,in einer Ausgabe) und durch die implizite Abhängigkeit der standardmäßig beim erstellen eines Projekts in Microsoft sind Förderung Benutzer nur hängt von der Metapaket installieren - aber wie kann ich sicher sein, dass keine Nachteile haben, wenn ich Herstellung eine Bibliothek-Klasse, Paket?

  • Es sollte angemerkt werden, dass die Abhängigkeit trimmen gearbeitet. Derzeit ist die Größe eines Hello World! eigenständige Anwendung ist reduziert auf < 10 MB.
  • 10MB ist immer noch viel zu viel im Vergleich zu den < 20KB Größe eines klassischen .NET Framework C# Hallo-Welt-Projekt.
InformationsquelleAutor Jon Skeet | 2017-03-22
Schreibe einen Kommentar