다음을 통해 공유


Windows 앱 SDK 1.0에 대한 안정적인 채널 릴리스 정보

안정적인 채널은 프로덕션 환경의 앱에서 사용할 수 있도록 지원되는 Windows 앱 SDK의 릴리스를 제공합니다. Windows 앱 SDK의 안정적인 릴리스를 사용하는 앱을 Microsoft Store에 게시할 수도 있습니다.

중요 링크:

최신 안정적인 채널 릴리스:

Windows App SDK 다운로드

참고 항목

Windows 앱 SDK Visual Studio 확장(VSIX)은 더 이상 별도의 다운로드로 배포되지 않습니다. Visual Studio 내의 Visual Studio Marketplace에서 사용할 수 있습니다.

버전 1.0.4

1.0 릴리스에 대한 중요한 버그 수정을 포함하는 Windows 앱 SDK의 서비스 릴리스입니다.

버그 수정(1.0.4)

  • Page.TopAppBar 또는 Page.BottomAppBar로 사용할 때 AppBar가 화면에 렌더링되지 않는 문제를 해결했습니다.
  • MUXControls.dll WinUI 컨트롤을 사용하는 패키지 이름이 12자 이하인 앱이 즉시 충돌하는 문제를 해결했습니다. 자세한 내용은 Github의 문제 6360 을 참조하세요.
  • 바로 가기 키 및 기타 시나리오에 문제를 일으키는 터치 입력 문제를 해결했습니다. 자세한 내용은 Github의 문제 6291 을 참조하세요.
  • MSIX로 패키지되거나 자체 포함으로 배포된 앱이 배포에 실패하는 문제를 해결했습니다.
  • 끌어서 놓기 작업 중에 앱이 때때로 충돌하는 문제를 해결했습니다. 자세한 내용은 Github의 문제 7002을 참조하세요.

버전 1.0.3

1.0 릴리스에 대한 중요한 버그 수정을 포함하는 Windows 앱 SDK의 서비스 릴리스입니다.

버그 수정(1.0.3)

  • C/C++ 런타임(CRT)이 설치되지 않은 경우 WebView2가 있는 C# 앱이 시작 시 충돌하는 문제를 해결했습니다.
  • 바로 가기 키 및 기타 시나리오에 문제를 일으키는 터치 입력 문제를 해결했습니다. 자세한 내용은 Github의 문제 6291 을 참조하세요.

참고: 일반적으로 서비스 릴리스에는 기능을 추가하지 않지만 이 릴리스의 WebView2 수정을 수행하려면 최신 버전의 WebView2 SDK(1020.46에서 1185.39)로 업데이트해야 했습니다. WebView2 1.0.1185.39에 대한 자세한 내용은 WebView2 SDK 릴리스 노트WebView2 런타임에 대한 자세한 내용은 앱과 WebView2 런타임 배포 를 참조하십시오.

버전 1.0.2

1.0 릴리스에 대한 중요한 버그 수정을 포함하는 Windows 앱 SDK의 서비스 릴리스입니다.

버그 수정(1.0.2)

  • ListView의 끝으로 스크롤할 때 앱이 충돌하는 레이아웃 주기 문제가 해결되었습니다. 자세한 내용은 Github의 문제 6218을 참조하세요.
  • CRT(C/C++ Runtime)가 설치되지 않은 상태에서 시작 시 C# 앱이 충돌하는 문제가 해결되었습니다. 그러나 WebView2를 사용하는 C# 앱에는 CRT가 여전히 필요합니다. 자세한 내용은 Github의 문제 2117 을 참조하세요.
  • 단일 프로젝트 MSIX를 사용하는 애플리케이션에서 .appinstaller 파일을 생성하지 않는 문제가 해결되었습니다. 자세한 내용은 Github의 문제 1821 을 참조하세요.
  • WinUI 애플리케이션이 .NET 6 dotnet build을 지원하지 않는 문제가 해결되었습니다.

버전 1.0.1

1.0 릴리스에 대한 중요한 버그 수정 및 다중 창 지원을 포함하는 Windows 앱 SDK의 서비스 릴리스입니다.

