【问题标题】:Failing to read input from .net-core console application in vscode无法从 vscode 中的 .net-core 控制台应用程序读取输入
【发布时间】:2018-07-21 04:00:54
【问题描述】:

我一直在尝试让 dotnet new console 示例项目(用于 vscode)在 Ubuntu 17.10 中工作。

我可以让默认程序运行:

using System;

namespace dotnet_console
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world!");
        }
    }
}

但是当我也将其更改为读取输入时,它变得非常不稳定......

using System;

namespace dotnet_console
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Name: "); // 1
            var name = Console.ReadLine(); // 2
            Console.WriteLine("Hello {0}!", name); // 3
        }
    }
}

程序编译,但不会打印Name:。但是,如果我在第 1、2 和 3 行设置断点,我可以看到程序运行所有这些断点,但没有打印。直到我停止调试。然后打印出来

姓名:

程序“[16322] dotnet-console.dll”已退出,代码为 0 (0x0)。

这里发生了什么?我猜它是一个 vscode 的东西,因为它在使用 dotnet run 从终端运行时按预期工作。

【问题讨论】:

  • @TobiasTheel OP 提到了 Ubuntu 17.10,所以我不确定你为什么认为在 Windows 上进行测试是相关的
  • @TobiasTheel 它不是双重的,在这种情况下,WriteLine 可以开箱即用,但 Write & ReadLine 不能。然而,相同的解决方案在这两种情况下都有效。

标签: c# visual-studio-code .net-core ubuntu-17.10


【解决方案1】:

Documentation 声明如下:

默认情况下,进程通过其控制台输出启动 (stdout/stderr) 转到 VS Code 调试器控制台。这很有用 对于从网络、文件等获取输入的可执行文件。 但这不适用于想要从 控制台(例如:Console.ReadLine)。 对于这些应用程序,请使用设置 比如下面的

我找到了问题的解决方案here

来自链接文档的以下引用还指出将控制台属性从launch.json更改为“externalTerminal”或“integratedTerminal”来帮忙。

当设置为 externalTerminal 时,目标进程将在 单独的终端。

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

【讨论】:

    【解决方案2】:

    正确 - “internalConsole”不适用于需要控制台输入的程序。这里是官方文档:https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-09
      • 2017-03-03
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多