且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2021-11-06 16:43:15

我可以确认,dotnetfiddle和我们的.NET核心实现目前不支持Console.ReadLine。原因是我们使用沙箱,因为我们在执行用户代码时需要安全。对于.NET5,我们使用docker,而对于普通的.NET4.7.2Roslyn,我们使用AppDomain。在docker情况下,我们只是编译代码并按原样执行。在AppDomain案例中,我们通过在用户代码之上插入自己的代码来限制它。

由于这些方式不同,因此每种方式都可能有一些限制。ReadLine的问题是,当用户运行自己的代码时,我们需要部分执行它,然后注入到Console.In流中,如果从流中请求了什么,那么我们就停止执行并要求用户提供输入,然后在提供输入之后,我们需要再次重新启动执行,并使用Console.In中的用户输入,反复重复,直到代码完全执行。为AppDomain注入它要容易得多,所以它在.NET 4.7.2中工作得很好,但在docker中很难做到,因为我们没有在那里注入自己的代码,所以目前还缺少这个功能。