簡體   English   中英

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)

由於我從未編寫過控制台應用程序,我認為現在開始是一個好主意。 如果僅僅是因為我發現 Visual Studio 相當緩慢,並且能夠在 dotnetfiddle 等游樂場之一上快速測試代碼的想法似乎很有吸引力。 dotnetfiddle.net 上的默認編譯器在 .NET 4.7.2 上,但我注意到那個編譯器被我借用的最新代碼阻塞了。 所以我習慣了這樣一個事實,即我必須將編譯器切換到 .NET 5 以便能夠利用諸如 $ 之類的細節來格式化文本。

TL;博士

但是,我發現如果將編譯器更改為 .NET 5,則在https://dotnetfiddle.net/tAJulh的示例中找到的簡單ReadLine()不起作用。 .NET 5 中的 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 上的錯誤,您應該在此處報告: https://dotnetfiddle.uservoice.com/forums/228764--net-fiddle-ideas

據我所知,在他們糾正錯誤之前沒有辦法解決它。

正如其他一些人所說,我強烈建議您購買 IDE,這可能是視覺工作室代碼或普通視覺工作室

我個人喜歡 VS 代碼,因為它很簡單,它適用於 C# 和 .net

我可以確認 dotnetfiddle 和我們的 .NET 核心實現目前不支持Console.ReadLine 原因是我們使用沙箱,因為我們在執行用戶代碼時需要安全。 對於 .NET 5,我們使用的是 docker,而對於常規的 .NET 4.7.2\Roslyn,我們使用的是 AppDomains。 在 docker 案例中,我們只是編譯代碼並按原樣執行。 在 AppDomain 案例中,我們通過在用戶代碼之上注入自己的代碼來限制它。

而且由於這些方式不同,它們中的每一個都可能比其他方式有一些限制。 ReadLine 的問題是當用戶運行自己的代碼時,我們需要部分執行它,然后注入到控制台中。在Console.In中,如果從 stream 請求某些東西,那么我們停止執行並要求用戶提供輸入,然后在輸入后提供后,我們需要再次重新開始執行並使用該用戶在Console.In中的輸入並一遍又一遍地重復,直到代碼完全執行。 為 AppDomain 注入它要容易得多,因此它在 .NET 4.7.2 中工作正常,但在 docker 中更難做到,因為我們不在那里注入自己的代碼,所以這個功能現在缺失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM