2010-02-27 10 views
34

जब आप विजुअल स्टूडियो में एक नया सी # प्रोजेक्ट बनाते हैं, तो जेनरेट की गई असेंबलीइन्फो फ़ाइल में एक असेंबली GUID निर्दिष्ट करने वाली विशेषता शामिल होती है। विशेषता के ऊपर टिप्पणी बताती है कि इसका उपयोग किया जाता है "यदि यह परियोजना COM के संपर्क में है"।AssemblyInfo.cs: क्या कॉमविज़िबल (झूठा) का उपयोग करते समय ग्रिड निर्दिष्ट करने में कोई बात है?

मेरे किसी भी असेंबली में ऐसे प्रकार होते हैं जिन्हें COM को दिखाई देने की आवश्यकता होती है, इसलिए मैंने [assembly: ComVisible(false)] के साथ अपनी असेंबली को चिह्नित किया है। क्या GUID निर्दिष्ट करने में कोई बात है?

मेरी भावना यह है कि उत्तर "नहीं" है - तो डिफ़ॉल्ट AssemblyInfo.cs फ़ाइल में [assembly: ComVisible(false)] और [assembly: Guid("...")] दोनों क्यों हैं?

संपादित करें:

प्रतिक्रियाओं को संक्षेप में प्रस्तुत करने के लिए:

उनके बीच

, जवाब समझाने कि एक GUID को निर्दिष्ट यदि और केवल यदि COM इंटरॉप किया जा रहा है की आवश्यकता है। तो, मेरी स्थिति में, एक GUID आवश्यक नहीं है।

sharptooth आगे बताता है कि [assembly: ComVisible(false)] COM इंटरऑप का उपयोग नहीं कर रहा है, क्योंकि अलग-अलग प्रकार के लिए ComVisible ओवरराइड करना संभव है। इस कारण से डिफ़ॉल्ट AssembyInfo.cs में [assembly: ComVisible(false)] और एक GUID दोनों शामिल हैं।

उत्तर

14

[assembly: ComVisible(false)] और [assembly: Guid("...")] एक ही समय में सही अर्थ in certain cases बनाता है। आप एक खाली असेंबली से शुरू करते हैं और शायद इसे COM से कुछ का खुलासा करना चाहते हैं। तो आप असेंबली को ComVisible के रूप में चिह्नित नहीं करते हैं और बाद में इकाइयों को ComVisible के रूप में बेनकाब करने के लिए चिह्नित करते हैं।

निश्चित रूप से आप परवाह नहीं है कि आप वास्तव में अपनी असेंबली से COM में कुछ भी बेनकाब नहीं करना चाहते हैं और परियोजना सेटिंग्स में अनचेक किए गए "COM इंटरऑप के लिए पंजीकरण करें" विकल्प है।

4

नहीं, इसे शामिल करने का कोई वास्तविक कारण नहीं है। यह बहुत ही विशिष्ट COM इंटरऑप परिदृश्यों को छोड़कर वास्तव में बहुत अनावश्यक है। हालांकि मुझे लगता है कि कुछ एक GUID होने के बारे में उपयोगी हो सकता है जिसे आप प्रतिबिंब के साथ एक्सेस कर सकते हैं। लेकिन चूंकि यह वहां होने की गारंटी नहीं है, ऐसा नहीं है कि आप इस पर भरोसा कर सकते हैं।

+0

यह एक स्टैंडअलोन वेब सर्वर के लिए एक बहुत बड़ा [उपयोग] (http://stackoverflow.com/q/11403333/712526) है जिसके लिए एक एसएसएल प्रमाणपत्र – jpaugh

+0

@jpaugh की आवश्यकता है: सुनिश्चित नहीं है कि हम इसके बारे में बात कर रहे हैं वही चीज। – Josh

+0

मुझे पूरी तरह से यकीन नहीं है, खुद; लेकिन, मुझे उस परिदृश्य को काम करने के लिए असेंबली जानकारी से GUID का उपयोग करना पड़ा (उस पृष्ठ पर मेरे उत्तर के नीचे देखें।) मेरा (टेंटेटिव) निष्कर्ष यह है कि विंडोज एक एसएसएल बाध्यकारी "छड़ी" बनाने के लिए एक COM इंटरफ़ेस का उपयोग करता है एक विशेष ऐप – jpaugh

9

COM में लगातार GUID बिल्कुल आवश्यक हैं। [असेंबली: ग्रिड] विशेषता टाइप लाइब्रेरी LIBID उत्पन्न करती है। निश्चित रूप से प्रोजेक्ट टेम्पलेट यह सुनिश्चित करने के लिए ऑटो-जनरेट करता है कि प्रोग्रामर एक को उपलब्ध कराने के लिए नहीं भूलता है जब वह सत्य के लिए ComVisible फ़्लिप करता है।

यदि कोई असेंबली [ग्विड] प्रदान नहीं की जाती है तो Tlbexp.exe असेंबली नाम, संस्करण और सार्वजनिक कुंजी से संश्लेषित करता है। यह वास्तव में पर्याप्त नहीं है, पुस्तकालयों में पहले से ही एक संस्करण है। बदलना [असेंबलीवर्सन] एक अलग LIBID उत्पन्न करेगा। विशेष रूप से खराब जब आप संस्करण (जैसे 1.0। *) के लिए ऑटो-वृद्धि विकल्प का उपयोग करते हैं, तो आप जल्दी से रजिस्ट्री को मृत टाइपलिब रजिस्ट्री कुंजियों के पहाड़ से भर सकते हैं।

लंबी कहानी छोटी, यह बहुत सारी दुर्घटनाओं से बचाती है।

+1

यह मत भूलना कि आप असेंबली स्तर पर "झूठी" के लिए कॉमविज़िबल सेट कर सकते हैं और इसे असेंबली के अंदर कक्षाओं/इंटरफेस/विधियों के लिए "सत्य" पर सेट कर सकते हैं और बाद वाले को पूर्व में ओवरराइड कर दिया जाएगा। Http://stackoverflow.com/questions/1649752/how-to-elegantly-prevent-a-webservice-proxy-from-being-exposed-to-com देखें कि इसका उपयोग कैसे किया जा सकता है। तो वास्तव में असेंबली स्तर पर इसे "चालू" करने की आवश्यकता नहीं है। – sharptooth

+1

एक सतत GUID होने पर केवल वास्तव में मायने रखता है यदि आपकी टाइप लाइब्रेरी को COM क्लाइंट के संपर्क में आने की आवश्यकता है जो किसी विशेष इंटरफ़ेस की अपेक्षा कर रहे हैं। आप स्थायी GUID के बिना IDISpatch के माध्यम से COM को ऑब्जेक्ट्स का खुलासा कर सकते हैं। – Josh

+0

हम्म, देर से बाध्यकारी एक सतत प्रोगिड की आवश्यकता है। एक ही समस्या है। –

संबंधित मुद्दे

 संबंधित मुद्दे