.NET Core에서 데스크톱 GUI 응용 프로그램을 만들 수 있습니까?


101

저는 몇 년 동안 WinForms 프로그램을 개발해 왔습니다. 이제 .NET Core (ASP.NET Core MVC 포함)를 살펴보고 있습니다. 새로운 GUI 데스크탑 기술을 찾고 있습니다. Visual Studio 2015 업데이트 3에서는 .NET Core에서 GUI 앱을 만드는 옵션을 볼 수 없습니다. 내가 무엇을 놓치고 있습니까?


이 새로운 플랫폼을 보는 각도를 바꿔야합니다. 모든 기존 프레임 워크, WPF / WinForms / UWP / GTK # / Xamarin.Mac / iOS / Android는 .NET Core에서 작성한 코드를 사용할 수 있습니다. 그것은 당신이 상상하는 방식이 아니라 크로스 플랫폼 개발을 가능하게합니다.
Lex Li

예를 들어 winforms에서 GUI를 빌드 할 수 있고 .net 코어에서 백엔드 코드를 빌드 할 수 있다고 말하는 것입니다.
EKanadily

아니. .NET Core에서 빌드 된 패키지는 참조로 직접 추가 할 수 있습니다.
Lex Li

1
전자는 갈 길이다. API 뒤에 asp.net을 사용하십시오. UI 로직을 밝게 유지하면 응용 프로그램의 가장 중요한 부분을 .net에서 유지할 수 있어야합니다
user7558114

1
전문가 팁으로 Visual Studio 2017 (가능한 경우)로 업그레이드하거나 사용 가능한 다른 도구 (CLI 및 / 또는 VS Code / Rider)를 사용합니다. VS 2015에는 .NET Core 2.0 도구에 대한 액세스 권한이 없기 때문입니다. 앞으로의 발전을 방해합니다. 당신이하고있는 모든 것이 그것을 실험하는 것이더라도.
제이미 테일러

답변:


64

당신은 아무것도 놓친 것이 아닙니다. UWP (유니버설 Windows 플랫폼)가 부분적으로 .Net Core 위에 빌드되었지만 MS는 .Net Core를 사용하여 직접 GUI 애플리케이션을 만드는 합리적인 방법을 제공하지 않았습니다.

.Net Core 3.0은 Windows 전용이지만 Winforms 및 WPF에 대한 지원을 포함합니다.

.Net 6에는 Windows 및 macOS 데스크톱 애플리케이션과 모바일 애플리케이션을 지원할 .Net MAUI가 포함되며, 커뮤니티에서 지원하는 Linux 데스크톱 애플리케이션 (MS 아님)이 포함됩니다. .Net 5에는 .Net MAUI의 미리보기 버전이 포함됩니다.

지난 2 년 동안 나온 교차 플랫폼 옵션에 대해서는 다른 답변을 참조하십시오.


41
세상에, 충격입니다! 그래서 GUI가없는 크로스 플랫폼 프레임 워크의 요점은 무엇입니까?
EKanadily

19
@EssamGndelee 기본 포인트는 ASP.NET Core 애플리케이션입니다. 두 번째 포인트는 콘솔 애플리케이션입니다.
svick

3
@ChristopherPainter 클라우드 컴퓨팅에 대한 더 나은 지원과 Node.js와 같은 플랫폼에서 개발자를 유치하는 것이 .Net Core가 존재하는 이유 중 일부입니다. 하지만 그렇다고 마이크로 소프트가 현재 이들에만 관심이 있다는 의미는 아닙니다.
svick

1
@CYoung Microsoft의 입장은 UWP를 사용해야한다는 것입니다.
svick

1
@svick은 .NET Core가 해결해야하는 교차 플랫폼 프로그래밍을 완전히 제거합니다. UWP는 MS 제품군에만 충분합니다. : /
walther

41

Electron을 사용 하고 Edge.js resp 와 연결할 수 있습니다 . 전자 에지 . Edge.js를 사용하면 전자 (node.js)가 .net dll을 호출 할 수 있으며 그 반대의 경우도 마찬가지입니다. 이렇게하면 HTML, CSS 및 JavaScript로 GUI를 작성하고 .net 코어로 백엔드를 작성할 수 있습니다. Electron 자체도 크로스 플랫폼이며 크롬 브라우저를 기반으로합니다.


