20 Eylül 2026 Pazar

Publicando jogos desktop MonoGame na Microsoft Store: O guia definitivo de MSIX e WAP




Publicando jogos desktop MonoGame na Microsoft Store: O guia definitivo de MSIX e WAP

Levar um jogo independente para a Microsoft Store no Windows 10 e Windows 11 oferece aos desenvolvedores acesso direto a centenas de milhões de jogadores de PC, atualizações automáticas em segundo plano, integração com a Windows Game Bar e a segurança de uma instalação em contêiner. No entanto, se o seu jogo foi desenvolvido com MonoGame (.NET 8.0 ou .NET 9.0 WindowsDX), colocá-lo na loja requer uma ponte arquitetural: unir um executável Win32 tradicional (.exe) com o modelo moderno de aplicativos MSIX / AppX.

Na Arar Games, percorremos todo esse caminho com jogos como Paint Trek e Blocked: Pixel Panzer, desde a compilação inicial até o lançamento oficial. Neste guia prático, detalhamos todo o pipeline técnico: configuração de projetos, domínio das opções do menu Publish no Visual Studio, configuração do Package.appxmanifest, dimensionamento de tiles visuais, resolução de alertas do WACK e envio ao Microsoft Partner Center.


1. Fundamentos da Arquitetura: Win32 vs MSIX

Jogos MonoGame tradicionais são compilados em um executável Win32 comum, bibliotecas de tempo de execução (.dll) e uma pasta Content/ com recursos binários compactados (texturas .xnb, áudio .ogg, shaders).

O empacotamento do jogo em um projeto Windows Application Packaging (WAP) para gerar um MSIX bundle oferece vantagens definitivas:

  1. Ciclo de vida isolado em contêiner: Aplicativos MSIX rodam em ambiente isolado. Na desinstalação, todos os arquivos e entradas virtuais do registro são removidos sem deixar lixo no sistema operacional.
  2. Distribuição dinâmica e economia de espaço: Um único pacote .appxupload reúne binários x86 e x64 com múltiplos pacotes de escala DPI (scale-100 até scale-400). O usuário baixa apenas o conteúdo compatível com seu hardware.
  3. Telemetria automática de falhas: O Visual Studio inclui os símbolos de depuração (.appxsym). Havendo falhas na máquina do jogador, o painel do Partner Center apresenta o rastreamento de pilha (stack trace) completo com linhas de código.

2. Configuração do Projeto

No arquivo .csproj principal, configure o suporte multiplataforma e a cópia de conteúdo:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net9.0-windows</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <Platforms>AnyCPU;x64;x86</Platforms>
  </PropertyGroup>
  <ItemGroup>
    <Content Include="Content\**\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

Restauração de pacotes NuGet:

dotnet restore YourGame.Desktop.csproj -r win-x64
dotnet restore YourGame.Desktop.csproj -r win-x86

3. As Opções do Menu Publish no Visual Studio

Ao clicar com o botão direito no projeto WAP e selecionar Publish:

  1. Associate App with the Store...: Associa o projeto ao app reservado no Partner Center, obtém o Publisher ID oficial e gera o Package.StoreAssociation.xml.
  2. Convert Content Group Map File: Recurso de streaming de instalação para jogos gigantescos (+50 GB). Dispensável para jogos indie.
  3. Create App Packages...: O assistente principal para criar pacotes de teste local (Sideloading) ou o arquivo para a loja (_bundle.appxupload).

4. Configuração do Assistente de Criação de Pacotes

  • Método de distribuição: Escolha "Microsoft Store under a new or existing app name" para a loja ou "Sideloading" para testes internos.
  • Arquiteturas: Marque ☑️ x86 e ☑️ x64 em Release.
  • Geração de bundle: Generate app bundle: Always.
  • Regra estrita de versionamento: Formato Major.Minor.Build.Revision (ex: 1.0.0.0). Todo novo pacote enviado à loja deve ter uma versão estritamente maior que a versão ativa. Marcar Automatically increment adiciona +1 à revisão a cada build.

5. Configuração do Package.appxmanifest

  • <rescap:Capability Name="runFullTrust" />: Como o MonoGame utiliza DirectX 11 e chamadas nativas de sistema, esse privilégio assegura execução completa mantendo o isolamento seguro do contêiner.
  • InitialRotationPreference="landscape": Trava a tela em modo paisagem, fundamental para consoles portáteis Windows (ASUS ROG Ally, Lenovo Legion Go).

Warning

Regra do BadgeLogo: O ícone da tela de bloqueio (BadgeLogo) precisa ser composto exclusivamente de pixels brancos puros (#FFFFFF) sobre fundo transparente. Cores ou degradês causarão reprovação no teste de contraste do WACK.


7. Validação WACK e Solução de Problemas

  • Erro "AppCert.exe wasn't found": Instale o componente Windows App Certification Kit no Visual Studio Installer. O teste local é opcional; os servidores em nuvem da Microsoft executam a validação completa no envio.
  • Falso positivo de executável bloqueado: Arquivos .xnb ou .ogg podem coincidir com assinaturas binárias PE. O processo de certificação da Microsoft reconhece-os como dados de jogo estáticos e aprova o aplicativo.

8. Teste Local via Sideloading

Na pasta AppPackages/YourGame_Test/, execute o PowerShell como Administrador:

Set-ExecutionPolicy RemoteSigned -Scope Process
.\Add-AppDevPackage.ps1

9. Checklist de Envio no Microsoft Partner Center

  1. Preço e disponibilidade: Selecione os 240 mercados mundiais e defina o valor em dólar.
  2. Propriedades: Categoria Games e link da Política de Privacidade (Privacy Policy).
  3. Classificação indicativa (IARC): Responda ao questionário (jogos arcade geralmente recebem Everyone / PEGI 3).
  4. Listagem da loja: Envie capturas de tela de PC em 1920x1080 (sem controles de toque móveis).
  5. Pacotes: Envie o arquivo _bundle.appxupload e clique em Submit to the Store.



Hiç yorum yok:

Yorum Gönder