สมมติว่าฉันมีไลบรารีคลาสที่ฉันต้องการกำหนดเป้าหมาย netstandard1.3 แต่ก็ใช้BigInteger
ด้วย นี่คือตัวอย่างเล็กน้อย - ซอร์สไฟล์เดียวคือ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);
}
}
ย้อนกลับไปในโลกของproject.json
ฉันจะกำหนดเป้าหมายnetstandard1.3
ในframeworks
ส่วนนี้และมีการพึ่งพาอย่างชัดเจนSystem.Runtime.Numerics
เช่นเวอร์ชัน 4.0.1 แพ็คเกจ nuget ที่ฉันสร้างจะแสดงรายการการอ้างอิงนั้น
ในโลกใหม่ที่กล้าหาญของ csproj ตาม dotnet เครื่องมือ (ฉันใช้ v1.0.1 ของเครื่องมือบรรทัดคำสั่ง) มีความนัยอ้างอิงแพคเกจ metapackageไปเมื่อกำหนดเป้าหมายNETStandard.Library 1.6.1
netstandard1.3
ซึ่งหมายความว่าไฟล์โครงการของฉันมีขนาดเล็กมากเพราะไม่ต้องการการพึ่งพาอย่างชัดเจน:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
</PropertyGroup>
</Project>
... แต่แพคเกจนักเก็ตที่ผลิตขึ้นนั้นมีการพึ่งพาNETStandard.Library
ซึ่งแสดงให้เห็นว่าในการใช้ห้องสมุดขนาดเล็กของฉันคุณต้องมีทุกอย่างที่นั่น
ปรากฎว่าฉันสามารถปิดใช้งานฟังก์ชันนั้นโดยใช้DisableImplicitFrameworkReferences
จากนั้นเพิ่มการอ้างอิงด้วยตนเองอีกครั้ง:
<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>
ตอนนี้แพ็คเกจ NuGet ของฉันบอกว่ามันขึ้นอยู่กับอะไร โดยสัญชาตญาณแล้วสิ่งนี้ให้ความรู้สึกเหมือนแพ็คเกจที่ "เพรียวบางกว่า"
แล้วความแตกต่างที่แท้จริงสำหรับผู้ใช้ห้องสมุดของฉันคืออะไร? หากมีคนพยายามใช้ในแอปพลิเคชัน UWP รูปแบบการอ้างอิงที่ "ถูกตัด" อย่างที่สองหมายความว่าแอปพลิเคชันที่ได้จะมีขนาดเล็กลงหรือไม่
โดยไม่ได้จัดทำเอกสารDisableImplicitFrameworkReferences
อย่างชัดเจน (เท่าที่ฉันเคยเห็นฉันอ่านเกี่ยวกับเรื่องนี้ในปัญหา ) และโดยการทำให้การพึ่งพาโดยนัยเป็นค่าเริ่มต้นเมื่อสร้างโครงการ Microsoft กำลังสนับสนุนให้ผู้ใช้พึ่งพา metapackage - แต่ฉันจะเป็นได้อย่างไร แน่ใจว่าไม่มีข้อเสียเมื่อฉันสร้างแพ็คเกจไลบรารีคลาส
Hello World!
แอปพลิเคชันในตัวลดลงเหลือ <10MB