ReadKey无法在.net核心中运行

Gue*_*lla 7 c# .net-core

我正在尝试使用ReadKey()来获取密码字段,因此它不会在控制台中显示我在Ubuntu上运行的.net核心应用程序.

这是代码:

        while (true)

        {

            var key = System.Console.ReadKey(true);

            if (key.Key == ConsoleKey.Enter)

                break;

            Io.RootPass += key.KeyChar;

        } 
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个例外:

发生异常:CLR/System.InvalidOperationException System.Console.dll中发生未处理的类型"System.InvalidOperationException"异常:'当应用程序没有控制台或重定向控制台输入时,无法读取密钥.试试Console.Read.'

ReadLine()工作正常.为什么ReadKey()不起作用?

编辑:

实际上Console.ReadLine()不起作用,它只是不抛出异常.输入命中时不会分配返回值,因此程序会坚持下去.

我猜这是因为linux终端的工作方式不同.Linux终端有不同的界面吗?

Gue*_*lla 14

在OmniSharp Visual Code文档中找到我的答案:https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window

控制台(终端)窗口

默认情况下,将启动进程,并将其控制台输出(stdout/stderr)发送到VS Code Debugger Console.这对于从网络,文件等中获取输入的可执行文件非常有用.但这对于想要从控制台读取的应用程序(例如:Console.ReadLine)不起作用.对于这些应用程序,请使用如下设置:

"console":"integratedTerminal"当设置为integratedTerminal时,目标进程将在VS Code的集成终端内运行.单击编辑器下方选项卡组中的"终端"选项卡,以与您的应用程序进行交互.

当此设置为externalTerminal时,目标进程将在单独的终端中运行.

我在launch.json中更改了此设置,现在它可以工作了

  • 我没有launch.json文件,它在哪里? (3认同)