버그 수정(1.0.1)

  • MddBootstrapAutoinitializer가 사용하도록 설정된 ImplicitUsings로 컴파일되지 않는 문제를 해결했습니다. 자세한 내용은 Github의 문제 1686 을 참조하세요.
  • WebView2의 포커스가 예기치 않게 손실되어 입력 및 선택 문제가 발생하는 문제가 해결되었습니다. 자세한 내용은 GitHub의 문제 5615 & 문제 5570을 참조하십시오.
  • WinUI 3 앱에서 사용자 지정 제목 표시줄을 사용할 때 Visual Studio의 앱 내 도구 모음을 핥을 수 없는 문제를 해결했습니다.
  • WinUI 3 앱에서 사용자 지정 제목 표시줄을 사용할 때 맞춤 레이아웃이 표시되지 않는 문제를 해결했습니다. 자세한 내용은 GitHub의 문제 6333 & 문제 6246을 참조하십시오.
  • Window.SetTitlebar가 여전히 로드 중인 UIElement를 사용하여 호출되었을 때 Window.ExtendsContentIntoTitleBar 속성을 설정할 때 예외가 발생하는 문제를 해결했습니다.
  • 단일 프로젝트 MSIX 앱이 지원하지 dotnet build않는 문제가 해결되었습니다.
  • 패키지된 앱을 설치한 후 패키지되지 않은 앱이 설치되지 않는 문제를 해결했습니다. 자세한 내용은 Github의 문제 1871 을 참조하세요.
  • 마우스 끌기 작업 중 성능 저하 문제가 해결되었습니다.
  • 패키지되지 않은 앱에서 GetWindowIdFromWindow()를 호출할 때 발생하는 충돌을 해결했습니다. 자세한 내용은 GitHub의 토론 1891 를 참조하십시오.

해당 버전 1.0의 제한 사항 및 알려진 문제는 버전 1.0.1에도 적용됩니다.

또한 맞춤형 타이틀 바가 있는 앱의 경우 드래그&드롭 작업에 사용되는 유리 창을 수정하는 등 이번 릴리스에서 변경(및 수많은 문제를 수정)했습니다. 기본값 및 동작을 사용하는 것이 좋습니다(사용해 보세요!). 기본 캡션 단추가 대화형이 되도록 제목 표시줄에서 여백을 사용하는 경우 제목 표시줄의 배경을 빨간색으로 설정한 다음 여백을 조정하여 끌기 영역을 캡션 컨트롤로 확장하는 것이 좋습니다.

새로운 기능

WinUI 3 애플리케이션에서 동일한 스레드에서 여러개의 여러 창을 생성할 수 있도록 안정화했습니다. 자세한 내용은 문제 #5918 을 참조하세요.

버전 1.0

다음 섹션에서는 1.0.에 대한 새로운 기능과 업데이트된 기능, 제한 사항 및 알려진 문제에 대해 설명합니다.

WinUI 3

WinUI 3은 Windows 앱 SDK에 대한 기본 UX(사용자 환경) 프레임워크입니다. 이 릴리스에서는 Windows 앱 SDK 0.8의 여러 새로운 기능을 추가하고 1.0 미리 보기 릴리스에서 문제를 안정화했습니다.

새로운 기능 및 업데이트:

  • 새 컨트롤(PipsPager, Expander, BreadcrumbBar)을 추가하고 WinUI 2.6의 최신 Windows 스타일을 반영하도록 기존 컨트롤을 업데이트했습니다.
  • 단일 프로젝트 MSIX 패키징은 "빈 앱, 패키지됨..." 템플릿을 사용하여 새 응용 프로그램을 만들어 WinUI에서 지원됩니다.
  • 이제 Windows 버전 1809 이상에서 패키지되지 않은 WinUI 3 앱 배포를 지원합니다. 자세한 내용은 첫 번째 WinUI 3(Windows 앱 SDK) 프로젝트 만들기를 참조하세요.
  • WinUI 3 프로젝트는 이제 대상 버전을 Windows 10, 버전 1809로 설정할 수 있습니다. 이전에는 버전 1903만큼만 낮게 설정할 수 있었습니다.
  • 앱 내 도구 모음, 핫 다시 로드, & WinUI 패키지 앱용 라이브 시각적 트리는 Visual Studio 2022 미리 보기 5 및 GA에서 지원됩니다.

중요한 제한 사항:

  • 패키지된 WinUI 응용 프로그램 및 패키지되지 않은 WinUI 응용 프로그램 모두에 대해 알려진 문제:

    • C++ Windows 런타임 구성 요소를 참조하는 C++ 또는 C# 앱의 런타임 오류:

      • 해결하려면 아래 대상을 Windows 런타임 구성 요소의 .vcxproj 끝에 추가합니다.
      <Target Name="GetPriIndexName">
      <PropertyGroup>
          <!-- Winmd library targets use the default root namespace of the project for the App package name -->
          <PriIndexName Condition="'$(RootNamespace)' != ''">$(RootNamespace)</PriIndexName>
          <!-- If RootNamespace is empty fall back to TargetName -->
          <PriIndexName Condition="$(PriIndexName) == ''">$(TargetName)</PriIndexName>
      </PropertyGroup>
      </Target>
      
      • 예상되는 오류는 WinRT 발생 오류와 유사 합니다. 0x80004005 : ''ms-appx:///BlankPage.xaml'에서 리소스를 찾을 수 없습니다.'.
  • 단일 프로젝트 MSIX(빈 앱, 패키지된 템플릿)를 통해 WinUI 응용 프로그램에 대해 알려진 문제:

    • 누락된 패키지 & Visual Studio를 다시 시작할 때까지 메뉴 항목 게시: 빈 앱, 패키지(데스크톱의 WinUI 3) 프로젝트 템플릿을 사용하여 Visual Studio 2019 및 Visual Studio 2022 모두에서 단일 프로젝트 MSIX로 새 앱을 만들 때, Visual Studio를 닫고 다시 열 때까지 프로젝트에 게시하는 명령이 메뉴에 표시되지 않습니다.
    • 단일 프로젝트 MSIX가 있는 C# 앱은 "C++(v14x) 유니버설 Windows 플랫폼 도구" 선택적 구성 요소가 설치되어 있지 않으면 컴파일되지 않습니다. 자세한 내용은 Windows 앱 SDK용 도구 설치 를 참조하세요.
    • 참조된 Windows 런타임 구성 요소에 정의된 유형을 사용하는 단일 프로젝트 MSIX가 있는 앱의 잠재적인 런타임 오류: 해결하려면 활성화 가능한 클래스 항목을 appxmanifest.xml에 수동으로 추가합니다.
      • C# 응용 프로그램에서 예상되는 오류는 "COMException: 클래스가 등록되지 않음(0x80040154(REGDB_E_CLASSNOTREG))"입니다.
      • C++/WinRT 응용 프로그램에서 예상되는 오류는 "winrt::hresult_class_not_registered"입니다.
  • WinUI 3개의 패키지화되지 않은 앱에 대해 알려진 문제 (패키지화되지 않은 앱):

  • WinUI 응용 프로그램 패키징 및 배포에 대해 알려진 문제:

    • 단일 프로젝트 MSIX(빈 앱, 패키지된 템플릿)가 있는 WinUI 앱에서는 Package 명령이 지원되지 않습니다. 대신 Package & Publish 명령을 사용하여 MSIX 패키지를 만듭니다.
    • Pack 명령을 사용하여 C# 클래스 라이브러리에서 NuGet 패키지를 만들려면 활성 ConfigurationRelease인지 확인합니다.
    • C++ Windows 런타임 구성 요소에서 NuGet 패키지를 만드는 Pack 명령은 지원되지 않습니다.

자세한 내용은 또는 WinUI를 사용하여 개발을 시작하려면 다음을 참조하세요.

Windowing

Windows 앱 SDK는 사용하기 쉬운 이전 Windows.UI.WindowManagement.AppWindow 미리 보기 클래스를 발전시키고 Win32, WPF 및 WinForms를 포함하여 모든 Windows 앱에서 사용할 수 있도록 하는 AppWindow 클래스를 제공합니다.

새 기능:

  • AppWindow는 Windows 사용자 환경 및 다른 앱과 잘 통합되는 사용하기 쉬운 창 설정 시나리오를 허용하는 고급 창 설정 API입니다. 앱 콘텐츠의 시스템 관리 컨테이너에 대한 상위 수준 추상화를 나타냅니다. 이는 콘텐츠를 호스트하는 컨테이너이며, 화면에서 앱의 크기를 조정하고 이동할 때 사용자가 상호 작용하는 엔터티를 나타냅니다. Win32에 익숙한 개발자의 경우 AppWindow를 HWND의 상위 수준 추상화로 볼 수 있습니다.
  • DisplayArea는 HMONITOR의 상위 수준 추상화이며, AppWindow와 동일한 원칙을 따릅니다.
  • DisplayAreaWatcher를 사용하면 개발자가 디스플레이 토폴로지의 변경 내용을 관찰하고 시스템에 현재 정의된 DisplayAreas를 열거할 수 있습니다.

자세한 내용은 앱 창 관리(Windows 앱 SDK)를 참조하세요.

입력

WinUI를 지원하고 개발자가 고급 입력 상호 작용을 달성할 수 있도록 하위 수준 API 표면을 제공하는 입력 API입니다.

새 기능:

  • 포인터 API: PointerPoint, PointerPointPropertiesPointerEventArgs - XAML 입력 API를 사용하여 포인터 이벤트 정보 검색을 지원합니다.
  • InputPointerSource API: 보고서 포인터 입력에 등록된 개체를 나타내며, XAML의 SwapChainPanel API에 대한 포인터 커서 및 입력 이벤트 처리를 제공합니다.
  • 커서 API: 개발자가 커서 비트맵을 변경할 수 있습니다.
  • GestureRecognizer API: 개발자는 포인터 정보가 제공되면 끌어서 길게 누르고 클릭하는 등의 특정 제스처를 인식할 수 있습니다.

중요한 제한 사항:

  • 모든 PointerPoint 고정적인 센터 함수가 제거되었습니다. GetCurrentPoint, GetCurrentPointTransformed, GetIntermediatePoints, GetIntermediatePointsTransformed.
  • Windows 앱 SDK는 포인터 ID를 사용하여 PointerPoint 개체 검색을 지원하지 않습니다. 대신 PointerPoint 멤버 함수 GetTransformedPoint를 사용하여 기존 PointerPoint 개체의 변환된 버전을 검색할 수 있습니다. 중간 지점의 경우 PointerEventArgs 멤버 함수 GetIntermediatePointsGetTransformedIntermediatePoints를 사용할 수 있습니다.
  • 플랫폼 SDK API Windows.UI.Core.CoreDragOperation을 직접 사용하면 WinUI 애플리케이션 내에서 작동하지 않습니다.
  • PointerPoint 속성 RawPositionContactRectRaw는 OS의 기본 값과 동일한 예측 되지 않은 값을 참조하기 때문에 제거되었습니다. 대신 PositionContactRect를 사용합니다. 이제 포인터 예측이 Microsoft.UI.Input.PointerPredictor API 개체를 사용하여 처리됩니다.

앱 수명 주기

대부분의 앱 수명 주기 기능은 이미 UWP 플랫폼에 있으며 데스크톱 응용 그로그램 유형, 특히 패키지되지 않은 콘솔 앱, Win32 앱, Windows Forms 앱 및 WPF 앱에서 사용하기 위해 Windows 앱 SDK로 가져왔습니다. UWP 플랫폼 자체에 동일한 기능이 있기 때문에 이러한 기능의 Windows 앱 SDK 구현은 UWP 앱에서 사용할 수 없습니다.

Important

UWP 앱에서 작업하는 경우 UWP에서 Windows 앱 SDK 마이그레이션을 참조하세요.

비 UWP 앱은 MSIX 패키지로 패키지될 수도 있습니다. 이러한 앱은 Windows 앱 SDK 앱 수명 주기 기능 중 일부를 사용할 수 있지만 이 기능을 사용할 수 있는 매니페스트 접근 방식을 사용해야 합니다. 예를 들어, Windows 앱 SDK RegisterForXXXActivation API를 사용할 수 없으며, 대신 매니페스트를 통해 다양한 활성화를 등록해야 합니다.

패키지된 앱에 대한 모든 제약 조건은 패키지된 WinUI 앱에도 적용되며, 아래에 설명된 대로 추가 고려 사항이 있습니다.

