ধরুন আমার কাছে একটি ক্লাস লাইব্রেরি রয়েছে যা আমি নেটস্ট্যান্ডার্ড ১.৩ লক্ষ্য করতে চাইছি, তবে এটিও ব্যবহার করব 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
এবং উদাহরণস্বরূপ সংস্করণ 4.0.1 এর frameworks
উপর একটি সুস্পষ্ট নির্ভরতা রাখব have System.Runtime.Numerics
আমি তৈরি করা নুগেট প্যাকেজটি কেবল সেই নির্ভরতার তালিকা করবে।
সিএসপি্রোজ-ভিত্তিক ডটনেট টুলিংয়ের সাহসী নতুন জগতে (আমি কমান্ড-লাইন সরঞ্জামগুলির 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>
এখন আমার নিউগেট প্যাকেজটি ঠিক এর উপর নির্ভর করে। স্বজ্ঞাতভাবে, এটি "পাতলা" প্যাকেজের মতো অনুভব করে।
তাহলে আমার গ্রন্থাগারের কোনও গ্রাহকের জন্য সঠিক পার্থক্য কী? যদি কেউ এটি ইউডাব্লুপি অ্যাপ্লিকেশনটিতে ব্যবহার করার চেষ্টা করে, তবে দ্বিতীয়, "ছাঁটাই" নির্ভরতার ফর্মটি বোঝায় যে ফলাফলটি আরও কম হবে?
DisableImplicitFrameworkReferences
স্পষ্ট করে ডকুমেন্ট না করে (যতদূর আমি দেখেছি; একটি ইস্যুতে আমি এটি সম্পর্কে পড়েছি ) এবং কোনও প্রকল্প তৈরি করার সময় অন্তর্নিহিত নির্ভরতা ডিফল্ট করে, মাইক্রোসফ্ট ব্যবহারকারীদের কেবলমাত্র মেটাপ্যাকেজের উপর নির্ভর করতে উত্সাহিত করে - তবে আমি কীভাবে হতে পারি আমি যখন ক্লাস লাইব্রেরি প্যাকেজ তৈরি করছি তখন এর অসুবিধাগুলি নিশ্চিত না?
Hello World!
স্ব-অন্তর্ভুক্ত অ্যাপ্লিকেশনটির আকার <10MB এ হ্রাস পেয়েছে।