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

StackOverflow https://stackoverflow.com//questions/9648555

  •  10-12-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Возможно, это не то, что вы имели в виду.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top