Microsoft.Net.Compilers का उद्देश्य क्या है?


83

इस संकलक का महत्व क्या है? यह एक होना चाहिए या बिना कर सकता है? वैसे भी एक और संकलक होने का उद्देश्य क्या है, या यह केवल एक भविष्य परियोजना है? एक संक्षिप्त अवलोकन की सराहना की जाएगी।


2
यह Microsoft.CodeDom.Providers.DotNetCompilerPlatformv1.0.8 की एक निर्भरता भी है और नीचे आप इसे इस कारण से देख रहे होंगे
KyleMit

1
Microsoft के अनुसार , के Microsoft.Net.Compilersपक्ष में पदावनत किया जाता है Microsoft.Net.Compilers.Toolset
उवे कीम

जवाबों:


96

Microsoft.Net.Compilers पैकेज का मुद्दा यह है कि उस पैकेज के साथ वितरित कंपाइलर का उपयोग आपके प्रोजेक्ट को संकलित करने के लिए किया जाएगा, बजाय इसके कि .NET फ्रेमवर्क के साथ या विजुअल स्टूडियो के साथ आता है। सबसे व्यावहारिक प्रत्यक्ष लाभ यह है कि यह आपकी परियोजनाओं को C # 6 सुविधाओं का उपयोग करने की अनुमति देता है, और फिर उन परियोजनाओं को एक सिस्टम पर निर्मित करने की अनुमति देता है जिसमें C # 6 संकलक स्थापित नहीं होता है, उदाहरण के लिए एक सतत एकीकरण सर्वर पर जहां आप डॉन करते हैं ' टी पूर्ण दृश्य स्टूडियो 2015 स्थापित करना चाहते हैं।


मुझे एक बहुत ही सरल काम करने की ज़रूरत है, जो किसी भी .cs फ़ाइल को संकलित करना और il का उत्सर्जन करना है, बाहरी संदर्भों को मान्य करने की कोई आवश्यकता नहीं है। क्या यह Microsoft.Net.Compilers के साथ संभव है?
बांद्रा

@Bandara Microsoft.Net.Compilers के साथ या इसके बिना, बाहरी संदर्भों के बिना C # संकलन करना संभव नहीं है। उदाहरण के लिए संदर्भित असेंबलियों को अधिभार संकल्प के लिए आवश्यक है। और अगर आपके पास बाहरी संदर्भ हैं, तो यह तकनीकी रूप से Microsoft.Net.Compilers के साथ संभव है, लेकिन यह वास्तव में नौकरी के लिए गलत उपकरण है। जब आप एक ही संकलक पहले से ही अन्य पैकेजों में उपलब्ध होते हैं तो आप एक बाहरी प्रक्रिया शुरू कर सकते हैं जिसे आप सीधे अपने स्वयं के कार्यक्रम में बुला सकते हैं।

@JaredPar (MS) से अपडेट किया गया उत्तर देखें, यह उत्तर अब मान्य नहीं है। लगता है कि हमें अपने समाधानों की जाँच करनी चाहिए और पुराने पैकेजों को अप-टू-डेट VS / VSCode / SDS टूलसेट के साथ हटा देना चाहिए।
टोनी वॉल

17

वर्तमान में Microsoft.Net.Compilers का कोई उद्देश्य नहीं है। यह एक NuGet पैकेज है जिसे अपग्रेड किया गया है और विजुअल स्टूडियो 16.5 के बाद इसका उत्पादन बंद हो जाएगा। Microsoft.Net.Compilers.Toolset नामक एक उत्तराधिकारी पैकेज है। इस पैकेज में Microsoft.Net.Compilers के समान ही कार्यक्षमता है लेकिन .NET डेस्कटॉप और .NET कोर MSBuild दोनों उदाहरणों के साथ काम करता है।

यहां तक ​​कि Microsoft.Net.Compilers.Toolset सामान्य खपत के लिए नहीं है। यह पैकेज दो विशिष्ट उपयोग करता है:

  1. कंपाइलर में दुर्घटनाग्रस्त बग को हिट करने वाले ग्राहकों को अनब्लॉक करने के लिए एक अल्पकालिक वाहन के रूप में कार्य करता है। ऐसे ग्राहकों के लिए हम इस पैकेज का उपयोग उनके परिदृश्यों को अनब्लॉक करने के लिए सिर्फ एक-एक घंटे के लिए कर सकते हैं। यह तब तक एक पुल के रूप में कार्य करता है जब तक कि इसे संबंधित विजुअल स्टूडियो या .NET SDK सर्विसिंग रिलीज़ में ठीक नहीं कर देता। जब ऐसा होता है तो ग्राहक को उनके समाधान से पैकेज को हटाने और आधिकारिक तौर पर जारी टूलसेट पर भरोसा करने के लिए कहा जाता है।
  2. Roslyn और .NET SDk के आधिकारिक बिल्ड के बीच बायनेरिज़ को स्थानांतरित करने के लिए एक तंत्र के रूप में कार्य करता है।

