2009-10-05 8 views
5

मैं वर्तमान में प्रोजेक्ट कॉन्फ़िगरेशन के आधार पर विभिन्न परियोजना निर्भरताएं चाहता हूं।प्रत्येक परियोजना कॉन्फ़िगरेशन के लिए अलग-अलग परियोजना निर्भरता कैसे प्राप्त करें?

उदाहरण के लिए, मैं रिलीज कॉन्फ़िगरेशन में SomeTestLib.vcproj को बनाना और लिंक नहीं करना चाहता, लेकिन मैं इसे डिबग में बनाना और लिंक करना चाहता हूं।

#ifdef DEBUG 
#pragma comment(lib, "SomeTestLib") 
#endif 

लेकिन इस मामले में, डिबगर और IntelliSense SomeTestLib लिए काम नहीं करते:

एक समाधान, कि sorta काम करता है, सशर्त संकलन मैक्रो का उपयोग करने के लिए है।
क्या कोई .sln या .vcproj हैक है जिसका मैं उपयोग कर सकता हूं?
धन्यवाद।

उत्तर

6

दिनों के लिए Google को खोजने के बाद, मैंने अंततः इस समस्या का हल ढूंढने के लिए छोड़ दिया और एक वीएस डेवलपर को उड़ा दिया, जिसने मुझे इस समस्या के लिए कामकाज दिया (वास्तव में, मैंने इसे खोजने के लिए अपने आप पर एक अरब अलग-अलग चीजों की कोशिश की)।

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

हालांकि, चूंकि यह लाइब्रेरी प्रोजेक्ट से आउटपुट लाइन को आश्रित प्रोजेक्ट की कमांड लाइन में चिपका रहा है, इसलिए आउटपुट लाइन को "" सेट करने के परिणामस्वरूप निर्भर परियोजनाओं पर लिंकर कमांड लाइन में कुछ भी जोड़ा जा रहा है!

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

फिर भी, संक्षेप में प्रस्तुत करने:

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

कृपया ध्यान दें कि यदि आप अक्षम लाइब्रेरी प्रोजेक्ट को बनाते या साफ़ करते हैं तो यह कार्यवाही आपको त्रुटियां देगी। यदि आप बस अपना समाधान बनाते हैं, तो इसे अक्षम कॉन्फ़िगरेशन पर छोड़ दिया जाएगा, इसलिए आपको त्रुटियां नहीं मिलेंगी।

आशा है कि इससे मदद मिलती है!

डैनियल

+0

धन्यवाद, यह बहुत अच्छा है! एक और बात: यदि आप जो निर्भरता जोड़ रहे हैं वह एक .dll होता है, तो आप आयात लाइब्रेरी का नाम भी "" पर सेट कर सकते हैं और इसे अनदेखा कर दिया जाएगा। यह विकल्प लिंकर-> उन्नत-> आयात लाइब्रेरी के अंतर्गत है। – k0dek0mmand0

0

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

+0

मैं वास्तव में एक ऐसी परियोजना के बारे में पूछ रहा हूं जो समाधान का हिस्सा है, बाहरी लिब नहीं। मैं आपके द्वारा सुझाए जा रहे विकल्प के बारे में जानता हूं। मैं जो हासिल करना चाहता हूं वह कुछ समाधान कॉन्फ़िगरेशन में निष्क्रिय प्रोजेक्ट निर्भरता को चिह्नित करना है। – k0dek0mmand0

0

अपने समाधान पर राइट क्लिक करें और गुण चुनें। समाधान संपत्ति पेज .. दिखाई देगा

सही पेज में चयन विन्यास गुण >>> विन्यास

यहाँ आप डीबग, रिलीज के लिए निर्माण विन्यास और चेक बॉक्स बिल्ड के रूप में लेबल की जाँच करके सभी का निर्माण प्रकार का चयन कर सकते हैं।

+0

यदि मैं सही ढंग से समझता हूं, तो यहां एक प्रोजेक्ट को अनचेक करने से इसे बनाए जाने से रोका जाएगा। लेकिन अगर इस अनचाहे परियोजना को परियोजना निर्भरता के रूप में चिह्नित किया गया है, तो लिंकर शिकायत करेगा (SomeTestLib.lib नहीं मिला।) – k0dek0mmand0

+0

यदि यह पहले से ही बनाया गया है और असेंबली एक ही निर्देशिका में मौजूद है। चूंकि आपने एक परियोजना का निर्माण अपनी सभी निर्भरताओं को बनाया है, तब जीएसी में स्थापित किए गए लोगों को उस असेंबली के निजी फ़ोल्डर में कॉपी किया गया है। हालांकि चूंकि यह अन्य असेंबली पर निर्भर है और उस असेंबली के स्रोत में परिवर्तन किया जाता है, यह पहले सभी निर्भरताओं का निर्माण करेगा। –

+0

ठीक है, लेकिन मैं रिलीज कॉन्फ़िगरेशन में कुछ टेस्टलिब भी बनाना नहीं चाहता, यह पूरा बिंदु है। :) – k0dek0mmand0

2

निर्भर परियोजना में लिंकर/सामान्य/लिंक लाइब्रेरी निर्भरता संपत्ति को बंद करना संभव है और लाइब्रेरी को प्रासंगिक कॉन्फ़िगरेशन में लिंकर इनपुट में डाल देना संभव है।

यह परियोजना संदर्भों को कम उपयोगी बनाता है, लेकिन यह काम करने योग्य है।

1

सेट परियोजना संपत्तियों में आवेदन/पुस्तकालय के बजाय उपयोगिता के लिए विन्यास प्रकार -> लिंकर - -> सामान्य ..

0

मुख्य परियोजना में, विन्यास गुण पर जाएं> इनपुट, में "अनदेखा विशिष्ट पुस्तकालय" शीर्षक वाला अनुभाग उस लिब को जोड़ें जिसे आप चाहते हैं, उदाहरण के लिए: .lib। एक अलग lib/dll को अनदेखा करने के अलावा, इसे अन्य कॉन्फ़िगरेशन के लिए फिर से करें।

अंत में, यदि आप दोनों प्रोजेक्ट बिल्डिंग दोनों कॉन्फ़िगरेशन के लिए नहीं चाहते हैं, तो समाधान -> प्रोजेक्ट निर्भरता -> [मुख्य/शीर्ष-स्तरीय प्रोजेक्ट का चयन करें] पर क्लिक करें -> उस प्रोजेक्ट को अनचेक करें जिसे आप नहीं चाहते हैं/अवहेलना करना।

इस विधि का लाभ यह है कि आप वांछित होने पर मैन्युअल रूप से प्रत्येक प्रोजेक्ट का निर्माण कर सकते हैं, लेकिन कॉन्फ़िगरेशन स्विच कर सकते हैं और केवल lib/dll का निर्माण/उपयोग कर सकते हैं।

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