저는 몇 년 동안 WinForms 프로그램을 개발해 왔습니다. 이제 .NET Core (ASP.NET Core MVC 포함)를 살펴보고 있습니다. 새로운 GUI 데스크탑 기술을 찾고 있습니다. Visual Studio 2015 업데이트 3에서는 .NET Core에서 GUI 앱을 만드는 옵션을 볼 수 없습니다. 내가 무엇을 놓치고 있습니까?
저는 몇 년 동안 WinForms 프로그램을 개발해 왔습니다. 이제 .NET Core (ASP.NET Core MVC 포함)를 살펴보고 있습니다. 새로운 GUI 데스크탑 기술을 찾고 있습니다. Visual Studio 2015 업데이트 3에서는 .NET Core에서 GUI 앱을 만드는 옵션을 볼 수 없습니다. 내가 무엇을 놓치고 있습니까?
답변:
당신은 아무것도 놓친 것이 아닙니다. 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 년 동안 나온 교차 플랫폼 옵션에 대해서는 다른 답변을 참조하십시오.
Electron을 사용 하고 Edge.js resp 와 연결할 수 있습니다 . 전자 에지 . Edge.js를 사용하면 전자 (node.js)가 .net dll을 호출 할 수 있으며 그 반대의 경우도 마찬가지입니다. 이렇게하면 HTML, CSS 및 JavaScript로 GUI를 작성하고 .net 코어로 백엔드를 작성할 수 있습니다. Electron 자체도 크로스 플랫폼이며 크롬 브라우저를 기반으로합니다.
AvaloniaUI는 이제 Win / OSX / Linux의 .NET Core에서 실행되도록 지원합니다. XAML, 바인딩 및 컨트롤 템플릿이 포함되어 있습니다.
예 : Rider로 MacO에서 개발하려면 :
New Solution
-> (근처 템플릿 목록의 상단) -> More Templates
-> 버튼 Install Template...
->을에 찾아 디렉토리 1 단계에서 템플릿을 복제.Reload
버튼을 클릭New Solution
템플릿 목록에 나타납니다 !한 가지 옵션은 UI에 JavaScript, HTML 및 CSS와 함께 Electron을 사용하고 백엔드 로직을위한 웹 API를 자체 호스팅 할 .Net Core 콘솔 애플리케이션을 빌드하는 것입니다. Electron은 localhost : xxxx에서 서비스를 노출하는 백그라운드에서 콘솔 애플리케이션을 시작합니다.
이렇게하면 자바 스크립트의 HTTP 요청을 통해 액세스 할 수 있도록 .Net을 사용하여 모든 백엔드 로직을 구현할 수 있습니다.
이 게시물을 살펴보고 Electron 및 .Net Core를 사용하여 크로스 플랫폼 데스크톱 애플리케이션을 빌드하고 github에서 코드를 확인 하는 방법을 설명 합니다.
콘솔 기반 UI를 생성하려면 gui.cs 를 사용할 수 있습니다 . 오픈 소스 (Miguel, Xamarin의 제작자)이며 Windows, Linux 및 MacO의 .Net 코어에서 실행됩니다.
다음과 같은 구성 요소가 있습니다.
샘플 스크린 샷
.net 코어 인 Electron.NET을 사용 하여 전자 용 오픈 소스 솔루션을 코딩했습니다 . https://github.com/ElectronNET/Electron.NET
즐겨!
.NET Core 3는 Windows 데스크톱 애플리케이션 생성을 지원합니다. 어제 .NET 컨퍼런스에서 기술 데모를 보았습니다. 이것은 내가 찾을 수있는 유일한 블로그 게시물이지만 요점을 설명합니다 : https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows- 데스크탑 애플리케이션 /
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로 업그레이드해야합니다.)
도움이 될만한 프로젝트를 진행 중입니다 : https://github.com/gkmo/CarloSharp
다음 애플리케이션은 HTML / JS / CSS (Angular)의 UI를 사용하여 .net으로 작성되었습니다.
.NET Core 및 MVC를 사용하여 웹 애플리케이션을 개발하고 Windows 범용 JavaScript 앱에 캡슐화 할 수 있습니다. https://docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows
여전히 웹 앱이지만 새로운 프레임 워크를 배우거나 UI를 재개발하지 않고도 웹 앱을 데스크톱 앱으로 변환하는 매우 간단한 방법이며 훌륭하게 작동합니다.
불편 함은 다르다 예를 들어 일렉트론 이나 ReactXP 크로스 플랫폼 데스크톱 앱이 아닌 범용 Windows 앱입니다.
예, 가능합니다.
.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 이상에서는 아무것도 배울 필요가 없습니다.
이 페이지 에서는 사용 방법에 대한 자습서를 제공합니다. 또한 샘플 코드 저장소에 대한 링크도 포함되어 있습니다.
네크 로맨싱. 기존 WinForms 응용 프로그램
의 특별한 경우 :
방법이 있습니다. 비록 그것이 얼마나 잘 작동하는지 모르겠습니다.
다음과 같이 진행
됩니다. 모노에서 WinForms 구현을 가져옵니다.
.NET Core 또는 NetStandard로 포팅합니다.
새 System.Windows.Forms에 대해 WinForms 응용 프로그램을 다시 컴파일합니다.
NetCore에 의해 손상 될 수있는 모든 것을 수정합니다.
모노가 필요한 부분을 완벽하게 구현하도록기도하십시오.
(그렇지 않은 경우 언제든지기도를 중단하고 수정 / 패치 / 기능과 함께 모노 프로젝트에 풀 요청을 보낼 수 있습니다.)
내 CoreFX WinForms 리포지토리는 다음과 같습니다.
https://github.com/ststeiger/System.CoreFX.Forms
.Net Core 3.0
이상 을 사용하는 경우 다음 단계를 수행하고 갈 수 있습니다. ( .NET Core CLI 를 사용 하지만 Visual Studio도 사용할 수 있음)
md MyWinFormsApp
선택적 단계cd MyWinFormsApp
선택적 단계dotnet new sln -n MyWinFormsApp
선택 단계이지만 좋은 생각입니다.dotnet new winforms -n MyWinFormsApp
죄송합니다. 이것은 선택 사항이 아닙니다.dotnet sln add MyWinFormsApp
3 단계를 수행 한 경우이 작업을 수행하십시오.좋아, 내 대답 읽기를 중지하고 MyWinFormsApp
프로젝트에 코드를 추가 할 수 있습니다 . 그러나 Form Designer 로 작업 하려면 계속 읽으십시오.
MyWinFormsApp.csproj
파일을 열고로 변경 <TargetFramework>netcoreapp3.1<TargetFramework>
하십시오 <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>
(사용 netcoreapp3.0
하는 경우으로 변경하십시오. <TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>
)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>
#if NETCOREAPP3_1
Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif
이제 MyWinFormsApp
Visual Studio 2019를 사용하여 프로젝트를 열 수 있습니다 (Visual Studio 2017도 사용할 수 있다고 생각하지만 확실하지 않습니다 ). 두 번 클릭 Form1.cs
하면 다음이 표시됩니다.
좋습니다. Toolbox (Ctrl+W,X
)를 앱에 컨트롤을 추가하고 멋지게 만드세요.
디자이너 @ Windows Forms .NET Core Designer에 대해 자세히 알아볼 수 있습니다.