2013-05-28 11 views
6

से स्थानीय रूप से चल रहा है या नहीं, मेरे पास एक इंटरफ़ेस है, चलिए इसे ILocateLogFile पर कॉल करें, dev/beta/production सर्वर के लिए मानक कार्यान्वयन के साथ, और केवल स्थानीय विकास वातावरण में ही काम करता है। अगर मैं स्थानीय रूप से या सर्वर पर चल रहा हूं, तो मुझे निर्णय लेने के लिए एक अच्छा साफ तरीका नहीं लगता है (अधिमानतः संकलन समय पर, लेकिन रनटाइम ठीक होगा)। यह आईआईएस पर होस्ट किया गया एक डब्ल्यूसीएफ एप्लीकेशन है, यदि यह मायने रखता है।यह बताएं कि कोड स्टूडियो स्टूडियो/कैसिनी

सबसे अच्छा मैं एक संकलक प्रतीक का उपयोग करने के लिए है के साथ आ गया है, कुछ की तरह:

ILocateLogFile locateLogFile; 
#if DEBUG 
    locateLogFile = new DevSandboxLogFileLocator(); 
#else 
    locateLogFile = new LogFileLocator(); 
#endif 

समस्या है, संकलन प्रतीकों का निर्माण है, जो मैं नियंत्रण नहीं द्वारा तैयार हो जाओ, और मैं निश्चित होना चाहते हैं। विजुअल स्टूडियो की उपस्थिति की जांच करने के लिए कुछ स्वैच्छिक तरीका नहीं है? या कम से कम आईआईएस की बजाय कैसिनी की जांच करने के लिए?

+0

मैं इस एक अगर किसी और बयान में सर्वर नाम चर के लिए जाँच के द्वारा पहले हल देखा है प्रयोग किया जाता है। – RandomUs1r

+1

लॉगिंग कॉन्फ़िगर करने के लिए .config फ़ाइलों का उपयोग न करने का कोई कारण नहीं है? (संभवतः आपके पास प्रत्येक वातावरण के लिए अलग-अलग .config है, इसलिए लॉगिंग जोड़ने के लिए भी छोटा हो सकता है)। –

+0

@ RandomUs1r यह एक अच्छा सुझाव है, लेकिन मैं 'System.Web.HttpContext' का उपयोग नहीं कर सकता क्योंकि मेरी डब्ल्यूसीएफ सेवा एएसपी.Net संगतता का उपयोग नहीं कर रही है ... – McGarnagle

उत्तर

8

दो तरीके मैं इस 1 किया है आप इस प्रक्रिया के नाम

bool isRunningInIisExpress = Process.GetCurrentProcess() 
           .ProcessName.ToLower().Contains("iisexpress"); 

जाँच या एक कस्टम

<appSettings> 
    <add key="ApplicationEnvironment" value="LOCAL_DEV" /> 
</appSettings> 

स्थापित करने के साथ अपने कॉन्फ़िग फ़ाइल को अद्यतन आप प्रत्येक परिवेश के लिए विशेष रूप से अद्यतन यही कारण है कि और आप कर सकते हैं

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

+0

धन्यवाद, मुझे लगता है कि पहला विकल्प बिल्कुल वही है जो मैं ढूंढ रहा हूं - हालांकि, मेरा प्रक्रिया नाम "iisexpress" के बजाय "WebDev.WebServer40" प्रतीत होता है। – McGarnagle

+0

यदि आप विकास सर्वर में निर्माण का उपयोग कर रहे हैं तो यह समझ में आता है। आप आईआईएस एक्सप्रेस पर स्विच करने के बारे में सोचना चाह सकते हैं। मैंने इसे और अधिक मजबूत पाया है और वीएस 2012/2010 एसपी 1 में बनाया गया है। – jstromwick

-2

यहाँ कोड मैं

If Debugger.IsAttached Then 
' Since there is a debugger attached, 
' assume we are running from the IDE 
Else 
' Assume we aren't running from the IDE 
End If 
संबंधित मुद्दे