미리 체험해보는 .NET Core 3.0의 Windows Forms와 WPF 지원

지난 5월, BUILD 2018 행사에서 아주 파격적인 .NET Core 3.0에 대한 로드맵을 발표했었습니다. Windows 운영 체제에 국한되는 것이긴 하나, Windows Forms와 Windows Presentation Foundation (이하 WPF) 애플리케이션을 .NET Core에서 실행할 수 있도록 만들겠다는 소식이었습니다.

Visualizing .NET Core 3

한 동안 잊고 있었다가, 현재 어느 정도까지 진행이 되었는지 궁금해져서 문득 찾아보았습니다. (2018년 9월 21일)

  • .NET Core SDK 3.0 Alpha 버전을 설치할 수 있도록 공개되었습니다.
  • Windows Forms 프로젝트, WPF 프로젝트 템플릿을 dotnet new 명령어로 만들 수 있습니다.
  • Windows Forms 프로젝트는 dotnet 명령어로 빌드하고 실행할 수 있습니다.
  • WPF는 아직 msbuild 명령어로 빌드해야 합니다.

체감할 수 있는 수준까지 개발이 이루어진 것 같아서, 어떻게 하면 새 버전을 받아서 테스트해볼 수 있는지 방법을 정리한 글을 써보게 되었습니다.

.NET Core SDK 3.0 설치

.NET Core SDK 3.0은 현재 Daily Build로 게시되고 있습니다. 아래 주소에서 Future Release 의 .NET Core 3.0 SDK 링크를 클릭합니다.

https://github.com/dotnet/core/blob/master/daily-builds.md

그러면 각 플랫폼 별로 패키지 다운로드 링크가 걸린 테이블을 볼 수 있습니다. Windows x64 버전을 다운로드하여 설치를 진행하면 됩니다.

설치가 끝난 후에, dotnet --version명령어를 실행하면 버전이 3.0으로 업데이트된 것을 볼 수 있습니다. 그리고, dotnet new 명령어를 실행하면 아래 그림과 같이 winform, wpf 템플릿이 새로 추가된 것을 볼 수 있습니다.

Windows Forms 테스트해보기

시험삼아 새 Windows Forms 프로젝트를 만들어보겠습니다. dotnet new winform -n WinFormTest 와 같이 명령어를 입력하면 다음과 같이 코드가 만들어지는 것을 볼 수 있습니다.

그리고 dotnet run 명령으로 실행해보면 Windows Forms 샘플 애플리케이션이 제대로 실행되는 것을 볼 수 있습니다.

코드의 내용은 특별할 것이 없어서 건너뛰겠습니다.

WPF 테스트해보기

WPF도 Windows Forms와 같은 방법으로 새 프로젝트를 만들 수 있습니다. dotnet new wpf -n WpfTest 와 같이 새 프로젝트를 만들면 됩니다. 그러나 아직 개발이 완료되지 않아서, .NET Core의 빌드 엔진으로는 프로젝트를 빌드할 수 없으며, Visual Studio 2017의 msbuild를 대신 사용해야 합니다. (하지만 .NET Core용으로 DLL은 제대로 나옵니다.)

Visual Studio 2017을 설치하고나면 아래 그림과 같이 VS라는 키워드를 넣고 검색했을 때 VS 2017에 대한 명령 프롬프트 바로 가기들이 보입니다. x64 아키텍처를 지원하는 명령 프롬프트를 실행하고, 앞에서 만든 프로젝트 디렉터리로 이동하여 msbuild 명령만 실행하면 빌드가 됩니다.

이렇게 빌드를 한 다음에 실행을 할 때에도 dotnet run 명령은 사용할 수 없으며, 만들어진 DLL 파일을 직접 실행해야 합니다. dotnet bin\Debug\netcoreapp3.0\WpfTest.dll 과 같이 실행합니다. 그러면 아래 그림과 같이 역시 WPF 애플리케이션이 잘 실행되는 것을 볼 수 있습니다.

더 나아가서

.NET Core의 Build Engine을 쓸 수 있는 Windows Forms를 가지고 Self Contained EXE 파일을 만들어보겠습니다.

우리가 아는 실행 가능한 EXE 파일을 포함하는 애플리케이션으로 내보내는 것은 dotnet publish -r win-x64 또는 dotnet publish -r win-x86 명령을 통해서 내보낼 수 있습니다. 실행하고나면 bin\Debug\netcoreapp3.0\win-x64\publish 와 같이 디렉터리가 만들어지며, 이 디렉터리에 실행에 필요한 모든 파일들이 EXE 파일과 함께 들어가게 됩니다.

안타깝게도 Self Contained 방식으로 publish를 했기 때문에 패키지의 크기가 무척 큽니다. (약 80MB 내외) 하지만 현재 개발 중인 CoreRT가 완성되면, 최종적으로 프로그램의 실행에 필요한 코드만을 포함하는 단일 EXE 파일로 만드는 기능이 제공되어 우리가 원하는 네이티브 애플리케이션 개발을 완성할 수 있게 됩니다.

업데이트: 현재 버전 (2018년 9월 23일 기준)의 CoreRT는 COM Interop을 사용하는 코드를 제대로 처리하지 못합니다. 이 부분에 대한 개발이 현재 이루어지고 있으며, 완료된 이후에 Windows Forms 애플리케이션을 CoreRT로 패키징하는 것이 가능할 것으로 보입니다. (https://github.com/dotnet/corert/issues/6359 참조)

마무리

.NET Core 3.0을 이용하여 Windows Forms와 WPF에 새로운 생명을 불어넣을 수 있을 뿐 아니라 ASP.NET Core, EF Core, ML.NET까지 모두 한 자리에서 사용해볼 수 있게 된다면 무척이나 매력적인 기술이 될 것 같습니다.

그 뿐만 아니라, CoreRT와 Blazor 등 기대되는 새로운 기술들이 계속해서 준비되어가고 있으니 선물 상자를 열어보는 기분으로 하나씩 살펴보면 어떨까 싶습니다. :-)