क्या मैं ArcMap 9.3 के लिए एक्सटेंशन विकसित करने के लिए .NET 3.5 में निर्धारित लक्ष्य ढांचे के साथ C # 4.0 का उपयोग कर सकता हूं? या इसके लिए C # 3.0 या पहले का होना जरूरी है?
क्या मैं ArcMap 9.3 के लिए एक्सटेंशन विकसित करने के लिए .NET 3.5 में निर्धारित लक्ष्य ढांचे के साथ C # 4.0 का उपयोग कर सकता हूं? या इसके लिए C # 3.0 या पहले का होना जरूरी है?
जवाबों:
संक्षिप्त उत्तर: मेरे अनुभव में, Visual Studio 2010 (C # भाषा संस्करण 4 के साथ) में ArcGIS 9.3 के लिए .NET 3.5-आधारित कोड को विकसित करने में कोई समस्या नहीं होनी चाहिए, जब तक आप .NET फ्रेमवर्क 3.5 को स्पष्ट रूप से लक्षित नहीं करते हैं। C # भाषा संस्करण यहां ज्यादातर अप्रासंगिक है।
पुनश्च: यह उत्तर उन अंतरों में नहीं जाता है जो संस्करणों 9.3 और 10. के लिए एक आर्कगिस एक्सटेंशन विकसित करने के बीच मौजूद हैं (ईएसआरआई ने ऐड-इन मॉडल में कुछ बड़े बदलाव किए हैं, लेकिन मुझे लगता है कि आप इसके बारे में जानते हैं ।)
लंबा उत्तर: आपको C # भाषा संस्करण और लक्षित फ्रेमवर्क संस्करण के बीच अंतर करने की आवश्यकता है।
आप .NET फ्रेमवर्क को दो प्रमुख भागों से बना सकते हैं: सीएलआर (सामान्य भाषा रनटाइम), और बीसीएल (बेस क्लास लाइब्रेरी)। पूर्व "वर्चुअल मशीन" है, जबकि उत्तरार्द्ध क्लास लाइब्रेरी है (सभी प्रकारों को शामिल करके जिन्हें आप MSDN पर देख सकते हैं)।
.NET फ्रेमवर्क 2 तक 3.5 सभी एक ही सीएलआर (संस्करण 2) का उपयोग करते हैं, अर्थात्, निष्पादन वातावरण वास्तव में विकसित नहीं हुआ है। हालांकि, जो विकसित हुआ है, वह बीसीएल है। यदि आप .NET 2 मशीन पर एक .NET 3.5 एप्लिकेशन चला रहे हैं, तो मुख्य समस्या यह नहीं होगी कि "बायटेकोड" (CIL) असंगत होगा (यह नहीं होगा), लेकिन यह कि एप्लिकेशन को संदर्भित कर सकता है और उपयोग कर सकता है प्रकार जो अभी तक .NET 2 BCL में उपलब्ध नहीं थे।
अब, जब आप .NET फ्रेमवर्क 3.5 को लक्षित करने के लिए Visual Studio 2010 को बताते हैं, तो यह सुनिश्चित करेगा कि आप बाद के फ्रेमवर्क संस्करण से BCL प्रकारों का उपयोग नहीं करेंगे। यह भी सुनिश्चित करेगा कि C # कंपाइलर द्वारा कोड आउटपुट को केवल CLR संस्करण 4 में उपलब्ध सुविधाओं की आवश्यकता नहीं होगी।
यह सब करने के लिए C # भाषा संस्करण बहुत कम है। C # कंपाइलर वास्तव में आपके सोर्स कोड को लेने के लिए करता है और इसे CIL (कॉमन इंटरमीडिएट लैंग्वेज) नामक निचले स्तर की प्रोग्रामिंग लैंग्वेज में ट्रांसलेट करता है। कुछ C # भाषा निर्माण अब CIL में पहचानने योग्य नहीं होंगे: उदाहरण के लिए, yield return
और yield break
CIL में मौजूद नहीं है। वे बस IEnumerator<T>
इंटरफ़ेस कार्यान्वयन के लिए अनुवादित हैं ।
इसे सम्मिलित करने के लिए: आपका कोड संकलित होते ही C # भाषा संस्करण अप्रासंगिक हो जाता है। क्या है महत्वपूर्ण है ...
क्या आउटपुट CIL / "bytecode" लक्षित .NET फ्रेमवर्क के साथ संगत है (यदि आप .NET 3.5 को लक्षित करते हैं, तो यह ऊपर वर्णित कारणों के लिए .NET 2 के साथ भी संगत होगा); तथा
क्या आपका कोड उन प्रकारों का उपयोग करता है / करता है जो लक्ष्य ढांचे में उपलब्ध हैं।
एक उल्लेखनीय अपवाद (इस अर्थ में कि C # भाषा के निर्माण के लिए फ्रेमवर्क के एक विशेष संस्करण की आवश्यकता होती है; यह अंतिम मामला था जब आईवीआरसी को IIRC पेश किया गया था) C # कीवर्ड हो सकता है dynamic
। इसे कोड से संकलित किया जा सकता है System.Dynamic
, जिसमें नाम स्थान से प्रकारों की आवश्यकता होती है , जो केवल .NET 4 के बाद से उपलब्ध है। लेकिन चिंता न करें: यदि आपने .NET 3.5 को लक्षित करने के लिए अपना Visual Studio 2010 प्रोजेक्ट सेट किया है, तो आपको प्राप्त करना चाहिए कंपाइलर त्रुटि यदि आप उस सामान का उपयोग करने का प्रयास कर रहे हैं जो उपलब्ध नहीं है, या उस विशेष .NET फ्रेमवर्क संस्करण के साथ संगत है।
ध्यान रखें कि VS2010 9.3 विकास के लिए एक समर्थित आईडीई नहीं है। आपको कोई विधानसभा संदर्भ, सहायता या टेम्पलेट एकीकरण नहीं मिलेगा।
हालांकि आप इसे काम करने की तरह कर सकते हैं: http://forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1