ArcObjects 9.3 के लिए C # संस्करण


10

क्या मैं ArcMap 9.3 के लिए एक्सटेंशन विकसित करने के लिए .NET 3.5 में निर्धारित लक्ष्य ढांचे के साथ C # 4.0 का उपयोग कर सकता हूं? या इसके लिए C # 3.0 या पहले का होना जरूरी है?


यदि लक्ष्य 3.5 है तो आप एक्सटेंशन के साथ C # 2.0 का उपयोग कर रहे हैं। ArcEngine 10 को .NET 3.5 को लक्षित करने की आवश्यकता है ताकि आप कुछ 4.0 अच्छाइयों को याद कर सकें। मैं अपने ऐप में wpf कैलेंडर कंट्रोल का उपयोग करना चाहता था, लेकिन मैं 4.0 नहीं कर पाया। इसलिए मुझे विनफॉर्म का उपयोग करना था।
पैट्रिक

मैं ArcMap 10 के लिए 3.5 के लिए निर्धारित लक्ष्य ढांचे के साथ एक एक्सटेंशन विकसित करने के लिए C # 4.0 का उपयोग कर रहा था, इसलिए मैं सोच रहा था कि क्या यह फ्रेम बैक 3.5 के रूप में लंबे समय तक संगत रहेगा। क्या मुझे अपना ArcMap 10 एक्सटेंशन C # 2.0 में बदलना चाहिए ताकि इसे कई कोड संपादन किए बिना ArcMap 9 के साथ पुन: संयोजित किया जा सके? क्या आर्केस्टा 9 के साथ C # 3.0 काम करेगा?
माइक रोजर्स

जवाबों:


13

संक्षिप्त उत्तर: मेरे अनुभव में, 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 breakCIL में मौजूद नहीं है। वे बस 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 फ्रेमवर्क संस्करण के साथ संगत है।


1
@SeaJunk, यह पूरी तरह से सही नहीं है। भले ही ArcGIS 9.3 / VS2010 के लिए कोई ESRI SDK एक्सटेंशन न हो, यह आपको ArcGIS असेंबलियों को संदर्भित करने और कोड लिखना शुरू करने से नहीं रोकेगा। यही है, उस IDE का उपयोग करना अभी भी संभव है, केवल अधिक असुविधाजनक। इसमें कुछ और मैनुअल काम भी शामिल हो सकते हैं (घटकों को पंजीकृत करना आदि) लेकिन फिर, यह संभव है AFAIK।
stakx

हाँ, खेद है कि बस ऊपर देखा :)
SeaJunk

आपने एक अच्छी व्याख्या प्रदान की, लेकिन रिश्ते थोड़े अधिक जटिल हैं, क्योंकि तीनों (सीएलआर, बीसीएल और सी #) की विशेषताएं एक-दूसरे से काफी प्रभावित हैं।
पेट्र क्रेब्स

साइड नोट के रूप में, सीएलआर और सी # के विकास के बारे में कुछ बहुत ही मजेदार मजेदार तथ्य भी हैं। उदाहरण के लिए, जेनेरिक प्रकार के मापदंडों पर सहसंयोजक और विरोधाभासी सीएलआर 2.0 में पेश किया गया था, लेकिन यह सी # 4 तक नहीं था जब यह भाषा द्वारा समर्थित होना शुरू हुआ। एक और, संयोग से आपकी बात का एक बड़ा उदाहरण: LINQ, C # 3 में पेश किया गया, विस्तार विधियों पर निर्भर करता है, जिसे System.Runtime.CompilerServices.ExtensionAttribute के उपयोग के साथ C # 2 में अनुकरण किया जा सकता है।
पेट्र क्रेब्स

1
एरिक लिपर्ट का ब्लॉग ( blogs.msdn.com/b/ericlippert ) .NET / C # के विभिन्न अंधेरे कोनों पर एक अद्भुत संसाधन है और उनके डिजाइन के पीछे फैसले हैं।
पेट्र क्रेब्स

4

ध्यान रखें कि VS2010 9.3 विकास के लिए एक समर्थित आईडीई नहीं है। आपको कोई विधानसभा संदर्भ, सहायता या टेम्पलेट एकीकरण नहीं मिलेगा।

हालांकि आप इसे काम करने की तरह कर सकते हैं: http://forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1

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