2012-11-13 18 views
7

हम ऑटोडस्क इनवेंटर के लिए ऐड-इन विकसित कर रहे हैं। हमारा सॉफ्टवेयर रनटाइम पर खोजकर्ता में लोड डीएल असेंबली का एक गुच्छा है। हमने लॉगिंग और अपवाद हैंडलिंग के लिए माइक्रोसॉफ़्ट एंटरप्राइज़ लाइब्रेरी 5.0 का उपयोग करने का निर्णय लिया है।एक प्रक्रिया में एंटरप्राइज़ लाइब्रेरी के विभिन्न संस्करण

अब हमें कोई समस्या है, क्योंकि यह पता चलता है कि इन्वेंटर 2013 एंटरप्राइज़ लाइब्रेरी 4.1 का उपयोग करता है। जब हमारा ऐड-इन लोड हो रहा है, तो यह असेंबली के उचित संस्करण को लोड करने में विफल रहता है, क्योंकि खोजकर्ता के पास इसकी बिन निर्देशिका में पहले से ही एक पुराना संस्करण है।

विकल्प हम अब तक पर विचार किया है:

  1. हमारे उत्पाद की तैनाती के दौरान, हमारे विधानसभाओं में आविष्कारक के बिन फ़ोल्डर
  2. उपयोग ईएल 4.1 में पुराने पुस्तकालयों के ऊपर लिख

दोनों बुरा कर रहे हैं और मैं विचारों से बाहर हो रहा हूं, इसलिए मैं मदद मांग रहा हूं।

विकल्प 1 इस प्रश्न को उठाता है: क्या एंटरप्राइज़ लाइब्रेरी पिछड़ा संगत है और उन डीएलएल को बिन फ़ोल्डर में बदलकर समस्याएं बदल सकती है? मैंने कोशिश की है, खोजकर्ता शिकायत नहीं करता है और उम्मीद के अनुसार काम करता है (ईएल कार्यक्षमता की जांच नहीं की है)।

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

इस परिदृश्य में सबसे अच्छा अभ्यास क्या है?

अद्यतन:
हम सिर्फ GAC में उद्यम लाइब्रेरी के नए संस्करण रख कर इस को हल किया। मुझे लगता है कि यहां क्या हुआ था कि .NET ने पुराने संस्करण को पहले लोड करने का प्रयास किया (क्योंकि यह असेंबली सर्च ऑर्डर में अधिक था) और असफल होने के बाद उचित संस्करण देखने के लिए कभी और नहीं चला। जब जीएसी में, यह सही ढंग से हल करता है।

+1

आप DLLs अधिलेखन और उसके बाद का उपयोग कर एक बंधन प्रवेश बिंदु (रों) के लिए कॉन्फ़िग फ़ाइल में पुनर्निर्देशित विचार किया है? – casperOne

+0

जैसा कि मैं समझता हूं कि यदि हम विकल्प 1 के लिए गए तो रीडायरेक्शन एक अनिवार्य कदम होगा। इसका मतलब है कि हम केवल डीएलएल को ओवरराइट नहीं कर रहे हैं जो खोजकर्ता तैनात किए गए हैं, बल्कि इसकी कॉन्फ़िगरेशन फ़ाइल को संशोधित करते हैं। मुझे वास्तव में यह समाधान पसंद नहीं है, लेकिन ऐसा नहीं लगता कि हमारे पास एक और तरीका है। फिर भी, सवाल बनी हुई है: एंटरप्राइज़ लाइब्रेरी पिछली बार ऐसी पुनर्निर्देशन के लिए पर्याप्त संगत है? – jur

उत्तर

4

जो मैं देख सकता हूं उससे, एक उचित समाधान असेंबली को एम्बेड करना और संसाधन प्रबंधक श्रेणी का उपयोग करके उन्हें एक्सेस करना होगा, इससे आपको पैरेंट प्रोजेक्ट लॉगिंग तंत्र को बनाए रखने के दौरान नए संस्करणों का उपयोग करने की अनुमति मिल जाएगी।

आप इस प्रश्न का उपयोगी लग सकते: Embedding assemblies inside another assembly

+0

धन्यवाद। मुझे नहीं पता था कि आप यह कर सकते हैं। यह भविष्य के लिए उपयोगी होगा, लेकिन मुझे पहले से ही इस प्रश्न का समाधान मिला है। मैं पोस्ट को अपडेट करने जा रहा हूं। – jur