Модернизация приложения UWP с помощью .NET и собственного AOT

Поддержка современного .NET для UWP теперь общедоступна и является типом проекта по умолчанию для приложений UWP на C# в Visual Studio 2026. Visual Studio 2026 включает встроенные шаблоны проектов для создания новых приложений UWP, библиотек классов и компонентов среда выполнения Windows с помощью latest .NET.

Замечание

В этой статье описывается .NET Native, устаревшая технология предварительной компиляции приложений UWP. .NET Native будет продолжать получать исправления безопасности и надежности, но не будут получать новые обновления компонентов. Если вы используете .NET Native, это руководство поможет вам понять преимущества миграции на современные .NET с помощью Native AOT.

Почему перейти на современный .NET?

Обновление приложения UWP с .NET Native до latest .NET с помощью Native AOT обеспечивает несколько ключевых преимуществ:

Доступ к современным функциям .NET

  • функции Latest .NET и C#: используйте latest .NET со всеми современными функциями языка и API
  • Активная разработка: .NET Native будет продолжать получать исправления безопасности и надежности, но не будут получать новые обновления компонентов. Современная .NET активно разрабатывается с регулярными выпусками функций
  • Улучшенная совместимость библиотек: ссылки на более современные версии пакетов NuGet, поддерживающих только .NET 6 и выше.

Улучшенный интерфейс разработчика

  • Более быстрое время сборки: значительно более быстрая компиляция по сравнению с .NET Native
  • Улучшена поддержка отладки: расширенные средства отладки и возможности диагностики для проблем с AOT и обрезкой
  • Файлы проекта SDK-style: современные, чистые .csproj файлы без детализированных конфигураций устаревшего стиля
  • XAML Горячая перезагрузка: полная поддержка XAML и C# Горячая перезагрузка во время разработки
  • Лучшие инструменты: IntelliSense, Live Preview и диагностика XAML работают без проблем

Преимущества производительности

  • компиляция Native AOT: аналогичная или улучшенная производительность запуска по сравнению с .NET Native
  • Оптимизированная среда выполнения: повышение производительности с помощью межпроцессных оптимизаций
  • Статическая проверка: перехват проблем совместимости AOT во время сборки с помощью анализаторов и аннотаций

Добавочный путь миграции к WinUI 3

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

  1. Во-первых, выполните миграцию на последнюю версию .NET и проверьте совместимость с нативным AOT
  2. Затем отдельно перенесите из UWP XAML в WinUI 3 и модель приложения Win32.

Этот двухэтапный подход снижает риск и делает миграцию более управляемой.

Необходимые условия

Для разработки приложений UWP с помощью современных .NET вам потребуется:

  • Visual Studio 2026
  • Нагрузка для инструментов универсальная платформа Windows
  • Windows SDK версии 10.0.26100.0 или более поздней

Действия по установке

  1. Откройте установщик Visual Studio
  2. В разделе Workloads выберите Desktop & Mobile, выберите рабочую нагрузку разработка приложений Windows
  3. В разделе "Необязательный" (в правой области) выберите:
    • средства универсальная платформа Windows — содержит все средства для приложений UWP
    • пакет SDK Windows 11 (10.0.26100.0) — требуется для сборки приложений XAML UWP

Создание нового проекта UWP с использованием современных возможностей .NET

Visual Studio 2026 включает несколько шаблонов проектов для UWP с последней версией .NET платформы. Шаблоны проектов UWP по умолчанию C# теперь предназначены для современных .NET вместо .NET Native:

  • Пустое приложение UWP: стандартное UWP-приложение на XAML с MSIX-пакетом для одного проекта
  • Blank UWP CoreApplication App: для сложных сценариев, связанных с Composition/DirectX — без XAML
  • компонент UWP среда выполнения Windows: управляемый компонент WinRT, использующий последние версии .NET и CsWinRT
  • Библиотека классов UWP: библиотека классов с поддержкой XAML

Подсказка

Устаревшие шаблоны .NET Native (помеченные как ".NET native") по-прежнему доступны для совместимости, но современные шаблоны .NET рекомендуется для всех новых разработок.

Создать новый проект

  1. В Visual Studio выберите File>New>Project
  2. Фильтрация по C# и UWP в раскрывающемся списке типа проекта
  3. Выбор пустого шаблона приложения UWP
  4. Введите имя проекта и нажмите кнопку "Создать"
  5. Выбор целевых и минимальных версий Windows

Общие сведения о современных проектах .NET UWP

Современные проекты .NET UWP используют файлы .csproj в стиле SDK с ключевыми свойствами.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net10.0-windows10.0.26100.0</TargetFramework> <!-- Use the latest supported .NET version -->
    <TargetPlatformMinVersion>10.0.19041.0</TargetPlatformMinVersion>
    <UseUwp>true</UseUwp>
    <EnableMsixTooling>true</EnableMsixTooling>
    <PublishAot>true</PublishAot>
    <DisableRuntimeMarshalling>true</DisableRuntimeMarshalling>
  </PropertyGroup>
</Project>

