.NET कोर और.NET स्टैंडर्ड क्लास लाइब्रेरी प्रोजेक्ट के प्रकारों में क्या अंतर है?




.net-core class-library (7)

विज़ुअल स्टूडियो में, आपके द्वारा बनाई जा सकने वाली कम से कम 3 विभिन्न प्रकार की लाइब्रेरी हैं:

  • क्लास लाइब्रेरी (.NET फ्रेमवर्क)
  • कक्षा पुस्तकालय (.NET मानक)
  • क्लास लाइब्रेरी (.NET कोर)

जबकि पहला वह है जो हम वर्षों से उपयोग कर रहे हैं, भ्रम की एक मुख्य बात यह है कि जब मैं .NET मानक और .NET कोर लाइब्रेरी लाइब्रेरी प्रकारों का उपयोग करता हूं। हाल ही में जब मैंने विभिन्न फ्रेमवर्क संस्करणों को लक्षित करने और एक इकाई परीक्षण परियोजना बनाने का प्रयास किया है, तो मैंने इसे काट लिया है।

तो, क्लास लाइब्रेरी (.NET स्टैंडर्ड) और क्लास लाइब्रेरी (.NET कोर) में क्या अंतर है, दोनों क्यों मौजूद हैं, और हमें एक दूसरे पर कब इस्तेमाल करना चाहिए?


हमें कब एक का उपयोग करना चाहिए?

निर्णय संगतता और एपीआई पहुंच के बीच एक व्यापार बंद है।

जब आप अपने पुस्तकालय के साथ संगत ऐप्स की संख्या में वृद्धि करना चाहते हैं, तो .NET .NET लाइब्रेरी का उपयोग करें, और आप .NET API सतह क्षेत्र में कमी के साथ ठीक हैं जो आपकी लाइब्रेरी एक्सेस कर सकती है।

जब आप .NET API सरफेस एरिया को बढ़ाना चाहते हैं, तो .NET कोर लाइब्रेरी का उपयोग करें, जो आपकी लाइब्रेरी एक्सेस कर सकती है, और आप केवल .NET कोर ऐप्स को अपने लाइब्रेरी के साथ संगत होने की अनुमति देकर ठीक हैं।

उदाहरण के लिए, .NET मानक 1.3 को लक्षित करने वाला एक पुस्तकालय उन ऐप्स के साथ संगत होगा जो .NET फ्रेमवर्क 4.6, .NET कोर 1.0, यूनिवर्सल विंडोज प्लेटफॉर्म 10.0, और .NET मानक 1.3 का समर्थन करने वाले किसी अन्य प्लेटफॉर्म को लक्षित करते हैं। हालाँकि, लाइब्रेरी के पास .NET API के कुछ हिस्सों तक पहुंच नहीं होगी। उदाहरण के लिए, Microsoft.NETCore.CoreCLR पैकेज .NET कोर के साथ संगत है लेकिन .NET मानक के साथ नहीं है।

क्लास लाइब्रेरी (.NET स्टैंडर्ड) और क्लास लाइब्रेरी (.NET कोर) में क्या अंतर है?

पैकेज-आधारित फ्रेमवर्क अनुभाग अंतर का वर्णन करता है।

संगतता: .NET मानक को लक्षित करने वाले पुस्तकालय किसी भी .NET मानक अनुरूप रनटाइम, जैसे .NET कोर, .NET फ्रेमवर्क, मोनो / ज़ामरीन पर चलेंगे। दूसरी ओर, .NET कोर को लक्षित करने वाले पुस्तकालय केवल .NET कोर रनटाइम पर ही चल सकते हैं।

API भूतल क्षेत्र: .NET मानक पुस्तकालय NETStandard.Library में सब कुछ के साथ आते हैं। जबकि .NET कोर पुस्तकालय Microsoft.NETCore.App में सब कुछ के साथ आते हैं। उत्तरार्द्ध में लगभग 20 अतिरिक्त पुस्तकालय शामिल हैं, जिनमें से कुछ हम अपने .NET मानक पुस्तकालय (जैसे System.Threading.Thread ) में मैन्युअल रूप से जोड़ सकते हैं और जिनमें से कुछ .NET मानक के साथ संगत नहीं हैं (जैसे Microsoft.NETCore.CoreCLR )।

इसके अलावा, .NET कोर लाइब्रेरी एक रनटाइम निर्दिष्ट करती है और एक एप्लीकेशन मॉडल के साथ आती है। उदाहरण के लिए, इकाई परीक्षण कक्षा पुस्तकालयों को चलाने योग्य बनाना महत्वपूर्ण है।

