Поделиться через


Заметки о выпуске стабильного канала для пакета SDK для приложений Windows 1.0

Стабильный канал предоставляет выпуски пакета SDK для приложений Windows, которые поддерживаются приложениями в рабочих средах. Приложения, использующие стабильный выпуск пакета SDK для приложений Windows, также можно опубликовать в Microsoft Store.

Важные ссылки:

Последний выпуск стабильного канала:

Скачиваемые файлы пакета SDK для приложений для Windows

Примечание.

Расширения Visual Studio для пакета SDK для приложений Windows (VSIX) больше не распределяются в виде отдельной загрузки. Они доступны в Visual Studio Marketplace в Visual Studio.

Версия 1.0.4

Это выпуск пакета SDK для приложений Windows, содержащий критические исправления ошибок для выпуска 1.0.

Исправления ошибок (1.0.4)

  • Исправлена проблема, из-за которой AppBars при использовании в качестве Page.TopAppBar или Page.BottomAppBar не отображался на экране.
  • Исправлена проблема, из-за которой приложения с именем пакета 12 символов или меньше, которые используют элемент управления WinUI из MUXControls.dll немедленно завершатся сбоем. Дополнительные сведения см . в статье 6360 на сайте GitHub.
  • Исправлены проблемы с вводом сенсорного ввода, которые вызывают проблемы с сочетаниями клавиш и другими сценариями. Дополнительные сведения см . в статье о проблеме 6291 на сайте GitHub.
  • Исправлена проблема, из-за которой приложения, упакованные с помощью MSIX или развернутые как автономные, чтобы не удалось развернуть.
  • Исправлена проблема, из-за которой приложения иногда завершались сбоем во время операции перетаскивания. Дополнительные сведения см . в статье 7002 на сайте GitHub.

Версия 1.0.3

Это выпуск пакета SDK для приложений Windows, содержащий критические исправления ошибок для выпуска 1.0.

Исправления ошибок (1.0.3)

  • Исправлена проблема, из-за которой приложения C# с WebView2 завершались сбоем при запуске, когда среда выполнения C/C++ (CRT) не установлена.
  • Исправлены проблемы с вводом сенсорного ввода, которые вызывают проблемы с сочетаниями клавиш и другими сценариями. Дополнительные сведения см . в статье о проблеме 6291 на сайте GitHub.

Примечание. Обычно мы не добавляем функциональные возможности в выпуск обслуживания, но исправление WebView2 этого выпуска требует обновления до последней версии пакета SDK WebView2 (1020.46 до 1185.39). Дополнительные сведения о среде выполнения WebView2 см. в заметках о выпуске пакета SDK WebView2 1.0.1185.39 и распространении приложения и среды выполнения WebView2.

Версия 1.0.2

Это выпуск пакета SDK для приложений Windows, содержащий критические исправления ошибок для выпуска 1.0.

Исправления ошибок (1.0.2)

  • Исправлена проблема с циклом макета, приводя к сбою приложения при прокрутке до конца ListView. Дополнительные сведения см . в статье 6218 на сайте GitHub.
  • Исправлена проблема, из-за которой приложения C# завершались сбоем при запуске, когда среда выполнения C/C++ (CRT) не установлена. Однако CRT по-прежнему требуется для приложений C# с помощью WebView2. Дополнительные сведения см . в статье 2117 на сайте GitHub.
  • Исправлена проблема, из-за которой приложения с одним проектом MSIX не создавали файл appinstaller. Дополнительные сведения см . в статье 1821 на сайте GitHub.
  • Исправлена проблема, из-за которой приложения WinUI не поддерживали .NET 6 dotnet build.

Версия 1.0.1

Это выпуск пакета SDK для приложений Windows, включающий критические исправления ошибок и поддержку нескольких окон для выпуска 1.0.

