.NET मानक बनाम .NET कोर


240

मैंने .NET मानक और .NET कोर के बीच अंतर के बारे में पढ़ा है, लेकिन मुझे वास्तव में पता नहीं है कि अंतर क्या है, या .NET .NET लाइब्रेरी प्रोजेक्ट का चयन कब करना है और कब .NET कोर लाइब्रेरी प्रोजेक्ट चुनना है।

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

.NET कोर के साथ, मैंने पढ़ा है कि यह क्रॉस-प्लेटफ़ॉर्म उपयोग के लिए भी है, इसलिए यदि मैं .NET कोर लाइब्रेरी का चयन करता हूं तो ऐसा लगता है कि मैं इसे कई प्लेटफार्मों पर भी उपयोग कर सकता हूं, जैसे .NET मानक।

इसलिए अंत में, मुझे अंतर दिखाई नहीं दे रहा है। मुझे कब उपयोग करना चाहिए? उनके बीच क्या अंतर है?


33
कोड शब्दों में: .net मानक = इंटरफ़ेस, .net कोर = वर्ग; यदि आप उस वर्ग के खिलाफ कोड करते हैं जिसे आप अधिक विधियाँ (आदि) प्राप्त करते हैं, लेकिन आप उस ठोस प्रकार (और वंशज) तक ही सीमित हैं; यदि आप इंटरफ़ेस का उपयोग करते हैं, तो आपको एक छोटी सतह मिल सकती है , लेकिन यह मनमाने ढंग से क्रियान्वयन के खिलाफ काम करेगा ... जब तक कि उन कार्यान्वयनों से वही किया जाता है जो अपेक्षित है :) हाँ, .net कोर कई प्लेटफार्मों को लक्षित करता है, लेकिन .net के अन्य कार्यान्वयन भी हैं। मानक
मार्क Gravell

9
.NETStandard PCL के लिए एक प्रतिस्थापन है। एक पोर्टेबल क्लास लाइब्रेरी ने आपको एक लाइब्रेरी लिखने में मदद की जो एक से अधिक प्लेटफॉर्म (फोन, डेस्कटॉप, स्टोर, ब्राउज़र, एक्सबॉक्स, आदि) पर चल सकती है। यह बहुत अच्छी तरह से पैमाने पर नहीं था, एन से बुरी तरह से पीड़ित! समस्या है, इसलिए उन्होंने इसे छोड़ दिया। .NETCore सिर्फ पहला ढांचा है जो उन्हें मिला, यह सबसे आसान था, बाकी को पकड़ना है। ध्यान रखें कि यह बहुत अधिक कार्य-प्रगति पर है। .NETStandard v2.0 के साथ आगे बड़े परिवर्तन। उन सभी पर शासन करने का मानक, अभी के लिए :)
हंस पैसेंट

कृपया मौजूदा एक में अतिरिक्त प्रश्न न जोड़ें। संपादन में आपका प्रश्न इसके लिए अलग है।
जॉन स्कीट

1
@JonSkeet तो मुझे एक नया प्रश्न खोलना चाहिए? सलाह के लिए धन्यवाद। क्योंकि पहली बार में मैंने .net Core मल्टी टारगेट के बारे में एक नया प्रश्नपत्र खोला है और मुझे डाउनवोट किया गया है क्योंकि उन्होंने कहा कि यह एक डुप्लिकेट प्रश्न है।
इलवरो गार्सिया

@ ButlvaroGarcía: हाँ, लेकिन इसे स्पष्ट करें - आपका वर्तमान एक-वाक्य प्रश्न मेरे लिए बिल्कुल भी स्पष्ट नहीं है।
जॉन स्कीट

जवाबों:


195

मैं आपके संदेह को और स्पष्ट करने और जॉन स्कीट के उत्तर का विस्तार करने का प्रयास करूंगा।

.NET मानक एक विनिर्देश है , इसलिए विशिष्ट .NET मानक संस्करण के लिए संकलित एक पुस्तकालय का उपयोग विभिन्न .NET मानक कार्यान्वयन में किया जा सकता है।