दोनों क्यों मौजूद हैं?

एक पल के लिए पुस्तकालयों की उपेक्षा, .NET मानक मौजूद कारण पोर्टेबिलिटी के लिए है; यह एपीआई के एक सेट को परिभाषित करता है। .NET प्लेटफ़ॉर्म लागू करने के लिए सहमत होते हैं। कोई भी प्लेटफ़ॉर्म जो .NET मानक को लागू करता है, पुस्तकालयों के साथ संगत है जो .NET मानक को लक्षित करता है। उन संगत प्लेटफार्मों में से एक .NET कोर है।

पुस्तकालयों में वापस आ रहे हैं, .NET मानक लाइब्रेरी टेम्प्लेट कई रनटाइम (एपीआई सतह क्षेत्र की कीमत पर) पर चलने के लिए मौजूद हैं। जाहिर है, .NET कोर लाइब्रेरी टेम्प्लेट अधिक एपीआई सतह क्षेत्र (अनुकूलता की कीमत पर) तक पहुंचने और एक मंच को निर्दिष्ट करने के लिए मौजूद है जिसके लिए एक निष्पादन योग्य निर्माण करना है।


.NET फ्रेमवर्क और .NET कोर दोनों फ्रेमवर्क हैं।

.NET मानक (दूसरे शब्दों में, विनिर्देशन) है।

आप .NET फ्रेमवर्क और .NET कोर के साथ निष्पादन योग्य परियोजना (जैसे कंसोल एप्लिकेशन या ASP.NET एप्लिकेशन) बना सकते हैं, लेकिन .NET मानक के साथ नहीं।

.NET मानक के साथ आप केवल क्लास-लाइब्रेरी प्रोजेक्ट बना सकते हैं जिसे स्टैंडअलोन निष्पादित नहीं किया जा सकता है और इसे किसी अन्य .NET कोर या .NET फ्रेमवर्क निष्पादन योग्य प्रोजेक्ट द्वारा संदर्भित किया जाना चाहिए।


.Net मानक कोड साझाकरण को बेहतर बनाने और प्रत्येक .Net कार्यान्वयन में एपीआई को अधिक सुसंगत बनाने के लिए मुख्य रूप से मौजूद है।

लाइब्रेरी बनाते समय हम लक्ष्य .Net मानक 2.0 के रूप में रख सकते हैं ताकि निर्मित लाइब्रेरी .Net फ्रेमवर्क के विभिन्न संस्करणों के साथ मिलनसार हो जाएगी। नेट कोर, मोनो सहित।


अंतर को समझाने का एक और तरीका वास्तविक दुनिया के उदाहरणों के साथ हो सकता है, क्योंकि हम में से अधिकांश नर्तक मौजूदा उपकरण और रूपरेखा (ज़ामरीन, एकता, आदि) का उपयोग नौकरी करने के लिए करेंगे।

इसलिए, .NET फ्रेमवर्क के साथ आपके पास काम करने के लिए सभी .NET उपकरण हैं, लेकिन आप केवल Windows एप्लिकेशन (UWP, Winforms, ASP.NET, आदि) को लक्षित कर सकते हैं। चूंकि .NET फ्रेमवर्क बंद स्रोत है, इसलिए इसके बारे में बहुत कुछ नहीं है।

.NET कोर के साथ आपके पास कम उपकरण हैं लेकिन आप मुख्य डेस्कटॉप प्लेटफ़ॉर्म (विंडोज, लिनक्स, मैक) को लक्षित कर सकते हैं। यह ASP.NET कोर अनुप्रयोगों में विशेष रूप से उपयोगी है, क्योंकि आप अब लिनक्स में Asp.net (सस्ते होस्टिंग मूल्य) की मेजबानी कर सकते हैं। अब चूंकि .NET कोर खुला हुआ था, इसलिए अन्य प्लेटफार्मों के लिए पुस्तकालयों को विकसित करना तकनीकी रूप से संभव है। लेकिन क्योंकि वहाँ चौखटे नहीं हैं जो इसका समर्थन करते हैं, मुझे नहीं लगता कि यह एक अच्छा विचार है।

.NET मानक के साथ आपके पास और भी कम उपकरण हैं लेकिन आप सभी / अधिकांश प्लेटफार्मों को लक्षित कर सकते हैं। आप Xamarin के लिए मोबाइल धन्यवाद लक्ष्य कर सकते हैं, और आप मोनो / एकता के लिए गेम कंसोल का लक्ष्य भी बना सकते हैं।

एक वास्तविक दुनिया आवेदन में आप उन सभी का उपयोग करने की आवश्यकता हो सकती है। उदाहरण के लिए, मैंने बिक्री के एक बिंदु को विकसित किया जिसमें निम्नलिखित वास्तुकला थी:

