Netstandard1.3'ü hedeflemek ve aynı zamanda kullanmak istediğim bir sınıf kitaplığım olduğunu varsayalım BigInteger
. İşte önemsiz bir örnek - tek kaynak dosya 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);
}
}
Dünyasına geri project.json
döndüğümde netstandard1.3
, frameworks
bölümünde hedef System.Runtime.Numerics
alırdım ve açık bir bağımlılığım olurdu , örneğin 4.0.1 sürümüne. Oluşturduğum nuget paketi sadece bu bağımlılığı listeleyecek.
Csproj tabanlı dotnet kalıp cesur yeni dünyada bir var (ben komut satırı araçları v1.0.1 kullanıyorum) örtük meta pakettir paket referans için NETStandard.Library 1.6.1
hedeflerken netstandard1.3
. Bu, proje dosyamın gerçekten küçük olduğu anlamına gelir, çünkü açık bağımlılığa ihtiyaç duymaz:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... ancak üretilen nuget paketinin bir bağımlılığı var NETStandard.Library
, bu da küçük kütüphanemi kullanmak için orada her şeye ihtiyacınız olduğunu gösteriyor.
Bu işlevi kullanarak devre dışı bırakabilirim ve DisableImplicitFrameworkReferences
ardından bağımlılığı manuel olarak tekrar ekleyebilirim:
<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>
Şimdi NuGet paketim tam olarak neye bağlı olduğunu söylüyor. Sezgisel olarak, bu "daha zayıf" bir paket gibi geliyor.
Öyleyse kitaplığımın bir tüketicisi için tam olarak ne fark var? Birisi onu bir UWP uygulamasında kullanmaya çalışırsa, bağımlılıkların ikinci, "kırpılmış" biçimi, ortaya çıkan uygulamanın daha küçük olacağı anlamına mı gelir?
DisableImplicitFrameworkReferences
Açıkça belgelemeyerek (gördüğüm kadarıyla; bir konuda okudum ) ve bir proje oluştururken örtük bağımlılığı varsayılan hale getirerek, Microsoft kullanıcıları yalnızca meta pakete güvenmeye teşvik ediyor - ancak nasıl olabilirim Bir sınıf kitaplığı paketi oluştururken dezavantajları olmadığından emin misiniz?
Hello World!
bağımsız bir uygulamanın boyutu <10MB'ye düşürülmüştür.