जैसा कि मेरी अन्य टिप्पणी में कहा गया है, .NET मानक और अन्य .NET मानक कार्यान्वयन (.NET कोर, .NET फ्रेमवर्क, आदि) के बीच संबंध के लिए एक अच्छा सादृश्य है डेविड फाउलर द्वारा यह सार है : .NET मानक संस्करण हैं Interfaces, जबकि रूपरेखाएँ हैं उन इंटरफेस के कार्यान्वयन।

यह सरलीकृत चित्र इस रिश्ते को समझने में मदद कर सकता है:

नेट मानक इंटरफेस सादृश्य

कुछ भी लक्ष्य NetCore10करने के लिए INetStandard15एपीआई और NetCore10 विशिष्ट एपीआई (जैसे DotNetHostPolicy) तक पहुंच है ।

बेशक इस पुस्तकालय का उपयोग विभिन्न INetStandard15कार्यान्वयनों में नहीं किया जा सकता है ( या इसके NetCore10लिए परिवर्तनीय नहीं है )।NetFramework462Mono46

यदि आप, इसके बजाय, केवल INetStandard15API (और किसी ठोस ढांचे के बजाय उस विनिर्देश को लक्षित) तक पहुंच की आवश्यकता है, तो आपके पुस्तकालय का उपयोग किसी भी फ्रेमवर्क द्वारा किया जा सकता है NetCore10, जो इसे लागू करता है ( और NetFramework462, आदि)

नोट: मूल सादृश्य में डेविड फाउलर ने .NET मानक संस्करण और फ्रेमवर्क कार्यान्वयन दोनों के लिए इंटरफेस का उपयोग किया। मेरा मानना ​​है कि इंटरफेस और कक्षाओं का उपयोग करना, इसके बजाय, अधिक सहज और बेहतर विनिर्देशों और ठोस कार्यान्वयन के बीच संबंध का प्रतिनिधित्व करता है।


2
इस लिए आपका बहुत - बहुत धन्यवाद। लेकिन मुझे संदेह है। अगर .net मानक एक इंटरफ़ेस है और इसे .net फ्रेमवर्क और .net कोर के साथ उदाहरण के लिए लागू किया जा सकता है, जब मैं एक .net मानक वर्ग पुस्तकालय बनाता हूं और मैं इस लाइब्रेरी का उपयोग किसी अन्य परियोजना में करता हूं, तो कार्यान्वयन क्या है, नेट फ्रेमवर्क या .net। कोर?
अल्वारो गार्सिया

8
यह संकलित आवेदन के कार्यान्वयन का उपयोग करेगा (जो भी हो)। यदि आप एक नेट कोर ऐप संकलित करते हैं तो यह नेट कोर पुस्तकालयों का उपयोग करेगा (जो कि नेट मानक का कार्यान्वयन है)
फेडेरिको डिपुमा

5
यह आरेख कोर / एसटीडी / रूपरेखा संबंध को दर्शाने में एक शानदार मदद है।
जैस्पर

इसलिए यदि मैं एक net461 कंसोल ऐप बनाता हूं और एक netstandard2.0 लाइब्रेरी को लक्षित करता हूं, तो उस मानक लीब से कुछ भी कंसोल ऐप में हल नहीं होता है। इसलिए... ??
सिनास्टैटिक

2
एक तस्वीर एक हजार शब्दों के लायक है
निकस

182

.NET कोर .NET मानक का एक कार्यान्वयन है। यह कई ऑपरेटिंग सिस्टम पर उपलब्ध है, लेकिन यह एक ही बात नहीं है - .NET मानक के अन्य कार्यान्वयन भी हैं।

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

संक्षेप में: अधिकतम पोर्टेबिलिटी प्राप्त करने के लिए, अपने पुस्तकालय को लक्ष्य बनाएं। .NET मानक।


5
@ YoulvaroGarcía: "आप" का क्या अर्थ है जो संगत होना चाहिए? .NET कोर 1.0? जरूरी नहीं - क्योंकि .NET कोर 1.0 में अभी भी अतिरिक्त चीजें शामिल हो सकती हैं। उस प्रविष्टि का मतलब है कि यदि आप .NET मानक 1.6 को लक्षित करते हैं, तो आप मोनो 4.6 और .NET कोर 1.0 दोनों के तहत कोड चला सकते हैं ।
जॉन स्कीट