중요 고려 사항:

  • 다양한 활성화: GetActivatedEventArgs

  • 다양한 활성화를 위한 등록/등록 취소

  • 단일/다중 인스턴스화

    • Unpackaged 앱: 완전히 사용할 수 있습니다.
    • 패키지된 앱: 완전히 사용할 수 있습니다.
    • WinUI apps: 앱이 다른 인스턴스를 탐지하고 활성화를 리디렉션하려면 가능한 한 빨리, 윈도우 등을 초기화하기 전에 그렇게 해야 합니다. 이를 활성화하려면 앱이 DISAPE_XAML_GENTED_MAIN을 정의하고 탐지 및 리디렉션을 수행할 수 있는 C#(사용자 정의 Main) 또는 WinMain(C++)을 작성해야 합니다.
    • RedirectActivationToAsync는 비동기 호출이며, 앱이 STA에서 실행 중인 경우 비동기 호출을 기다리지 않아야 합니다. Windows Forms 및 C# WinUI 앱의 경우 필요에 따라 Main을 비동기로 선언할 수 있습니다. C++ WinUI 및 C# WPF 앱의 경우 Main을 비동기로 선언할 수 없으므로 STA를 차단하지 않도록 리디렉션 호출을 다른 스레드로 이동해야 합니다.
    • 자세한 내용은 앱 수명 주기 API를 통해 앱 인스턴스화를 참조하세요.
  • 전원/상태 알림

알려진 문제:

  • 패키지되지 않은 Win32 앱과 충돌하는 동사 처리기의 명령줄 템플릿을 설정하는 경우 파일 형식 연결이 %1을(를) %251(으)로 잘못 인코딩합니다. 대신 부분적인 해결 방법으로 레지스트리 값을 %1(으)로 수동으로 편집할 수 있습니다. 대상 파일 경로에 공백이 있으면 여전히 실패하고 해당 시나리오에 대한 해결 방법이 없습니다.
  • 이러한 단일/다중 인스턴스화 버그는 향후 서비스 패치에서 수정될 예정입니다:
    • x86용으로 컴파일할 때 AppInstance 리디렉션이 작동하지 않음
    • 키 등록 후 등록을 취소하고 다시 등록하면 앱이 충돌함

DWriteCore

DWriteCore는 고품질 텍스트 렌더링, 해상도 독립 윤곽선 글꼴 및 전체 유니코드 텍스트 및 레이아웃 지원을 위한 DirectX API인 DirectWrite의 Windows 앱 SDK 구현입니다. DWriteCore는 Windows 10, 버전 1809(10.0, 빌드 17763)까지의 Windows 버전에서 실행되는 DirectWrite의 한 형태로, 플랫폼 간에서 사용할 수 있습니다.

기능:

DWriteCore에는 몇 가지 예외를 제외하고 DirectWrite의 모든 기능이 포함되어 있습니다.

중요한 제한 사항:

  • DWriteCore에는 다음과 같은 DirectWrite 기능이 포함되어 있지 않습니다:
    • 세션별 글꼴
    • EUDC(최종 사용자 정의 문자) 글꼴
    • 글꼴 스트리밍 API
  • 하위 수준의 렌더링 API는 부분적으로 지원됩니다.
  • DWriteCore는 Direct2D와 상호 운용되지 않지만 IDWriteGlyphRunAnalysisIDWriteBitmapRenderTarget를 사용할 수 있습니다.

자세한 내용은 DWriteCore 개요를 참조하세요.

MRT Core

MRT Core는 Windows 앱 SDK의 일부로 배포되는 최신 Windows 리소스 관리 시스템의 간소화된 버전입니다.

