2016-01-14 11 views
6

मैं दो अलग-अलग संस्करणों को समान लाइब्रेरी (ओपनसीवीशर्प 2.x और ओपनसीवीशर्प 3.x) का उपयोग करना चाहता था, ठीक है, मैंने अलग-अलग प्रोजेक्ट में दोनों दो पैकेज डाउनलोड किए हैं (इसे ओसीवी 2Wrapper कहें और ओसीवी 3Wrapper) और मेरे प्रोजेक्ट में दोनों रैपर संदर्भ। मुझे एक पैकेज (2.x) से पुस्तकालयों का नाम बदलना पड़ा और उन्हें मैन्युअल संदर्भित करना पड़ा क्योंकि: Can we add 2 different versions of same package in NuGet। मैंने बाहरी उपनामों के बारे में पढ़ा और मैंने रैपरों में से एक में बाहरी उपनाम का उपयोग किया (2.x मेरे मामले में)। लेकिन मैं कुछ प्रमुख समस्याएं हैं:उसी दो अलग-अलग संस्करणों का उपयोग करते हुए nuget पैकेज

  • मेरे नाम दिया पुस्तकालयों लांच परियोजना का निर्माण (है कि एक है जो दोनों रैपर संदर्भ) कॉपी नहीं हुए हैं, लेकिन 2.x आवरण
  • यह न काम के निर्माण में है क्योंकि अभी तक यह कहता है कि मेरे 2.x रैपर से टाइप नहीं मिल सकता है, भले ही मैं मैन्युअल रूप से 2.x रैपर से अपने नामित पुस्तकालयों की प्रतिलिपि बना दूं।

सी # में इस परिदृश्य के लिए सही दृष्टिकोण क्या है?

मैं समाधान में दोनों रैपर का उपयोग करना चाहता हूं क्योंकि 2.x संस्करण में एल्गोरिदम (SIFT और SURF) और 3.x verison में एल्गोरिदम (Kaze और AKaze) शामिल हैं। मैं रह सकता हूं कि दोनों पैकेज नाइटेट से बाहर होंगे लेकिन मुझे लगता है कि 3.x nuget से है और 2.x संस्करण मैन्युअल रूप से कॉन्फ़िगर किया गया है।

+0

आपने कहा है कि आपने अपने समाधान में कम से कम तीन परियोजनाएं बनाई हैं, है ना? आपके द्वारा पोस्ट किए गए प्रश्न की सीमा एक परियोजना के लिए है।आप किसी भी समस्या के बिना विभिन्न परियोजनाओं में एक nuget पैकेज के विभिन्न संस्करण जोड़ सकते हैं। और जब तक आपकी दो परियोजनाएं nuget पैकेज के कोड को संभालती हैं और आप अपने तीसरे प्रोजेक्ट में दोनों को संदर्भित करते हैं, तो सब कुछ ठीक होना चाहिए –

+1

ठीक है, मुझे यह मिलता है। लेकिन जब मैं ऐसा करता हूं (दो अलग-अलग पुस्तकालयों के लिए दो रैपर का उपयोग करें) तो मेरे निष्पादन योग्य कार्यक्रम के निर्माण में मेरे पास 2.x रैपर से पुस्तकालय नहीं हैं (जिन्हें मैन्युअल रूप से ब्राउज़ फ़ाइल से संदर्भित किया गया है और नाम बदल दिया गया है, इसलिए मैं नाम ओवरराइट संघर्ष को रोक दूंगा) – LightCZ

+0

पुष्टि व्यवहार, मुझे यह भी नहीं पता कि Nuget स्वचालित रूप से निम्न संस्करण लाइब्रेरी प्राप्त करता है –

उत्तर

0

ठीक है, इसलिए मैं इसे 2.X रैपर संस्करण के लिए संपूर्ण स्रोत कोड डाउनलोड करके हल करता हूं। एबीसीडीईएफ 2 में अपना नामस्थान नामित किया गया जहां एबीसीडीईएफ मूल नामस्थान था। अपनी खुद की कुंजी के साथ अपना खुद का nuget पैकेज बनाएँ और ... इसे हमारे निजी nuget सर्वर पर प्रकाशित करें। यह इतना लंगड़ा समाधान है लेकिन मूल पैकेज मैन्युअल रूप से डाउनलोड करने और इसे सीधे फ़ाइल नाम आदि के साथ संदर्भित करने का कोई अन्य तरीका नहीं है और आप nuget फायदे खो देते हैं।

5

जैसा कि पहले से ही कहा गया है कि एक नगेट पैकेज के 2 अलग-अलग संस्करणों के संदर्भ में कुछ भी गलत नहीं है, जब तक कि यह विभिन्न विजुअल स्टूडियो प्रोजेक्ट्स में है, जो कि संदर्भ हैं।

लेकिन यह भी है जहां आसान हिस्सा समाप्त होता है, लेकिन मुझे लगता है कि कुछ विकल्प बाकी हैं। आपकी जरूरतों के आधार पर मैं निम्नलिखित विकल्पों को देखता हूं।

  1. एक पोस्ट बिल्ड चरण बनाएं जो बहु संस्करण वाली असेंबली को जीएसी में पंजीकृत करता है। जब तक प्रत्येक असेंबली में अलग-अलग असेंबली संस्करण होते हैं, तब तक सीएलआर आवश्यक होने पर जीएसी से सही असेंबली उठाएगा।
  2. एक पोस्ट का निर्माण कदम जो की तरह bin/पैकेज v1 के और bin/पैकेज-वी 2 आप आवेदन बिन फ़ोल्डर का एक सबफ़ोल्डर में विभिन्न विधानसभाओं कॉपी बनाएं। फिर आप अपने आवेदन में असेंबली रीसोल्व ईवेंट को ओवरराइड कर सकते हैं जैसे https://msdn.microsoft.com/en-us/library/ff527268(v=vs.110).aspx। इससे आपके लिए आवश्यकता के समय सही संस्करण में असेंबली लोड करना संभव हो जाएगा।
  3. आप AssemblyResolve के साथ चारों ओर खेलने के लिए नहीं करना चाहते हैं, तो आप भी अपने वेब/app.config विधानसभा करते रीडायरेक्ट/जांच के लिए यहां दिए गए अनुसार https://msdn.microsoft.com/en-us/library/4191fzwb(v=vs.110).aspx

आशा संशोधित कर सकते हैं कि यह एक में मदद करता है बिट, तो आपको अगली बार तीसरे पक्ष के स्रोत कोड को संशोधित करने की आवश्यकता नहीं है।

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