2009-05-06 15 views
10

में कॉन्फ़िगरेशन बनाएं क्या कोई जानता है कि सी # कोड में वर्तमान बिल्ड कॉन्फ़िगरेशन $ (कॉन्फ़िगरेशन) कैसे प्राप्त करें?सी # कोड

उत्तर

15

आप वास्तव में नहीं कर सकते हैं। यदि आप प्रोजेक्ट सेटिंग्स के "बिल्ड" पेज को देखते हैं, तो आप कुछ "सशर्त संकलन प्रतीकों" को परिभाषित कर सकते हैं, आप इन्हें वहां सेट कर सकते हैं, ताकि आप उन्हें जांचने के लिए #if कथन लिख सकें।

डिबग बिल्ड के लिए एक डीईबीयूजी प्रतीक स्वचालित रूप से इंजेक्शन दिया जाता है (डिफ़ॉल्ट रूप से, इसे बंद किया जा सकता है)।

तो आप इस

#if DEBUG 
     RunMyDEBUGRoutine(); 
#else 
     RunMyRELEASERoutine(); 
#endif 

हालांकि तरह कोड लिख सकते हैं, ऐसा नहीं करते हैं जब तक आप अच्छा कारण है। डीबग और रिलीज बिल्ड के बीच अलग-अलग व्यवहार के साथ काम करने वाला एक एप्लिकेशन किसी के लिए अच्छा नहीं है।

+1

यह मदद मिल सकती है जब विंडोज सेवा (कोई स्थापित करने के लिए आसान डिबगिंग जरूरत /) – Scoregraphic

+0

@Scoregraphic विकासशील –

+0

क्यों सशर्त अभिव्यक्ति अपने कस्टम विन्यास नहीं मिल रहा है? मैं इस तरह कोड है: WCFDebug #if/* मेरी कोड */#endif - लेकिन यह बस यह नहीं मिल रहा है। मैंने सेटिंग्स के अंदर कॉन्फ़िगरेशन जोड़ा है। – FrenkyB

0

मैं नहीं मानता कि आप संकलन समय पर कि इंजेक्षन कर सकते हैं विधानसभा में लेकिन एक ही रास्ता है कि आप इसे प्राप्त कर सकते थे MSBuild का उपयोग करें और आवेदन की कॉन्फ़िग फ़ाइल में जोड़ने के लिए किया जाएगा।

कैसे MSBuild का उपयोग कर बहु ​​पर्यावरण config फ़ाइलें करने के बारे में इस ब्लॉग पोस्ट देखें - http://adeneys.wordpress.com/2009/04/17/multi-environment-config/

वैकल्पिक रूप से आप एक MSBuild कार्य जो एक निश्चित संकलित फ़ाइल (अपने C# या VB फाइल) संपादित करेंगे लिख सकता है और उस चलाने BeforeBuild कार्य में। यह बदतर हो जाएगा क्योंकि आपको फाइल में इंजेक्ट करने के लिए कहां काम करना होगा, लेकिन बशर्ते आपको किसी प्रकार का टोकननाइजेशन सेट अप किया जाए, तो आप इसे करने में सक्षम होना चाहिए। मुझे यह भी संदेह है कि यह सुंदर होगा!

13

यदि आप अपनी परियोजना (दायाँ क्लिक मेनू में) को अनलोड करते हैं और </Project> टैग से पहले इसे जोड़ते हैं तो यह उस फ़ाइल को सहेज लेगा जिसमें आपकी कॉन्फ़िगरेशन है। फिर आप अपने कोड में उपयोग के लिए इसे वापस पढ़ सकते हैं।

<Target Name="BeforeBuild"> 
    <WriteLinesToFile File="$(OutputPath)\env.config" 
         Lines="$(Configuration)" Overwrite="true"> 
    </WriteLinesToFile> 
</Target> 
+0

मैंने वैक्सीनो के समाधान का उपयोग किया है। मुझे प्रत्येक बिल्ड कॉन्फ़िगरेशन पर कुछ कॉन्फ़िगरेशन बेसिंग गतिशील रूप से बदलना है, न केवल डीबग या रिलीज़ करना, और यह समाधान मेरे लिए बहुत अच्छा काम करता है। धन्यवाद। – MsBugKiller

5

सशर्त संकलन प्रतीक इसका उपयोग करने के लिए उपयोग किए जा सकते हैं। आप प्रॉपर्टी> कस्टम प्रोजेक्ट को प्रत्येक प्रोजेक्ट के लिए सेटिंग फलक बना सकते हैं, और कोड में उनका परीक्षण करने के लिए #if निर्देशों का उपयोग कर सकते हैं।

दिखा कैसे प्रतीक UNOEURO और कैसे कोड में इसका इस्तेमाल करने को परिभाषित उदाहरण। काफी अलग व्यवहार (बनाम कमांड लाइन अनुप्रयोग सेवा) के साथ हालांकि !!!:

UNOEURO symbol defined here

bool isUnoeuro = false; 
#if UNOEURO 
    isUnoeuro = true; 
#endif