5
그런데 왜 전자? 포트 X에서 웹 애플리케이션을 열고 브라우저를 탐색 할 수도 있습니다. Electron과 달리 항상 최신 버전의 브라우저이기 때문에 Electron이 할 수있는 모든 것을 포함합니다. 특정 브라우저 버전이 필요한 경우 배포에 Google-Chrome을 포함하세요.
Stefan Steiger

1
@StefanSteiger 전자를 사용하고 어셈블리를 통해 API를 직접 호출하면 사용자가 앱을 웹 앱으로 보지 못하는 차이를 메울 수 있다고 생각합니다. 일부 개발자는 HTTP를 사용하여 더 많은 통신 계층을 추가하고 싶지 않습니다.
Brian Ng

이것은 아주 간단 지금처럼 Electron.Net 보이는 cross-platform-blog.com/electron.net/...
J. 알렌에게

Electron.NET은 유망 해 보이지만 프로덕션 머신에서 보안되지 않은 웹 서버를 열도록 강제하기 때문에 프로덕션에서 사용하는 것이 지겹습니다. 그런 다음 앱의 ASP.NET Core 끝이 IIS 또는 nginx (또는 유사)와 같이 올바르게 구성된 역방향 프록시 서버 뒤에있는 한 더 안전해야합니다.
Jamie Taylor

지옥은 mvc / webapi로 앱을 만들고 임의 포트에서 로컬로 호스트하고 로컬 API를 호출하는 전자 인터페이스를 사용할 수 있습니다.
Wjdavis5

40

AvaloniaUI는 이제 Win / OSX / Linux의 .NET Core에서 실행되도록 지원합니다. XAML, 바인딩 및 컨트롤 템플릿이 포함되어 있습니다.

예 : Rider로 MacO에서 개발하려면 :

  1. 지침에 따라 Avalonia dotnet 새 템플릿설치합니다.
  2. JetBrains Rider를 열고 시작 화면에서
  3. 선택 New Solution-> (근처 템플릿 목록의 상단) -> More Templates-> 버튼 Install Template...->을에 찾아 디렉토리 1 단계에서 템플릿을 복제.
  4. Reload버튼을 클릭
  5. 보다! Avalonia 템플릿이 이제 New Solution템플릿 목록에 나타납니다 !
  6. Avalonia 템플릿 선택
  7. 빌드하고 실행하십시오. 눈앞에서 열린 GUI를 확인하십시오.

JetBrains Rider에 dotnet 새 템플릿을 설치하는 GUI 단계


30

이제 Qml.Net을 사용하여 .NET Core에서 Qt / QtQuick / QML을 사용할 수 있습니다 .

성능이 뛰어나고 ( "수다쟁이"가 아님) 모든 기능을 갖추고 있으며 Linux / OSX / Windows에서 작동합니다.

내 블로그 게시물 을 확인하여 현재 다른 옵션과 어떻게 비교되는지 확인하십시오.

추신 : 저는 저자입니다.


매우 유망 해 보입니다. 조사하겠습니다
Daniel

22

한 가지 옵션은 UI에 JavaScript, HTML 및 CSS와 함께 Electron을 사용하고 백엔드 로직을위한 웹 API를 자체 호스팅 할 .Net Core 콘솔 애플리케이션을 빌드하는 것입니다. Electron은 localhost : xxxx에서 서비스를 노출하는 백그라운드에서 콘솔 애플리케이션을 시작합니다.

이렇게하면 자바 스크립트의 HTTP 요청을 통해 액세스 할 수 있도록 .Net을 사용하여 모든 백엔드 로직을 구현할 수 있습니다.

이 게시물을 살펴보고 Electron 및 .Net Core를 사용하여 크로스 플랫폼 데스크톱 애플리케이션을 빌드하고 github에서 코드를 확인 하는 방법을 설명 합니다.


17

콘솔 기반 UI를 생성하려면 gui.cs 를 사용할 수 있습니다 . 오픈 소스 (Miguel, Xamarin의 제작자)이며 Windows, Linux 및 MacO의 .Net 코어에서 실행됩니다.

다음과 같은 구성 요소가 있습니다.

  • 버튼
  • 라벨
  • 텍스트 입력
  • 텍스트보기
  • 시간 편집 필드
  • 라디오 버튼
  • 체크 박스
  • 대화 상자
    • 메시지 상자
  • 윈도우
  • 메뉴
  • ListViews
  • 프레임
  • ProgressBars
  • 스크롤보기 및 스크롤바
  • 16 진수 뷰어 / 편집기 (HexView)