इस पैकेज है नहीं उनके निर्माण के लिए ग्राहकों द्वारा सामान्य लंबी अवधि के उपभोग के लिए मतलब है। मैं समझता हूं कि कुछ ग्राहक ऐसा करने के लिए चुनते हैं लेकिन इस तरह के उपयोग का समर्थन नहीं किया जाता है। पैकेज नियमित रूप से MSBuild के नए संस्करणों या निर्भरता / .NET SDK में लक्ष्य / लक्ष्य पर निर्भरता लेने से टूट सकता है।

जो ग्राहक अपने बिल्डरों के लिए संकलक के नए संस्करणों का उपयोग करना चाहते हैं, उन्हें इसके बजाय संकलक के आधिकारिक वितरण में से एक का उपयोग करने के लिए प्रोत्साहित किया जाता है:

  1. Visual Studio बिल्ड टूल SKU का उपयोग करें।
  2. .NET SDK का उपयोग करें

नोट : Microsoft.Net.Compilers पैकेज को आधिकारिक तौर पर Microsoft के एक भाग के रूप में समर्थित किया गया था। CodeDom.Providers.DotNetCompilerPlatform पैकेज कई साल पहले था क्योंकि यह एक निर्भरता थी। संस्करण 2.0 में शुरुआत हालांकि Microsoft.Net.Compilers पर निर्भरता को हटा दिया गया था और यह अब पूरी तरह से स्वतंत्र पैकेज के रूप में खड़ा है। उसी समय हम Microsoft.Net.Compilers को हटाने के लिए चले गए हैं क्योंकि अब इसके लिए कोई स्पष्ट उपयोग के मामले नहीं हैं।

इसका मतलब यह है कि कुछ ग्राहक अप्रत्याशित रूप से अपने प्रोजेक्ट फ़ाइल में Microsoft.Net.Compilers के साथ खुद को पाते हैं क्योंकि जब Microsoft.CodeDom.Providers.DotNetCompilerPlatform निर्भरता को हटा दिया गया था तो इसे हटाया नहीं गया था। ऐसे ग्राहकों के लिए सलाह केवल पैकेज के संदर्भ को हटाना है। इसकी अब जरूरत नहीं है।


बहुत दिलचस्प अंतर्दृष्टि। मैं सोच रहा हूं कि केवल अल्पकालिक उपयोग के बारे में पहलू का उल्लेख NuGet पैकेज के विवरण में क्यों नहीं किया गया है: nuget.org/packages/Microsoft.Net.Compilers
जैक मिलर

@JackMiller का उल्लेख Microsoft.Net.Compilers.Toolset में है । `यह पैकेज मुख्य रूप से ग्राहकों के लिए तेजी से शिपिंग हॉटफिक्स के लिए एक विधि के रूप में करना है। पुराने MSBuild प्रतिष्ठानों पर नए संकलक प्रदान करने के लिए दीर्घकालिक समाधान के रूप में इसका उपयोग स्पष्ट रूप से समर्थित नहीं है। नियमित आधार पर यह टूट सकता है और टूट जाएगा। `
Youssef13

6

यह एक पैकेज है जो ओपन-सोर्स सी # और विजुअल बेसिक कंपाइलर्स को रिच कोड विश्लेषण एपीआई प्रदान करता है।

आप जीथूब पर व्यापक दस्तावेज पा सकते हैं:

https://github.com/dotnet/roslyn


5
धन्यवाद। मैं पहले भी आधिकारिक दस्तावेज़ों में रहा हूँ लेकिन फिर भी परियोजना अस्पष्ट का उद्देश्य ढूँढता हूँ।
उपयोगी वस्तु

2
@usefulBee मूल रूप से यह Microsoft के ओपन सोर्स मूवमेंट का परिणाम है, अतिरिक्त जानकारी के लिए उदाहरण के लिए विकिपीडिया की जाँच करें: en.wikipedia.org/wiki/.NET_Compiler_Platform
ViRuSTriNiTy

1

जैसा कि दूसरों ने कहा है, इसमें C # और VB.NET के लिए .NET कंपाइलर हैं।

एक पैकेज होने का एक दिलचस्प पहलू यह है कि आप अपनी परियोजना के लिए कंपाइलर का एक विशिष्ट निर्माण निर्दिष्ट कर सकते हैं, जिसमें एक संस्करण भी शामिल है जिसे विज़ुअल स्टूडियो के साथ अभी तक शिप नहीं किया गया है।

हम इसका उपयोग https://github.com/dotnet/project-system में करते हैं जो विजुअल स्टूडियो का एक खुला स्रोत घटक है। यह हमें संकलक के पूर्व-रिलीज़ संस्करणों का उपयोग करने की अनुमति देता है डॉगफूड भाषा की विशेषताएं संकलक द्वारा समर्थित नहीं हैं जो वीएस के साथ जहाज करते हैं।

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