Заметки о выпуске стабильного канала для пакета SDK для приложений Windows 1.0
Стабильный канал предоставляет выпуски пакета SDK для приложений Windows, которые поддерживаются приложениями в рабочих средах. Приложения, использующие стабильный выпуск пакета SDK для приложений Windows, также можно опубликовать в Microsoft Store.
Важные ссылки:
- Если вы хотите обновить существующее приложение с более старой версии пакета SDK для приложений Windows до более новой версии, ознакомьтесь с обновлением существующих проектов до последнего выпуска пакета SDK для приложений Windows.
Последний выпуск стабильного канала:
Скачиваемые файлы пакета 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, которые не упаковываются (не упакованные приложения):
- Некоторые API требуют удостоверения пакета и не поддерживаются в распакованных приложениях, таких как:
- ApplicationData
- StorageFile.GetFileFromApplicationUriAsync
- StorageFile.CreateStreamedFileFromUriAsync
- ApiInformation (не поддерживается в Windows 10)
- Package.Current
- Любой API в пространстве имен Windows.ApplicationModel.Resources
- Любой API в пространстве имен Microsoft.Windows.ApplicationModel.Resources
- Некоторые API требуют удостоверения пакета и не поддерживаются в распакованных приложениях, таких как:
Известные проблемы для упаковки и развертывания приложений 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
- Распаковка приложений: полностью доступные для использования.
- Упакованные приложения: Usable, но эти приложения также могут использовать платформу
GetActivatedEventArgs
. Обратите внимание, что платформа определяет Windows.ApplicationModel.AppInstance, а пакет SDK для приложений Windows определяет Microsoft.Windows.AppLifecycle.AppInstance. И хотя приложения UWP могут использовать классы, такие какFileActivatedEventArgs
иLaunchActivatedEventArgs
приложения, использующие функцию AppLifecycle пакета SDK для Windows, должны использоватьActivatedEventArgs
интерфейсы не классы (например,IFileActivatedEventArgs
иILaunchActivatedEventArgs
т. д.). - Приложения WinUi: приложение WinUI App.OnLaunched предоставляется microsoft.UI.Xaml.LaunchActivatedEventArgs, в то время как платформа
GetActivatedEventArgs
возвращает объект Windows.ApplicationModel.IActivatedEventArgs, а WindowsAppSDKGetActivatedEventArgs
возвращает объект Microsoft.Windows.AppLifecycle.AppActivationArguments, который может представлять платформуLaunchActivatedEventArgs
. - Дополнительные сведения см. в разделе "Расширенные возможности активации" с помощью API жизненного цикла приложения.
Регистрация и отмена регистрации для расширенной активации
- Распаковка приложений: полностью доступные для использования.
- Упакованные приложения: вместо этого не используется манифест 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, поддерживающему любой ЦП, необходимо указать нужную архитектуру:
x86
x64
или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):
- Добавьте ссылку на проект в пакет NuGet Microsoft.Windows.ImplementationLibrary .
- Добавьте
#include <wil/cppwinrt_helpers.h>
в свойpch.h
. - Добавьте
#include <winrt/Microsoft.UI.Dispatching.h>
в свойpch.h
. - Теперь
co_await wil::resume_foreground(your_dispatcherqueue);
.
См. также
- Последние заметки о выпуске канала предварительной версии для пакета SDK для приложений Windows
- Последние заметки о выпуске экспериментального канала для пакета SDK для приложений Windows
- Установка инструментов для Windows App SDK
- Создание первого проекта WinUI 3 (пакет SDK для приложений Windows)
- Использование пакета Windows App SDK в существующем проекте
- Общие сведения о развертывании
Windows developer