앱을 처음부터 다시 작성하는 대신 최신 Windows 기능을 기존 소스 코드에 통합하여 기존 데스크톱 앱을 modernize 여러 가지 방법이 있습니다. 이 자습서에서는 다음 기능을 사용하여 기존 WPF 기간 업무 앱을 현대화하는 여러 가지 방법을 살펴보겠습니다.
- .NET Core 3
- XAML Islands를 사용하는 UWP XAML 컨트롤
- Windows 알림 및 Adaptive Cards
- MSIX 배포
이 튜토리얼을 진행하려면 다음과 같은 개발 기술이 필요합니다.
- WPF 사용하여 Windows 데스크톱 앱을 개발한 경험
- C# 및 XAML에 대한 기본 지식
- UWP에 대한 기본 지식
개요
이 튜토리얼에서는 Contoso Expenses라는 단순한 WPF 업무용 애플리케이션에 대한 코드를 제공합니다. 이 튜토리얼의 가상 시나리오에 등장하는 Contoso Expenses 앱은 Contoso Corporation의 관리자가 보고서에 제출된 비용을 추적하는 데 사용하는 내부용 앱입니다. 현재 관리자는 터치 지원 디바이스를 보유하고 있으며, 마우스나 키보드 없이 Contoso Expenses 앱을 사용하려 합니다. 하지만 안타깝게도 현재 앱 버전은 터치를 지원하지 않습니다.
Contoso는 직원이 비용 보고서를 보다 효율적으로 만들 수 있도록 새로운 Windows 기능으로 이 앱을 현대화하려고 합니다. 새 UWP 앱을 빌드하여 여러 기능을 쉽게 구현할 수 있습니다. 그러나 기존 앱은 복잡하며 여러 팀에서 수년간 개발한 결과물입니다. 따라서 신기술로 처음부터 새로 작성하는 것은 선택 사항이 아닙니다. 팀에서는 기존 코드 베이스에 새 기능을 추가하는 가장 좋은 방법을 찾고 있습니다.
자습서의 시작 부분에서 Contoso Expenses는 .NET Framework 4.7.2를 대상으로 하며 다음 타사 라이브러리를 사용합니다.
- MVVM Light - MVVM 패턴의 기본 구현입니다.
- Unity - 종속성 주입 컨테이너입니다.
- 데이터를 저장하는 포함된 NoSQL 솔루션인 LiteDb입니다.
- Bogus - 가짜 데이터를 생성하는 도구입니다.
이 자습서에서는 새로운 Windows 기능을 사용하여 Contoso Expenses를 향상시킵니다.
- 기존 WPF 앱을 .NET Core 3.0으로 마이그레이션합니다. 이렇게 하면 이후에 중요한 새 시나리오가 열립니다.
- XAML Islands를 사용하여 Windows Community Toolkit에서 제공하는 InkCanvas 및 MapControl 래핑된 컨트롤을 호스트합니다.
- XAML Islands를 사용하여 표준 UWP XAML 컨트롤(여기서는 CalendarView)을 호스팅합니다.
- 앱에 Adaptive Cards 및 Windows 알림을 통합합니다.
- MSIX를 사용하여 앱을 패키지하고 Azure DevOps CI/CD 파이프라인을 설정하여 새 버전의 앱을 테스터와 사용자에게 자동으로 제공할 수 있습니다.
전제 조건
이 튜토리얼을 진행하려면 개발 컴퓨터에 다음과 같은 필수 구성 요소가 설치되어 있어야 합니다.
- Windows 10 버전 1903(빌드 18362) 이상 버전입니다.
- Visual Studio 2019.
- .NET Core 3 SDK(최신 버전 설치).
Visual Studio 2019에서 다음 워크로드 및 선택적 기능을 설치해야 합니다.
- .NET 데스크톱 개발
- Universal Windows Platform 개발
- Windows SDK(10.0.18362.0 이상)
Contoso Expenses 샘플 앱 다운로드
자습서를 시작하기 전에 Contoso Expenses 앱의 소스 코드를 다운로드하고 Visual Studio 코드를 빌드할 수 있는지 확인합니다.
- AppConsult WinAppsModernization 워크숍 리포지토리의 릴리스 탭에서 앱 소스 코드를 다운로드합니다. 직접 접속할 수 있는 링크는 https://github.com/microsoft/AppConsult-WinAppsModernizationWorkshop/releases입니다.
- zip 파일을 열고 C:\ 드라이브의 루트에 모든 콘텐츠를 추출합니다. C:\WinAppsModernizationWorkshop이라는 폴더를 생성합니다.
- Visual Studio 2019를 열고 C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses\ContosoExpenses.sln 파일을 두 번 클릭하여 솔루션을 엽니다.
- Start 단추 또는 Ctrl+F5를 눌러 Contoso Expenses WPF 프로젝트를 빌드, 실행 및 디버그할 수 있는지 확인합니다.
시작
Contoso Expenses 샘플 앱의 소스 코드가 있고 Visual Studio 빌드할 수 있는지 확인하면 자습서를 시작할 준비가 된 것입니다.
Part 1: Contoso Expenses 앱을 .NET Core 3 - 2부: XAML Islands를 사용하여 UWP InkCanvas 컨트롤 추가
- 3부: XAML Islands를 사용하여 UWP CalendarView 컨트롤 추가
- Part 4: Windows 10 사용자 활동 및 알림 추가
- 5부: MSIX로 패키지 및 배포
중요 개념
다음 섹션에서는 이 튜토리얼에서 다루는 주요 개념의 배경 지식을 제공합니다. 이러한 개념을 이미 잘 알고 있는 경우에는 이 섹션을 건너뛰어도 됩니다.
Universal Windows Platform (UWP)
Windows 8 Microsoft는 WinRT(Windows Runtime)의 일부로 새 API 집합을 도입했습니다. .NET Framework와 달리 WinRT는 앱에 직접 노출되는 네이티브 API 계층입니다. 또한 WinRT에는 개발자가 C++뿐 아니라 C#이나 JavaScript 같은 언어를 사용하여 상호 작용할 수 있도록 런타임 위에 추가되는 레이어인 언어 프로젝션이 도입되었습니다. 프로젝션을 사용하면 개발자가 .NET Framework를 사용하여 앱을 빌드할 때 얻은 것과 동일한 C# 및 XAML 지식을 활용하는 WinRT를 기반으로 앱을 빌드할 수 있습니다.
Windows 10 Microsoft는 WinRT를 기반으로 하는 Universal Windows Platform (UWP) 도입했습니다. UWP의 가장 중요한 기능은 모든 디바이스 플랫폼에서 공통 API 집합을 제공한다는 것입니다. 앱이 데스크톱, Xbox One 또는 HoloLens 실행되더라도 동일한 API를 사용할 수 있습니다.
앞으로 타임라인, 프로젝트 로마 및 Windows Hello 같은 기능을 포함하여 WinRT API를 통해 대부분의 새로운 Windows 기능이 공개됩니다.
MSIX 패키징
MSIX는 Windows 앱용 최신 패키징 모델입니다. MSIX는 Win32, WPF, Windows Forms, Java, Electron 등의 기술을 사용하여 빌드하는 데스크톱 앱뿐만 아니라 UWP 앱을 지원합니다. MSIX 패키지에 데스크톱 앱을 패키징할 때 Microsoft Store에 앱을 게시할 수 있습니다. 또한 데스크톱 앱을 설치할 때 패키지 ID를 받게 되며, 데스크톱 앱에서 광범위한 WinRT API 세트를 사용할 수 있습니다.
자세한 내용은 다음 문서를 참조하십시오.
XAML Islands (XAML 아일랜드)
Windows 10 버전 1903부터는 XAML Islands라는 기능을 사용하여 UWP가 아닌 데스크톱 앱에서 UWP 컨트롤을 호스트할 수 있습니다. 이 기능을 사용하면 UWP 컨트롤을 통해서만 사용할 수 있는 최신 Windows UI 기능을 사용하여 기존 데스크톱 앱의 모양, 느낌 및 기능을 향상시킬 수 있습니다. 즉, 기존 WPF, Windows Forms 및 C++ Win32 앱에서 Fluent 디자인 시스템을 지원하는 컨트롤 및 Windows 잉크와 같은 UWP 기능을 사용할 수 있습니다.
자세한 내용은 데스크톱 애플리케이션의 UWP 컨트롤(XAML Islands)을 참조하세요. 이 튜토리얼에서는 다음 두 가지 형식의 XAML Island 컨트롤을 사용하는 과정을 안내합니다.
Windows 커뮤니티 도구 키트의 InkCanvas 및 MapControl. 이러한 WPF 컨트롤은 해당 UWP 컨트롤의 인터페이스와 기능을 래핑하며 Visual Studio 디자이너의 다른 WPF 컨트롤처럼 사용할 수 있습니다.
UWP Calendar view 컨트롤. 이는 Windows 커뮤니티 도구 키트에서 WindowsXamlHost 컨트롤을 사용하여 호스트하는 표준 UWP 컨트롤입니다.
.NET Core 3
.NET Core 전체 .NET Framework의 플랫폼 간, 가볍고 쉽게 확장 가능한 버전을 구현하는 오픈 소스 프레임워크입니다. 전체 .NET Framework에 비해 .NET Core 시작 시간이 훨씬 빨라지고 많은 API가 최적화되었습니다.
처음 몇 개의 릴리스를 통해 .NET Core의 초점은 웹 또는 백 엔드 앱을 지원하는 것이었습니다. .NET Core를 사용하면 Windows, Linux 또는 Docker 컨테이너와 같은 마이크로 서비스 아키텍처에서 호스트할 수 있는 확장 가능한 웹앱 또는 API를 쉽게 빌드할 수 있습니다.
.NET Core 3은 .NET Core의 최신 릴리스입니다. 이 릴리스의 하이라이트는 Windows Forms 및 WPF 앱을 포함하여 Windows 데스크톱 앱에 대한 지원입니다. .NET Core 3에서 신규 및 기존 Windows 데스크톱 앱을 실행하고 .NET Core에서 제공하는 모든 혜택을 누릴 수 있습니다. XAML Islands에서 호스트되는 UWP 컨트롤은 .NET Core 3을 대상으로 하는 Windows Forms 및 WPF 앱에서도 사용할 수 있습니다.
참고
WPF 및 Windows Forms 플랫폼 간이 되지 않으며 Linux 및 MacOS에서 WPF 또는 Windows Forms 실행할 수 없습니다. WPF 및 Windows Forms UI 구성 요소는 여전히 Windows 렌더링 시스템에 종속됩니다.
자세한 내용은
Windows developer