2012-09-25 24 views
16

मेरे पास एक एएसपी.Net एप्लिकेशन है जो Global.asax में Application_Start के दौरान कुछ डेटाबेस प्रारंभिकता करता है। मैं एप्लिकेशन को डीबग करने के लिए आईआईएस एक्सप्रेस का उपयोग कर रहा हूं।क्या विजुअल स्टूडियो नए डीबगिंग सत्र पर आईआईएस एक्सप्रेस को पुनरारंभ कर सकता है?

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

क्या इस व्यवहार को बदलने का कोई तरीका है कि एक नया डिबगिंग सत्र हमेशा आईआईएस एक्सप्रेस में एप्लिकेशन प्रक्रिया को पुनरारंभ करता है (या नियमित आईआईएस में एप्लिकेशन पूल को रीसेट करता है)?

वैकल्पिक रूप से, क्या डीबगिंग सत्र समाप्त होने पर आईआईएस एक्सप्रेस को बंद करने के लिए मजबूर करने का कोई तरीका है?

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

यह सुनिश्चित नहीं है कि यह महत्वपूर्ण है, लेकिन यह वीएस2012 है।

उत्तर

19

दुर्भाग्य से यह कॉन्फ़िगरेशन के माध्यम से प्राप्त नहीं किया जा सकता है। मैं आपको एक और चाल का प्रस्ताव दे सकता हूं, लेकिन यह तय करने के लिए आप पर निर्भर है कि यह आपके से बेहतर है या नहीं :)

आप एक पोस्ट-बिल्ड ईवेंट बना सकते हैं जो web.config फ़ाइल का टाइमस्टैम्प बदलता है। मैंने http://www.stevemiller.net/apps/ से touch.exe टूल का उपयोग किया। आपको हमेशा "पोस्ट-बिल्ड इवेंट चलाएं" को हमेशा सेट करने की आवश्यकता है। तो अपने "घटनाक्रम बनाएँ" विन्यास के रूप में देख सकते हैं इस प्रकार है:

enter image description here

इस विकल्प को किसी भी समय सेट आप डिबगर शुरू के साथ, web.config टाइमस्टैम्प पहले अनुरोध पर आवेदन पुनः आरंभ (आवेदन appdomain पुनः लोड) के कारण अद्यतन किया जा रहा है - लेकिन इस बिंदु पर आप पहले से ही इस प्रक्रिया से जुड़े हुए हैं, इसलिए आपके Application_ ईवेंट ब्रेकपॉइंट्स को काम करना चाहिए।

+0

इस खूबसूरती से काम करता है। धन्यवाद! –

+0

+1, लाइफसेवर चाल! – smirkingman

6

आप एक Powershell एक लाइनर का उपयोग एक बाहरी अनुप्रयोग पर निर्भर रहने से बच सकते हैं:

powershell -NoProfile -Command (Get-Item "<path>\Web.config").lastwritetime=(Get-Date)

मूल प्रेरणा here से आता है ...

+0

आप बस [मैक्रो] (https://msdn.microsoft.com/en-us/library/42x5kfw4.aspx?f=255&MSPPError=-2147217396) '$ (ProjectDir) 'का उपयोग कर सकते हैं, फिर भी इसे भी नहीं करना है मैन्युअल रूप से '' – gregmac

+0

के लिए मान सेट करें, यदि यह आपकी आवश्यकताओं के अनुरूप है। लेकिन मेरे मामले में, मुझे एक बाहरी ऐप को पुनरारंभ करना होगा, इसलिए यह '% ENV_VARIABLE% \ Web.config' जैसा है – dstj