C# Windows GUI를 C# 웹앱으로 포팅:Win, Mac 및 Linux에서 즉시 작동하도록 하는 방법은 무엇입니까?

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

  •  10-12-2019
  •  | 
  •  

문제

현재 Windows GUI로 작동하는 응용 프로그램을 C#에서 다시 작성하고 싶습니다.문제는 Windows에서는 잘 작동하지만 Mono의 GUI 문제로 인해 Mac 및 Linux에는 적용되지 않는다는 것입니다.

그래서 내 생각은 C#(C#을 실행해야 하고 포팅할 수 없는 필수 하위 프로그램 때문에 필요함)을 계속해서 Windows, Mac 또는 Linux의 모든 사용자가 쉽게 액세스하고 만들 수 있는 웹 애플리케이션으로 다시 작성하는 것이었습니다. 작동합니다.

내 응용 프로그램은 높은 접근성을 목표로 하기 때문에 "기본적으로" 계속 작동하는 것도 중요합니다.

나는 다음과 같은 솔루션을 찾았습니다.

  • 카약HTTP 하지만 POST 데이터를 지원하지 않습니다!(웹 GUI에 필요)
  • Mono에서 XSP2를 사용하여 ASP.NET MVC 웹 앱을 만들지만, 내 웹 앱에서 실제로 작동하여 즉시 사용 가능한 애플리케이션을 만들 수 있습니까?

또는 최종 사용자를 위해 즉시 사용할 수 있는 C# 웹 앱을 제공하는 다른 아이디어가 있습니까?필요한 유일한 것은 Mac과 Linux에 Mono를 설치하는 것입니다.

당신의 도움을 주셔서 대단히 감사합니다.

편집 1 :나는 모든 측면을 정확하게 설명하지 못했다는 것을 깨달았습니다.실제로 내 프로젝트에는 2개의 애플리케이션이 있습니다.

  • C#으로 작성되었으며 너무 커서 이식하거나 다시 작성할 수 없으므로 Mac 및 Linux에서 실행하려면 Mono를 사용해야 하는 CORE 애플리케이션
  • C#으로도 작성되고 CORE 애플리케이션을 제어하는 ​​Windows Forms를 사용하는 GUI 애플리케이션

내 목표는 GUI 애플리케이션을 웹 앱 애플리케이션으로 변환하여 더 이상 Mac 및 Linux에서 Windows Forms GUI의 번거로움을 없애는 것입니다.

도움이 되었습니까?

해결책

핵심 애플리케이션이 클라이언트에서 실행되어야 합니까?

그렇지 않은 경우 가장 좋은 방법은 Windows 서버에서 실행될 웹(ASP.NET) 응용 프로그램으로 모든 것을 다시 작성하는 것입니다.그러면 모든 대상 플랫폼의 사용자가 웹 브라우저를 통해 이 앱에 액세스하게 됩니다.

그렇다면 웹 앱은 좋은 생각이 아닙니다.클라이언트에 웹 서버를 요구하고 싶지는 않습니다.두 가지 가능성이 있습니다.

  • 다음을 살펴보세요. GUI 툴킷 모노에 사용할 수 있으며 각 플랫폼마다 다른 프런트 엔드가 발생하지 않도록 모든 대상 플랫폼에서 사용할 수 있는 것을 선택하세요.
  • 모든 플랫폼에서 최상의 사용자 경험을 보장하려면 각 플랫폼에 대한 기본 GUI 툴킷을 선택하고 이에 대해 다른 프런트 엔드를 작성해야 합니다.핵심 애플리케이션에 액세스할 수 있는 인터페이스가 있는 한 Mono를 사용하거나 기본 개발 환경을 사용합니다(예:명령줄 또는 유사).

다른 팁

중복된 질문인데 중복된 질문을 찾을 시간이 없습니다.

간단히 말해서 대답은 다음과 같습니다.이러지 마세요.데스크톱 애플리케이션을 웹 애플리케이션으로 일대일로 번역할 수는 없습니다.두 패러다임은 너무 다릅니다.

대신 현재 애플리케이션을 리팩토링하여 GUI에 대한 모든 종속성을 제거하는 것이 좋습니다.그런 다음 요구 사항을 충족하도록 완전히 새로운 웹 애플리케이션을 작성하고 웹 애플리케이션이 데스크톱 애플리케이션에서 리팩터링한 코드를 호출하도록 합니다.

두 플랫폼 간의 크고 숨겨진 차이점을 알아두세요.웹 애플리케이션은 서버에서 실행됩니다.여러 사용자가 동시에 사용하고 동시에 여러 스레드에서 사용됩니다.리팩토링하는 동안 차이점에 민감한 코드를 모두 기록해 두십시오.예를 들어, 다음을 사용하는 코드는 static 이제 한 번에 한 명의 사용자만 있기 때문에 구성원 필드가 데스크톱 응용 프로그램에서 작동할 수 있습니다.웹 애플리케이션에서는 static 모든 사용자와 모든 스레드에서 공유됩니다.

이것은 당신이 염두에 두었던 것이 아닐 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top