Misalkan saya memiliki perpustakaan kelas yang saya ingin menargetkan netstandard1.3, tetapi juga menggunakan BigInteger
. Berikut adalah contoh sepele - satu-satunya file sumber adalah 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);
}
}
Kembali ke dunia project.json
, saya akan menargetkan netstandard1.3
di frameworks
bagian, dan memiliki ketergantungan eksplisit pada System.Runtime.Numerics
, misalnya versi 4.0.1. Paket nuget yang saya buat hanya akan mencantumkan ketergantungan itu.
Dalam dunia baru yang berani berbasis csproj dotnet perkakas (Saya menggunakan v1.0.1 alat baris perintah) ada sebuah implisit paket metapackage referensi untuk NETStandard.Library 1.6.1
saat menargetkan netstandard1.3
. Ini berarti file proyek saya sangat kecil, karena tidak memerlukan ketergantungan eksplisit:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... tetapi paket nuget yang dihasilkan memiliki ketergantungan pada NETStandard.Library
, yang menunjukkan bahwa untuk menggunakan perpustakaan kecil saya, Anda memerlukan semua yang ada di sana.
Ternyata saya bisa menonaktifkan fungsionalitas itu menggunakan DisableImplicitFrameworkReferences
, lalu menambahkan dependensi secara manual lagi:
<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>
Sekarang paket NuGet saya menjelaskan dengan tepat apa itu tergantung. Secara intuitif, ini terasa seperti paket yang "lebih ramping".
Jadi, apa perbedaan yang tepat bagi konsumen perpustakaan saya? Jika seseorang mencoba menggunakannya dalam aplikasi UWP, apakah bentuk dependensi kedua yang "dipangkas" berarti aplikasi yang dihasilkan akan lebih kecil?
Dengan tidak mendokumentasikan DisableImplicitFrameworkReferences
secara jelas (sejauh yang saya lihat; saya membacanya dalam sebuah masalah ) dan dengan menjadikan ketergantungan implisit sebagai default saat membuat proyek, Microsoft mendorong pengguna untuk hanya bergantung pada metapackage - tetapi bagaimana saya bisa yakin itu tidak memiliki kerugian saat saya memproduksi paket perpustakaan kelas?
Hello World!
aplikasi mandiri dikurangi menjadi <10MB.