OmniSharp - это плагин для IDE / текстовых редакторов, облегчающий разработку. Это обеспечивает автоматическое завершение и подсветку синтаксиса в реальном времени. Он не участвует, когда вы запускаете свое приложение.

дал консольное приложение, в котором есть меню, которое позволяет мне перемещаться между пунктами меню. Я управляю логикой навигации в этом методе:

public virtual void updateMenu()
{
    switch (Console.ReadKey(true).Key)
    {
        case ConsoleKey.UpArrow:
            {
                if (cursor > 0)
                {
                    cursor--;
                    Console.Clear();
                    drawWithHeader();
                }
            }
            break;
        case ConsoleKey.DownArrow:
            {
                if (cursor < (menuItemList.Count - 1))
                {
                    cursor++;
                    Console.Clear();
                    drawWithHeader();
                }
            }
            break;
        case ConsoleKey.Escape:
            {
                if (ParentMenu != null)
                {

                    hideMenu();
                }
            }
            break;
        case ConsoleKey.Enter:
            {
                Console.Clear();
                drawHeader();
                Console.CursorVisible = true;
                menuItemList[cursor].Action();
                Console.CursorVisible = false;
                Console.Clear();
                drawWithHeader();
            }
            break;
        default:
            {
                // Unsuported key. Do nothing....
            }
            break;
    }
}

здесь полный класс.

Теперь на Windows все работает хорошо, но когда я запускаю это приложение на моем Linux сsystemd Я получил:

Необработанное исключение: System.InvalidOperationException: Невозможно прочитать ключ, когда любое из приложений не имеет консоли или когда ввод с консоли был перенаправлен. Попробуйте Console.Read.

Отображение стека трассировки:

at System.ConsolePal.ReadKey(Boolean intercept)
at System.Console.ReadKey();
at AppRazen.Menu.ConsoleMenu.UpdateMenu();  

После некоторых поисков я обнаружил, что эта проблема связана сReadKey() метод не полностьюсовместим с Linux, И предложенное решениеВот просто не работает в моем случае, потому что пользователь использовалOminSharp.

Я также пытался установитьReadKey(false) но это не решило проблему, и я также попытался обработать все вещи внутриUpdateMenu с участиемConsole.Read() но консоль кажется застряла.

Обратите внимание, что эта проблема произойдет только тогда, когда я запускаю свой скрипт в linux supervisor, а не командой по умолчанию, напримерdotnet AppRazen.dll

По сути я бегу сценарий сsystemd сервис как это:

[Unit]
Description = Daemon description

[Service]
ExecStart = /usr/bin/dotnet /home/root/Desktop/publish/AppRazen.dll
WorkingDirectory= /home/root/Desktop/publish
Restart = always
RestartSec = 3

[Install]
WantedBy = multi-user.target

Честно говоря, я не знаю, как я могу это исправить. У кого-нибудь есть идеи?

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос