मान लीजिए कि मेरे पास एक क्लास लाइब्रेरी है जिसे मैं 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 संस्करण। मेरे द्वारा बनाया गया नगेट पैकेज उस निर्भरता को सूचीबद्ध करेगा।
Csproj- आधारित डॉटनेट टूलिंग की बहादुर नई दुनिया में (मैं कमांड लाइन टूल्स के v1.0.1 का उपयोग कर रहा हूं) लक्ष्यीकरण करते समय एक अंतर्निहित मेटापैकेज पैकेज संदर्भ है । इसका मतलब है कि मेरी परियोजना फ़ाइल वास्तव में छोटी है, क्योंकि इसमें स्पष्ट निर्भरता की आवश्यकता नहीं है: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 उपयोगकर्ताओं को सिर्फ रूपक पर निर्भर रहने के लिए प्रोत्साहित कर रहा है - लेकिन मैं कैसे हो सकता हूं यकीन है कि जब मैं एक क्लास लाइब्रेरी पैकेज का उत्पादन कर रहा हूं तो इसके नुकसान नहीं हैं?
Hello World!
स्व-सम्मिलित एप्लिकेशन का आकार घटाकर <10MB कर दिया जाता है।