इंटरॉप प्रकार को एम्बेड नहीं किया जा सकता है


667

मैं C # में .NET 4.0 फ्रेमवर्क (बीटा 2) पर एक वेब एप्लिकेशन बना रहा हूं।

जब मैं "ActiveHomeScriptLib" नामक असेंबली का उपयोग करने का प्रयास करता हूं, तो मुझे निम्न त्रुटि मिलती है:

इंटरॉप प्रकार 'ActiveHomeScriptLib.ActiveHomeClass' को एम्बेड नहीं किया जा सकता है। इसके बजाय लागू इंटरफ़ेस का उपयोग करें।

जब मैं फ्रेमवर्क को संस्करण 3.5 में बदलता हूं, तो मेरे पास कोई त्रुटि नहीं है।

एक इंटरोप प्रकार क्या है और यह केवल 4.0 फ्रेमवर्क का उपयोग करने पर ही क्यों होता है?


मैंने इस लेख को इंटरोप / पीआईए मुद्दों को हल करने के लिए बहुत उपयोगी पाया है। blogs.msdn.com/b/vbteam/archive/2010/06/11/…
GilesDMiddleton

जवाबों:


1068

.NET 4.0 प्राथमिक असेंबल असेंबलियों (या इसके बजाय, इसके बिट्स जिनकी आपको आवश्यकता है) को आपकी असेंबली में एम्बेड करने की अनुमति देता है ताकि आपको उन्हें अपने एप्लिकेशन के साथ परिनियोजित करने की आवश्यकता न हो।

जो भी कारण के लिए, इस विधानसभा को एम्बेड नहीं किया जा सकता है - लेकिन ऐसा लगता है कि यह आपके लिए कोई समस्या नहीं है। बस दृश्य स्टूडियो 2010 में असेंबली के लिए गुण टैब खोलें और "एंबेड इंटरॉप प्रकार" को "गलत" पर सेट करें।

संपादित करें: माइकल गुस्टस का उत्तर भी देखें , Classआपके द्वारा उपयोग किए जा रहे प्रकारों से प्रत्यय को हटाकर ।


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

130
मैं राइट क्लिक के बजाय प्रोजेक्ट के प्रॉपर्टी पेज में देख रहा था | संदर्भ फलक में प्रभावित DLL पर गुण।
justSteve

5
क्या ऐसा करने में अधिक समझदारी नहीं होगी क्योंकि त्रुटि कहती है और "लागू इंटरफ़ेस का उपयोग करें"? मेरे पास यह त्रुटि थी (एक अलग वर्ग से) और एक इंटरफ़ेस को तुरंत सक्षम करने में सक्षम था, जो उस वर्ग को अपने CoClass विशेषता के रूप में निर्दिष्ट करता था, और यह काम करता था। जैसा कि नीचे माइकल गस्टस के उत्तर में है, ब्लाहक्लास के लिए इंटरफ़ेस को केवल ब्लाह कहा गया था, जो मानक सम्मेलन लगता है।
टिम गुडमैन

1
एम्बेड करने के बारे में एक बड़ी बात यह है कि इंटरोप असेंबली CopyLocal = झूठी रह सकती है, क्योंकि आपको रनटाइम पर इसकी आवश्यकता नहीं है।
श्मुली

मेरे लिए @TimGoodman "लागू इंटरफ़ेस" काम नहीं कर रहा था, लेकिन उपर्युक्त embed interop typesसंपत्ति की स्थापना falseचाल को करने के लिए की गई थी। मेरे मामले में - मैं Microsoft.Office.Interop.Excelलाइब्रेरी के साथ काम कर रहा था और वर्कबुक ऑब्जेक्ट को एक्सेस करने के लिए आवश्यक था। इसका उपयोग करना इंटरफ़ेस Workbook(btw। नामकरण सम्मेलन ...) एक विकल्प नहीं था - मुझे प्राप्त हुआ COM object, वांछित नहींMicrosoft.Office.Interop.Excel.WorkbookClass
प्रोक्योरर्स

484

ज्यादातर मामलों में, यह त्रुटि कोड का परिणाम है जो एक COM ऑब्जेक्ट को तुरंत करने की कोशिश करता है। उदाहरण के लिए, यहाँ Excel शुरू करने वाला एक कोड है:

Excel.ApplicationClass xlapp = new Excel.ApplicationClass();

सामान्यतया, .NET 4 में आपको 'क्लास' प्रत्यय को हटाने और कोड संकलित करने की आवश्यकता है:

Excel.Application xlapp = new Excel.Application();

MSDN स्पष्टीकरण यहाँ है


16
+1 मेरा मानना ​​है कि यह त्रुटि संदेश वास्तव में आपको ऐसा करने के लिए कह रहा है जब यह कहता है कि "लागू इंटरफ़ेस का उपयोग करें"। ध्यान दें कि Excel.Application एक इंटरफ़ेस है (इस तथ्य के बावजूद कि यह नए कीवर्ड के साथ त्वरित किया जा सकता है, यहां वर्णित स्थिति के समान है: stackoverflow.com/questions/6960910/… )
टिम गुडमैन

"इंटरॉप टाइप्स" से "गलत" या "ट्रू" ?
11:22 बजे किकेनेट

1
@Kiquenet यदि आप यहाँ सलाह का पालन करते हैं तो आप 'एंबेड इंटरॉप टाइप्स' को सही पर सेट कर सकते हैं, या कम से कम जो मेरे लिए ठीक है
सैम होल्डर

122

