Publicar um aplicativo .NET MAUI empacotado para Windows com a CLI
Ao distribuir seu aplicativo de interface do usuário de aplicativo de várias plataformas do .NET (.NET MAUI) para Windows, você pode publicar o aplicativo e suas dependências em uma pasta para implantação em outro sistema. Você também pode empacotar o aplicativo em um pacote MSIX, que tem inúmeros benefícios para os usuários que instalam seu aplicativo. Para obter mais informações sobre os benefícios do MSIX, consulte O que é MSIX?
Gerar um certificado de assinatura
Você deve usar um certificado de autenticação para uso na publicação do aplicativo. Esse certificado é usado para assinar o pacote MSIX. As etapas a seguir demonstram como criar e instalar um certificado autoassinado com o PowerShell:
Observação
Quando você cria e usa um certificado autoassinado, somente os usuários que instalam e confiam em seu certificado podem executar seu aplicativo. Isso é fácil de implementar para teste, mas pode impedir que usuários adicionais instalem seu aplicativo. Quando você estiver pronto para publicar seu aplicativo, recomendamos que você use um certificado emitido por uma fonte confiável. Esse sistema de confiança centralizada ajuda a garantir que o ecossistema do aplicativo tenha níveis de verificação para proteger os usuários contra atores mal-intencionados.
Abra um terminal do PowerShell e navegue até o diretório com seu projeto.
Use o comando
New-SelfSignedCertificate
para gerar um certificado autoassinado.O valor
<PublisherName>
é exibido para o usuário quando ele instala seu aplicativo, fornece seu próprio valor e omite os caracteres< >
. Você pode definir o parâmetroFriendlyName
como qualquer cadeia de caracteres de texto desejada.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}")
Use o seguinte comando do PowerShell para consultar o repositório de certificados para o certificado que foi criado:
Get-ChildItem "Cert:\CurrentUser\My" | Format-Table Thumbprint, Subject, FriendlyName
Você verá resultados semelhantes à seguinte saída:
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
A Impressão Digital do certificado será usada posteriormente, portanto, copie-a para a área de transferência. É o valor da Impressão Digital cuja entrada corresponde ao Assunto e ao FriendlyName do seu certificado.
Para obter mais informações, consulte Criar um certificado para assinatura de pacote.
Definir as configurações de build do projeto
O arquivo de projeto é um bom lugar para colocar as configurações de build específicas do Windows. Talvez você não queira colocar algumas configurações no arquivo de projeto, como senhas. As configurações descritas nesta seção podem ser passadas na linha de comando com o formato -p:name=value
. Se a configuração já estiver definida no arquivo de projeto, uma configuração passada na linha de comando substituirá a configuração do projeto.
Adicione o nó <PropertyGroup>
a seguir ao arquivo de projeto. Esse grupo de propriedades só é processado quando a estrutura de destino é o Windows e a configuração é definida como Release
. Esta seção de configuração é executada sempre que um build ou publica no modo 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>
Substitua o valor da propriedade <PackageCertificateThumbprint>
pela impressão digital do certificado gerada anteriormente. Como alternativa, você pode remover essa configuração do arquivo de projeto e fornecê-la na linha de comando. Por exemplo: -p:PackageCertificateThumbprint=A10612AF095FD8F8255F4C6691D88F79EF2B135E
.
O segundo <PropertyGroup>
no exemplo é necessário para contornar um bug no SDK do Windows. Para obter mais informações sobre o bug, consulte Problema nº 3337 do WindowsAppSDK.
Publicar
Para publicar seu aplicativo, abra o Prompt de Comando do Desenvolvedor para o terminal do VS 2022 e navegue até a pasta do projeto de aplicativo .NET MAUI. Execute o comando dotnet publish
, fornecendo os seguintes parâmetros:
Parâmetro | Valor |
---|---|
-f |
A estrutura de destino, que é net8.0-windows{version} . Esse valor é um TFM do Windows, como net8.0-windows10.0.19041.0 . Verifique se esse valor é idêntico ao valor no nó <TargetFrameworks> no arquivo .csproj. |
-c |
A configuração do build, que é Release . |
-p:RuntimeIdentifierOverride=win10-x64 - ou - -p:RuntimeIdentifierOverride=win10-x86 |
Evita o bug detalhado em problema nº 3337 do WindowsAppSDK. Escolha a versão -x64 ou -x86 do parâmetro com base na plataforma de destino. |
Aviso
A tentativa de publicar uma solução MAUI do .NET resultará na tentativa do comando dotnet publish
de publicar cada projeto na solução individualmente, o que pode causar problemas quando você adicionou outros tipos de projeto à sua solução. Portanto, o comando dotnet publish
deve ser definido como escopo para seu projeto de aplicativo MAUI do .NET.
Por exemplo:
dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64
Observação
No .NET 8, o comando dotnet publish
usa como padrão a configuração Release
. Portanto, a configuração de build pode ser omitida da linha de comando.
Publicar compila e empacota o aplicativo, copiando o pacote assinado para a pasta bin\Release\net8.0-windows10.0.19041.0\win10-x64\AppPackages\<appname>\. <appname> é uma pasta com o nome do projeto e da versão. Nessa pasta, há um arquivo msix e esse é o pacote do aplicativo.
Para obter mais informações sobre o comando dotnet publish
, consulte dotnet publish.
Como instalar a ferramenta
Para instalar o aplicativo, ele deve ser assinado com um certificado em que você já confia. Se não estiver, o Windows não permitirá que você instale o aplicativo. Você receberá uma caixa de diálogo semelhante à seguinte, com o botão Instalar desabilitado:
Observe que, na imagem anterior, o Publicador era "desconhecido".
Para confiar no certificado do pacote do aplicativo, execute as seguintes etapas:
Clique com o botão direito do mouse no arquivo .msix e escolha Propriedades.
Selecione a guia Assinaturas Digitais.
Escolha o certificado e pressione Detalhes.
Selecione o Exibir Certificado.
Selecione Instalar Certificado....
Escolha o Computador Local e, em seguida, selecione Avançar.
Se você for solicitado pelo Controle de Conta de Usuário a Permitir que esse aplicativo faça alterações em seu dispositivo?, selecione Sim.
Na janela Assistente de Importação de Certificados, selecione Colocar todos os certificados no repositório a seguir.
Selecione Procurar... e escolha o repositório Pessoas Confiáveis. Selecione OK para fechar a caixa de diálogo.
Selecione Avançar e, em seguida, Concluir. Você deve ver uma caixa de diálogo que diz: A importação foi bem-sucedida.
Selecione OK em qualquer janela aberta como parte desse processo, para fechá-los todos.
Agora, tente abrir o arquivo de pacote novamente para instalar o aplicativo. Você deverá ver uma caixa de diálogo semelhante à seguinte, com o Publicador exibido corretamente:
Selecione o botão Instalar se quiser instalar o aplicativo.
Limitações atuais
A lista a seguir descreve as limitações atuais com publicação e empacotamento:
- O aplicativo publicado não funcionará se você tentar executá-lo diretamente com o arquivo executável fora da pasta de publicação.
- A forma correta de executar o aplicativo é primeiro instalá-lo por meio do arquivo MSIX empacotado.