2009-06-12 5 views
6

डुप्लिकेट - यह सटीक प्रश्न here से पूछा गया था - एकमात्र समाधान पोस्ट बिल्ड इवेंट लगता है।विजुअल स्टूडियो रिकर्सिव कॉपी स्थानीय

विजुअल स्टूडियो 2008 में, मैं निम्नलिखित परियोजनाएं हैं:

  • ए - संदर्भ बी

  • बी - संदर्भ Lib.dll

जब बी बनाया गया है, लिब बी/बिन/डीबग में डीडी दिखाई देता है। (यह ठीक है)

जब कोई बनाया गया है, बी/डी ए/बिन/डीबग में दिखाई देता है, लेकिन Lib.dll ए/बिन/डीबग में दिखाई नहीं देता है।

क्या सभी बी की निर्भरताओं को ए के आउटपुट पथ में कॉपी करने के लिए तार्किक व्यवहार नहीं होगा, क्योंकि बी को रन-टाइम पर इन असेंबली की आवश्यकता होगी?

सभी संदर्भों में copylocal = true है।


(अब मैं हाथ से एक से सभी बी की निर्भरता को संदर्भित करने के लिए है, कि सही है? मैं भी एक कस्टम निर्माण कदम मुझे लगता है कि इस्तेमाल कर सकते हैं है। वैसे भी, इस व्यवहार करता है किसी भी लाभ/मतलब नहीं है?)

+0

आप किस संस्करण vof विजुअल स्टूडियो में काम कर रहे हैं? –

+0

मैं वीएस 2008 का उपयोग कर रहा हूं। मेरा मानना ​​है कि यह 2005/2010 में भी वैसे ही व्यवहार करता है। –

+1

कनेक्ट पर एक आइटम दायर किया, fwiw: https://connect.microsoft।com/VisualStudio/प्रतिक्रिया/विवरण/694,561/कॉपी-स्थानीय-निजी-सच-निजी-ऑन-ए-परियोजना संदर्भ-जरूरतों को करने के लिए भी कॉपी-क्या-लक्ष्य-परियोजना के निशान के रूप में copy- स्थानीय –

उत्तर

5

यह केवल तभी काम करता है जब असेंबली वास्तव में .dll द्वारा संदर्भित की जाती है। यानी यदि आपके पास LibInterface.dll और LibImplementation.dll है - और आपका कोड केवल LibInterface.dll में कक्षाओं को संदर्भित करता है, तो BI (स्पष्ट रूप से) के आउटपुट में LibImplentation.dll प्राप्त करने का कोई तरीका नहीं है।

यह किसी भी आर्बिटरी फाइलों के लिए भी लागू होता है - यानी यदि आपके पास प्रोजेक्ट ए से संबंधित Randon.myFile है, तो यह वांछित प्रक्रिया होगी: 1. स्थानीय प्रतिलिपि के रूप में जोड़ें, या प्रोजेक्ट ए में ईवेंट बनाएं (इसलिए मोड़ प्रोजेक्ट ए के लिए आउटपुट में) 2. प्रोजेक्ट बी में, प्रोजेक्ट ए रेफरी पर "कॉपी कॉपी स्थानीय" सेट करें। 3. आपको प्रोजेक्ट बी (आपकी फ़ाइल सहित) में प्रोजेक्ट ए के आउटपुट में सब कुछ मिलना चाहिए - लेकिन आप नहीं करते हैं।

कुछ अन्य विकल्प हो सकता है - "स्थानीय - सभी कॉपी करें" या कुछ। यह वीएस समर्थन आईओसी तकनीकों, और स्वच्छ abstractions मदद मिलेगी।

0

मैंने कई बार एक ही प्रक्रिया की है और मैन्युअल रूप से असेंबली को संदर्भित करना आवश्यक नहीं है। एक आसान तरीका यह परीक्षण करने के लिए है:

एक
  • में
    1. संदर्भ बी ए
    2. संकलित में बी से एक वस्तु का एक उदाहरण बनाएँ।

    यदि निर्माण सफलतापूर्वक पूर्ण हो जाता है, तो सब कुछ ठीक से संदर्भित किया जाता है।

  • +0

    बिल्ड सफलतापूर्वक पूर्ण हो जाता है, लेकिन रनटाइम पर बी में ए से ऑब्जेक्ट का इंस्टीटेशन अपवाद द्वारा समाप्त होता है "टाइप या असेंबली लोड नहीं कर सकता", क्योंकि बी से वह ऑब्जेक्ट Lib.dll से ऑब्जेक्ट्स का उपयोग करता है, जो न तो GAC या वर्तमान फ़ोल्डर में है । –

    +0

    ... भी वही समस्या है। ऐसा लगता है कि संस्करण की जानकारी के साथ कुछ करने के लिए कुछ भी है, भले ही विशिष्ट संस्करण गलत पर सेट हो – Beachwalker

    0

    यदि Lib.dll एक इंटरऑप डीएल है तो इसके अंतर्निहित डीएल की प्रतिलिपि नहीं बनाई जाएगी। इसके अलावा मैं कहूंगा कि शायद ऑपरेटर त्रुटि है क्योंकि आपको निश्चित रूप से निर्भर प्रबंधित असेंबली का मैन्युअल रूप से संदर्भित करने की आवश्यकता नहीं है।

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

    • कोई संबंधित समस्या नहीं^_^