2009-01-27 15 views
18

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

#if DEMO 
    mycode.NeuterNow(); 
#endif 

हम MSBuild का उपयोग कर हमारे एप्लिकेशन का निर्माण कर रहे हैं, और मैं आदर्श रूप की तर्ज पर कुछ का उपयोग करेंगे:

MSBuild -DefineProperty:DEMO MySolution.sln 

क्या ऐसी कार्यक्षमता मौजूद है?

उत्तर

9

That's a duplicate of this one, और हाँ,/पी: DefineConstants ठीक काम करता है, और कॉन्फ़िगरेटर सही है, यह पहले से ही प्रोजेक्ट फ़ाइल (जो कि अच्छा IMHO है) में परिभाषित सभी सशर्त प्रतीकों को ओवरराइड करेगा, इसलिए आपको उन्हें सभी को परिभाषित करना होगा ।

+0

क्या ओवरराइड करने का कोई तरीका नहीं है? – Tsury

14

msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln 

प्रयास करें आप डीबग शामिल हैं या छोड़ दें और किसी अन्य स्थिरांक पहले से ही समाधान फ़ाइल में परिभाषित करने के लिए है, लेकिन मुझे लगता है कि यह काम करना चाहिए। अस्वीकरण: मैंने वास्तव में कभी कोशिश नहीं की है।

+0

/पी: DefineConstants = डेमो दूसरा ":" एक "=" – BrianH

+0

होना चाहिए धन्यवाद, मैंने जवाब तय किया। – configurator

3

इस समस्या के अपने स्वयं के समाधान का पीछा करते समय मैंने कुछ दिलचस्प पाया और मैंने सोचा कि मैं साझा करूंगा।

एमएसबिल्ड में/पी निर्देश उन गुणों तक सीमित नहीं है जो पहले से ही एक बिल्ड फ़ाइल में मौजूद हैं। आप इसे कुछ भी सेट करने के लिए उपयोग कर सकते हैं।

तो अगर, उदाहरण के लिए, आप अपने पूर्वप्रक्रमक निर्देशों $ (featureset) और फिर साथ नेतृत्व, के रूप में MSBuild फोन उदाहरण के लिए मैन्युअल रूप से पीटना और किसी भी अन्य पूर्वप्रक्रमक respecify बिना

MSBuild solution.sln /p:FeatureSet=DEMO 

तदनुसार #defined हो जाता है निर्देश जो आप चल रहे हैं।

मैंने यह काम VS2010 में सत्यापित किया है। MSBuild के बिना विजुअल स्टूडियो के अंदर किए गए निर्माण के लिए फ़ीचरसेट को परिभाषित करने के तरीके के बारे में बिल्कुल निश्चित नहीं है।

+1

क्या आप मुझे इसका पूरा उदाहरण दे सकते हैं? मैं इसे समझ नहीं सकता कि यह कैसे करें ... – ChrFin

+0

फिर, यह सिर्फ वीएस -2010 है। मुझे बाद के संस्करणों के बारे में पता नहीं है। प्रीप्रोसेसर निर्देश आपके प्रोजेक्ट गुणों में कॉन्फ़िगरेशन के तहत अर्धविराम से अलग सूची की सूची हैं - सी ++ - प्रीप्रोसेसर। मैन्युअल रूप से सूची में $ (वैरिएबल) जोड़ें, फिर जब आप कमांड लाइन से MSBuild को कॉल करते हैं तो आप सेट कर सकते हैं/p: Variable = FOO और #ifdef FOO जैसे चीजें इसका जवाब देंगे। – Glazius