C# console application ReadLine() works in .NET 4.7.2 and not in .NET 5 (on dotnetfiddle)(C#控制台应用程序ReadLine()可以在.NET 4.7.2中使用,而不能在.NET 5中使用(在dotnetfiddle上))
问题描述
因为我从未编写过控制台应用程序,所以我认为现在开始是个好主意。如果仅仅是因为我发现Visual Studio相当迟缓,并且能够在某个游乐场(如dotnetfiddle)上快速测试代码的想法似乎很有吸引力。net上的默认编译器是.NET4.7.2,但我注意到那个编译器被我借用的较新代码卡住了。因此,我习惯了这样一个事实,即我必须将编译器切换到.NET5,以便能够利用诸如$这样的细微之处来格式化文本。
TL;DR
但是,我发现在https://dotnetfiddle.net/tAJulh上的示例中找到的简单ReadLine()如果您将编译器更改为.NET5,ReadLine()就不起作用了。.NET5中的ReadLine规范有什么变化吗,还是这是dotnetfiddle的限制?有什么办法可以绕过这个问题吗?
using System;
public class Program
{
public static void Main()
{
// Simply writes the following text to the standard output
Console.WriteLine("Input some text!");
// Reads text until you hit "enter"; and saves it to the "input"-variable
var input = Console.ReadLine();
// Writes the "input"-variable to the console.
Console.WriteLine("Your input was: " + input);
// The program will not exit until you hit "Enter".
Console.ReadLine();
}
}
推荐答案
我可以确认,dotnetfiddle和我们的.NET核心实现目前不支持Console.ReadLine。原因是我们使用沙箱,因为我们在执行用户代码时需要安全。对于.NET5,我们使用docker,而对于普通的.NET4.7.2Roslyn,我们使用AppDomain。在docker情况下,我们只是编译代码并按原样执行。在AppDomain案例中,我们通过在用户代码之上插入自己的代码来限制它。
由于这些方式不同,因此每种方式都可能有一些限制。ReadLine的问题是,当用户运行自己的代码时,我们需要部分执行它,然后注入到Console.In流中,如果从流中请求了什么,那么我们就停止执行并要求用户提供输入,然后在提供输入之后,我们需要再次重新启动执行,并使用Console.In中的用户输入,反复重复,直到代码完全执行。为AppDomain注入它要容易得多,所以它在.NET 4.7.2中工作得很好,但在docker中很难做到,因为我们没有在那里注入自己的代码,所以目前还缺少这个功能。
这篇关于C#控制台应用程序ReadLine()可以在.NET 4.7.2中使用,而不能在.NET 5中使用(在dotnetfiddle上)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C#控制台应用程序ReadLine()可以在.NET 4.7.2中使用,而不能在.NET 5中使用(在dotnetfiddle上)
基础教程推荐
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
