Публикация десктопных игр MonoGame в Microsoft Store: Полное руководство по MSIX и WAP
Выпуск инди-игры в Microsoft Store на Windows 10 и Windows 11 открывает разработчикам прямой доступ к сотням миллионов игроков на ПК, автоматическим фоновым обновлениям, интеграции с Windows Game Bar и безопасности изолированной среды. Однако если ваша игра разработана на MonoGame (.NET 8.0 или .NET 9.0 WindowsDX), ее публикация требует архитектурного моста: объединения стандартного исполняемого файла Win32 (.exe) с современной моделью приложений MSIX / AppX.
В Arar Games мы успешно прошли этот путь от первой сборки до живой публикации с нашими играми Paint Trek и Blocked: Pixel Panzer. В этом руководстве мы разбираем весь процесс: настройку проектов, навигацию по меню Publish в Visual Studio, конфигурирование Package.appxmanifest, масштабирование графических тайлов, исправление ошибок Windows App Certification Kit (WACK) и отправку в Microsoft Partner Center.
1. Архитектурные основы: Win32 и MSIX
Классические игры на MonoGame компилируются в стандартный Win32 .exe, библиотеки среды выполнения (.dll) и каталог Content/ со сжатыми бинарными ресурсами (текстуры .xnb, звуки .ogg и шейдеры HLSL).
Обертывание игры в проект Windows Application Packaging (WAP) для создания пакета MSIX bundle дает важнейшие преимущества:
flowchart TD
subgraph Solution
Shared["Shared Library"]
Desktop["Desktop Project (.NET 9.0 WindowsDX)"]
Shared --> Desktop
end
subgraph Packaging
WAP["Windows App Packaging (.wapproj)"]
Manifest["Package.appxmanifest"]
StoreAssoc["Package.StoreAssociation.xml"]
Desktop --> WAP
Manifest --> WAP
StoreAssoc --> WAP
end
subgraph Distribution
WAP --> Sideload["Sideloading Package (*.appxbundle)"]
WAP --> UploadBundle["Store Bundle (*_bundle.appxupload)"]
UploadBundle --> MSStore["Microsoft Partner Center"]
end
Зачем упаковывать MonoGame через WAP?
- Изолированный жизненный цикл: Приложения MSIX запускаются в изолированном контейнере. При удалении все файлы и записи реестра стираются начисто, не оставляя мусора в системе.
- Динамическая доставка ресурсов: Единый пакет
.appxuploadобъединяет сборки для архитектурx86иx64вместе с пакетами масштабирования графики (scale-100доscale-400). Пользователь скачивает только те файлы, которые подходят его системе. - Автоматическая телеметрия сбоев: Visual Studio упаковывает файлы символов отладки (
.appxsym) в архив. При падении игры вы видите полный стек вызовов с номерами строк в Partner Center.
2. Структура и настройка проекта
В файле .csproj основного проекта укажите поддержку платформ и копирование ресурсов:
<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>
Восстановите пакеты NuGet для обеих архитектур:
dotnet restore YourGame.Desktop.csproj -r win-x64
dotnet restore YourGame.Desktop.csproj -r win-x86
3. Разбор меню Publish в Visual Studio
При правом клике на проект WAP в меню Publish доступны 3 пункта:
- Associate App with the Store...: Привязывает проект к зарегистрированному приложению в Partner Center, загружает официальные идентификаторы и генерирует
Package.StoreAssociation.xml. - Convert Content Group Map File: Инструмент потоковой установки (Streaming Install) для гигантских игр (50+ ГБ). Для инди-игр не требуется.
- Create App Packages...: Главный мастер для создания пакетов локального тестирования (Sideloading) или готового файла для Магазина (
_bundle.appxupload).
4. Конфигурация мастера Create App Packages
- Метод распространения: Выберите "Microsoft Store under a new or existing app name" для отправки в магазин или "Sideloading" для тестирования на своих ПК.
- Архитектуры: Отметьте ☑️
x86и ☑️x64(конфигурация Release). - Сборка бандла: Установите
Generate app bundle: Always. - Правило версионирования: Номер версии (
Major.Minor.Build.Revision, например1.0.0.0). Каждая новая загрузка в Магазин обязана иметь номер версии выше предыдущей. ОпцияAutomatically incrementавтоматически увеличивает номер ревизии.
5. Настройка Package.appxmanifest
Ключевые параметры манифеста:
<rescap:Capability Name="runFullTrust" />: Так как MonoGame использует DirectX 11 и нативные вызовы через SharpDX/SDL, этот параметр дает игре полные права рабочего стола в рамках чистого контейнера.InitialRotationPreference="landscape": Блокирует альбомную ориентацию экрана, что критично для портативных ПК (ASUS ROG Ally, Lenovo Legion Go).
6. Требования к ресурсам и ловушка BadgeLogo
Warning
Значок экрана блокировки (BadgeLogo) должен состоять строго из белых пикселей (#FFFFFF) на прозрачном фоне. Наличие цветных пикселей приведет к ошибке контрастности в сертификационном тесте WACK.
7. Тестирование WACK и ошибки
- Ошибка "AppCert.exe wasn't found": Установите компонент Windows App Certification Kit через Visual Studio Installer. Локальный тест опционален — облако Microsoft автоматически проверит пакет при отправке.
- Ложные срабатывания (Blocked Executable): Сжатые файлы
.xnbи.oggмогут случайно содержать сигнатуры PE-заголовков. Сертификация Microsoft распознает их как статические ресурсы игры и одобряет публикацию.
8. Локальное тестирование (Sideloading)
В папке AppPackages/YourGame_Test/ запустите PowerShell от имени администратора:
Set-ExecutionPolicy RemoteSigned -Scope Process
.\Add-AppDevPackage.ps1
Это установит тестовый сертификат и саму игру для проверки работы геймпадов, звука и стабильности 60 FPS.
9. Чек-лист отправки в Partner Center
- Pricing and availability: Выберите все рынки (240 стран) и базовую цену в долларах.
- Properties: Категория
Games, ссылка на Политику конфиденциальности (Privacy Policy URL). - Age ratings: Пройдите опрос IARC (аркадные игры получают Everyone / PEGI 3).
- Store listings: Загрузите скриншоты 1920x1080 без мобильных кнопок на экране.
- Packages: Загрузите файл
_bundle.appxuploadи нажмите Submit to the Store.
Заключение
Публикация игры на MonoGame в Microsoft Store не требует переписывания кода под UWP. Проект WAP, разрешение runFullTrust и гибридные сборки x86/x64 позволяют легко вывести ваш проект на глобальную аудиторию Windows!
Hiç yorum yok:
Yorum Gönder