2008-11-26 13 views
44

पर कॉपी नहीं किया जा रहा है, मुझे आश्चर्य है कि प्रतिलिपि के लिए कॉपी-स्थानीय = सत्य वास्तव में क्या करता है। क्या यह संदर्भित असेंबली को अपनी सभी निर्भरताओं के साथ आउटपुट निर्देशिका में कॉपी करता है?कॉपी-लोकल कैसे काम करता है? log4net.dll को MyProject आउटपुट निर्देशिका

मेरा परिदृश्य निम्न है: मेरे पास एक कस्टम लॉग रैपर है जो log4net का उपयोग करता है। मैं myLogWrapper.dll की रिलीज असेंबली का निर्माण log4net.dll संदर्भ प्रतिलिपि स्थानीय-सत्य के साथ सेट करता हूं। MyProject से MyLogWrapper.dll को संदर्भित करने के साथ स्थानीय सेट को सत्य पर कॉपी करना चाहिए जिसके परिणामस्वरूप log4net.dll को कॉपी किया जा सकता है? मैं केवल MyLogWrapper.dll का संदर्भ दे रहा हूं और MyProject में इसकी कोई भी निर्भरता नहीं है। log4net.dll को MyProject आउटपुट निर्देशिका में कॉपी नहीं किया जा रहा है लेकिन MyLogWrapper की सभी अन्य निर्भरताएं हैं। क्या समस्या हो सकती है?

मैंने कुछ और प्रयोग किए हैं और ऐसा लगता है कि अगर मैं जीएसी से असेंबली (log4net.dll) को हटा देता हूं तो यह स्थानीय रूप से कॉपी हो जाता है। क्या कोई पुष्टि कर सकता है कि यह समस्या है?

उत्तर

4

जब स्थानीय प्रतिलिपि सत्य पर सेट की जाती है तो यह सभी समेकित प्रतियों की प्रतिलिपि बनायेगी, जिनकी विशेषता स्थानीय प्रतिलिपि = आवेदन के बिन को निपुण करती है।

आपके मामले में डीएलएल अन्य डीएलएल का उपयोग कर रहा है, इसलिए इसकी आवश्यकता भी है।

+8

... जीएसी में से किसी को छोड़कर। – JustAMartin

+0

यहां तक ​​कि उन GAC में वी.एस. 2015 के साथ कॉपी कर रहे हैं, तो परियोजना अन्य परियोजना उत्पादन निर्देशिका के लिए एक अन्य परियोजना द्वारा संदर्भित है। मेरा जवाब देखें – vezenkov

5

आपको स्थानीय प्रतिलिपि की थोड़ी सावधान रहना होगा क्योंकि उसने मुझे अतीत में पकड़ा है!

कभी-कभी, किसी विशेष। डीएल के लिए यह चुपचाप इसे बिल्ड फ़ोल्डर में कॉपी करने में विफल हो जाएगा। आमतौर पर यह एक देव मशीन पर दिखाई नहीं देता है क्योंकि डीएल अक्सर जीएसी में भी होते हैं (यदि आपने एक देव उपकरण/लाइब्रेरी स्थापित की है जिसे आप विकास के लिए उपयोग कर रहे हैं) और इसलिए आप तब तक ध्यान नहीं देते जब तक कि यह विघटित/बंडल न हो जाए एक इंस्टॉलर में और आवश्यक फाइलें क्लाइंट मशीन पर गायब हैं।

इस बग पर अधिक जानकारी नहीं है, लेकिन यह धागा इसे किसी विशेष पुस्तकालय के लिए प्रदर्शित करता है: here

इस से पकड़ा गया है, मुझे लगता है कि यह एक अच्छा विचार (आम तौर पर किसी भी मामले में) यह जानना चाहेंगे कि जो विधानसभाओं अपनी परियोजना के लिए आवश्यक हैं और एक स्क्रिप्ट या इसी तरह स्वचालित कार्रवाई जो यह सुनिश्चित करता है कि सभी आवश्यक componants मौजूद हैं के लिए, या तो है जब आप निर्माण करते हैं, या जब आप इंस्टॉलर बनाते हैं, या वितरण के लिए फ़ाइलों को इकट्ठा करते हैं,

+0

क्या आप ऐसा करने के लिए बनाम पोस्ट-बिल्ड इवेंट्स का उपयोग करने की सलाह देते हैं? – Fadeproof

+0

मैंने उनका उपयोग नहीं किया है, इसलिए मैं हाँ या नहीं कह सकता हूं। मेरे मामले में, मेरे पास एक एनएसआईएस स्क्रिप्ट थी जिसने मैं लिखने वाले टूल (एक दृश्य ऐप) के लिए इंस्टॉलर उत्पन्न किया था। बल्कि सिर्फ संस्थापक में * .dll सहित से, मैं यह नाम से हर विधानसभा में शामिल करने के लिए अद्यतन, ताकि मैं अगर किसी भी लापता थे चेतावनी दी गई थी। – xan

+0

... cont। अगर यह गायब था तो यह कहीं और सही असेंबली को भी सोर्स कर दिया गया ताकि इंस्टॉलर पीढ़ी असफल न हो, लेकिन यह चेतावनी दी गई कि वीएस ने मुझे आवश्यक डीडी की प्रतिलिपि नहीं बनाई है। – xan

10