4
आप .NET Core (CoreCLR & CoreFX) के अलावा किसी अन्य पर .NET कोर असेंबली नहीं चला सकते हैं। आप किसी भी ढांचे पर .NET मानक असेंबली चला सकते हैं जो प्रासंगिक मानक (1.3, 1.6, 2.0, आदि) के लिए संविदात्मक दायित्वों को पूरा करता है।
मार्क रेंडले

2
क्रॉस-प्लेटफ़ॉर्म ऑपरेटिंग सिस्टम को संदर्भित करता है, रूपरेखा को नहीं।
मार्क रेंडले

15
एक सादृश्य के रूप में, एक मानक इंटरफ़ेस (उदाहरण INetStandard16) के रूप में .NET मानक की कोशिश करें । .NET कोर 1.0 और मोनो 4.6 दोनों लागू होते हैं INetStandard16। आप .net Core 1.0 को मोनो 4.6 (और इसके विपरीत) में परिवर्तित नहीं कर सकते हैं, लेकिन जो भी उपयोग करता है INetStandard16वह दोनों पर काम करेगा। ( डेविड फाउलर का श्रेय )
फेडेरिको डिपुमा

6
इसने मुझे चौंका दिया। नाम पीछे की ओर लगते हैं। आपको लगता है कि "कोर" नाम की कोई चीज दो में से सबसे कम होगी ...
jpmc26

6

.NET कोर क्लास लाइब्रेरी मूल रूप से .NET फ्रेमवर्क लाइब्रेरी का एक सबसेट है, जिसमें बस कम एपीआई होते हैं। .NET कोर क्लास लाइब्रेरी से चिपके रहने से रनटाइम के बीच कोड साझा करना मुश्किल हो जाता है। यह कोड भिन्न रनटाइम (Xamarin के लिए मोनो) के लिए काम नहीं कर सकता है, क्योंकि इसमें वह एपीआई नहीं है जिसकी आपको आवश्यकता है। इसे हल करने के लिए .NET मानक है, जो कि केवल विनिर्देश के सेट है जो आपको बताता है कि आप कौन से एपीआई का उपयोग कर सकते हैं । .NET मानक का मुख्य उद्देश्य रनटाइम के बीच कोड साझा करना है। और यह महत्वपूर्ण है कि यह विनिर्देश सभी रनटाइम द्वारा कार्यान्वित किया जाता है। (.NET फ्रेमवर्क, XAMarin के लिए .NET कोर और मोनो)।

इसलिए यदि आप सुनिश्चित हैं कि आप अपने पुस्तकालय का उपयोग केवल .NET कोर परियोजनाओं के लिए करेंगे, तो आप .NET मानक को अनदेखा कर सकते हैं, लेकिन यदि कोई छोटा मौका है कि आपके कोड का उपयोग .NET फ्रेमवर्क या मोनो द्वारा Xamarin के लिए किया जाएगा तो बेहतर है .NET मानक के लिए छड़ी करने के लिए

यह भी ध्यान दें कि .NET मानक के उच्च संस्करणों में अधिक API होते हैं, लेकिन निम्न संस्करण अधिक प्लेटफार्मों द्वारा समर्थित होते हैं। इसलिए यदि आप .NET मानक लाइब्रेरी बनाते हैं , जिसे आप रनटाइम्स के बीच साझा करना चाहते हैं , तो आपके द्वारा किए जा रहे सबसे कम संस्करण को लक्षित कर सकते हैं , जो आपको अधिकांश प्लेटफार्मों तक पहुंचने में मदद करता है। उदाहरण के लिए, यदि आप .NET फ्रेमवर्क 4.5 और .NET कोर 1.0 पर चलना चाहते हैं, तो आपके द्वारा उपयोग किया जाने वाला उच्चतम .NET मानक संस्करण .NET मानक 1.1 है। इसके बारे में अधिक जानकारी के लिए प्रलेखन से इस महान तालिका का संदर्भ लें ।

PS: इसके अलावा अगर आप अपनी लाइब्रेरी को .NET स्टैंडर्ड में बदलना चाहते हैं, तो .NET पोर्टेबिलिटी एनालाइजर आपकी मदद कर सकता है।


4

.NET मानक .NET .NET के विनिर्देश का एक विनिर्देश है जो .NET कार्यान्वयन पर उपलब्ध है। यह सभी .NET कार्यान्वयन के लिए BCL APIs के एकसमान सेट को परिभाषित करने में सक्षम बनाता है।

