2009-11-23 4 views
46

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

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

उत्तर

54

ऐसा करने का एक तरीका है, लेकिन आपको अपनी प्रोजेक्ट फ़ाइलों को संपादित करना होगा। प्रोजेक्ट फ़ाइलों में Condition गुण हो सकते हैं, जिनमें से कई तत्वों में उनके लिए लागू किया गया है, जिनमें संदर्भों के लिए एक भी शामिल है।

आप अपने संदर्भ के लिए इन जोड़ सकते हैं निर्दिष्ट करने के लिए जब संदर्भ इस्तेमाल किया जाना चाहिए:

<Reference Include="Product, Version=1.0.0.0" Condition="'$(Configuration)'=='V1'"> 
</Reference> 
<Reference Include="Product, Version=2.0.0.0" Condition="'$(Configuration)'=='V2'"> 
</Reference> 
<Reference Include="Product, Version=3.0.0.0" Condition="'$(Configuration)'=='V3'"> 
</Reference> 

फिर आप कई निर्माण विन्यास (V1, V2, V3) को परिभाषित करने और प्रत्येक संदर्भ केवल प्रासंगिक में शामिल किया जाएगा चयनित निर्माण विन्यास।

इसे अपने कोड में सशर्त संकलन प्रतीकों और #if कथन के साथ संयोजित करें और आप जो भी चाहते हैं उसे करने में सक्षम होना चाहिए।

यदि आप ऐसा करते हैं तो सावधान रहना एक बात यह है कि विजुअल स्टूडियो प्रोजेक्ट फ़ाइल से सशर्त विशेषताओं को हटा देना आसान है।

+0

यह पूरी तरह से काम करता है, बहुत सारे कुडोस। यहां तक ​​कि विजुअल स्टूडियो अच्छी तरह से खेलता है जब तक कि मैं उन संदर्भों के साथ नहीं खेलता, जिनमें कार्यात्मक इंटेलिजेंस भी शामिल है! – snicker

+7

मैंने संदर्भ के डीबग/रिलीज संस्करणों के लिए विन्यास विशिष्ट संदर्भ बनाने के लिए एक समान दृष्टिकोण का उपयोग किया। जब मैंने संदर्भ जोड़ा, और फिर नोटपैड में रिलीज संस्करण की ओर इशारा किया, तो '$ (कॉन्फ़िगरेशन)' के साथ संकेत पथ में 'रिलीज'' को बदल दिया, और voila - संदर्भ सही लक्ष्य कॉन्फ़िगरेशन पर स्वचालित रूप से अपडेट हो जाता है! – awe

+3

@awe: MSBuild फ़ाइल में अधिकांश तत्वों पर 'शर्त' विशेषता डालना मान्य है। – adrianbanks

9
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\SharedLibs\log4net\$(Platform)\$(Configuration)\log4net.dll</HintPath> 
</Reference> 

आप गुणों के साथ संकेत पथ की जगह ले सकता:

$ (विन्यास)/डीबग या कोई अन्य विन्यास आपके पास रिलीज के बराबर है। $ (मंच) 86 के बराबर है/64/किसी भी सीपीयू

आपके विन्यास किसी भी सीपीयू तो आप भी हालत विकल्पों adrianbanks द्वारा संदर्भित का उल्लेख लगभग $ (विन्यास) एकल उद्धरण डाल करने के लिए

की आवश्यकता होगी शामिल है

+0

धन्यवाद यह मेरे लिए काम करता है, जबकि @adrianbanks 'समाधान बनाने की कोशिश करते समय संकुल को हल नहीं करेगा – HostMyBus

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

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