2012-01-31 20 views
7

कहें कि मेरे पास दो परियोजनाएं हैं, पी 4 और पी 3, क्रमश: नेट 4.0 और 3.5 लक्ष्य।क्या मेरा .Net ऐप एक .net फ्रेमवर्क लाइब्रेरी के दो अलग-अलग संस्करणों का संदर्भ दे सकता है?

प्रत्येक प्रोजेक्ट में System.Data का संदर्भ भी है। पी 4 के मामले में, यह System.Data v4.0.0.0 पी 3 के मामले में करने के लिए किया जाएगा, यह System.Data v2.0.0.0 करने के लिए किया जाएगा

परियोजना पी 4 भी पी 3 संदर्भ देता है।

यदि पी 4 लोड और निष्पादित किया गया है, तो यह .NET 4.0 सीएलआर का उपयोग करता है। रनटाइम पर, System.Data के संदर्भ P4 और P3 दोनों के अंदर v4.0 को हल करने लगते हैं। मैं असेंबली बाइंडिंग रीडायरेक्ट का उपयोग कर इसे ओवरराइड कर सकता हूं, लेकिन फिर पी 4 और पी 3 दोनों v2.0 को हल कर सकते हैं।

क्या कोई तरीका है कि मैं अपना आवेदन कॉन्फ़िगर कर सकता हूं ताकि पी 4 v4.0 और P3 का उपयोग v2.0 का उपयोग करता हो?

उत्तर

3

यदि आपके पास पी 3 पर नियंत्रण है, हाँ। प्रोजेक्ट के संदर्भ अनुभाग पर जाएं, System.Data संदर्भ ढूंढें, और इसकी गुण विंडो देखें (राइट-क्लिक करें -> गुण)।

"विशिष्ट संस्करण" संपत्ति के लिए "सत्य" चुनें। पुन: संकलित, पुनर्वितरण, आदि

ध्यान दें कि यह रनटाइम विफलताओं के सभी प्रकारों का कारण बनता है यदि असेंबली लोड होने का प्रयास करते समय मशीन पर .NET 2, 3, या 3.5 स्थापित नहीं हैं।

संपादित

मैं इस की कोशिश की है, लेकिन कोई भाग्य के साथ। पी 3 अभी भी v4.0 चलाता है। क्या आपको पता है कि पी 3 के लिए उत्पन्न असेंबली में इस सेटिंग का कोई दृश्य प्रभाव होगा? जैसे मेनिफेस्ट कहता है ".ver 2: 0: 0: 0" चाहे "विशिष्ट संस्करण" सत्य पर सेट है या नहीं।

अपने app.config को यह जोड़ने का प्रयास करें:

<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 
+0

मैंने कोशिश की है, लेकिन बिना किसी किस्मत के। पी 3 अभी भी v4.0 चलाता है। क्या आपको पता है कि पी 3 के लिए उत्पन्न असेंबली में इस सेटिंग का कोई दृश्य प्रभाव होगा? जैसे मेनिफेस्ट कहता है ".ver 2: 0: 0: 0" चाहे "विशिष्ट संस्करण" सत्य पर सेट है या नहीं। – Rob

+1

हां - यही वह है जो मैंने सेब की सलाह के बाद किया था। मुझे स्टार्टअप टैग में एक विशेषता के रूप में उपयोग LegacyV2RuntimeActivationPolicy = "true" निर्दिष्ट करने की भी आवश्यकता है। अन्यथा यह अनचाहे अपवाद के साथ दुर्घटनाग्रस्त हो गया: System.BadImageFormatException – Rob

+0

बहुत बढ़िया। उनका लिंक मुझे कॉन्फ़िगरेशन के बारे में याद दिलाता था, इसलिए निश्चित रूप से उसका जवाब स्वीकार करता था। – Randolpho

4

इस पर एक नज़र डालें: In-Process Side-by-Side यह कुछ मदद की हो सकती है।

+1

हाँ - यह चाल है! – Rob

+0

क्षमा करें। मैं बेवकूफ़ हूँ। दुर्भाग्यवश इससे मदद नहीं मिली है, जब तक कि मुझे कुछ याद नहीं आ रहा है। मैं इसे जांचते समय असेंबली बाध्यकारी रीडायरेक्ट को विफल करने में कामयाब रहा। रीडायरेक्ट के बिना, यह काम नहीं करता है। – Rob

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