सर्वर और क्लाइंट दोनों को साझा किया गया:

  • एक .NET मानक पुस्तकालय जो मेरे आवेदन के मॉडल को संभालता है।

चूंकि यह एक .NET मानक पुस्तकालय है, इसलिए इसे किसी अन्य पुस्तकालय में उपयोग किया जा सकता है।

सर्वर साइड (वेब ​​एपीआई):

  • एक .NET मानक (कोर और साथ ही) पुस्तकालय हो सकता है जो सभी डेटाबेस कनेक्शन को संभालता है।

  • एक .NET कोर प्रोजेक्ट जो रेस्ट एपीआई को हैंडल करता है और डेटाबेस लाइब्रेरी का उपयोग करता है।

जैसा कि यह .NET कोर में विकसित किया गया है, मैं लिनक्स सर्वर पर एप्लिकेशन को होस्ट कर सकता हूं।

क्लाइंट साइड (MVFM WPF + Xamarin के साथ। एंड्रॉइड / IOS):

  • एक .NET मानक पुस्तकालय जो क्लाइंट एपीआई कनेक्शन को संभालता है।

  • एक .NET मानक पुस्तकालय जो ViewModels लॉजिक को संभालता है। सभी दृश्यों में इस्तेमाल किया गया।

  • एक .NET फ्रेमवर्क WPF एप्लीकेशन जो कि विंडोज़ एप्लीकेशन के लिए WPF व्यूज को हैंडल करता है।

  • एक .NET मानक पुस्तकालय जो Xamarin प्रपत्र विचारों को संभालता है।

  • एक ज़ामरीन एंड्रॉइड और ज़ामारिन आईओएस प्रोजेक्ट।

इसलिए आप देख सकते हैं कि एप्लिकेशन के क्लाइंट पक्ष में यहां एक बड़ा फायदा है क्योंकि मैं .NET मानक पुस्तकालयों (क्लाइंट एपीआई और व्यूमॉडल) दोनों का पुन: उपयोग कर सकता हूं और बस WPF, Xamarin और IOS अनुप्रयोगों के लिए कोई तर्क नहीं के साथ विचार कर सकता हूं।


तो संक्षिप्त उत्तर होगा:

IAnimal == .NetStandard (General)
ICat == .NetCore (Less General)
IDog == .NetFramework (Specific / oldest and has the most features)

आशा है कि यह .NET मानक एपीआई सतह और अन्य .NET प्लेटफार्मों के बीच संबंधों को समझने में मदद करेगा। प्रत्येक इंटरफ़ेस एक लक्ष्य ढांचे का प्रतिनिधित्व करता है और विधियाँ उस लक्ष्य ढांचे पर उपलब्ध एपीआई के समूहों का प्रतिनिधित्व करती हैं।

namespace Analogy
{
  // .NET Standard

interface INetStandard10
{
    void Primitives();
    void Reflection();
    void Tasks();
    void Xml();
    void Collections();
    void Linq();
}

interface INetStandard11 : INetStandard10
{
    void ConcurrentCollections();
    void LinqParallel();
    void Compression();
    void HttpClient();
}

interface INetStandard12 : INetStandard11
{
    void ThreadingTimer();
}

interface INetStandard13 : INetStandard12
{
    //.NET Standard 1.3 specific APIs
}

// And so on ...


// .NET Framework 

interface INetFramework45 : INetStandard11
{
    void FileSystem();
    void Console();
    void ThreadPool();
    void Crypto();
    void WebSockets();
    void Process();
    void Drawing();
    void SystemWeb();
    void WPF();
    void WindowsForms();
    void WCF();
}

interface INetFramework451 : INetFramework45, INetStandard12
{
    // .NET Framework 4.5.1 specific APIs
}

interface INetFramework452 : INetFramework451, INetStandard12
{
    // .NET Framework 4.5.2 specific APIs
}

interface INetFramework46 : INetFramework452, INetStandard13
{
    // .NET Framework 4.6 specific APIs
}

interface INetFramework461 : INetFramework46, INetStandard14
{
    // .NET Framework 4.6.1 specific APIs
}

interface INetFramework462 : INetFramework461, INetStandard15
{
    // .NET Framework 4.6.2 specific APIs
}

// .NET Core
interface INetCoreApp10 : INetStandard15
{
    // TODO: .NET Core 1.0 specific APIs
}
// Windows Universal Platform
interface IWindowsUniversalPlatform : INetStandard13
{
    void GPS();
    void Xaml();
}

// Xamarin 
interface IXamarinIOS : INetStandard15
{
    void AppleAPIs();
}

interface IXamarinAndroid : INetStandard15
{
    void GoogleAPIs();
}    
// Future platform

interface ISomeFuturePlatform : INetStandard13
{
    // A future platform chooses to implement a specific .NET Standard version.
    // All libraries that target that version are instantly compatible with this new
    // platform
}
}

