簡體   English   中英

VS編譯控制台應用程序如何顯示“按任意鍵繼續”?

[英]How does VS compile console applications to show “Press any key to continue”?

當我開發一個C#控制台應用程序(它將在服務器上運行)並使用Visual Studio運行它時,我會在程序終止之前收到“按任意鍵繼續”消息。

但是,當我使用CSC手動編譯完全相同的C#代碼文件時,我的程序沒有顯示該消息,並在完成其邏輯后立即終止。

有沒有人知道如何在不使用VS編譯代碼的情況下創建相同的功能,並且在沒有更改C#代碼的情況下添加ReadLine()?

更新:我學習C#時出現的相同消息,我曾經使用帶有CSC的TextPad,並且該消息過去沒有添加任何Write(Line)/ Read(Line)調用

它與編譯器無關 - 如果按F5調試它而不是Ctrl-F5而不調試運行,則VS不會顯示提示。 這可能是因為你不會錯過它產生的任何輸出。

為此,Visual Studio運行cmd.exe,告訴它運行可執行文件,然后暫停:

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

調試時可能不會這樣做,因為獲取子進程子進程的進程ID有點困難。

要為程序添加類似選項,請使用命令行開關告訴應用程序本身暫停,或使用批處理文件運行它然后暫停,或使用帶有cmd.exe /c的快捷方式。

那是不可能的。 運行控制台應用程序時,Visual Studio會生成按任意鍵的提示。 這不是你的計划的一部分。

唯一的方法是在代碼中使用Console.Read()

更新 :關於你使用TextPad的說法:我不熟悉TextPad,但是如果TextPad在運行控制台應用程序時與Visual Studio做同樣的事情,我也不會感到驚訝。

你可以這樣做......

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

這樣,當您將應用程序構建為“發布”時,程序將不會等待控制台輸入。

您可以編寫一個為您運行exe的批處理腳本,並提示用戶按一個鍵。

批處理腳本看起來像這樣:

echo off
YourApp.exe
pause

如果您在調試時需要相同的功能,則可以執行此操作。

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

此行為與您使用的編譯器無關。 使用Visual Studio進行編譯時,在Visual Studio外部運行可執行文件實際上將與在命令行上使用CSC編譯時執行的操作完全相同。 Visual Studio(和TextPad)正在添加邏輯以在控制台上添加“按任意鍵以繼續”消息。

如果您希望應用程序保持打開狀態,則需要執行類似Console.ReadLine()的操作來阻止執行,以便應用程序無法完成其執行。

問題是為什么你想要這種行為? 按任意鍵繼續功能,以便您可以看到應用程序的輸出。 另一方面,如果您構建代碼並從命令提示符(控制台)運行它,則在應用程序完成時不會關閉,因此您可以看到輸出。

如上所述,按任意鍵繼續是IDE的一項功能,與您正在編寫的代碼無關。 該功能的目的是允許您查看控制台應用程序的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM