C#控制台应用程序ReadLine()可以在.NET 4.7.2中使用,而不能在.NET 5中使用(在dotnetfiddle上)

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上))
本文介绍了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上)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)