2009-07-09 14 views
9

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

हालांकि, जब मैं सीएससी का उपयोग कर मैन्युअल रूप से एक ही सी # कोड फ़ाइल संकलित करता हूं, तो मेरा प्रोग्राम उस संदेश को प्रदर्शित नहीं करता है और यह इसके तर्क को समाप्त करने के तुरंत बाद समाप्त हो जाता है।

क्या किसी को पता है कि वीएस का उपयोग किये बिना कोड को संकलित करते समय और सी # कोड को बदलने के बिना कोई रीडलाइन() जोड़ने के बिना मैं एक ही सुविधा कैसे बना सकता हूं?

अद्यतन: एक ही जब मैं सी # सीखा प्रकट करने के लिए प्रयोग किया जाता है संदेश, मैं सीएससी के साथ TextPad का उपयोग करते थे, और वह संदेश किसी भी लिखें (लाइन) को जोड़ने के बिना प्रकट करने के लिए प्रयोग किया जाता है/पढ़ें (लाइन) कॉलिंग्स

+0

यह [लिंक] (http://stackoverflow.com/q/4834914/944628) मेरे लिए Ctrl + F5 कुंजी के साथ काम करता है। मैं विजुअल स्टूडियो 2010 का उपयोग करता हूं। – leonardo

उत्तर

7

आप एक बैच स्क्रिप्ट लिख सकते हैं जो आपके लिए exe चलाता है और उपयोगकर्ता को एक कुंजी दबाएगा।

बैच स्क्रिप्ट कुछ इस तरह दिखेगा:

echo off 
YourApp.exe 
pause 
+0

द्वारा धन्यवाद, टेक्स्टपैड स्वचालित रूप से बैच फ़ाइलों को उत्पन्न करता है। –

+2

मैं इसके बजाए चाल्की के जवाब का सुझाव दूंगा। –

14

यह संभव नहीं है। कंसोल ऐप चलाने पर किसी भी कुंजी को दबाए जाने के लिए प्रॉम्प्ट विजुअल स्टूडियो द्वारा उत्पन्न होता है। यह आपके कार्यक्रम का हिस्सा नहीं है।

एक ही तरीका है अपने कोड में Console.Read() का उपयोग करना है

अद्यतन: TextPad का उपयोग करके अपनी टिप्पणी के विषय में: मैं TextPad से परिचित नहीं हूँ, लेकिन मैं अगर TextPad हैरान नहीं किया जाएगा एक कंसोल ऐप चलाते समय विजुअल स्टूडियो के समान काम किया।

+0

आप लाइन कंसोल जोड़ सकते हैं। पढ़ें() और वितरित करते समय इसे टिप्पणी करें। हालांकि मुझे पता है कि सबसे अच्छा तरीका लॉगिंग का उपयोग करना है और आपको निम्न स्तर जैसे जानकारी या ट्रेस या डीबग पर आवश्यक जानकारी लॉग करना है और शिपिंग करते समय इसे योग्य बनाना है :-) –

+0

कृपया ऊपर मेरा अपडेट देखें। –

+0

ठीक है, धन्यवाद। आपके अपडेट के बारे में, जैसा कि मैंने एंड्रयू के उत्तर पर मेरी टिप्पणी में उल्लेख किया है, टेक्स्टपैड बैच फ़ाइलों को स्वचालित रूप से पूरा करने के लिए उत्पन्न करता है। –

2

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

यदि आप चाहते हैं कि आपका एप्लिकेशन खुला रहे, तो आपको निष्पादन को अवरुद्ध करने के लिए कंसोल। रीडलाइन() जैसे कुछ करना होगा ताकि आपका एप्लिकेशन इसके निष्पादन को पूरा न कर सके।

22

यह संकलक के साथ कुछ नहीं है - अगर आप F5 प्रेस बजाय Ctrl-F5 यह डिबग करने के लिए डिबगिंग के बिना चलाने के लिए है, तो वी.एस. शीघ्र प्रदर्शित नहीं करता है। यह संभवतः ऐसा है कि आप जो उत्पादन आउटपुट कर रहे हैं उसे याद न करें।

"C:\WINDOWS\system32\cmd.exe" /c ""...\ConsoleApplication1.exe" & pause" 

यह शायद यह भी नहीं करता है जब आप डिबग के रूप में यह थोड़ा मुश्किल है प्राप्त करने के लिए:

ऐसा करने में, दृश्य स्टूडियो अपने निष्पादन योग्य चलाने के लिए और उसके बाद को रोकने के लिए यह कह cmd.exe चलाता है एक बच्चे की प्रक्रिया के बच्चे की प्रक्रिया आईडी।

अपने प्रोग्राम में एक समान विकल्प जोड़ने के लिए, या तो एप्लिकेशन को रोकने के लिए एक कमांड लाइन स्विच का उपयोग करें, या इसे चलाने के लिए बैच फ़ाइल का उपयोग करें, फिर रोकें, या उनके साथ शॉर्टकट का उपयोग करें cmd.exe /c

8

आप यह कर सकते हैं ...

static void Main(string[] args) 
{ 
#if DEBUG 
    Console.Read(); 
#endif 
} 

इस तरह से प्रोग्राम आपके द्वारा 'रिलीज' के रूप में अपना एप्लिकेशन बनाते समय कंसोल इनपुट की प्रतीक्षा नहीं करेगा।

+0

Naoooo, यह तब तक लटकाएगा जब तक किसी ने स्क्रिप्ट शुरू करने से पहले कुछ पाइप इनपुट जोड़ने का विचार नहीं किया। जैसे 'इको वाई | लचीलापन रखने के लिए script.exe', कार्यक्रम के बाहर विराम को रखना बेहतर है। –

1

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

जैसा ऊपर बताया गया है, प्रेस जारी रखने के लिए कोई भी कुंजी आईडीई की एक विशेषता है और आपके द्वारा लिखे गए कोड से संबंधित नहीं है। उस सुविधा का उद्देश्य आपको कंसोल एप्लिकेशन के आउटपुट को देखने की अनुमति देना है।

2

यदि आप डिबगिंग करते समय समान कार्यक्षमता चाहते हैं तो आप ऐसा कर सकते हैं।

if (Debugger.IsAttached) 
{ 
    Console.WriteLine("Press any key to continue . . ."); 
    Console.ReadKey(true); 
} 
+0

जो न तो c14n और न ही i11n का सम्मान नहीं करता है। –

+0

इस पर i11n करने का कोई तरीका नहीं है, क्योंकि विजुअल स्टूडियो द्वारा उपयोग किए जाने वाले संसाधन स्ट्रिंग्स आसानी से उपलब्ध नहीं हैं। मुझे सच में यकीन नहीं है कि सी 14 एन के साथ आपका क्या मतलब है, यह पूछे गए प्रश्न के लिए प्रासंगिक प्रतीत नहीं होता है। – Siewers

+0

यह canonicalized (c14n) नहीं है क्योंकि आप एक ऐसी सुविधा को पुन: पेश करते हैं जो पहले से मौजूद है (रोकें)। लेकिन मैंने डाउनवोट नहीं किया क्योंकि मैं भी इस तकनीक का उपयोग करता हूं। कभी-कभी हम सिर्फ बकवास की परवाह नहीं करना चाहते हैं। अगर यह पर्याप्त काम करता है। –

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

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