विजुअल स्टूडियो में इंटरऑप टाइप सही और गलत में अंतर करने वाली सेटिंग क्या है?


121

विज़ुअल स्टूडियो में, परियोजना के लिए एक संदर्भ जोड़ते समय, गुण विंडो में एक विकल्प होता है Embed Inteop Types, क्या हमें इसे सेट करना चाहिए Trueया False? क्या फर्क पड़ता है?

चूंकि हमारे पास बहुत सारी परियोजनाएं हैं, उनमें से कुछ के बीच, संदर्भ सेट किया गया था False, दूसरों को सेट किया गया था True, यह पूरी तरह से गड़बड़ है। और bulid सर्वर की भी यही चेतावनी है:

"संदर्भ अंतर्निर्मित असेंबली के लिए संदर्भ बनाया गया था" का क्या अर्थ है?

तो हम सभी बदलने की योजना Embed Inteop Typesके लिए False, क्या जोखिम हम मिलेंगे?


4
कभी भी ऐसा न करें, यह एक बहुत ही भयानक विशेषता है जो चिड़चिड़े तैनाती विवरण को हल करती है। आपको COM को वास्तव में समझना होगा कि यह सब क्या है।
हंस पसंत

@ हंसपेंट, क्या आप कह रहे हैं कि उन्हें कभी सेट न करें falseया उन्हें कभी न बदलें (जैसे कि अगर वे falseपहले से ही डिफ़ॉल्ट हैं )?
noelicus

2
वह इसे गलत पर सेट करने की योजना बनाता है। ऐसा कभी न करें।
हंस पासेंट

3
@HansPassant आप कैसे irksome और grok का उपयोग करते हैं। यह बहुत ही शानदार है: D
Mafii

4
@ माफ़ी मुझे लगा कि एक अजीब जमीन (जो अमेरिकी है) में स्ट्रेंजर से ग्रोक था। इसका मतलब यह नहीं है कि ब्रिटिश इसे अधिक उपयोग नहीं कर सकते हैं, बिल्कुल!
UUDdLrLrSs

जवाबों:


79

इंटरॉप के लिए बहुत बड़ी पीआईए (प्राथमिक इंटरोप असेंबली) को तैनात करने की आवश्यकता को हटाने के लिए यह विकल्प पेश किया गया था।

यह केवल उपयोग किए गए प्रबंधित ब्रिजिंग कोड को एम्बेड करता है जो आपको अप्रबंधित असेंबलियों से बात करने की अनुमति देता है, लेकिन यह सब एम्बेड करने के बजाय यह केवल आपके द्वारा कोड में उपयोग किए जाने वाले सामान को बनाता है।

इसके बारे में स्कॉट Hanselman ब्लॉग पोस्ट और अन्य बनाम सुधार में और अधिक पढ़ें यहाँ

जैसा कि यह सलाह दी जाती है या नहीं, मुझे यकीन नहीं है क्योंकि मुझे इस सुविधा का उपयोग करने की आवश्यकता नहीं है। एक त्वरित वेब खोज से कुछ सुराग मिलते हैं:

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


1
ध्यान दें कि एंबेड इंटरॉप प्रकार को बंद करने पर मौजूदा कोड को तोड़ने के बजाय एक महत्वपूर्ण अंतर हो सकता है। अंतर का उल्लेख यहां किया गया है : "सी # 4, और बाद के संस्करण, यदि विधानसभा असेंबली / लिंक कंपाइलर विकल्प द्वारा संदर्भित की जाती है या, तो, यदि एक्सेल एम्बेड इंटरोप प्रकार संपत्ति को सही पर सेट किया जाता है, तो लौटे ऑब्जेक्ट को स्वचालित रूप से डायनेमिक में कनवर्ट करता है। इस संपत्ति के लिए सही डिफ़ॉल्ट मान है। "
डर्क वोल्मार

एंबेडेड इंटरोप असेंबलियों ने मुझे प्लग-इन-आधारित प्रणाली में परेशानी दी, जिसमें मेजबान और प्लगइन्स दोनों एक ही COM -object पर निर्भर थे। एक और समस्या ILMerge के साथ ऐसी असेंबलियों को मर्ज करने की थी ।
Ant_222

8

मैंने देखा कि जब यह गलत पर सेट होता है, तो मैं डीबगर का उपयोग करके किसी आइटम का मूल्य देख सकता हूं। जब यह सत्य पर सेट किया गया था, तो मुझे एक त्रुटि मिल रही थी - item.FullName.GetValue एम्बेडेड इंटरॉप प्रकार 'FullName' में 'QBFC11Lib.IItemInventoryRet' की परिभाषा नहीं है क्योंकि यह संकलित विधानसभा में उपयोग नहीं किया गया था। ऑब्जेक्ट के लिए कास्टिंग पर विचार करें या 'एंबेड इंटरॉप टाइप्स' प्रॉपर्टी को सच में बदलें।

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