2011-08-08 39 views
5

मैंने एक एप्लिकेशन बनाया, यह एक्सेल को COM इंटरऑप के साथ उत्पन्न करता है। यह मेरे और हमारे उपयोगकर्ता की मशीन पर ठीक काम करता है: Office 2007, Windows XP SP2। अब मैं इसे दूसरी मशीन, ऑफिस 2010, विंडोज 7 64 बिट में माइग्रेट करता हूं, और वीएस -2008 से विजुअल स्टूडियो 2010 का उपयोग करता हूं, जो अभी भी ठीक काम करता है। जब मैं इसे अपने उपयोगकर्ता की मशीन पर तैनात करता हूं, तो मुझे समस्या मिलती है, वे उसी विंडोज 7 64 बिट का उपयोग करते हैं लेकिन Office 2007.कार्यालय 2007 पीआईए

इसलिए यदि मैं अपने Win7 64 बिट और Office 2010 मशीन पर Office 2007 PIA स्थापित करता हूं, तो संदर्भ बदलें मेरे विजुअल स्टूडियो प्रोजेक्ट में, क्या इससे समस्या हल हो जाएगी?

+3

समस्या? *क्या समस्या है? –

+0

क्या होगा यदि आप प्रत्येक कार्यालय असेंबली पर क्लिक करते हैं और "एम्बेड इंटरप प्रकार" पर स्विच करते हैं? मुझे लगता है कि पीआईए फाइलें कहां हैं या किस संस्करण का उपयोग किया जा रहा है, इस बारे में चिंतित होने की आवश्यकता को दूर ले जाता है। –

उत्तर

9

मुझे पता है कि यह पोस्ट थोड़ी देर पहले थी, लेकिन मुझे लगा कि मैं अपने दो सेंट में फेंक दूंगा, वैसे भी अगर कोई उस पर ठोकर खाए।

एक अंगूठे के सामान्य नियम विकास कि कार्यालय के सबसे पुराने संस्करण आप समर्थन करने की योजना के साथ लिंक में पिया संस्करण का उपयोग करने के लिए है। इसलिए, यदि आप Office 2007 और ऊपर का समर्थन करने जा रहे हैं, तो विकास के दौरान पीआईए के संस्करण 12 का उपयोग करें।

वी 12 पीआईए (या तो 2007 पीआईए ऑनलाइन डाउनलोड करके, वीएसटीओ के माध्यम से, या जीएसी से एक संदर्भ जोड़ें यदि आपके पास पहले से पहले Office 2007 था)। अब आप सोच सकते हैं "ठीक है, मैं विजुअल स्टूडियो में v12 का संदर्भ दे रहा हूं, अब यह Office 2007 पर काम करना चाहिए"। गलत। चूंकि आप v12 का संदर्भ दे रहे हैं लेकिन आपके पास Office 2010 स्थापित है, असेंबली के दौरान आपकी मशीन बाध्यकारी कहती है "ठीक है, v12 का अनुरोध है, लेकिन हमारे पास जीएसी में v14 स्थापित है और चूंकि पीआईए आगे संगत हैं, हम इसका उपयोग करेंगे।" भले ही आप इसे स्पष्ट रूप से v12 का उपयोग करने के लिए कहें, निर्माण के पूरा होने के बाद आपकी मशीन v14 का उपयोग करेगी। आप FUSLOG के माध्यम से इसकी पुष्टि कर सकते हैं। असेंबली बाध्यकारी के साथ काम करते समय FUSLOG उपयोग करने के लिए एक उत्कृष्ट उपकरण है। नोट: यदि आप FUSLOG में कुछ भी नहीं देख रहे हैं और आपको लगता है कि आपको अपने इंटरनेट एक्सप्लोरर इतिहास में सबकुछ साफ़ करना चाहिए और पुनः प्रयास करें।

इस समस्या को ठीक करने के लिए आपको 'assembly binding redirection' कहा जाता है। इन पीआईए में आमतौर पर जीएसी में उनके साथ एक पॉलिसी फाइल होती है। पॉलिसी फाइल का उद्देश्य असेंबली को हल करते समय पुराने पीआईए संस्करणों को नए संस्करणों में रीडायरेक्ट करना है। इस देखने के लिए, निम्न कार्य करें:

  1. प्रेस 'Windows कुंजी + आर' रन मेनू खोलने के लिए।
  2. टाइप करें 'सी: \ विंडोज \ असेंबली \ GAC' और एंटर दबाएं। नोट: मैं 32 बिट मशीन चला रहा हूं। आपके पीआईए जीएसी में एक अलग स्थान पर स्थापित किए जाएंगे, जैसे कि 'सी: \ विंडोज \ असेंबली \ GAC_MSIL'।

एक बार जीएसी में, नीचे स्क्रॉल करें और संदर्भित पीआईए के फ़ोल्डरों को देखें (उदा। माइक्रोसॉफ्ट.ऑफिस.इंटरोप.एक्ससेल)। यदि आप स्क्रॉलिंग जारी रखते हैं, तो आपको फ़ोल्डरों को देखना चाहिए जो 'नीति' से शुरू होते हैं, फिर एक संख्या, फिर पीआईए का नाम (उदा। पॉलिसी.12.0.Microsoft.Office.Interop.Excel)। यह नीति फ़ाइल है जो बाध्यकारी पुनर्निर्देशन करती है। उस फ़ोल्डर के भीतर XML कॉन्फ़िगरेशन फ़ाइल खोलें और आप निम्नलिखित जैसा कुछ दिखाई देगा:

<?xml version="1.0" encoding="UTF-16"?><configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity> 
      <bindingRedirect oldVersion="12.0.0.0" newVersion="14.0.0.0"></bindingRedirect> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

ऊपर कोड स्निपेट में, टैग "bindingRedirect oldVersion ..." के लिए जिम्मेदार है पीआईए विधानसभा पुनर्निर्देशन।आप निम्नलिखित की तरह है कि कोड बाहर टिप्पणी करते हैं:

<?xml version="1.0" encoding="UTF-16"?><configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity publicKeyToken="71e9bce111e9429c" name="Microsoft.Office.Interop.Excel" culture="neutral"></assemblyIdentity> 
      <!--<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect>--> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

फिर इस पुनर्निर्देशन नजरअंदाज कर दिया जाएगा। मैं इसे टिप्पणी करता हूं बल्कि फिर हटा रहा हूं क्योंकि फ़ाइल एक अच्छा उद्देश्य प्रदान करती है, न केवल कार्यालय के पुराने संस्करणों के विकास के दौरान। आपको आवश्यक प्रत्येक पीआईए नीति फ़ाइल पर ऐसा करें, और आपकी विकास मशीन पुनर्निर्देशन को रोक देगी।

उम्मीद है कि यह आपके प्रश्न का उत्तर देगा!

+1

यह जानकारी का एक महत्वपूर्ण हिस्सा है! मुझे अपने आवेदन को तैनात करने में कई परेशानी थी क्योंकि मुझे समस्या की जड़ का एहसास नहीं था। विजुअल स्टूडियो ने हमेशा रेफरेंसनाम में मूल संस्करण 11 दिखाया है, हालांकि ऊपर वर्णित अनुसार और https://msdn.microsoft.com/en-us/library/2fc472t2%28v=vs.100%29.aspx में जैसा वर्णन किया गया था, निर्माण को पुनर्निर्देशित किया गया था। – DrMarbuse

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