MSDN here पर यह प्रश्न पूछने के बाद - ऐसा लगता है कि यह व्यवहार डिज़ाइन द्वारा है। "यदि आप जीएसी में पंजीकृत एक कस्टम घटक के संदर्भ में एक एप्लिकेशन को तैनात/प्रतिलिपि बनाते हैं, तो प्रतिलिपि स्थानीय सेटिंग की परवाह किए बिना, घटक को एप्लिकेशन के साथ तैनात/प्रतिलिपि नहीं किया जाएगा।"

+0

वीएस 2015 एक परियोजना संदर्भ के माध्यम से अप्रत्यक्ष संदर्भों के लिए अपवाद बनाता है। उदाहरण के लिए वीएस 2010 ऐसा व्यवहार नहीं करता है। https://connect.microsoft.com/VisualStudio/Feedback/Details/1804765 – vezenkov

31

दुर्भाग्य से ऐसा लगता है कि MSDN documentation से लिया गया निम्नलिखित कथन के अनुसार CopyLocal कार्यक्षमता पहले से ही जीएसी में असेंबली के लिए अपेक्षित काम नहीं करती है।

यदि आप किसी ऐसे अनुप्रयोग को तैनात करते हैं जिसमें जीएसी में पंजीकृत एक कस्टम घटक का संदर्भ शामिल है, तो कॉपीलोकल सेटिंग के बावजूद घटक एप्लिकेशन के साथ तैनात नहीं किया जाएगा। विजुअल स्टूडियो के पिछले संस्करणों में, आप यह सुनिश्चित करने के लिए कॉपीलोकल प्रॉपर्टी को संदर्भ में सेट कर सकते हैं कि असेंबली तैनात की गई थी। अब, आपको मैन्युअल रूप से \ Bin फ़ोल्डर में असेंबली जोड़नी होगी। यह सभी कस्टम कोड को जांच के तहत रखता है, जिससे कस्टम कोड प्रकाशित करने का जोखिम कम हो जाता है जिसके साथ आप परिचित नहीं हैं।

अधिक जानकारी निम्न पृष्ठ पर मिल सकती है जो परियोजना संदर्भों के काम के बारे में विवरण बताती है।

MSDN: Project References

+0

मैंने सक्रिय रूप से तैनात डीएलएस के संबंध में इस मुद्दे के बारे में .NET 3.0 फ़ोरम के लिए डेटाडिनेमिक्स एक्टिव रीपॉर्ट्स पर किए गए एक पोस्ट में एक लिंक जोड़ा है। रिपोर्ट। अजीब मैं पाया है कि इस अनुमानित "डिजाइन द्वारा" व्यवहार पुस्तकालय संदर्भ जा रहा है, WPFToolkit.dll अगर यह एक माध्यमिक संदर्भ के माध्यम से है, भले ही बिन फ़ोल्डर में कॉपी करने के लिए लगता है, उदाहरण के लिए पर निर्भर करने लगता है। http://www.datadynamics.com/forums/124306/ShowPost.aspx – jpierson

7

एक चाल है: संदर्भ कॉपी गलत पर स्थानीय और फिर सही करने के लिए फिर से सेट, और दृश्य स्टूडियो कि संदर्भ के लिए स्वचालित रूप से निजी मेटाडाटा कहते हैं। कम से कम वीएस 2010 करता है। मैं हाल ही में इस हमारे सर्वर जो कुछ अजीब कारण के लिए कई उद्यम लाइब्रेरी घटकों GAC में स्थापित किया था TFS का निर्माण के साथ किसी समस्या को हल करने के लिए किया था, इसलिए हम प्रमुख मुद्दों था जब TFS ड्रॉप फ़ोल्डर से हमारी परियोजना की तैनाती। उस झूठी/सच्ची चाल ने हमें बचाया।

+1

वीएस 2013 में काम नहीं कर रहा है। –

+0

यह मेरी मशीन पर काम करता है लेकिन हमारे बिल्ड सर्वर पर नहीं। ऐसा लगता है कि मैं अपना अपवित्र नहीं हटा सकता। – arkod

+0

यह वी.एस. के नए संस्करणों पर काम नहीं करता है, तो, मुझे लगता है, हम कोई अन्य विकल्प नहीं है लेकिन इस परियोजना को संशोधित "कॉपी स्थानीय" परियोजना एक्सएमएल फ़ाइल में संदर्भ में जोड़ने के लिए मैन्युअल रूप से फ़ाइलें और फिर बाद में दिल को छू लेने से बचने के लिए सुपर सावधान रहना विजुअल स्टूडियो में संदर्भ सेटिंग्स स्वयं। लेकिन मुझे इसकी जांच करनी होगी, शायद यह मैनुअल फिक्स पर्याप्त नहीं होगा यदि माइक्रोसॉफ्ट ने वीएस 2010 के बाद से एमएसबिल्ड के मूल व्यवहार को बदल दिया है ... – JustAMartin

0

मैं पाया है कि इस से अधिक नहीं परियोजना संदर्भों के साथ दृश्य स्टूडियो 2015 में किया जाता है जबकि संदर्भित परियोजना एक GAC विधानसभा के लिए एक निर्भरता है। जीएसी असेंबली हमेशा रूट प्रोजेक्ट आउटपुट में प्रतिलिपि बनाई जाती है और जीएसी डीएल के संदर्भ वाले प्रोजेक्ट के आउटपुट के संबंध में केवल स्थानीय = झूठी प्रति सम्मानित की जाती है।

Connect feedback

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