2012-10-10 13 views
5

पृष्ठभूमि: मेरे पास "ए" और "बी" नामक दो असेंबली हैं। "" ए "संदर्भ" बी "।" ए "कुछ अतिरिक्त डीएलएस (माइक्रोसॉफ्ट.इंटरपीर लाइब्रेरी.डाटा और माइक्रोसॉफ़्ट एंटरप्राइज़ लाइब्रेरी.कॉमन) का भी संदर्भ देता है जो मुझे लगता है कि एनपीकेजी में पैक किया जाना चाहिए।NuGet पैकेजिंग और संदर्भ डीएल के

मेरा मानना ​​है कि मेरा nupkg पैकेज "ए", "बी" और दो "माइक्रोसॉफ्ट एंटरप्राइज़" असेंबली से असेंबली आउटपुट होना चाहिए ताकि जब कोई मेरा पैकेज इंस्टॉल करता है तो यह उन्हें असेंबली "ए" का प्रत्यक्ष संदर्भ देगा और अन्य तीन असेंबली उपलब्ध होंगी (लेकिन सीधे संदर्भित नहीं, ताकि उनके अनुप्रयोग चलाने होगा पैकेजिंग गैर संदर्भ DLLs का सही तरीका क्या है

प्रयास # 1:।? पैकिंग एक \ net35 फ़ोल्डर में सभी आवश्यक dll के ०१२३०५५६९३८६ के अनुसारतत्व "यदि यह तत्व छोड़ा गया है, तो सामान्य व्यवहार लागू होता है, जो कि lib फ़ोल्डर में प्रत्येक असेंबली को संदर्भित करता है।"

तो, मुझे लगता है कि इस तत्व का उपयोग करके इसमें केवल संदर्भों के रूप में निर्दिष्ट असेंबली शामिल होंगी। यह मामला प्रतीत नहीं होता है अगर मैं "फ़ाइल" तत्व <file src=*.dll" target="lib\net35" /> का भी उपयोग करता हूं। अगर मेरे पास ऐसा तत्व है जो सभी डीएलएल को पैकेज में कॉपी करता है तो यह असेंबली में परिणाम देता है जो इस पैकेज को \ net35 निर्देशिका में सभी असेंबली को संदर्भित करने के लिए लागू करता है। यह वह नहीं है जो मैं करना चाहता हूं। मुझे कुछ जादू की उम्मीद थी कि केवल "संदर्भ" में निर्दिष्ट असेंबली को वास्तविक रूप से संदर्भित किया जाएगा और अन्य सभी विस्फोटित \ पैकेज फ़ोल्डर में बने रहेंगे और ऐप काम करेगा क्योंकि सभी डीएलएस एक ही निर्देशिका में स्थित हैं। शायद मैं गलत कर रहा हूँ ....

प्रयास # 2 सामग्री के रूप में जोड़ा जा रहा है परियोजना के लिए अगर मैं lib \ net35 के बजाय \ सामग्री \ lib में unreferenced विधानसभाओं जगह जब पैक इस में एक \ lib फ़ोल्डर बनाता है प्रोजेक्ट और उस प्रोजेक्ट में \ content \ lib dlls को सीधे डंप करता है जो तब हमें स्रोत नियंत्रण में जांचने के लिए मजबूर करता है। यह काम करता है, संकलित करता है और चलाता है जैसा कि मैं चाहता हूं, लेकिन मैं वास्तव में यह नहीं चाहता कि ये परियोजना के \ lib फ़ोल्डर में संग्रहीत हों।

मैं ऐसे समाधान की तलाश में हूं जहां परियोजना को "ए" के संदर्भ मिलते हैं और फिर भी अन्य आवश्यक असेंबली सह-स्थितियों के साथ चल सकते हैं लेकिन सीधे संदर्भित नहीं किया जा सकता है। ऐसा लगता है जैसे प्रयास # 1 सही पथ है लेकिन शायद एक बग है?

एफवाईआई, मैंने यह as a issue with NuGet दर्ज किया ताकि यह देखने के लिए कि टीम का उत्तर भी है।

उत्तर

3

यह एक बग Nuget 2.1 में पेश किया गया था और बाद में Nuget संस्करणों 2.2 जो दिसंबर 2012

में जारी किया गया मूल पोस्टिंग में प्रयास # 1 का उपयोग अब ठीक से काम करता में तय हुई थी।

0

मुझे नहीं लगता कि आपका "प्रयास 1" अभ्यास में काम करने जा रहा है। यदि आप केवल "ए" का संदर्भ देते हैं। जब आप अपना पैकेज बनाते हैं, तो केवल "ए" को आउटपुट निर्देशिका में कॉपी किया जाएगा (डिफ़ॉल्ट रूप से)। फिर, जब आप एप्लिकेशन वितरित करते हैं, तो त्रुटियों के कारण केवल "ए" मौजूद होगा।

आपके आवेदन को चलाने के लिए आपके पास सभी डीएलएल के संदर्भ होना चाहिए (या किसी दूसरे समाधान के साथ आना जो स्वचालित रूप से संदर्भित DLL को आउटपुट निर्देशिका में कॉपी करेगा, लेकिन मुझे यकीन नहीं है कि संदर्भ निर्दिष्ट करने में बहुत अधिक मूल्य है सीधे)। चूंकि आपके पास केवल कुछ डीएलएल हैं, इसलिए संदर्भ अनुभाग को छोड़ना शायद सबसे अच्छा है ताकि सभी डीएलएल को स्वचालित रूप से lib फ़ोल्डर से संदर्भित किया जा सके।

+0

यह नुगेट 2.1 में पेश किया गया एक प्रतिगमन/बग था, उन्होंने इस मुद्दे को सही किया है और इसे इस महीने 2.2 में तय किया जाएगा। – Jay