중요한 제한 사항:

  • .NET 프로젝트에서 프로젝트 폴더에 복사하여 붙여넣은 리소스 파일은 앱이 이미 빌드된 경우 F5에 인덱싱되지 않습니다. 이를 해결하려면 앱을 다시 빌드합니다. 이 문제에 대한 자세한 내용은 문제 1503을 참조하세요.

  • .NET 프로젝트에서 리소스 파일이 Visual Studio UI를 사용하여 프로젝트에 추가되면 기본적으로 파일이 인덱싱되지 않을 수 있습니다. 이 문제에 대한 자세한 내용은 문제 1786을 참조하세요. 이 문제를 해결하려면 CSPROJ 파일에서 아래 항목을 제거하세요.

    <ItemGroup>
        <Content Remove="<image file name>" />
    </ItemGroup>
    <ItemGroup>
        <PRIResource Remove="<resw file name>" />
    </ItemGroup>
    
  • 패키지되지 않은 C++ WinUI 앱의 경우 리소스 URI가 올바르게 빌드되지 않습니다. 이 문제를 해결하려면 vcxproj에 다음을 추가합니다.

    <!-- Add the following after <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> -->
    
    <PropertyGroup>
        <AppxPriInitialPath></AppxPriInitialPath>   
    </PropertyGroup>
    

자세한 내용은 MRT Core로 리소스 관리를 참조하세요.

배포

새 기능 및 업데이트:

중요한 제한 사항:

  • 부트스트래퍼 API용 .NET 래퍼는 Windows 앱 SDK에 대한 액세스를 단순화하기 위해 패키지되지 않은 .NET 응용 프로그램에서만 사용하기 위한 것입니다.
  • 완전 신뢰 또는 packageManagement 제한 기능이 있는 MSIX 패키지된 앱만 배포 API를 사용하여 기본 및 싱글톤 패키지 의존성을 설치할 수 있는 권한이 있습니다. 부분-신뢰 패키지 앱에 대한 지원은 이후 릴리스에서 출시될 예정입니다.
  • F5가 x64 시스템에서 DeploymentManager.Initialize 메서드를 사용하는 x86 앱을 테스트하는 경우 WindowsAppRuntimeInstall.exe를 실행하여 x64 프레임워크가 먼저 설치되었는지 확인합니다. 그렇지 않으면 일반적으로 스토어 배포 또는 테스트용 로드를 통해 발생하는 x64 프레임워크를 배포하지 않는 Visual Studio로 인해 NOT_FOUND 오류가 발생합니다.

기타 제한 사항 및 알려진 문제

  • 모든 CPU 빌드 구성에 대한 지원 없음: 모든 CPU를 지원하는 기존 .NET 애플리케이션 또는 구성 요소에 Windows 앱 SDK를 추가할 때 원하는 아키텍처(x86, x64 또는 arm64)를 지정해야 합니다.

  • .NET 5에서 .NET 6으로 업그레이드: Visual Studio UI에서 업그레이드할 때 빌드 오류가 발생할 수 있습니다. 해결 방법은 프로젝트 파일을 TargetFrameworkPackage 수동으로 다음과 같이 업데이트하는 것입니다.

      <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> 
    
  • C++ UWP 도구가 설치되어 있지 않으면 C# 단일 프로젝트 MSIX 앱이 컴파일되지 않습니다. C# 단일 프로젝트 MSIX 프로젝트가 있는 경우 C++(v14x) 유니버설 Windows 플랫폼 도구 선택적 구성 요소를 설치해야 합니다.

  • 여러 버전의 Visual Studio 2019가 설치된 경우 후속 언어 VSIX가 Visual Studio 2019에 설치되지 않습니다. 여러 버전의 Visual Studio 2019(예: 릴리스 및 미리 보기)가 설치된 경우 C++ C#용 Windows 앱 SDK VSIX를 설치하면 두 번째 설치가 실패합니다. 이를 해결하려면 첫 번째 언어 VSIX 이후 Visual Studio 2019용 단일 프로젝트 MSIX 패키징 도구 설치를 제거합니다. 이 문제에 대한 자세한 내용은 이 피드백을 확인하세요.

  • DispatcherQueue.TryEnqueue 대신(디스패처 큐 스레드에서 실행을 재개하기 위해) WIL(WINDOWS 구현 라이브러리)에서 resume_foreground 도우미 함수를 사용하는 것입니다.

    1. 프로젝트에 대한 참조를 Microsoft.Windows.ImplementationLibrary NuGet 패키지에 추가합니다.
    2. #include <wil/cppwinrt_helpers.h>pch.h에 추가합니다.
    3. #include <winrt/Microsoft.UI.Dispatching.h>pch.h에 추가합니다.
    4. 이제 co_await wil::resume_foreground(your_dispatcherqueue); 입니다.