Исправления ошибок (1.0.1)

  • Исправлена проблема, из-за которой mddBootstrapAutoinitializer не компилировался с включенными НеявнымиUsings. Дополнительные сведения см . в статье 1686 на сайте GitHub.
  • Исправлена проблема, из-за которой фокус в WebView2 был неожиданно потерян, что приводило к проблемам ввода и выбора. Дополнительные сведения см . в статье о проблеме 5615 и выпуске 5570 на GitHub.
  • Исправлена проблема, из-за которой панель инструментов в приложении WinUI 3 была неизменяемой при использовании настраиваемой строки заголовка в приложении WinUI 3.
  • Исправлена проблема, из-за которой макет привязки не отображалась при использовании настраиваемой строки заголовка в приложении WinUI 3. Дополнительные сведения см . в статье о проблеме 6333 и выпуске 6246 на GitHub.
  • Исправлена проблема, из-за которой возникло исключение при задании свойства Window.ExtendsContentIntoTitleBar при вызове панели Window.SetTitlebar с по-прежнему загрузкой UIElement.
  • Исправлена проблема, из-за которой приложения MSIX с одним проектом не поддерживали dotnet build.
  • Исправлена проблема, из-за которой после установки упаковаемого приложения не устанавливались непакованные приложения. Дополнительные сведения см . в статье 1871 на сайте GitHub.
  • Исправлена проблема с снижением производительности во время операций перетаскивания мыши.
  • Исправлен сбой при вызове GetWindowIdFromWindow() в распакованных приложениях. Дополнительные сведения см . в обсуждении 1891 на сайте GitHub.

Ограничения и известные проблемы для версии 1.0 также применяются к версии 1.0.1.

Кроме того, для приложений с настраиваемыми строками заголовков мы внесли изменения в этом выпуске (и исправлены многочисленные проблемы), которые включают исправления в окно стекла, используемое для операций перетаскивания. Рекомендуется использовать значения и поведение по умолчанию (дать им попробовать!). Если в строке заголовка использовались поля, чтобы кнопки заголовка по умолчанию были интерактивными, рекомендуется визуализировать область перетаскивания, установив фон строки заголовка красным и изменив поля, чтобы расширить область перетаскивания на элементы управления субтитрами.

Новые возможности

Мы стабилизировали и включили создание нескольких окон в одном потоке в приложениях WinUI 3. Дополнительные сведения см . в выпуске 5918 .

Версия 1.0

В следующих разделах описываются новые и обновленные функции, ограничения и известные проблемы для версии 1.0.

WinUI 3

WinUI 3 — это платформа пользовательского интерфейса (UX) для пакета SDK для приложений Windows. В этом выпуске мы добавили несколько новых функций из пакета SDK для приложений Windows 0.8 и стабилизировали проблемы из выпусков предварительной версии 1.0.

Новые функции и обновления:

  • Мы добавили новые элементы управления (PipsPager, Expander, BreadcrumbBar) и обновили существующие элементы управления, чтобы отразить последние стили Windows из WinUI 2.6.
  • Упаковка MSIX с одним проектом поддерживается в WinUI путем создания нового приложения с помощью "Пустое приложение, упаковаемое..." шаблон.
  • Теперь мы поддерживаем развертывание приложений WinUI 3, которые не упаковываются в Windows версии 1809 и выше. Дополнительные сведения см . в первом проекте WinUI 3 (пакет SDK для приложений Windows).
  • Проекты WinUI 3 теперь могут задать целевую версию до Windows 10 версии 1809. Ранее они могут быть заданы только ниже версии 1903.
  • Панель инструментов в приложении Горячая перезагрузка и динамическое визуальное дерево для WinUI поддерживаются в Visual Studio 2022 preview 5 и GA.

Важные ограничения:

  • Известные проблемы для упакованных и распакованных приложений WinUI:

    • Ошибка во время выполнения в приложениях C++ или C#, ссылающихся на компонент среда выполнения Windows C++:

      • Чтобы устранить проблему, добавьте приведенный ниже целевой объект в конец .vcxproj компонента среда выполнения Windows:
      <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".
  • Известные проблемы для приложений WinUI с одним проектом MSIX (пустое приложение, шаблон packaged):

    • Отсутствует пункт меню "Пакет и публикация", пока не перезапустить Visual Studio: при создании нового приложения с одним проектом MSIX в Visual Studio 2019 и Visual Studio 2022 с помощью шаблона проекта "Пустое приложение" (WinUI 3 в классическом приложении) команда публикации проекта не отображается в меню, пока не закройте и повторно откройте Visual Studio.
    • Приложение C# с одним проектом MSIX не будет компилироваться без дополнительного компонента C++ (v14x) универсальная платформа Windows Tools. Дополнительные сведения см. в статье "Установка средств для пакета SDK для приложений Windows".
    • Потенциальная ошибка во время выполнения в приложении с одним проектом MSIX, которая использует типы, определенные в указанной среда выполнения Windows компоненте: чтобы устранить, вручную добавьте в appxmanifest.xml записи активируемых классов.
      • Ожидаемая ошибка в приложениях C# — COMException: класс не зарегистрирован (0x80040154 (REGDB_E_CLASSNOTREG)).
      • Ожидаемая ошибка в приложениях C++/WinRT — winrt::hresult_class_not_registered.
  • Известные проблемы для приложений WinUI 3, которые не упаковываются (не упакованные приложения):

  • Известные проблемы для упаковки и развертывания приложений WinUI:

    • Эта Package команда не поддерживается в приложениях WinUI с одним проектом MSIX (пустое приложение, упакованный шаблон). Вместо этого используйте Package & Publish команду для создания пакета MSIX.
    • Чтобы создать пакет NuGet из библиотеки классов C# с Pack помощью команды, убедитесь, что активен Configuration Release.
    • Команда Pack не поддерживается в среда выполнения Windows компонентах C++ для создания пакета NuGet.

