Portando C# Windows GUI para aplicativo web C#:como fazê-lo funcionar imediatamente para Win, Mac e Linux?

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

  •  10-12-2019
  •  | 
  •  

Pergunta

Gostaria de reescrever um aplicativo que atualmente funciona como uma GUI do Windows em C#.O problema é que ele funciona bem no Windows, mas não está adaptado para Mac e Linux devido a problemas de GUI com o Mono.

Então minha ideia era continuar com C# (necessário por causa de um subprograma essencial que precisa rodar C# e não pode ser portado) e tentar reescrevê-lo como uma aplicação web que qualquer usuário de Windows, Mac ou Linux possa acessar facilmente e fazer funciona.

Também é importante que meu aplicativo continue funcionando "pronto para uso", pois visa alta acessibilidade.

Procurei soluções como:

  • CaiaqueHTTP mas não suporta dados POST!(necessário para uma GUI da web)
  • XSP2 do Mono e criar um aplicativo da web ASP.NET MVC, mas será que ele realmente funcionará com meu aplicativo da web para criar um aplicativo pronto para uso?

Como alternativa, você tem alguma outra ideia para eu ter um aplicativo da web C # funcionando imediatamente para os usuários finais?A única coisa necessária seria instalar o Mono no Mac e Linux.

Muito obrigado pela sua ajuda.

EDITAR 1 :Percebo que não expliquei todos os aspectos corretamente.Na verdade, existem 2 aplicações no meu projeto:

  • O aplicativo CORE que é escrito em C# e é muito grande para ser portado ou reescrito e, portanto, deve usar Mono para rodar em Mac e Linux
  • Meu aplicativo GUI usando Windows Forms, que também é escrito em C# e controla o aplicativo CORE

Meu objetivo é converter meu aplicativo GUI em um aplicativo da web para que não haja mais problemas com a GUI do Windows Forms no Mac e no Linux.

Foi útil?

Solução

É necessário que seu aplicativo principal seja executado no cliente?

Se não, a melhor abordagem é reescrever tudo como um aplicativo Web (ASP.NET), que será executado em um servidor Windows. Usuários em todas as suas plataformas de destino, então, acessarão este aplicativo através de um navegador da Web.

Se sim, então um aplicativo da Web não é uma boa ideia. Você realmente não quer exigir um servidor da Web em seus clientes. Você tem duas possibilidades:

  • dê uma olhada no kits de ferramentas GUI disponíveis para mono e selecione um que esteja disponível em todos os Suas plataformas de destino para evitar ter pontas frontais diferentes para cada uma das suas plataformas.
  • Para garantir a melhor experiência do usuário em todas as plataformas, você deve escolher o kit de ferramentas da GUI nativa para cada uma das plataformas e escrever uma extremidade dianteira diferente para eles: usando mono ou usando um ambiente de desenvolvimento nativo, desde que seu aplicativo principal tenha uma interface que pode ser acessado a partir dele (por exemplo, linha de comando ou similar).

Outras dicas

Esta é uma pergunta duplicada, mas não tenho tempo para encontrá-la.

Resumidamente, a resposta é:não faça isso.Você não pode traduzir um aplicativo de desktop para um aplicativo da web individualmente:os dois paradigmas são muito diferentes.

Em vez disso, recomendo refatorar seu aplicativo atual para remover todas as dependências da GUI.Em seguida, escreva um aplicativo Web totalmente novo para atender aos requisitos e faça com que o aplicativo Web chame o código que você refatorou do aplicativo de desktop.

Esteja ciente da grande e oculta diferença entre as duas plataformas:o aplicativo da web estará sendo executado em um servidor.Ele será usado por vários usuários ao mesmo tempo e por vários threads ao mesmo tempo.Enquanto você estiver refatorando, certifique-se de anotar qualquer código que seja sensível à diferença.Por exemplo, código que usa static os campos de membro agora podem funcionar no aplicativo de desktop porque há apenas um usuário por vez.Em uma aplicação web, isso static será compartilhado entre todos os usuários e todos os threads.

Isso pode não ser o que você tinha em mente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top