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


Руководство по развертыванию пакета SDK для приложений Windows для автономных приложений

Проект пакета SDK для приложений Windows зависит от платформы по умолчанию. Чтобы перейти на автономное развертывание, выполните приведенные ниже действия ( термины, зависящие от платформы и автономные , описаны в обзоре развертывания пакета SDK для приложений Для Windows).

  • В Visual Studio щелкните правой кнопкой мыши узел проекта приложения и выберите команду "Изменить файл проекта", чтобы открыть файл проекта приложения для редактирования. Для проекта C++ сначала щелкните " Выгрузить проект".
  • В файле проекта приложения в основном PropertyGroupдобавьте <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> , как показано на снимке экрана ниже.

Screenshot showing the WindowsAppSDKSelfContained property set in a project file.

  • Для упакованных проектов в файле проекта приложения в конце файла перед закрытием </Project>добавьте Target приведенный ниже файл.
  <Target Name="_RemoveFrameworkReferences" BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
    <ItemGroup>
      <FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="$([System.String]::Copy('%(FrameworkSdkReference.SDKName)').StartsWith('Microsoft.WindowsAppRuntime.'))" />
    </ItemGroup>
  </Target>

Заметка

Это обходное решение для ошибки в пакете SDK для приложений Windows 1.1 и не требуется с пакетом SDK для приложений Windows 1.2. Это требуется только для упакованных проектов.

  • Сохраните и закройте файл проекта.
  • Щелкните " Перезагрузить проект".
  • Если вы используете проект упаковки приложений Windows (а не один проект MSIX, который вы получаете с пустым приложением, упакованным (WinUI 3 в desktop)), выполните все указанные выше изменения в файле проекта для проекта упаковки.

Заметка

Проекты библиотеки не должны быть изменены. Автономное развертывание должно быть настроено только в проектах приложений (и, где применимо, в проекте упаковки приложений Windows).

Примеры приложений см . в примерах автономного развертывания пакета SDK для Приложений Windows.

WindowsAppSDKSelfContained Установив свойство true в файле проекта, содержимое пакета Windows App SDK Framework будет извлечено в выходные данные сборки и развернуто в рамках приложения.

Заметка

Приложения .NET должны быть опубликованы как автономные , а также быть полностью автономными. В этом примере описано, как настроить автономный .NET с профилями публикации. dotnet publish еще не поддерживается в пакете SDK для приложений Windows 1.1.

Заметка

Приложения C++ должны использовать гибридную CRT , а также полностью автономно. Импорт hybridCRT.props из Directory.Build.props является рекомендуемым способом настройки для всех проектов в решении (см. пример в Directory.Build.props). Упаковаированное приложение также должно быть задано <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning> в файле проекта. См. пример приложения автономного развертывания для использования гибридной CRT.

Если приложение упаковано (дополнительные сведения см. в разделе "Обзор развертывания"), зависимости пакета SDK для приложений Windows будут включены в пакет MSIX в виде содержимого. Развертывание приложения по-прежнему требует регистрации пакета MSIX, как и любого другого упаковаемого приложения.

Если приложение упаковываются с внешним расположением или распаковываются, зависимости пакета SDK для приложений Windows копируются рядом .exe с выходными данными сборки. Вы можете развернуть полученные файлы xcopy или включить их в пользовательский установщик.

Зависимости от дополнительных пакетов MSIX

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

Это означает, что если вы хотите использовать эти API в автономном приложении, то у вас есть следующие параметры:

  1. Вы можете сделать функциональные возможности необязательными и осветить его только в том случае, если это возможно. Вызов метода IsSupported API (PushNotificationManager.IsSupported и AppNotificationManager.IsSupported) позволит динамически проверять, доступны ли API-интерфейсы вызывающему приложению в системе, на которую она работает.
    • Это обеспечивает безопасное, условное, необязательное использование API без ущерба для простоты автономного развертывания.
    • Только если службы ОС установлены за пределами развертывания приложения, приложение будет освещать соответствующие функциональные возможности. Но на самом деле есть некоторые случаи, когда API-интерфейсы будут работать даже без пакета Singleton, так что вызов IsSupported для проверки часто является хорошей идеей.
  2. Разверните необходимые пакеты MSIX в процессе установки приложения.
    • Это позволяет зависеть от API во всех сценариях. Но требование развертывания пакета MSIX для зависимостей в рамках развертывания приложения может скомпрометированную простоту автономного развертывания.
  3. Не используйте API.
    • Рассмотрим альтернативные API, обеспечивающие аналогичную функциональность без дополнительных требований к развертыванию.

Отказ от автоматической поддержки UndockedRegFreeWinRT

Свойство проекта WindowsAppSdkUndockedRegFreeWinRTInitialize было представлено в версии 1.2 пакета SDK для приложений Windows (из стабильного канала). Если для этого свойства задано значение true , он гарантирует, что при запуске приложения автоматически включена реализация пакета SDK для приложений windows SDK для отключенной регистрации (UndockedRegFreeWinRT). Эта поддержка необходима для распаковки автономных приложений.

Значение по умолчанию для WindowsAppSdkUndockedRegFreeWinRTInitialize имеет значение true, если для свойства проекта WindowsAppSDKSelfContained задано значение true, и WindowsPackageType имеет значение None, и (начиная с версии 1.2 пакета SDK для приложений Windows) свойство OutputType имеет значение Exe или WinExe (то есть, проект создает исполняемый файл). Последнее условие заключается в том, чтобы предотвратить добавление автоматической поддержки UndockedRegFreeWinRT в библиотеки классов DLL и других не исполняемых файлов по умолчанию. Если вам нужна автоматическая поддержка UndockedRegFreeWinRT в неисполняемом файле (например, тестовая библиотека DLL, загруженная исполняемым файлом узла, который не инициализирует UndockedRegFreeWinRT), вы можете явно включить его в проекте<WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>.