Дополнительные сведения о начале разработки с помощью WinUI см. в следующем разделе:

Оконное расширение

Пакет SDK для приложений Windows предоставляет класс AppWindow , который развивается в предыдущем удобном классе Windows.UI.WindowManagement.AppWindow preview и делает его доступным для всех приложений Windows, включая Win32, WPF и WinForms.

Новые функции:

  • AppWindow — это высокоуровневый API окон, который позволяет легко использовать сценарии окна, которые хорошо интегрируются с пользовательским интерфейсом Windows и другими приложениями. Представляет высокоуровневую абстракцию управляемого системой контейнера содержимого приложения. Это контейнер, в котором размещено содержимое, и представляет сущность, с которой пользователи взаимодействуют при изменении размера и перемещении приложения на экране. Для разработчиков, знакомых с Win32, AppWindow можно рассматривать как высокоуровневую абстракцию HWND.
  • DisplayArea представляет высокоуровневую абстракцию HMONITOR, следуя тем же принципам, что и AppWindow.
  • DisplayAreaWatcher позволяет разработчику наблюдать за изменениями топологии отображения и перечислять DisplayAreas в настоящее время, определенные в системе.

Дополнительные сведения см. в разделе "Управление окнами приложений" (пакет SDK для приложений Для Windows).

Входные данные

Это интерфейсы API ввода, которые поддерживают WinUI и предоставляют поверхность API более низкого уровня для разработчиков для достижения более сложных взаимодействий с входными данными.

Новые функции:

  • API указателя: PointerPoint, PointerPointProperties и PointerEventArgs для поддержки получения сведений о событиях указателя с помощью API ввода XAML.
  • API InputPointerSource: представляет объект, зарегистрированный для ввода указателя отчета, и предоставляет курсор указателя и обработку входных событий для API SwapChainPanel XAML.
  • API курсора: позволяет разработчикам изменять растровое изображение курсора.
  • API ЖестаRecognizer: позволяет разработчикам распознавать определенные жесты, такие как перетаскивание, удержание и щелчки при указании сведений указателя.

Важные ограничения:

  • Все функции статической фабрики PointerPoint удалены: GetCurrentPoint, GetCurrentPointTransformed, GetIntermediatePoints и GetIntermediatePointsTransformed.
  • Пакет SDK для приложений Windows не поддерживает получение объектов PointerPoint с идентификаторами указателей. Вместо этого можно использовать функцию-член PointerPoint GetTransformedPoint для получения преобразованной версии существующего объекта PointerPoint. Для промежуточных точек можно использовать функции-члены PointerEventArgs GetIntermediatePoints и GetTransformedIntermediatePoints.
  • Прямое использование API пакета SDK платформы Windows.UI.Core.CoreDragOperation не будет работать с приложениями WinUI.
  • Свойства PointerPoint RawPosition и ContactRectRaw были удалены, так как они ссылались на непрогнозируемые значения, которые совпадали с обычными значениями в ОС. Вместо этого используйте Position и ContactRect. Прогнозирование указателя теперь обрабатывается с помощью объекта API Microsoft.UI.Input.PointerPredictor .

Жизненный цикл приложения

