2012-05-30 10 views
6

मैं विजुअल सूडियो 2010 में एक नई प्रोग्रामिंग भाषा जोड़ने की सोच रहा हूं और मैं लेने के लिए सबसे अच्छे दृष्टिकोण पर थोड़ा उलझन में हूं।विजुअल स्टूडियो 2010 एमईएफ बनाम एमपीएफ?

मैंने एमपीएफ में देखा है और सिंटैक्स हाइलाइटिंग, बाहरी पार्सर को जोड़ने, आदि के बारे में कुछ उदाहरण पाए हैं और यह बहुत सरल लगता है।

फिर मैंने एमईएफ नामक कुछ और दृश्य स्टूडियो के लिए यह नया विस्तारशीलता मॉडल कैसे पढ़ा। मैंने इसके बारे में खेला है और मुझे कुछ नमूनों का पालन करके मेरा वाक्यविन्यास काम कर रहा है। अब, एमईएफ के साथ मैं अपने लंगेज के लिए अपने पार्सर में कैसे लिंक करता हूं, जैसे कि एमपीएसएफ पार्ससोर्स का उपयोग करके, मैं खो गया हूं। मैं एएनटीएलआर बीटीडब्ल्यू का उपयोग कर रहा हूं।

क्या एमईएफ सिर्फ संपादक के दृश्य पहलुओं जैसे हाइलाइटिंग, सजावट इत्यादि के लिए है ... या क्या यह संभव है/इसके साथ भाषा सेवकों को लागू करने की सिफारिश की गई है?

जो मैं इकट्ठा करता हूं उससे एमईएफ नया, अनुशंसित दृष्टिकोण है लेकिन नियमित एमपीएफ की तुलना में एक नई भाषा बनाना कठिन लगता है। क्या एमपीएफ अभी भी एक अच्छा दृष्टिकोण है?

+3

एक सर्वोत्तम प्रोजेक्ट यह कैसे पढ़ता है इसका अध्ययन करके सबसे अच्छा तरीका है। यह देखने के लिए कि वे पाइथन भाषा के लिए वीएस में समर्थन कैसे जोड़ते हैं, यह देखने के लिए आयरनपीथन और "विजुअल स्टूडियो के लिए पायथन टूल्स" पर एक नज़र डालने का प्रयास करें। –

+0

यह प्रश्न अभी भी एक स्वीकृत उत्तर गुम है। क्या मेरा उत्तर आपकी मदद करता है या आपको अधिक जानकारी चाहिए? = 3 –

+0

यिक्स, मैं इसके बारे में भूल गया था, यह थोड़ी देर पहले था। आपका जवाब बहुत उपयोगी था धन्यवाद और मैं एमपीएफ मार्ग चला गया। –

उत्तर

4

एमईएफ (प्रबंधित एक्सटेंसिबिलिटी फ्रेमवर्क) विजुअल स्टूडियो जैसे प्रोग्रामों का विस्तार करने के लिए .NET में एक सामान्य प्रोग्रामिंग दृष्टिकोण है। वीएस पैकेज/एक्सटेंशन एमपीएफ कक्षाओं के बजाय नए वीएस-एमईएफ कक्षाओं (अनुबंध) का उपयोग कर सकते हैं। एमईएफ [Export] विशेषताओं से सजाए गए वर्गों द्वारा मान्यता प्राप्त है। आम तौर पर कहा जाता है कि आप एक रंगीन वस्तु की तरह एक विशिष्ट वर्ग का उत्तराधिकारी हैं और इसे विजुअल स्टूडियो में निर्यात करते हैं जो तब आपके एमईएफ पैकेज में सभी निर्यात देखता है और उन्हें आयात करता है।

एमपीएफ (प्रबंधित पैकेज फ्रेमवर्क) गैर-प्रबंधित/मूल वीएस एक्सटेंशन मॉडल के पुराने COM wrappers के आस-पास एक कक्षा प्रणाली की तरह है। आप प्रोग्रामिंग और एमपीएफ कक्षाओं के तरीकों को कार्यान्वित करके विजुअल स्टूडियो का विस्तार करते हैं (एमपीएफ कक्षाएं बदले में वीएस के COM wrappers के COM-like इंटरफेस को कार्यान्वित करती हैं। उदाहरण के लिए LanguageServiceIVsLanguageInfo और कुछ अन्य इंटरफेस लागू करता है, लेकिन यह बस बस "एकत्रित" विधियों को लागू करता है उन इंटरफेस का जो आप अपने LanguageService कार्यान्वयन कक्षा में ओवरराइड कर सकते हैं)।

यदि आप एक पूर्ण प्रोग्रामिंग भाषा लागू करना चाहते हैं, तो आप एमपीएफ और एमईएफ को जोड़ देंगे। आप tokenization की तरह संपादक भागों (जो सिंटेक्स हाइलाइटिंग के लिए आवश्यक है) के लिए MEF का उपयोग करें, रूपरेखा ब्रेस मिलान आदि और MPF नया उपकरण खिड़कियां, संपत्ति पृष्ठों आदि

MPF के बजाय