Source


.Net फ्रेमवर्क और .Net कोर .Net रनटाइम के दो अलग-अलग कार्यान्वयन हैं। कोर और फ्रेमवर्क (लेकिन विशेष रूप से फ्रेमवर्क) दोनों में अलग-अलग प्रोफाइल होते हैं, जिसमें कई एपीआई और असेंबली माइक्रोसॉफ्ट के बड़े या छोटे (या सीधे सादे अलग) चयन शामिल होते हैं। वे कहाँ और किस प्रोफ़ाइल में स्थापित हैं, इस पर निर्भर करता है। उदाहरण के लिए, "सामान्य" विंडोज प्रोफाइल की तुलना में यूनिवर्सल विंडोज ऐप्स में कुछ अलग एपीआई उपलब्ध हैं। विंडोज पर भी, आपके पास "क्लाइंट" प्रोफ़ाइल बनाम "पूर्ण" प्रोफ़ाइल हो सकती है। इसके अतिरिक्त, अन्य कार्यान्वयन (जैसे मोनो) में पुस्तकालयों के अपने सेट हैं।

.Net मानक एक विनिर्देश है जिसके लिए एपीआई पुस्तकालयों और विधानसभाओं के सेट उपलब्ध होने चाहिए। .Net Standard 1.0 के लिए लिखा गया एक ऐप फ्रेमवर्क, कोर, मोनो, आदि के किसी भी संस्करण को संकलित करने और चलाने में सक्षम होना चाहिए, जो कि .Net मानक 1.0 पुस्तकालयों के संग्रह के लिए समर्थन का विज्ञापन करता है। ऐसा ही .Net मानक 1.1, 1.5, 1.6, 2.0, आदि के लिए भी सही है। जब तक कि रनटाइम आपके प्रोग्राम द्वारा लक्षित मानक के संस्करण के लिए समर्थन प्रदान करता है, तब तक आपका प्रोग्राम वहां चलना चाहिए।

मानक के एक संस्करण पर लक्षित परियोजना उन विशेषताओं का उपयोग करने में सक्षम नहीं होगी जो मानक के उस संशोधन में शामिल नहीं हैं। इसका मतलब यह नहीं है कि आप अन्य असेंबली पर निर्भरता नहीं ले सकते हैं, या अन्य विक्रेताओं द्वारा प्रकाशित एपीआई (यानी: नुगेट पर आइटम)। लेकिन इसका मतलब यह है कि आपके द्वारा ली जाने वाली कोई भी निर्भरता .Net मानक के अपने संस्करण के लिए समर्थन भी शामिल करना चाहिए। .Net मानक जल्दी से विकसित हो रहा है, लेकिन यह अभी भी काफी नया है, और कुछ छोटे रनटाइम प्रोफाइल के बारे में पर्याप्त परवाह करता है, कि यह सीमा तेज हो सकती है। (डेढ़ साल बाद ध्यान दें: यह बदलना शुरू हो रहा है, और हाल ही में .Net मानक संस्करण बहुत अच्छे और अधिक पूर्ण-विशेषताओं वाले हैं)।

दूसरी ओर, मानक पर लक्षित एक ऐप को अधिक तैनाती स्थितियों में उपयोग करने में सक्षम होना चाहिए , क्योंकि सिद्धांत रूप में यह कोर, फ्रेमवर्क, मोनो, आदि के साथ चल सकता है। व्यापक वितरण की तलाश में एक क्लास लाइब्रेरी प्रोजेक्ट के लिए, यह एक आकर्षक वादा है। । मुख्य रूप से आंतरिक उद्देश्यों के लिए उपयोग किए जाने वाले एक क्लास लाइब्रेरी प्रोजेक्ट के लिए, यह एक चिंता का विषय नहीं हो सकता है।

.Net मानक उन स्थितियों में भी उपयोगी हो सकता है, जहां SysAdmin की टीम ASP .Net से Windows पर ASP.Net के लिए .net Core को लिनक्स पर दार्शनिक या लागत कारणों से स्थानांतरित करना चाहती है, लेकिन विकास टीम इसके खिलाफ काम करना जारी रखना चाहती है। विंडोज पर विजुअल स्टूडियो में फ्रेमवर्क।







.net-standard