Можно ли запустить приложение WPF, которое запускается как консольное приложение в Linux?

У меня есть тестовое приложение WPF, которое я изменил, чтобы оно теперь могло запускаться как консольное приложение, вот так. Как динамически быть консольным приложением или приложением Windows

Мое приложение создано так, что оно не использует какие-либо пакеты графического интерфейса WPF при запуске в качестве консоли. Я сделал это с помощью интерфейса, поэтому, когда я устанавливаю текстовое поле или пишу на консоль, это делается следующим образом.

  public interface IUserOutput
  {
     abstract void DisplayOutput(string msg);
  }

 class ConsoleOutput : IUserOutput
  {
    public void DisplayOutput(string msg)
    {
       Console.WriteLine(msg);
    }
  } 

 public class TextBoxOutput : IUserOutput
  {
    public void DisplayOutput(string msg)
    {
       if (TestWPF.App.Current != null)
       {  
         TestWPF.App.Current.Dispatcher.BeginInvoke(new Action(() =>
         {
             ((MainWindow)TestWPF.App.Current.MainWindow).TextBox.Text += msg + "\r\n";
         }));
     }
   }
 }

И в коде я либо инициализирую реализацию WPF, либо консоль.

Если я попытаюсь запустить его как консольное приложение в Linux, я получу сообщение об отсутствии «Microsoft.WindowsDesktop.App», версия 8.0.0 (x64).

Я знаю, что невозможно запустить WPF с графическим интерфейсом в Linux, но каким-то образом можно запустить приложение WPF, работающее как консольное приложение в Linux.

Я попытался загрузить пакет nuget для «Microsoft.WindowsDesktop.App» и поместить папку ref внутрь /usr/dotnet/shared/Microsoft.WindowsDesktop.App/8.0.6/ и /usr/dotnet/shared/Microsoft.WindowsDesktop. App/8.0.0/, но у меня выдает ту же ошибку, можно ли как-то заставить Linux думать, что он установлен, и все равно его запускать?

Или есть способ построить проект так, чтобы Linux не видел, что ему требуется «Microsoft.WindowsDesktop.App»?

Спасибо

Да, но это очень дорого :-)

andersmi 24.06.2024 11:46

Совсем нет, см. avaloniaui.net/FAQ

Clemens 24.06.2024 11:52

Это не WPF, вот цена WPF avaloniaui.net/xpf#pricing

andersmi 24.06.2024 11:57

Я говорю не о XPF, а просто об интерфейсе Avalonia. Вместо приложения WPF вы создадите приложение пользовательского интерфейса Avalonia.

Clemens 24.06.2024 11:59

Хорошо, нам потребуется преобразовать наше старое приложение WPF в это, это потребует некоторой работы, возможно, если бы мы могли запустить его как консоль, никаких действий не потребовалось бы, спасибо за предложение.

andersmi 24.06.2024 12:06

Альтернативой было бы переместить весь код WPF в библиотеку классов, которая загружается динамически только тогда, когда ваше приложение работает в Windows.

Clemens 24.06.2024 12:08

Или разверните свое приложение как автономное.

jtxkopt - Stand With Palestine 24.06.2024 12:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предполагая, что у вас есть веская причина для этого (например, об извлечении соответствующих частей программного обеспечения в .NET core+ в качестве консольного приложения не может быть и речи), вы можете запустить WPF в Linux, но с использованием Wine. Он также будет фактически эмулировать графический интерфейс Linux. См. эту статью: https://ccifra.github.io/PortingWPFAppsToLinux/Overview.html

Да, это работает, большое спасибо.

andersmi 24.06.2024 17:05

Другие вопросы по теме