2012-03-30 37 views
5

मेरी प्रोजेक्ट में, मुझे इसकी निर्भरता पदानुक्रम के साथ समस्या है। मैं अपने कोड में एक लाइब्रेरी (WriteableBitmapExtensions) का उपयोग करता हूं, और मेरे पास एक और तृतीय पक्ष लाइब्रेरी है जो WriteableBitmapExtensions का भी उपयोग करती है। केवल दूसरी लाइब्रेरी एक विशिष्ट, पुराने संस्करण से दृढ़ता से बंधी हुई है, और मेरे कोड को अपने नवीनतम संस्करण में कार्यक्षमता की आवश्यकता है।तृतीय पक्ष निर्भरताओं से कई असेंबली संस्करणों को हल/उपयोग करना

यहाँ निर्भरता का चित्रण है: dependency tree

वहाँ इसी तरह के सवाल & समाधान कर रहे हैं, लेकिन वे विधानसभा एक कॉन्फ़िग फ़ाइल के माध्यम से रनटाइम पर बाध्यकारी उसका समाधान है, लेकिन मुझे नहीं लगता कि यह एक Silverlight आवेदन के लिए संगत है।

Referencing 2 different versions of log4net in the same solution

Using different versions of the same assembly in the same folder

3rd party libraries refer to different versions of log4net.dll

How to deal with multiple versions of dependencies?

तो वहाँ एक सिल्वरलाइट संदर्भ में विधानसभा निर्भरता के इन विभिन्न संस्करणों को हल करने के लिए एक रास्ता है? यदि ऐसा नहीं है, तो मुझे लगता है कि मेरे विकल्प हैं:

1) संभवतः मैं तृतीय पक्ष लाइब्रेरी के विक्रेता को लिखने योग्य बिटमैप एक्सटेंशन के नवीनतम संस्करण का उपयोग करने के लिए अद्यतन करने के लिए राजी कर सकता हूं, लेकिन मैं इस पर निर्भर नहीं होना चाहूंगा उन्हें अद्यतित रखते हुए। खासकर जब से लिखने योग्य बिटमैप एक्सटेंशन परियोजना अभी भी अपडेट की जा रही है और हम अक्सर अपनी नई सुविधाओं का लाभ उठा रहे हैं।

2) चूंकि लिखने योग्य बिटमैप एक्सटेंशन ओपन-सोर्स है, मुझे लगता है कि मैं अपने स्रोत को "MyWriteableBitmapExtensions" के रूप में एक नई असेंबली के रूप में पुन: संकलित कर सकता हूं और अपने स्रोत कोड में इसका उपयोग कर सकता हूं। लेकिन अगर मैं दो तृतीय पक्ष पुस्तकालयों को WriteableBitmapExtensions के विभिन्न संस्करणों का संदर्भ देता हूं तो मैं इस मुद्दे में फिर से भागूंगा।

मुझे संदेह है कि मैं विकल्प 2 के साथ जा रहा हूं, लेकिन मैं यह जानना चाहता हूं कि ऐसा करने का एक बेहतर तरीका है (जैसे अन्य प्रश्नों में बाध्यकारी रनटाइम असेंबली की तरह) मैं प्रतिबद्ध/रिफैक्टर से पहले। धन्यवाद!

उत्तर

1

जैसा कि मैंने अपनी टिप्पणी में कहा है, विकल्प 1 आसानी से उपलब्ध होना चाहिए क्योंकि "v1" वास्तव में एक "पूर्व बीटा" संस्करण है।

यदि कोई तृतीय पक्ष विक्रेता गैर-बीटा संस्करण का उपयोग करके निर्माण जारी करने में देरी करता है, तो आपका विकल्प 2 आपका अगला विकल्प है। बस सुनिश्चित करें कि आप MyWriteableBitmapExtensions के निर्माण के लिए पूरी तरह से नई पहचान का उपयोग करते हैं: विशेष रूप से एक अलग असेंबलीनाम, फ़ाइल नाम, मजबूत नाम हस्ताक्षर और पहचान के लिए उपयोग किए गए किसी भी GUID का उपयोग COM सहित।

यदि आपको नई कार्यक्षमता की आवश्यकता नहीं है या v2 v1 के साथ पिछड़ा संगत था, तो असेंबली बाध्यकारी अभी भी बेहतर विकल्प होगा - मैंने पुष्टि नहीं की है कि यह सिल्वरलाइट के साथ उपलब्ध है, लेकिन मैं चाहता हूं आश्चर्यचकित हो अगर यह नहीं था, हालांकि अब मैं सच असेंबली बाध्यकारी सिल्वरलाइट में अनुपलब्ध है क्योंकि पूरी प्रणाली है। कॉन्फिगरेशन नेमस्पेस सिल्वरलाइट से गायब है (System.Configuration.Assemblies में दो गणनाओं को छोड़कर)।

फिर भी, एक और विकल्प नवीनतम स्रोत कोड को समायोजित करना है ताकि ऐसा कुछ उत्पन्न कर सके जो v1 के पीछे पिछड़ा है, शायद आपको v2 सुविधाओं को तोड़ना है - इस तरह से v2 विशेषताएं अभी भी उपयोग किया जाना चाहिए, बस एक recompile के साथ, मूल पहचान (असेंबलीनाम, फ़ाइल नाम, मजबूत नाम हस्ताक्षर, आदि) के साथ।फिर आप दोनों परिदृश्यों के लिए एक असेंबली का उपयोग करने में सक्षम होना चाहिए।

+0

मैंने वास्तव में इस उत्तर को लिखने के बाद केवल लिखने योग्य बिटमैप एक्सटेंशन परियोजना को देखा और अब मुझे एहसास हुआ कि आपने __v1__ के रूप में संदर्भित किया है, वास्तव में लगभग निश्चित रूप से एक _pre-beta_ संस्करण है, जो नवीनतम है __v1 beta__। तो विकल्प (1) एक विकल्प से अधिक हो जाता है - तीसरे पक्ष के विक्रेता को उपलब्ध होने पर गैर-बीटा संस्करण के साथ फिर से रिलीज होना बहुत खुश होना चाहिए। –

+0

मैंने अब इस जवाब को फिर से संपादित किया है क्योंकि यह सिल्वरलाइट _doesn't_ समर्थन असेंबली बाध्यकारी जैसा दिखता है :-( –

+1

हाँ, यह प्रारंभिक भी था। मुझे उम्मीद है कि यह विशेष विक्रेता अपडेट होगा; वे इस तरह से बहुत अच्छे हैं। मुझे सामान्य रूप से अन्य पुस्तकालयों के बारे में चिंता है और यह सोच रहा था कि कोई पूर्ण/उचित समाधान (जैसे असेंबली बाध्यकारी) था, खासकर जब से "ओपन-सोर्स, रीकंपाइल" विकल्प हमेशा उपलब्ध नहीं होगा, लेकिन ऐसा लगता है कि शायद ऐसा नहीं हो सकता है हो। पहचान GUIDs और मजबूत नाम को अपडेट करने के लिए नोट के लिए धन्यवाद, मैंने उनको अनदेखा कर दिया होगा। –