Основные свойства описаны

  • UseUwp: ссылки на проекции WinRT для Windows.UI.Xaml и настройка CsWinRT для совместимости с UWP
  • UseUwpTools: включает средства, относящиеся к UWP, включая компилятор XAML, возможности проекта и упаковку MSIX. Обратите внимание, что это свойство включено по умолчанию при UseUwp включении.
  • EnableMsixTooling: включает поддержку MSIX в одном проекте (без необходимости в отдельном проекте упаковки)
  • PublishAot: включение компиляции AOT в машинном коде
  • DisableRuntimeMarshalling: оптимизирует производительность для сценариев AOT в машинном коде

Перенос существующих приложений UWP в современные .NET

Чтобы перенести существующее приложение UWP с .NET Native на современный .NET:

Шаг 1. Обновление файла Project

  1. Преобразование существующего .csproj в формат стиля SDK
  2. Добавьте необходимые свойства : UseUwp, EnableMsixToolingзатем PublishAot или SelfContained
  3. Обновление ссылок на пакет NuGet на версии, совместимые с последними .NET

Шаг 2. Совместимость с нативным AOT

Для Native AOT требуется, чтобы весь код был совместим с AOT. Общие проблемы:

  • Использование отражения: добавление соответствующих атрибутов или использование генераторов источников
  • Динамическое создание кода: использование альтернатив во время компиляции
  • Сторонние библиотеки: убедитесь, что все зависимости поддерживают собственный AOT

Дополнительные сведения о совместимости AOT:

Проекты кода приложения:

<PropertyGroup>
  <PublishAot>true</PublishAot>
</PropertyGroup>

В проектах библиотек можно задать следующее:

<PropertyGroup>
  <IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>

Если ваше существующее приложение использует файл директив runtime (rd.xml) для .NET Native, вам потребуется учитывать требования рефлексии и тримминга по-другому с помощью Native AOT, используя атрибуты и анализаторы.

Подсказка

Используйте [GeneratedBindableCustomProperty] на классах, которым требуется {Binding} в XAML. Эти классы должны быть помечены как partial.

Шаг 3. Тщательное тестирование

  1. Соберите приложение в режиме Release с включенным Native AOT
  2. Проверка всех функциональных возможностей. Код, скомпилированный AOT, работает одинаково со сборками отладки при правильном аннотации.
  3. Устраните любые предупреждения об обрезке или AOT перед публикацией

Дополнительные сведения о совместимости нативного AOT см. в разделах Введение в предупреждения AOT и Подготовка библиотек .NET для упрощения.

Собственный AOT и native .NET Native

Хотя оба процесса компилируют ваше приложение в собственный код, Native AOT отличается от .NET Native по важным аспектам:

Статическая проверка

  • Собственный AOT: использует статический анализ с анализаторами и аннотациями кода для проверки совместимости AOT на этапе сборки
  • .NET Native: использует эвристические и резервные логики, которые могут привести к сбою среды выполнения, сложной для отладки

Производительность и размер

  • Производительность запуска: собственный AOT обеспечивает аналогичную или лучшую производительность запуска (~5% улучшения в тестах производительности)
  • Двоичный размер: ожидается увеличение до 4 МБ для небольших приложений из-за автономного развертывания (без общего пакета платформы)
  • Производительность среды выполнения: повышение производительности внутреннего кода с помощью межпроцессной оптимизации

Опыт разработчика

  • Собственный AOT: проблемы, возникающие во время разработки, сопровождаются четкими сообщениями об ошибках и поддержкой отладки
  • .NET Native: медленное время сборки, различия между отладкой и выпуском и проблемами среды выполнения с сложной диагностикой

Отражение и метаданные

  • Собственный AOT: использует атрибуты времени компиляции, такие как [DynamicallyAccessedMembers] и генераторы источников для обработки отражения
  • .NET Native: использует директивы runtime (rd.xml) files для указания требований к метаданным во время сборки

Дополнительные сведения об ограничениях .NET Native см. в разделе Getting Started with .NET Native и .NET Native and Compilation.

Публикация в Microsoft Store

При публикации приложений UWP с новейшим .NET в магазине Microsoft:

  1. Сборка в конфигурации выпуска с включенным PublishAot или SelfContained.
  2. Убедитесь, что предупреждения AOT или обрезки отсутствуют
  3. Создание пакета MSIX как обычно
  4. Отправка в Центр партнеров

Замечание

Вы можете игнорировать ошибки приложение для Windows Набора сертификации (WACK), связанные с "неподдерживаемым API Win32". Центр партнеров больше не осуществляет строгую проверку API Win32 для приложений UWP. Безопасность AppContainer обрабатывает разрешения в процессе выполнения.

Сложные сценарии

Острова UWP XAML

С помощью современных .NET можно разместить элементы управления XAML UWP в приложениях Win32 (WinForms, WPF, WinUI 3). Это позволяет:

  • Размещение элементов управления UWP, таких как MapControl, в упакованных приложениях с полным доверием
  • Решение с одним проектом, объединяющее компоненты приложения Win32 и UWP
  • Отдельный собственный двоичный файл без отдельных цепочк инструментов сборки

Использование последних пакетов NuGet

Современная поддержка .NET позволяет ссылаться на современные пакеты NuGet, требующие .NET 6+, устраняя ограничение .NET Native на .NET Standard 2.0.

Дополнительные ресурсы

См. также

.NET встроенная документация (устаревшая версия)

Ресурсы миграции