我一直试图让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和第1行放置断点3,我可以看到程序贯穿其中所有程序,但没有任何打印。那是我停止调试。然后打印
姓名:
程序'[16322] dotnet-console.dll'已退出,代码为0(0x0)。
这里发生了什么?我猜它是一个vscode的东西,因为它使用dotnet run
从终端运行时按预期工作。
答案 0 :(得分:7)
Documentation声明如下:
默认情况下,将使用其控制台输出启动进程 (stdout / stderr)转到VS Code Debugger Console。这很有用 对于从网络,文件等获取输入的可执行文件 但这对于想要从中读取的应用程序不起作用 console(例如:Console.ReadLine)。对于这些应用程序,请使用设置 如下
我找到了问题here的解决方案。
来自链接文档的以下引用还指出将控制台属性从launch.json更改为" externalTerminal "或" integratedTerminal "会有所帮助。
当此设置为 externalTerminal 时,目标进程将在a中运行 单独的终端。
当此项设置为 integratedTerminal 时,目标进程将运行 在VS Code的集成终端内部。点击终端'选项卡中 编辑器下方的选项卡组可与您的应用程序进行交互。
答案 1 :(得分:2)
正确 - 'internalConsole'不适用于想要获取控制台输入的程序。以下是官方文档:https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window