.net प्रतिलिपि स्थानीय कार्य कैसे करता है? log4net.dll को MyProject आउटपुट निर्देशिका में कॉपी नहीं किया जा रहा है




build dependencies (5)

मैं सोच रहा हूँ कि प्रतिलिपि-स्थानीय = वास्तव में संदर्भों के लिए सही है क्या यह संदर्भित असेंबली को अपनी सभी निर्भरताओं के साथ आउटपुट निर्देशिका में कॉपी करता है?

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

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


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

प्रतिक्रिया से कनेक्ट करें


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


दुर्भाग्य से ऐसा प्रतीत होता है कि एमएसडीएन प्रलेखन से ली गई निम्नलिखित बयान के मुताबिक, CopyLocal कार्यक्षमता जीएसी में पहले से ही विधानसभाओं के लिए अपेक्षित काम नहीं करती है।

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

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

एमएसडीएन: परियोजना संदर्भ


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


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

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

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

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





dependencies