जनवरी की तरह मुझे इसे पाने में थोड़ा समय लगा .. = एस तो किसी और के लिए जो हताशा से अंधा हो गया है।

  • अपने प्रोजेक्ट सन्दर्भ के तहत समाधान खोजकर्ता में आपके द्वारा जोड़े गए असेंबली असेंबली पर राइट क्लिक करें । (मेरे मामले में WIA)
  • गुणों पर क्लिक करें।
  • और एंबेड इंटरोप असेंबली के लिए वहां विकल्प होना चाहिए
  • इसे झूठा सेट करें

15
अभी भी संघर्ष कर रहा है जब तक मुझे एहसास हुआ कि आपको प्रोजेक्ट रेफ़रेंस के तहत इंटरॉप असेंबली को राइट-क्लिक करना होगा , जो कि आप बना रहे हैं , कि असेंबली!
स्टीवविल्किंसन

2
अब, (दस साल बाद) इस विकल्प को "एम्बेड इंटरॉप प्रकार" कहा जाता है
डेविड फोले

36

यहाँ जहाँ Visual Studio 2012 में एम्बेड इंटरोप सेट करने के लिए है

यहाँ छवि विवरण दर्ज करें


34

जॉन के सही उत्तर पर विस्तार।

यहां समस्या यह है कि आपके वर्ग प्रकार के उपयोग के साथ नए "एंबेड इंटरॉप टाइप्स" (या नोपिया) सुविधा का संयोजन कर रहे हैं। "एंबेड इंटरोप टाइप्स" फीचर अनिवार्य रूप से एक PIA (प्राइमरी इंटरॉप असेंबली) के सभी प्रकारों में संदर्भित विधानसभा में इसे जोड़ने के ओवरहेड को हटाने के द्वारा काम करता है।

यह सुविधा एक PIA में अधिकांश प्रकारों के लिए बढ़िया काम करती है, लेकिन इसमें प्रतिबंध हैं। उनमें से एक यह है कि आप कक्षाओं को एम्बेड नहीं कर सकते (यह एक सर्विसिंग समस्या है)। मीशा का एक विस्तृत ब्लॉग लेख है कि इसकी अनुमति क्यों नहीं है


15

समाधान मिल गया

संदर्भों पर जाएं इच्छित इच्छित डीएल पर क्लिक करें आपको "गलत" या "ट्रू" के लिए "एम्बेड इंटरोप प्रकार" विकल्प मिलेगा।


1
यह PP_COM_Wrapper का उपयोग करके .net के साथ VS2015 c # के लिए भी काम करता है; cypress.com में दिया गया सरू सेमीकंडक्टर कॉर्पोरेशन C # Lib का उदाहरण है। झूठा करने के लिए त्रुटि से छुटकारा मिल गया।
user3564895

9

जब मैं अपने स्थानीय मशीन में एक TFS परियोजना को खींच रहा था तो मैं इस मुद्दे पर भागा। कथित तौर पर, यह उस आदमी की मशीन पर ठीक काम कर रहा था जिसने इसे लिखा था। मैंने बस इसे बदल दिया है ...

WshShellClass shellClass = new WshShellClass();

इसके लिए...

WshShell shellClass = new WshShell();

अब, यह एक विजेता की तरह काम कर रहा है!


1
इस दृष्टिकोण ने मेरे लिए भी काम किया! मेरे मामले में, मैं यह पता लगाने के लिए डिबगिंग कर रहा था कि मुझे जहां मूल्य की आवश्यकता थी, राइट-क्लिक किया और "कॉपी एक्सप्रेशन" चुना। मुझे जो दिया गया, वह था "... HTMLDocumentClass ..." पाठ "क्लास" को हटाने से मेरे लिए यह समस्या हल हो गई।
मेजेस्टज़िम

3

मुझे VB.NET 2013 में Office 2007 के साथ एक ही समस्या थी, और इसने इसे हल किया:

वीएस २०१३ वीबी.नेट प्रोजेक्ट> प्रॉप्स> रेफ्स> माइक्रोसॉफ्ट वर्ड १२.० ऑब्जेक्ट लिब> एंबेड इंटरोप टाइप: फॉल्स के लिए ट्रू बदलें


1

http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307

यह त्रुटि इसलिए होती है क्योंकि नए प्रोजेक्ट में संदर्भित TestStand API Interop असेंबली की एंबेड इंटरॉप प्रकार की संपत्ति के लिए डिफ़ॉल्ट मान सत्य है। इस त्रुटि को हल करने के लिए, निम्न चरणों का पालन करके गलत प्रकार के गुण एम्बेड करें का मान बदलें: समाधान एक्सप्लोरर में अपनी परियोजना के संदर्भ अनुभाग में TestStand Interop असेंबली संदर्भ का चयन करें। प्रॉपर्टी ब्राउजर में एंबेड इंटरॉप टाइप प्रॉपर्टी का पता लगाएं, और वैल्यू को गलत में बदल दें


1

Visual Studio 2017 संस्करण 15.8 ने Visual Studio एक्स्टेंसिबिलिटी (VSIX) प्रोजेक्ट में NuGet पैकेज को संदर्भित करने के लिए PackageReferencesyntax का उपयोग करना संभव बना दिया । यह NuGet पैकेज के बारे में तर्क करने के लिए बहुत सरल बनाता है और संपूर्ण VSSDK युक्त एक पूर्ण मेटा पैकेज होने के लिए दरवाजा खोलता है।

NuGet पैकेज के नीचे इंस्टाल करने से एम्बेडइंटरटॉप टाइप्स इश्यू हल हो जाएगा ।

Microsoft-VisualStudio.SDK.EmbedInteropTypes पैकेज स्थापित करें

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