2012-12-03 15 views
10

मैं एक NuGet पैकेज बना रहा हूं जो Microsoft CommonServiceLocator असेंबली का संदर्भ देता है।NuGet में लक्ष्य ढांचे के आधार पर मैं सशर्त निर्भरताओं को कैसे निर्दिष्ट करूं?

वहाँ माइक्रोसॉफ्ट CommonServiceLocator के दो संस्करण हैं:

मेरे परियोजना एक पोर्टेबल कक्षा लाइब्रेरी है, लेकिन, क्योंकि यह कभी कभी उद्यम लाइब्रेरी के साथ प्रयोग किया जाता है, मैं "सशर्त" पोर्टेबल संस्करण का संदर्भ तो वहाँ कोई विवाद है की सॉर्ट करने के लिए की जरूरत है।

  • यदि लक्ष्य ढांचे भरा है .NET 4.0/4.5, मूल CommonServiceLocator पैकेज उपयोग करती हैं इसलिए लोगों को भी उद्यम लाइब्रेरी बिट्स (जो भी CommonServiceLocator पैकेज का संदर्भ) का उपयोग कर सकते हैं।
  • यदि लक्ष्य ढांचा पोर्टेबल (या कुछ और) पोर्टेबल.कॉमन सेवा सेवा पैकेज का उपयोग करता है।

I see the new "group" feature in the NuGet docs showing how to specify dependencies in your .nuspec file और मुझे लगता है कि मैं जो चाहता हूं वह करूँगा, लेकिन मुझे यकीन नहीं है कि इसका परीक्षण कैसे किया जाए।

यहाँ मैं क्या सोचता मैं क्या करने की जरूरत है और मैं किसी को अपने दृष्टिकोण को मान्य या सही दिशा में मुझे इंगित कर सकते हैं आशा करती हूं कि:

<dependencies> 
    <group> 
    <!-- Always include regardless of target framework --> 
    <dependency id="Autofac" /> 
    </group> 
    <group targetFramework="net40"> 
    <!-- Also include the full CSL if it's full framework --> 
    <dependency id="CommonServiceLocator" /> 
    </group> 
    <group targetFramework="portable-win+sl50+wp8"> 
    <!-- Otherwise include the Portable CSL --> 
    <dependency id="Portable.CommonServiceLocator" /> 
    </group> 
</dependencies> 

विशेष रूप से ...

  • क्या मेरा targetFramework सिंटैक्स सही है? मुझे कोई उदाहरण नहीं मिल रहा है, इसलिए मुझे नहीं पता कि + सीमित तंत्र सही है या यदि यह अल्पविराम-सीमित होना चाहिए।
  • डिफ़ॉल्ट समूह काम करेगा? उस समूह को अनिर्दिष्ट लक्ष्य ढांचे के साथ - क्या वह हमेशा शामिल किया जाएगा या क्या मुझे इसे प्रत्येक समूह में कॉपी/पेस्ट करने की आवश्यकता है?

उत्तर

4

हाँ, यह बहुत सही है। पोर्टेबल फ्रेमवर्क नामों पर विवरण यहां पाया जा सकता है http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Framework_Names

एक और चीज़ जो मैंने पाया, क्योंकि डिफ़ॉल्ट रूप से जीत + sl50 + wp8 में net45 शामिल है, आप इसे शामिल करना चाहते हैं ताकि यह निर्भरता समूह स्थापित हो।

+0

यदि यह पूर्ण नेट 45 है, तो मैं इसे पोर्टेबल नहीं, सामान्य सेवा केंद्र का उपयोग करना चाहता हूं, तो क्या मैं इसका उपयोग करूंगा? targetFramework = "net40 + net45" –

+0

नहीं, आवश्यक नहीं है और यह ठीक काम करेगा और का उपयोग करते समय एक परियोजना लक्ष्यीकरण net4.5 पर स्थापित करते समय पोर्टेबल लाइब्रेरी से अधिक सटीक मिलान रैंक करेगा। और केवल net40 निर्दिष्ट करना "काम करेगा जब NuGet एक पैकेज स्थापित करता है जिसमें एकाधिक असेंबली संस्करण हैं, यह परियोजना के लक्ष्य ढांचे के साथ असेंबली के ढांचे के नाम से मेल खाता है।यदि कोई मिलान नहीं मिलता है, तो NuGet उस उच्चतम संस्करण के लिए असेंबली की प्रतिलिपि बनाता है जो परियोजना के लक्ष्य ढांचे से कम या उसके बराबर है " – Deepak

+0

तो ऐसा लगता है कि मैं वास्तव में नेट 45 संदर्भ छोड़ना चाहता हूं और बाकी चीजों को बस जगह में गिरो। बिल्कुल सही! धन्यवाद! –

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

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