샘플 스크린 샷

gui.cs 샘플 출력 스크린 샷




4

tl; dr Core 개발자가 크로스 플랫폼 GUI 프레임 워크를 제공 할 수 있는지 잘 모르겠습니다.

.NET Core의 초기 버전에 대한 크로스 플랫폼 GUI 프레임 워크가 공식 도구 (특히 이전 버전의 도구-VS 2015 업데이트 3을 실행 중이라고 언급 함)에 번들로 포함될 것으로 기대하는 느낌이 듭니다.

GUI 프레임 워크는 정말 무겁고 호스트 머신에 이미 존재하는 하드웨어 추상화에 의존합니다. Windows에는 일반적으로 대부분의 사용자가 사용하는 단일 창 관리자 (WM)와 데스크톱 환경 (DE)이 있지만 지원되는 다양한 Linux 배포에는 가능한 WM 및 DE가 얼마든지 있습니다. KDE, Gnome 또는 XFCE와 함께 X-Server 또는 Wayland를 사용하고 있어야합니다. 그러나 Linux 설치는 동일하지 않습니다.

오픈 소스 커뮤니티가 VM 및 DE에 대한 "표준"설정에 실제로 정착 할 수 없다는 사실은 .NET Core 개발자가 모든 플랫폼과 조합에서 작동하는 GUI 프레임 워크를 만드는 것이 매우 어렵다는 것을 의미합니다. DE 및 WM.

여기에있는 많은 사람들이 몇 가지 훌륭한 제안을합니다 (ASP.NET Core를 사용하여 웹 애플리케이션을 빌드하고 브라우저를 사용하여 여러 플랫폼 간 프레임 워크를 나열하는 것). 나열된 크로스 플랫폼 GUI 프레임 워크 중 일부를 살펴보면 얼마나 무거운 지 알 수 있습니다.

그러나 Miguel de Icaza가 올해 .NET Conf에서 Linux 및 MacOS에서 순진하게 실행되는 Xamarin을 선보인 것처럼 터널 끝에 빛 이 있으므로 시도해 볼 가치가 있습니다. 그것이 준비되면.

(하지만 .NET Core 2.0 기능에 액세스하려면 VS 2015에서 VS 2017로 업그레이드해야합니다.)


리눅스 다양성에 대한 추론이 없습니다. 1. Java는 원활하게 실행됩니다. 2. Mono는 WinForms를 정상적으로 실행합니다. (너무 못생긴) Linux에서는 QT 기반 배포판에서 GTK를 사용할 수 있으며 그 반대도 마찬가지입니다. .net 코어에 대한 QT 바인딩이 있으면 좋을 것입니다.
Bogdan Mart

나는 당신이 말하는 모든 것에 동의합니다. 하지만 마이크로 소프트의 접근 방식은 현재 Azure 플랫폼을 통해 IaaS (Infrastructure as a Service), SaaS (Software as a Service), PaaS (Platform as a Service)를 제공하는 것이라고 생각합니다. 자사의 자사, 오픈 소스, 크로스 플랫폼 프레임 워크가 개발자에게 우선 순위를 제시하는 것이 합리적 일 것입니다. Azure와 RHEL 및 Google과 같은 다른 회사가 ASP NET Core와 .NET Core를 모두 지원하기 위해 수행하는 작업은 사실상 전설적이며 .NET Core의 우선 순위가이를 반영하는 것 같습니다.
Jamie Taylor


3

.NET Core 및 MVC를 사용하여 웹 애플리케이션을 개발하고 Windows 범용 JavaScript 앱에 캡슐화 할 수 있습니다. https://docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows

여전히 웹 앱이지만 새로운 프레임 워크를 배우거나 UI를 재개발하지 않고도 웹 앱을 데스크톱 앱으로 변환하는 매우 간단한 방법이며 훌륭하게 작동합니다.

불편 함은 다르다 예를 들어 일렉트론 이나 ReactXP 크로스 플랫폼 데스크톱 앱이 아닌 범용 Windows 앱입니다.


2

예, 가능합니다.

.NET Core에는 기본 GUI 애플리케이션에 대한 구성 요소가 기본적으로 제공되지 않습니다. 그러나 Electron.NET 이라는 NuGet 패키지가 있습니다. Gregor Biswanger의 답변에 따라 .

