Портирование C# Windows GUI на веб-приложение C#: как заставить его работать "из коробки" для Win, Mac и Linux?

Я хотел бы переписать приложение, которое в настоящее время работает как Windows GUI в C#. Проблема в том, что он хорошо работает в Windows, но не адаптирован для Mac и Linux из-за проблем с графическим интерфейсом в Mono.

Поэтому моя идея заключалась в том, чтобы продолжить работу с C# (необходимо из-за существенной подпрограммы, которая должна запускать C# и не может быть портирована) и попытаться переписать ее как веб-приложение, к которому любой пользователь в Windows, Mac или Linux мог легко получить доступ и сделать это работает.

Также важно, чтобы мое приложение продолжало работать "из коробки", потому что оно нацелено на высокую доступность.

Я искал решения, такие как:

  • KayakHTTP, но он не поддерживает данные POST! (необходим для веб-интерфейса)
  • XSP2 от Mono и сделайте веб-приложение ASP.NET MVC, но будет ли оно действительно работать с моим веб-приложением для создания готового приложения?

В качестве альтернативы, есть ли у меня какая-то другая идея, чтобы веб-приложение C# работало из коробки для конечных пользователей? Единственное, что нужно, это установить Mono на Mac и Linux.

Большое спасибо за Вашу помощь.

РЕДАКТИРОВАТЬ 1: Я понимаю, что я не объяснил все аспекты правильно. На самом деле в моем проекте есть 2 приложения:

  • Приложение CORE, написанное на C# и слишком большое для переноса или перезаписи, и поэтому должно использовать Mono для работы на Mac и Linux
  • Мое приложение с графическим интерфейсом, использующее Windows Forms, тоже написанное на C# и контролирующее приложение CORE

Моя цель - преобразовать мое приложение с графическим интерфейсом в приложение веб-приложения, чтобы больше не было проблем с графическим интерфейсом Windows Forms на Mac и Linux.

2 ответа

Решение

Необходимо ли запускать ваше основное приложение на клиенте?

Если НЕТ, то лучше всего переписать все как веб-приложение (ASP.NET), которое будет работать на сервере Windows. Пользователи всех ваших целевых платформ получат доступ к этому приложению через веб-браузер.

Если ДА, тогда веб-приложение не очень хорошая идея. Вы действительно не хотите требовать веб-сервера на своих клиентах. У вас есть две возможности:

  • Посмотрите на наборы инструментов GUI, доступные для моно, и выберите один, который доступен на всех ваших целевых платформах, чтобы избежать использования различных интерфейсов для каждой из ваших платформ.
  • Чтобы обеспечить наилучшее взаимодействие с пользователем на всех платформах, вы должны выбрать собственный инструментарий GUI для каждой из платформ и написать для них разные внешние интерфейсы: либо с помощью Mono, либо с помощью собственной среды разработки, если ваше основное приложение имеет интерфейс, который может быть доступ к нему (например, из командной строки или аналогичный).

Это дублирующий вопрос, но у меня нет времени, чтобы найти дубликат.

Вкратце, ответ таков: не делайте этого. Вы не можете перевести настольное приложение в веб-приложение один на один: две парадигмы слишком разные.

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

Помните о большой скрытой разнице между двумя платформами: веб-приложение будет работать на сервере. Он будет использоваться несколькими пользователями одновременно и несколькими потоками одновременно. Во время рефакторинга обязательно запишите любой код, чувствительный к разнице. Например, код, который использует static поля-члены теперь могут работать в настольном приложении, потому что одновременно может быть только один пользователь. В веб-приложении это static будут доступны всем пользователям и всем темам.

Это может быть не то, что вы имели в виду.

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