2011-01-25 12 views
6

मैं एक जटिल समाधान है, जिसमें टेस्ट प्रोजेक्ट्स से अलग 10 परियोजनाएं शामिल हैं। यह वितरित अनुप्रयोगों का एक नेटवर्क है & सेवाएं जो रिमोटिंग का उपयोग करके संवाद करती हैं; इसलिए उचित संदर्भित असेंबली (& संस्करण) होने के लिए महत्वपूर्ण है। यही कारण है कि मैं पूरी चीज को संकलित करना चाहता हूं और एक निर्माण में स्किंक-लपेटा चाहता हूं।पूरे समाधान का निर्माण करें, लेकिन केवल एक परियोजना के लिए वैश्विक सशर्त संकलन प्रतीक जोड़ें

अनुप्रयोगों में से एक एक डेमो/विश्लेषण-उपकरण है जो दूसरे के उपप्रोसेसर को चलाता है - बहुत बड़ा - उपयोगकर्ता के इनपुट के आधार पर एप्लिकेशन और परिणाम प्रदर्शित करता है; इस तरह इंजीनियरों के पास "बड़ी गणना" के लिए अपनी सेटिंग्स को ट्विक करने में मदद करने के लिए एक उपकरण होता है। जाहिर है कि उपप्रक्रिया एक और विधानसभा में निहित है, और इंजीनियरों के लिए प्रस्तुत ते परिणाम का एक बड़ा हिस्सा द्वारा

#if ENABLE_TRACE_MATCHING 
Trace.WriteLine("Some engineering output"); 
#endif 

मेरे समस्या उत्पन्न होता है कि इस परियोजना सेटिंग्स में सशर्त संकलन प्रतीक है कि परियोजना के विधानसभा तक सीमित हैं, और क्या है संदर्भित असेंबली पर प्रचार नहीं करते हैं। मैं कैसे इस तरह से कि सभी परियोजनाओं के बिना ENABLE_TRACE_MATCHING परिभाषित किया जा रहा का निर्माण किया जाएगा में अपने निर्माण कॉन्फ़िगर कर सकते हैं, एक डिबग/विश्लेषण एप्लिकेशन के अंतर्गत परियोजना जहां सभी संदर्भित परियोजनाओं/विधानसभाओं ENABLE_TRACE_MATCHING साथ संकलित किया जाना चाहिए किया जा रहा परिभाषित

के अलावा

मैं #if DEBUG द्वारा #if ENABLE_TRACE_MATCHING को भी प्रतिस्थापित नहीं कर सकता, क्योंकि इससे हमारे इंजीनियरों को संभालने के बारे में पता नहीं चलेगा।

अग्रिम धन्यवाद।

पीएस: अगर आपको लगता है कि मेरा कोड गंध करता है, तो मैं सहमत हूं। इसके अतिरिक्त: यह ज्यादातर मेरा कोड नहीं है;)

+0

मैं उल्लेख करना भूल गया – user588939

उत्तर

1

आपको माइक्रोसॉफ्ट बिल्ड के बारे में अधिक जानने की जरूरत है, जो कि किसी भी ढांचे के इंस्टॉलेशन में मौजूद माइक्रोसॉफ्ट .NET उपकरण के बाहर है।

एमएसबिल्ड का उपयोग करके आप इन "प्रतीकों" (गुण) और आदेशों (बैच) के एक बैच को परिभाषित कर सकते हैं।

यह है कि आप एक एमएसबिल्ड स्क्रिप्ट बना सकते हैं जो आपके समाधान में सभी परियोजनाओं से डिफ़ॉल्ट विजुअल स्टूडियो लक्ष्य आयात करता है, और इन गुणों ("प्रतीक") स्क्रिप्ट में घोषित करता है।

वास्तव में, इस तरह के प्रतीक सेट करने की संपत्ति पहले से मौजूद है: "DefineConstants"।

इसलिए, चूंकि आपके पास यह है, तो आप उस एमएसबील्ड स्क्रिप्ट को प्राप्त कर सकते हैं जो उस संपत्ति मूल्य को प्रदान करता है, इसे फिर से घोषित करता है, इसलिए, सभी एमएसबिल्ड लक्ष्य इन प्रतीकों के बारे में जानेंगे।

संपादित करें: चेक इस दूसरे सवाल भी: यह सब सी # और .NET 3.5 है: msbuild, defining Conditional Compilation Symbols

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