10

我一直在尝试让dotnet 新控制台示例项目(用于 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.

4

2 回答 2

15

文档指出以下内容:

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

我在这里找到了问题的解决方案。

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

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

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

launch.json 的位置

于 2018-02-10T14:55:16.063 回答
2

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

于 2018-02-10T19:12:44.187 回答