भी आप कर सकते हैं जैसे अन्य सामान के लिए वी.एस. पुराने COM wrappers का उपयोग करें, लेकिन एमपीएफ कक्षाएं आपके लिए पहले से ही कुछ COM काम करती हैं, यदि आप COM wrappers चुनते हैं तो आपको इससे निपटना होगा।

आप एमपीएफ के साथ टोकननाइज़र इत्यादि को भी कार्यान्वित कर सकते हैं, लेकिन मैंने इसे आजमाया और इसे एमईएफ की तुलना में अधिक सहज ज्ञान युक्त पाया। यदि आप मुझसे पूछते हैं, तो यह बहुत कठिन है, और एमईएफ की तुलना में अधिक ब्राइंडमेज की आवश्यकता है, लेकिन मुझे अभी तक एमईएफ के साथ मिलना है क्योंकि मुझे एमपीएफ के साथ मिला है।

यह मेरे लिए थोड़ा उलझन में है क्योंकि एमएसडीएन ने एमईएफ और एमपीएफ के लेखों को मिश्रित किया जैसा मैंने देखा था। आपको बहुत सावधानी से देखना होगा जिसमें आप एमएसडीएन के उपधारा जाते हैं, आप आसानी से एमईएफ श्रेणी से एमपीएफ में दुर्घटनाग्रस्त हो सकते हैं। हालांकि, MSDN आप-पास के संकेत कुछ सामान्य लेख में क्या-है-क्या यहाँ वी.एस. विस्तार, उदाहरण के लिए के बारे में: http://msdn.microsoft.com/en-us/library/cc138569.aspx

0

मैं वर्तमान में एक भाषा सेवा विशेष रूप से MEF के साथ लागू करने कर रहा हूँ (VS2013 में)।

सिंटैक्स हाइलाइटिंग के अलावा (जिसे आप ITagger<ClassificationTag> के साथ कर सकते हैं) और कुछ अन्य अंतर्निहित विशिष्ट उद्देश्य एमईएफ इंटरफेस (उदा।विकल्प पृष्ठों और विभिन्न प्रकार के इंटेलिजेंस के लिए) जिन्हें आप आवश्यकतानुसार कार्यान्वित करते हैं, पृष्ठभूमि पार्सिंग जैसी चीजें करने के लिए आमतौर पर IVsTextViewCreationListener लागू करते हैं और फ़ाइल खोले जाने पर सामान करते हैं; वैकल्पिक रूप से, आप प्रविष्टि बिंदु के रूप में अपने पैकेज की Initialize विधि का उपयोग करके पृष्ठभूमि में अपने प्रोजेक्ट पदानुक्रम को पार कर सकते हैं।

इंटेलिसेंस फीचर्स इत्यादि अक्सर आपको एक निश्चित कमांड का जवाब देने की आवश्यकता होती है (उदाहरण के लिए, पूरा होने वाले सूची बॉक्स को पॉप अप करने के बारे में जानने के लिए मॉनिटर कीस्ट्रोक); आप IOleCommandTarget को कार्यान्वित करके और प्रासंगिक कमांड को संभालने के द्वारा इसे संभाल सकते हैं (AddCommandFilter पर IVsTextView पर टेक्स्ट कमांड बनाते समय आप अपने कमांड हैंडलर को मैन्युअल रूप से हुक करते हैं)।

अब तक मैंने कुछ भी नहीं किया है जो मैं एमईएफ के माध्यम से नहीं कर सकता (उन चीजों को छोड़कर जो बिल्कुल नहीं किया जा सकता है); मैंने वास्तव में एमपीएफ में कभी नहीं देखा, क्योंकि मुझे इसकी आवश्यकता नहीं थी।

जिसके माध्यम से संपर्क में हैं सुविधाओं के लिए (ध्यान दें दिन के अंत में है कि, कोड MEF पाइपलाइन, वी.एस. एसडीके इंटरफेस और सहायक वर्गों, और EnvDTE गूप का एक सूप के समान हो जाता है।)

0

उपयोग MEF MEF। अन्य सुविधाओं को केस-दर-मामले आधार पर संभाला जाता है (यदि आपको किसी विशेष सुविधा को लागू करने में समस्या हो रही है तो एक विशिष्ट प्रश्न पूछें)। प्रोजेक्ट सिस्टम (प्रोजेक्ट्स के लिए एमपीएफ, या MPFProj) के लिए मैं अभी भी एमपीएफ का उपयोग करता हूं। पृष्ठभूमि पार्सिंग को संभालने के लिए, मैं अपने BackgroundParser कार्यान्वयन (एमआईटी लाइसेंस) पर एक नज़र डालने की सलाह देता हूं। यह काफी अच्छा काम करता है, हालांकि वापस देखकर मैं चाहता हूं कि मैंने इसके लिए टीपीएल का इस्तेमाल किया और ReParseImpl को Task को सिंक्रनाइज़ करने के बजाय वापस कर दिया।

  • BackgroundParser.cs
  • Commit 0d3e55e, परिचय और BackgroundParser के उपयोग और कुछ आवश्यक सहायक वर्गों दिखा।
संबंधित मुद्दे