전자 은 Node.js 위에 네이티브 GUI 애플리케이션을 구축 할 수있는 프레임 워크입니다. Electron.NET은 .NET Core 코드 내에서 Electron 및 Node.js를 활용할 수있는 NuGet 패키지입니다.

좋은 소식은 NuGet 패키지를 사용하기 위해 JavaScript, Electron 또는 Node.js를 배울 필요가 없다는 것입니다. JS 파일은 애플리케이션 내에서 실행되지만 빌드 프로세스에서 자동으로 생성됩니다.

당신이 할 일은 꽤 표준적인 ASP.NET Core MVC 앱을 빌드하는 것뿐입니다. 유일한 차이점은 브라우저에서 실행되는 대신 기본 창 앱으로 실행된다는 것입니다. Electron.NET 패키지와 관련된 몇 줄의 코드 외에 ASP.NET Core MVC 이상에서는 아무것도 배울 필요가 없습니다.

이 페이지 에서는 사용 방법에 대한 자습서를 제공합니다. 또한 샘플 코드 저장소에 대한 링크도 포함되어 있습니다.


2

네크 로맨싱. 기존 WinForms 응용 프로그램
의 특별한 경우 : 방법이 있습니다. 비록 그것이 얼마나 잘 작동하는지 모르겠습니다. 다음과 같이 진행 됩니다. 모노에서 WinForms 구현을 가져옵니다. .NET Core 또는 NetStandard로 포팅합니다.




새 System.Windows.Forms에 대해 WinForms 응용 프로그램을 다시 컴파일합니다.
NetCore에 의해 손상 될 수있는 모든 것을 수정합니다.
모노가 필요한 부분을 완벽하게 구현하도록기도하십시오.
(그렇지 않은 경우 언제든지기도를 중단하고 수정 / 패치 / 기능과 함께 모노 프로젝트에 풀 요청을 보낼 수 있습니다.)

내 CoreFX WinForms 리포지토리는 다음과 같습니다.
https://github.com/ststeiger/System.CoreFX.Forms


2

오래된 질문이지만 예, VSCode, .Net Core, C #, gtk3, gtksharp 및 Glade를 GUI 디자이너로 사용하여 Windows, Linux 및 macOS 용 교차 플랫폼 데스크톱 (GUI) 애플리케이션을 개발할 수 있습니다.

방법 은 다음과 같습니다 .


0

.Net Core 3.0이상 을 사용하는 경우 다음 단계를 수행하고 갈 수 있습니다. ( .NET Core CLI 를 사용 하지만 Visual Studio도 사용할 수 있음)

  1. md MyWinFormsApp 선택적 단계
  2. cd MyWinFormsApp 선택적 단계
  3. dotnet new sln -n MyWinFormsApp 선택 단계이지만 좋은 생각입니다.
  4. dotnet new winforms -n MyWinFormsApp 죄송합니다. 이것은 선택 사항이 아닙니다.
  5. dotnet sln add MyWinFormsApp 3 단계를 수행 한 경우이 작업을 수행하십시오.

좋아, 내 대답 읽기를 중지하고 MyWinFormsApp프로젝트에 코드를 추가 할 수 있습니다 . 그러나 Form Designer 로 작업 하려면 계속 읽으십시오.

  1. MyWinFormsApp.csproj파일을 열고로 변경 <TargetFramework>netcoreapp3.1<TargetFramework>하십시오 <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>(사용 netcoreapp3.0하는 경우으로 변경하십시오. <TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>)
  2. 그런 다음 다음을 추가하십시오. ItemGroup
  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
  </ItemGroup>

이 단계를 수행 한 후에는 다음과 같이해야합니다.

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
  </ItemGroup>

</Project>
  1. Program.cs다음 전처리기를 열고 추가 하십시오.
#if NETCOREAPP3_1
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

이제 MyWinFormsAppVisual Studio 2019를 사용하여 프로젝트를 열 수 있습니다 (Visual Studio 2017도 사용할 수 있다고 생각하지만 확실하지 않습니다 ). 두 번 클릭 Form1.cs하면 다음이 표시됩니다.

여기에 이미지 설명 입력

좋습니다. Toolbox (Ctrl+W,X )를 앱에 컨트롤을 추가하고 멋지게 만드세요.

디자이너 @ Windows Forms .NET Core Designer에 대해 자세히 알아볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.