2008-12-17 14 views
18

पर संदर्भों की निर्भरता की प्रतिलिपि नहीं है मेरे पास एक सामान्य उपयोग है, मैंने एक डीएल में बनाया है जिसे मैं अपनी कई परियोजनाओं से संदर्भित करता हूं। CommonUtils log4net.dll पर निर्भर करता है जिसे फ़ाइल संदर्भ और कॉपी-लोकल = सत्य के रूप में सेट किया गया था जब CommonUtils.dll बनाया गया था। log4net.dll और CommonUtils.dll जीएसी में नहीं हैं।आउटपुट निर्देशिका

सब कुछ MyWorkingProject में ठीक काम करता है जहां मेरे पास केवल CommonUtils.dll का एक फ़ाइल संदर्भ है - log4net.dll आउटपुट निर्देशिका में दिखाई देता है (क्योंकि यह CommonUtils.dll की निर्भरता है लेकिन MyWorkingProject से संदर्भित नहीं है)। हालांकि अगर मैं कुछ unittests जोड़ने के लिए एक नई परियोजना बनाते हैं: MyWorkingProjectTest और प्रोजेक्ट संदर्भ MyWorkingProject और फिर संदर्भ संदर्भ CommonUtils.dll फिर से (मैं कुछ सामान्य उपयोगों का उपयोग करना चाहता हूं) तो log4net.dll बनाने पर जो दोनों में निर्भरता है परियोजना संदर्भ और फ़ाइल संदर्भ में भी आउटपुट निर्देशिका में कॉपी नहीं किया जाता है।

कोई भी यहां क्या हो रहा है यह स्पष्ट कर सकता है? क्या संकलक नहीं जानता कि log4net.dll फ़ाइलों में से कौन सी इसे पकड़ लेनी चाहिए? क्या मैं कुछ गलत कर रहा हूं? क्या मुझे log4net.dll को स्पष्ट रूप से कॉपी करने के लिए इसे किसी अन्य तरीके से करना चाहिए? क्या यह कोई समझ में आता है कि मुझे स्पष्ट रूप से log4net का संदर्भ देना है?

उत्तर

1

मुझे विश्वास है कि अगर आप अपनी परियोजना में संदर्भ के रूप में log4net नहीं जोड़ते हैं तो इसे कॉपी नहीं किया जाएगा।

+0

आप एक परियोजना संदर्भ के रूप में log4net कैसे जोड़ेंगे क्योंकि मेरे पास केवल वितरित बाइनरी डीएल है। इसके अलावा मुझे इसका संदर्भ क्यों जोड़ना होगा क्योंकि यह केवल मेरे संदर्भों में से एक की निर्भरता है। किसी ने कहा है कि आपको उन पुस्तकालयों का संदर्भ नहीं देना चाहिए जिन्हें आप स्पष्ट रूप से अपने कोड में उपयोग नहीं कर रहे हैं। – Fadeproof

+0

मेरा मतलब आपके प्रोजेक्ट में "प्रोजेक्ट रेफरेंस" के बजाय "संदर्भ" के रूप में नहीं था। – user7116

0

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

क्या आप संकलित करते समय ऐसी चेतावनी प्राप्त कर रहे हैं? यदि ऐसा है, तो जो सलाह देता है उसका पालन करें और आपको अपनी आउटपुट निर्देशिका में कॉपी 4net की प्रतिलिपि मिलनी चाहिए।

+0

समस्या यह है कि मेरे पास दो संदर्भ हैं जिनके पास log4net पर निर्भरता है और ऐसा लगता है कि विरोधाभासी निर्भरता की प्रतिलिपि बनाने के लिए दृश्य स्टूडियो में कुछ निर्मित चीज नहीं है (इसके बावजूद यह एक जैसा है)। सब कुछ अपेक्षित काम करता है अगर मैं केवल 1 संदर्भ देता हूं लेकिन अगर मैं दोनों का संदर्भ देता हूं तो इसकी प्रतिलिपि नहीं बनाई जाती है। ? – Fadeproof

+0

दोनों संदर्भ वास्तव में एक ही असेंबली के लिए हैं? पथ समान है सुनिश्चित करने के लिए प्रत्येक संदर्भ के गुणों की जांच करें। – Bevan

2

यह डिज़ाइन द्वारा है। आपको उन प्रभावों के बारे में सोचना होगा जो संदर्भों की स्वत: विरासत का कारण बनेंगे। जबकि आप तर्कसंगत रूप से देख सकते हैं कि संदर्भ क्या होना चाहिए, कंपाइलर को ऐसा कोई चित्रण नहीं है। आप सैद्धांतिक रूप से, फ्रेमवर्क को पुन: उत्पन्न कर सकते हैं और अपने ओएस का एक अच्छा हिस्सा अगर यह पूरे निर्भरता पेड़ पर चला गया।

यह निश्चित रूप से दर्द है, और मैं आपकी निराशा से सहमत हूं और समझता हूं, लेकिन मुझे लगता है कि माइक्रोसॉफ्ट अन्यथा ऐसा करने के लिए एक तार्किक तरीका नहीं ढूंढ पाया।

+0

क्या आप सलाह दे सकते हैं कि मुझे यह कैसे करना चाहिए? अगर मेरे पास लीबिया और लीबबी है जो दोनों लॉग 4नेट पर निर्भर हैं और MyProjDir/LibA और MyProjDir/LibB में स्थित हैं, दोनों में log4net.dll शामिल है। मुझे किस log4net.dll का संदर्भ देना चाहिए? क्या lib4net.dll के लिए कॉपी-लोकल सत्य है liba और libB बनाने के दौरान जाने का तरीका नहीं है? – Fadeproof

+0

मैं व्यक्तिगत रूप से शीर्ष-स्तरीय प्रोजेक्ट में कोई साझा संदर्भ जोड़ता हूं। उदाहरण के लिए, यदि आपके दोनों पुस्तकालयों का उपयोग और एप्लिकेशन द्वारा किया जाएगा, तो मैं log4net.dll को सीधे एप्लिकेशन के/bin फ़ोल्डर में जोड़ दूंगा। यह सबसे अच्छा समाधान नहीं है, लेकिन मुझे लगता है कि संदर्भ को शिकार करना आसान है। –

+0

"द्वारा और एप्लिकेशन" = "किसी एप्लिकेशन द्वारा"। साथ ही, यह कहकर कि मैं शीर्ष स्तर पर संदर्भ जोड़ रहा हूं धोखा दे रहा है।मैं एक संदर्भ नहीं जोड़ता - मैं बस/बिन फ़ोल्डर में जोड़ता हूं क्योंकि यह पुस्तकालयों के लिए जांच पथ में होगा। –

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