.NET कोर .NET मानक का एक ऐसा कार्यान्वयन है। .NET फ्रेमवर्क .NET मानक का एक और कार्यान्वयन है।

.NET ब्लॉग से छवि

यहां छवि विवरण दर्ज करें

फेडेरिकोस उत्तर आपको एक ग्राफिकल ओवरव्यू देता है कि कैसे प्रत्येक रूपरेखा संस्करणों के साथ विकसित होती है। Microsoft डॉक्स से आरेख नीचे देखें ।

यहां छवि विवरण दर्ज करें

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


2

.NET मानक एपीआई का एक विनिर्देश है जो सभी .NET कार्यान्वयन को प्रदान करना चाहिए। यह .NET परिवार के लिए स्थिरता लाता है और आपको किसी भी .NET कार्यान्वयन से उपयोग की जा सकने वाली लाइब्रेरी बनाने में सक्षम बनाता है। यह साझा घटकों के निर्माण के लिए पीसीएल की जगह लेता है।

.NET कोर .NET मानक का एक कार्यान्वयन है, जो ASP.NET कोर का उपयोग करके कंसोल एप्लिकेशन, वेब एप्लिकेशन और क्लाउड सेवाओं के निर्माण के लिए अनुकूलित है। इसका एसडीके एक शक्तिशाली टूलिंग के साथ आता है जो विज़ुअल स्टूडियो विकास के अलावा एक पूर्ण कमांड लाइन-आधारित विकास वर्कफ़्लो का समर्थन करता है। आप उनके बारे में अधिक जान सकते हैं aka.ms/netstandardfaq और aka.ms/netcore पर


इस प्रश्न पर चर्चा किए गए अधिकांश सामानों की एक बहुत स्पष्ट व्याख्या के साथ ऊपर, Microsoft (MSDN - सितंबर 2017) द्वारा निम्नलिखित अत्यंत सहायक लेख में पाया जा सकता है: .NET मानक - .NET कोर और .NET मानक को डीमिस्टिफाई करना


0

क्या आपका मतलब .NET फ्रेमवर्क था? क्योंकि .NET मानक एक कार्यान्वयन है, जैसे .NET फ्रेमवर्क, .NET कोर और ज़ामरीन।

मुझे .NET कोर बहुत पसंद है क्योंकि हम इसे लिनक्स पर होस्ट कर सकते हैं (मेरे अनुभव में nginx का उपयोग करें)। यह .NET फ्रेमवर्क से अलग है जो आप केवल IIS पर होस्ट कर सकते हैं। आप इस मामले में बजट की मेजबानी के बारे में विचार कर सकते हैं (क्योंकि विंडोज़ सर्वर मेरे लिए महंगा है)।

में विकास के वातावरण परिप्रेक्ष्य , नेट कोर हल्के है। तो, आप IDE (न केवल दृश्य स्टूडियो) के लिए VSCode, उदात्त का उपयोग कर सकते हैं।


0

सरल शब्दों में, .NET लाइब्रेरी क्लास लाइब्रेरी प्रोजेक्ट लिखने के लिए .NET मानक का उपयोग किया जाता है, जो dll के लिए संकलित होता है। .NET कोर का उपयोग वास्तविक वेब अनुप्रयोगों को विकसित करने के लिए किया जा सकता है जो सभी ऑपरेटिंग सिस्टम (विंडोज, लिनक्स, मैकओएस) पर चल सकते हैं। (.NET कोर 3 में Microsoft ने WPF का उपयोग करके डेस्कटॉप ऐप को विकसित करने के लिए कार्यक्षमता प्रदान की है, लेकिन अब ये ऐप क्रॉस प्लेटफॉर्म नहीं होंगे और केवल विंडोज़ सिस्टम पर चलेंगे। भविष्य में Microsoft इन्हें क्रॉस-प्लेटफ़ॉर्म भी बना सकते हैं। .NET मानक पुस्तकालयों / dlls का उपयोग किसी भी अनुप्रयोग में किया जा सकता है जो .NET (.NET फ्रेमवर्क, .NET कोर) का उपयोग करता है जिसका अर्थ है कि आप .NET मानक और .NET कोर दोनों के साथ .NET मानक का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.