मैं एक पोर्टेबल क्लास लाइब्रेरी पर काम कर रहा हूं और यह निर्धारित करने के लिए कि क्या इसे पीसीएल या प्लेटफ़ॉर्म-विशिष्ट लाइब्रेरी (यदि यह मौजूद है) का उपयोग करना है या नहीं, यह निर्धारित करने के लिए NuGet द्वारा उपयोग की जाने वाली रणनीति को समझना है।पोर्टेबल और गैर पोर्टेबल कक्षा पुस्तकालय दोनों मौजूद होने पर Nu Nuet संदर्भों को कैसे हल करता है?
मैंने एक नमूना प्रोजेक्ट बनाया जो JSON.NET को संदर्भित करता है जिसमें विभिन्न प्लेटफार्मों के साथ-साथ एक पोर्टेबल क्लास लाइब्रेरी का समर्थन होता है। यहाँ JSON.NET क्या NuGet से उपलब्ध कराता है:
- net20
- net35
- net40
- SL3-WP
- SL4
- SL4-windowsphone71
- winrt45
- पोर्टेबल-net40 + एसएल 4 + wp7 + win8
सबसे पहले मैंने नेट 4.0 को लक्षित करने वाली लाइब्रेरी बनाई और NuGet का उपयोग करके JSON.NET का संदर्भ जोड़ा। इसमें नेट 40 लाइब्रेरी का संदर्भ जोड़ा गया। ठीक है, मुझे लगता है कि ऐसा इसलिए है क्योंकि एक सटीक लक्ष्य प्लेटफार्म मैच है। फिर मैंने नेट 4.0.3 को लक्षित किया। अभी भी net40 संस्करण का संदर्भ दिया गया था। तब मैंने सिल्वरलाइट 5 की कोशिश की, जिसमें गैर-पोर्टेबल पुस्तकालयों के बीच सटीक मिलान नहीं था। लेकिन एक एसएल 4 पुस्तकालय चुना गया था। और विंडोज फोन 8 को लक्षित करने के परिणामस्वरूप sl4-windowsphone71 लाइब्रेरी चयन हुआ।
तो ऐसा लगता है कि जब भी लक्ष्य प्लेटफ़ॉर्म के लिए गैर-पोर्टेबल संगत लाइब्रेरी होती है, तो इसे प्राथमिकता दी जाएगी। JSON.NET के मामले में एक पीसीएल केवल तभी चुना जाएगा जब इसे किसी अन्य पोर्टेबल लाइब्रेरी द्वारा संदर्भित किया गया हो। यदि हां, तो मैं हैरान हूँ कि निम्नलिखित स्थिति का समाधान हो जाएगा:
- net40
- पोर्टेबल-net40 + SL4 + WP7 + Win8
लाइब्रेरी:
लाइब्रेरी एक दो संस्करण
- पोर्टेबल-net40 + SL4 + WP7 + Win8 : बी संदर्भ एक और एक संस्करण है
अंत में, पुस्तकालय सी संदर्भ दोनों ए और बी और एक संस्करण है:
- net40
कैसे एक lib ए सी के लिए संकल्प लिया के संदर्भ में हो जाएगा? चूंकि सी सीधे संदर्भ देता है, इसे ए के नेट 40 प्राप्त करना चाहिए, लेकिन सी सी पोर्टेबल बी को संदर्भित करता है, इसके अलावा इसे ए के पोर्टेबल संस्करण भी प्राप्त करना चाहिए, इसलिए लाइब्रेरी के पोर्टेबल और नेट 40 संस्करण दोनों को सी के लिए तैनात किया जाना चाहिए। इसकी निर्भरताओं को हल करने के लिए। क्या मैं सही हूँ?
अद्यतन। मैंने कुछ परीक्षण परियोजनाएं बनाई हैं, और ऐसा लगता है कि लाइब्रेरी सी में एक गैर-पोर्टेबल लाइब्रेरी ए का प्रत्यक्ष संदर्भ होता है, लाइब्रेरी का यह संस्करण ए के पीसीएल संस्करण को जीत और ओवरराइट करेगा, तो ऐसा लगता है कि ऐसा परिदृश्य इसकी अनुमति नहीं है - एक पुस्तकालय सीधे गैर-पोर्टेबल lib का संदर्भ नहीं दे सकता है अगर यह अप्रत्यक्ष रूप से इसके एक अलग (पोर्टेबल) संस्करण का संदर्भ देता है।
धन्यवाद, डैनियल! अब यह स्पष्ट है। –