Публикация упаковаемого приложения .NET MAUI для Windows с помощью ИНТЕРФЕЙСА командной строки

При распространении приложения .NET Multi-platform App UI (.NET MAUI) для Windows можно опубликовать приложение и его зависимости в папку для развертывания в другой системе. Вы также можете упаковить приложение в пакет MSIX, который имеет множество преимуществ для пользователей, устанавливающих приложение. Дополнительные сведения о преимуществах MSIX см. в разделе "Что такое MSIX?"

Создание сертификата подписи

Для публикации приложения необходимо использовать сертификат подписи. Этот сертификат используется для подписи пакета MSIX. Ниже показано, как создать и установить самозаверяющий сертификат с помощью PowerShell:

Примечание.

При создании и использовании самозаверяющего сертификата могут запускать приложение только пользователи, которые устанавливают и доверяют сертификату. Это легко реализовать для тестирования, но это может предотвратить установку приложения дополнительными пользователями. Когда вы будете готовы опубликовать приложение, рекомендуется использовать сертификат, выданный доверенным источником. Эта система централизованного доверия помогает гарантировать, что экосистема приложений имеет уровни проверки для защиты пользователей от вредоносных субъектов.

  1. Откройте терминал PowerShell и перейдите в каталог с проектом.

  2. New-SelfSignedCertificate Используйте команду для создания самозаверяющего сертификата.

    Значение <PublisherName> отображается пользователю при установке приложения, укажите собственное значение и опустите < > символы. Параметр можно задать FriendlyName для любой строки нужного текста.

    New-SelfSignedCertificate -Type Custom `
                              -Subject "CN=<PublisherName>" `
                              -KeyUsage DigitalSignature `
                              -FriendlyName "My temp dev cert" `
                              -CertStoreLocation "Cert:\CurrentUser\My" `
                              -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")
    
  3. Используйте следующую команду PowerShell, чтобы запросить хранилище сертификатов для созданного сертификата:

    Get-ChildItem "Cert:\CurrentUser\My" | Format-Table Thumbprint, Subject, FriendlyName
    

    Должен отобразиться похожий результат:

    Thumbprint                               Subject                                  FriendlyName
    ----------                               -------                                  ------------
    DE8B962E7BF797CB48CCF66C8BCACE65C6585E2F CN=1f23fa36-2a2f-475e-a69e-3a14fe56ed4
    A6CA34FD0BA6B439787391F51C87B1AD0C9E7FAE CN=someone@microsoft.com
    94D93DBC97D4F7E4364A215F15C6ACFEFC71E569 CN=localhost                             ASP.NET Core HTTPS development certificate
    F14211566DACE867DA0BF9C2F9C47C01E3CF1D9B CN=john
    568027317BE8EE5E6AACDE5079D2DE76EC46EB88 CN=e1f823e2-4674-03d2-aaad-21ab23ad84ae
    DC602EE83C95FEDF280835980E22306067EFCA96 CN=John Smith, OU=MSE, OU=Users, DC=com
    07AD38F3B646F5AAC16F2F2570CAE40F4842BBE0 CN=Contoso                               My temp dev cert
    
  4. Отпечаток сертификата будет использоваться позже, поэтому скопируйте его в буфер обмена. Это значение отпечатка, запись которого соответствует subject и FriendlyName сертификата.

Дополнительные сведения см. в разделе "Создание сертификата для подписи пакета".

Настройка параметров сборки проекта

Файл проекта является хорошим местом для размещения параметров сборки для Windows. Возможно, вам не нужно поместить некоторые параметры в файл проекта, например пароли. Параметры, описанные в этом разделе, можно передать в командной строке с форматом -p:name=value . Если параметр уже определен в файле проекта, параметр, переданный в командной строке, переопределяет параметр проекта.

Добавьте следующий <PropertyGroup> узел в файл проекта. Эта группа свойств обрабатывается только в том случае, если целевая платформа — Windows, а конфигурация задана.Release Этот раздел конфигурации выполняется всякий раз, когда выполняется сборка или публикация в Release режиме.

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(Configuration)' == 'Release'">
    <AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
    <PackageCertificateThumbprint>A10612AF095FD8F8255F4C6691D88F79EF2B135E</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
    <RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>

Замените <PackageCertificateThumbprint> значение свойства отпечатком сертификата, созданным ранее. Кроме того, этот параметр можно удалить из файла проекта и указать его в командной строке. Например: -p:PackageCertificateThumbprint=A10612AF095FD8F8255F4C6691D88F79EF2B135E.

Во втором <PropertyGroup> примере требуется обойти ошибку в пакете SDK для Windows. Дополнительные сведения об ошибке см. в статье о проблеме WindowsAppSDK #3337.

Публикация

Чтобы опубликовать приложение, откройте командную строку разработчика для терминала VS 2022 и перейдите в папку для проекта приложения .NET MAUI. dotnet publish Выполните команду, указав следующие параметры:

Параметр Значение
-f Целевая платформа, которая является net8.0-windows{version}. Это значение является windows TFM, например net8.0-windows10.0.19041.0. Убедитесь, что это значение идентично значению узла в <TargetFrameworks>CSPROJ-файле .
-c Конфигурация сборки, которая является Release.
-p:RuntimeIdentifierOverride=win10-x64
- или -
-p:RuntimeIdentifierOverride=win10-x86
Избегает ошибки, подробно описанной в проблеме WindowsAppSDK #3337. -x64 Выберите или -x86 версию параметра на основе целевой платформы.

Предупреждение

Попытка опубликовать решение .NET MAUI приведет dotnet publish к попытке опубликовать каждый проект в решении по отдельности, что может привести к проблемам при добавлении других типов проектов в решение. dotnet publish Поэтому команда должна быть область в проект приложения .NET MAUI.

Рассмотрим пример.

dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64

Примечание.

В .NET 8 dotnet publish команда по умолчанию использует Release конфигурацию. Поэтому конфигурация сборки может быть опущена из командной строки.

Публикация сборок и пакетов приложения, копирование подписанного пакета в папку bin\Release\net8.0-windows10.0.0.19041.0\win10-x64\AppPackages\<appname>\ . <> имя приложения — это папка, именуемая как в проекте, так и в версии. В этой папке есть msix-файл , и это пакет приложения.

Дополнительные сведения о команде dotnet publish см. в статье dotnet publish.

Установка приложения

Чтобы установить приложение, его необходимо подписать с помощью сертификата, которому вы уже доверяете. Если это не так, Windows не позволит установить приложение. Появится диалоговое окно, аналогичное следующему, с отключенной кнопкой установки:

Installing an untrusted app.

Обратите внимание, что на предыдущем изображении издатель был "неизвестным".

Чтобы доверять сертификату пакета приложения, выполните следующие действия.

  1. Щелкните файл MSIX правой кнопкой мыши и выберите "Свойства".

  2. Перейдите на вкладку "Цифровые подписи ".

  3. Выберите сертификат и нажмите клавишу Details.

    Properties pane of an MSIX file with the digital signatures tab selected.

  4. Выберите "Просмотреть сертификат".

  5. Выберите " Установить сертификат...".

  6. Нажмите кнопку "Локальный компьютер" и нажмите кнопку "Далее".

    Если вы запрашиваете элемент управления учетными записями пользователей, чтобы разрешить этому приложению вносить изменения на устройство? нажмите кнопку "Да".

  7. В окне мастера импорта сертификатов выберите "Поместить все сертификаты" в следующем хранилище.

  8. Нажмите кнопку "Обзор", а затем выберите надежное хранилище Люди. Выберите ОК, чтобы закрыть диалог.

    Certificate import wizard window is shown while selecting the Trusted People store.

  9. Выберите пункт Далее, затем — Готово. Появится диалоговое окно, которое говорит: импорт выполнен успешно.

    Certificate import wizard window with a successful import message.

  10. Нажмите кнопку "ОК " в любом окне, открывшемся в рамках этого процесса, чтобы закрыть их все.

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

Installing a trusted app.

Нажмите кнопку "Установить", если вы хотите установить приложение.

Текущие ограничения

В следующем списке описаны текущие ограничения публикации и упаковки:

  • Опубликованное приложение не работает, если вы пытаетесь запустить его непосредственно с исполняемым файлом из папки публикации.
  • Способ запуска приложения — сначала установить его с помощью упаковаемого MSIX-файла .