Большинство функций жизненного цикла приложений уже существуют на платформе UWP и были добавлены в пакет SDK для приложений Windows для использования типами классических приложений, особенно распакованы консольные приложения, приложения Win32, приложения Windows Forms и приложения WPF. Реализация пакета SDK для приложений Windows не может использоваться в приложениях UWP, так как в самой платформе UWP существуют эквивалентные функции.

Внимание

Если вы работаете с приложением UWP, перейдите к разделу "Миграция из UWP" в пакет SDK для приложений Windows.

Приложения, отличные от UWP, также могут быть упакованы в пакеты MSIX. Хотя эти приложения могут использовать некоторые функции жизненного цикла приложений пакета SDK для Windows, они должны использовать подход манифеста, где это доступно. Например, они не могут использовать API-интерфейсы RegisterForXXXXActivation пакета SDK для Приложений Windows и должны зарегистрировать для расширенной активации с помощью манифеста.

Все ограничения для упакованных приложений также применяются к приложениям WinUI, которые упаковываются, и существуют дополнительные рекомендации, как описано ниже.

Важные сведения:

  • Расширенная активация: GetActivatedEventArgs

  • Регистрация и отмена регистрации для расширенной активации

    • Распаковка приложений: полностью доступные для использования.
    • Упакованные приложения: вместо этого не используется манифест MSIX приложения.
    • Дополнительные сведения см. в разделе "Расширенные возможности активации" с помощью API жизненного цикла приложения.
  • Однократное или многоуровневое развертывание

    • Распаковка приложений: полностью доступные для использования.
    • Упакованные приложения: полностью доступные для использования.
    • Приложения WinUI: если приложение хочет обнаружить другие экземпляры и перенаправить активацию, оно должно сделать это как можно раньше и перед инициализацией любых окон и т. д. Чтобы включить это, приложение должно определить DISABLE_XAML_GENERATED_MAIN и написать настраиваемый main (C#) или WinMain (C++), где он может выполнять обнаружение и перенаправление.
    • RedirectActivationToAsync — это асинхронный вызов, и вы не должны ожидать асинхронного вызова, если приложение работает в STA. Для приложений WinUI для Windows Forms и C# при необходимости можно объявить Main асинхронным. Для приложений WinUI и C# WPF C++ нельзя объявлять main асинхронным, поэтому вместо этого необходимо переместить вызов перенаправления в другой поток, чтобы не блокировать STA.
    • Дополнительные сведения см. в разделе "Подключение приложений" с помощью API жизненного цикла приложения.
  • Уведомления о power/State

    • Распаковка приложений: полностью доступные для использования.
    • Упакованные приложения: полностью доступные для использования.
    • Дополнительные сведения см. в разделе "Управление питанием" с помощью API жизненного цикла приложения.

Известная проблема.

  • Сопоставления типов файлов неправильно кодируют %1 в %251 при настройке шаблона командной строки обработчика команд команды, который завершает работу распаковки приложений Win32. Вы можете вручную изменить значение реестра, чтобы он был %1 вместо этого в качестве частичного обходного решения. Если целевой путь к файлу имеет место в нем, он по-прежнему завершится ошибкой, и для этого сценария нет обходного решения.
  • Эти ошибки с одним и несколькими подключениями будут исправлены в предстоящем исправлении обслуживания:
    • Перенаправление AppInstance не работает при компиляции для x86
    • Регистрация ключа, отмена его регистрации и повторная регистрация приводит к сбою приложения.

DWriteCore

DWriteCore — это реализация пакета SDK для приложений Для Windows DirectWrite, которая является API DirectX для высококачественной отрисовки текста, разрешения не зависящих от разрешения шрифтов структуры и полной поддержки текста и макета Юникода. DWriteCore — это форма DirectWrite, которая работает в версиях Windows до Windows 10 версии 1809 (10.0; Сборка 17763) и открывает дверь для использования кроссплатформенной платформы.

Возможности:

DWriteCore содержит все функции DirectWrite с несколькими исключениями.

Важные ограничения:

  • DWriteCore не содержит следующие функции DirectWrite:
    • Шрифты для сеанса
    • Шрифты определяемых пользователем символов (EUDC)
    • API потоковой передачи шрифтов
  • Поддержка API отрисовки низкого уровня является частичной.
  • DWriteCore не взаимодействует с Direct2D, но можно использовать IDWriteGlyphRunAnalysis и IDWriteBitmapRenderTarget.

Дополнительные сведения см. в обзоре DWriteCore.

MRT Core

MRT Core — это упрощенная версия современной системы управления ресурсами Windows, которая распространяется в составе пакета SDK для приложений Windows.

Важные ограничения:

  • В проектах .NET файлы ресурсов, скопированные в папку проекта, не индексируются на F5, если приложение уже создано. В качестве обходного решения перестройте приложение. Дополнительные сведения см . в статье 1503 .

  • В проектах .NET, когда файл ресурсов добавляется в проект с помощью пользовательского интерфейса Visual Studio, файлы могут не индексироваться по умолчанию. Дополнительные сведения см . в статье 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".

Развертывание

Новые функции и обновления:

  • Вы можете автоматически инициализировать пакет SDK для приложений Windows с помощью WindowsPackageType project свойства, чтобы загрузить среду выполнения пакета SDK для приложений Windows и вызвать API пакета SDK для приложений Windows. Инструкции см. в статье "Создание первого проекта WinUI 3 (пакет SDK для приложений Windows).
  • Распакованные приложения могут развертывать пакет SDK для приложений Windows, интегрируя в автономный установщик пакета SDK .exe для приложений Windows в существующую программу установки MSI или программы установки. Дополнительные сведения см . в руководстве по развертыванию пакета SDK для приложений, зависящих от платформы, с внешним расположением или распаковкой.
  • Неупакованные приложения .NET также могут использовать оболочку .NET для API загрузчика, чтобы динамически принимать зависимость от пакета пакета sdk для приложений Windows во время выполнения. Дополнительные сведения о оболочке .NET см . в библиотеке оболочки .NET.
  • Упакованные приложения могут использовать API развертывания, чтобы проверить и убедиться, что на компьютере установлены все необходимые пакеты. Дополнительные сведения о работе API развертывания см . в руководстве по развертыванию пакета SDK для приложений, зависящих от платформы.

Важные ограничения:

  • Оболочка .NET для API загрузчика предназначена только для использования распакованными приложениями .NET для упрощения доступа к пакету SDK для приложений Windows.
  • Только упакованные приложения MSIX, которые являются полным доверием или имеют ограниченные возможности packageManagement , имеют разрешение на использование API развертывания для установки зависимостей основного и одноэлементного пакета. Поддержка упакованных приложений с частичным доверием будет поступать в последующих выпусках.
  • При тестировании приложения x86, использующего метод DeploymentManager.Initialize в системе x64, убедитесь, что платформа x64 сначала установлена, выполнив WindowsAppRuntimeInstall.exe. В противном случае возникнет ошибка NOT_FOUND из-за того, что Visual Studio не развертывает платформу x64, которая обычно возникает при развертывании или загрузке неопубликованного хранилища.

Другие ограничения и известные проблемы

  • Нет поддержки любой конфигурации сборки ЦП: при добавлении пакета SDK для приложений Windows к существующему приложению или компоненту .NET, поддерживающему любой ЦП, необходимо указать нужную архитектуру: x86x64 или arm64.

  • Обновление с .NET 5 до .NET 6. При обновлении в пользовательском интерфейсе Visual Studio могут возникнуть ошибки сборки. В качестве обходного решения вручную обновите файл TargetFrameworkPackage проекта следующим образом:

      <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> 
    
  • Однопроектное приложение MSIX C# не компилируется, если средства UWP на C++ не установлены. Если у вас есть проект MSIX для C# с одним проектом, вам потребуется установить дополнительный компонент C++ (v14x) универсальная платформа Windows Tools.

  • При установке нескольких версий Visual Studio 2019 в Visual Studio 2019 не удается установить последующий язык VSIX. Если установлено несколько версий Visual Studio 2019 (например, выпуск и предварительная версия), а затем установите VSIX пакета SDK для Приложений Windows для C++ и C#, то вторая установка завершится ошибкой. Чтобы устранить эту проблему, удалите средства упаковки MSIX для Visual Studio 2019 после первого языка VSIX. Дополнительные сведения об этой проблеме см . в этом отзыве .

  • Альтернативой DispatcherQueue.TryEnqueue (для возобновления выполнения в потоке очереди диспетчера) является использование вспомогательной функции resume_foreground в библиотеке реализации Windows (WIL):

    1. Добавьте ссылку на проект в пакет NuGet Microsoft.Windows.ImplementationLibrary .
    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);.