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
Честно говоря, я не знаю, как я могу это исправить. У кого-нибудь есть идеи?
Заранее спасибо.