2010-04-17 3 views
17

एक सी # प्रोजेक्ट में हम एक COM ऑब्जेक्ट को इंगित करते हुए एक संदर्भ ऑब्जेक्ट के संदर्भ में एक COM ऑब्जेक्ट का संदर्भ जोड़ते हैं जिसके परिणामस्वरूप आईडीई इंटरऑप असेंबली को स्वत: उत्पन्न करता है। तो यह ठीक है और अच्छा है, लेकिन हम .NET 3.5 SP1 उर्फ ​​सीएलआर 2.0 के आधार पर निर्माण कर रहे हैं, और जेनरेट किए गए इंटरऑस 4.0 सीएलआर का उपयोग कर असंगत बना रहे हैं। क्या इसको रोकने के लिए कोई रास्ता है?विजुअल स्टूडियो 2010, TlbImp 2.0 परियोजनाओं में .NET 4.0 इंटरप्ट बनाता है

मुझे लगता है कि दूसरा विकल्प tlbimp.exe का उपयोग/संदर्भ पैरामीटर के साथ करने के लिए हमारी बिल्ड स्क्रिप्ट को कॉन्फ़िगर कर रहा है? mscorlib v2.0 को इंगित करने के लिए?

किसी भी तरह, मुझे उम्मीद है कि यह अनुमति देने के लिए कहीं झंडा है।

उत्तर

20

मुझे बिल्कुल इस मुद्दे का सामना करना पड़ा। मुझे मिला समाधान 6 प्रोग्रामफाइल% \ माइक्रोसॉफ्ट एसडीके \ विंडोज \ v6.0A \ bin में स्थित .NET Framework SDK (या Windows प्लेटफ़ॉर्म एसडीके?) से tlbimp के संस्करण 3.5 का उपयोग करना था जो CLR 2.

I यह भी पाया गया कि मुझे एक्सई फ़ाइल से सही प्रकार की लाइब्रेरी प्राप्त करने के लिए इस जानकारी की आवश्यकता है, क्योंकि वीएस केवल पहली प्रकार की लाइब्रेरी का उपयोग करेगा:

"एक संसाधन आईडी वैकल्पिक रूप से एक प्रकार की लाइब्रेरी फ़ाइल में संलग्न होने पर वैकल्पिक रूप से जोड़ा जा सकता है एकाधिक प्रकार के पुस्तकालय वाले मॉड्यूल से लाइब्रेरी टाइप करें। "

tlbimp MyModule.dll \ 1

से http://msdn.microsoft.com/en-us/library/tt0cf3sx%28VS.80%29.aspx

2

मैं एक ही सटीक समस्या थी, लेकिन फिर भी TLBIMP.exe के v2.0 के साथ, मैं अभी भी एक 4.0 dll, जो काम नहीं करेगा मिल ।
मैं किसी भी आसान समाधान के साथ समाप्त हुआ, अगर कोई इसमें चलता है:
regsvr32 के साथ डीएल पंजीकृत करें (सुनिश्चित करें कि आप इसे व्यवस्थापक के रूप में चलाएं या आपको कोई त्रुटि मिलेगी) तो प्रोजेक्ट में संदर्भ जोड़ते समय, आप COM टैब में आपका डीएलएल मिलेगा।
एक आकर्षण की तरह काम किया!

जब तक आप इसे अपने एप्लिकेशन के साथ भेजने के लिए इंटरऑप डीएल बनाना नहीं चाहते हैं, तो आपको tlbimp.exe रूट को समझने की आवश्यकता होगी।

14

समस्या का समाधान 2.0 .NET रनटाइम संस्करण के अंतर्गत चलाने के लिए tlbimp.exe को कॉन्फ़िगर करना है।

  1. सी: \ प्रोग्राम फ़ाइलें (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin पर जाएं और tlbimp.exe.config फ़ाइल खोलें। ,

    <startup> 
        <supportedRuntime version="v2.0.50727"/> 
    </startup> 
    
  2. सहेजें फ़ाइल तो आप सामान्य रूप से TLBIMP.exe निष्पादन चलाएँ:

  3. विन्यास खंड में फ़ाइल में निम्नलिखित पंक्तियां जोड़ें।

+2

मेरा दिन बचाया !!! धन्यवाद! – EdsonF

+0

यह एसडीके/tlbimp, fwiw के विंडोज 10 संस्करण w/काम नहीं करता है। यह अमान्य साइड-बाय-साइड कॉन्फ़िगरेशन के बारे में त्रुटियां देता है। अन्यथा, अच्छा जवाब! –

5

आप घटनाक्रम बिल्ड उपयोग कर रहे हैं, इस प्रयास करें:

"$(SDK35ToolsPath)tlbimp" tlbimp arguments 

$ (SDK35ToolsPath) सेल्सियस के लिए अंक: \ Program Files (x86) \ माइक्रोसॉफ्ट SDKs \ Windows \ v7.0A \ बिन

और यदि आप 4.0, $ (SDK40ToolsPath) संदर्भित करना चाहते हैं तो मैक्रो है जो सी: \ प्रोग्राम फ़ाइलें (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 टूल्स को इंगित करता है।

वीएस 2010 कमांड लाइन में, "जहां tlbimp" पहले नेटफैक्स 4.0 उपकरण फ़ोल्डर में tlbimp.exe दिखाएगा। इसलिए हमें 3.5 tlbimp.exe के लिए $ (SDK35ToolsPath) की आवश्यकता है।

0

बस

C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\TlbImp.exe 

चलाने एक interops पुस्तकालय नेट संस्करण 2.0

1

मेरे लिए (विजुअल स्टूडियो 2013) यह सही TlbImp निष्पादन का उपयोग करने का मामला था उत्पन्न करने के लिए।

एक आप डिफ़ॉल्ट रूप से उपयोग कर रहे हैं:,

where tlbimp

कौन सा मेरे लिए था

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\TlbImp.exe

इसके बजाय एक कम संस्करण से एक का उपयोग करें, उदाहरण के लिए

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\tlbimp

जिसने मेरे लिए .Net 2 असेंबली बनाई, कॉन्फ़िगरेशन फ़ाइल को संपादित करने की आवश्यकता नहीं है। आप यह निर्धारित करने के लिए exF पर CorFlags का उपयोग कर सकते हैं कि यह .NET संस्करण का उपयोग करता है। या आप अपने आउटपुट पर सिर्फ कॉर्फ्लैग का उपयोग कर सकते हैं।

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