| name | msix-package-generator |
| description | Generate MSIX packaging configuration with manifest, assets, and signing for Windows applications |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep |
| tags | ["windows","msix","packaging","uwp","distribution"] |
| graph | {"domains":["domain:software-engineering"],"specializations":["specialization:desktop-development"],"skillAreas":["skill-area:cross-platform-desktop","skill-area:deployment-infrastructure-management"],"roles":["role:desktop-developer","role:fullstack-engineer"],"workflows":["workflow:feature-development","workflow:release-management"]} |
msix-package-generator
Generate MSIX packaging configuration for Windows applications with proper manifest, assets, signing configuration, and Store submission preparation. This skill handles the complete MSIX packaging workflow.
Capabilities
- Generate Package.appxmanifest
- Create required visual assets (icons, tiles)
- Configure app capabilities and declarations
- Set up code signing for MSIX
- Configure auto-update settings
- Prepare for Microsoft Store submission
- Generate CI/CD packaging scripts
- Configure sideload deployment
Input Schema
{
"type": "object",
"properties": {
"projectPath": {
"type": "string",
"description": "Path to the project"
},
"appInfo": {
"type": "object",
"properties": {
"name": { "type": "string" },
"displayName": { "type": "string" },
"publisher": { "type": "string" },
"publisherDisplayName": { "type": "string" },
"version": { "type": "string" },
"description": { "type": "string" }
},
"required": ["name", "displayName", "publisher", "version"]
},
"capabilities": {
"type": "array",
"items": {
"enum": ["internetClient", "privateNetworkClientServer", "documentsLibrary", "musicLibrary", "picturesLibrary", "webcam", "microphone", "location", "removableStorage", "appointments", "contacts"]
}
},
"executables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"target": { "type": "string" },
"id": { "type": "string" },
"subsystem": { "enum": ["windows", "console"] }
}
}
},
"distribution": {
"enum": ["store", "sideload", "both"],
"default": "sideload"
}
},
"required": ["projectPath", "appInfo"]
}
Output Schema
{
"type": "object",
"properties": {
"success": { "type": "boolean" },
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": { "type": "string" },
"type": { "enum": ["manifest", "assets", "priconfig", "signing"] }
}
}
Package.appxmanifest
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap uap3 desktop rescap">
<Identity Name="MyCompany.MyApp"
Publisher="CN=My Company, O=My Company, L=City, S=State, C=US"
Version="1.0.0.0"
ProcessorArchitecture="x64"/>
<Properties>
<DisplayName>My Application</DisplayName>
<PublisherDisplayName>My Company</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
<Description>A wonderful application</Description>
</Properties>
<Dependencies>
< =
=
=/>
.myapp
My App Protocol
Visual Assets
Assets/
โโโ AppIcon.ico # Traditional icon
โโโ StoreLogo.png # 50x50
โโโ Square44x44Logo.png # 44x44 (with .targetsize-* variants)
โโโ Square44x44Logo.targetsize-16.png
โโโ Square44x44Logo.targetsize-24.png
โโโ Square44x44Logo.targetsize-32.png
โโโ Square44x44Logo.targetsize-48.png
โโโ Square44x44Logo.targetsize-256.png
โโโ Square150x150Logo.png # 150x150
โโโ Square310x310Logo.png # 310x310
โโโ Wide310x150Logo.png # 310x150
โโโ SmallTile.png # 71x71
โโโ SplashScreen.png # 620x300
โโโ BadgeLogo.png # 24x24
priconfig.xml
<?xml version="1.0" encoding="utf-8"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
<packaging>
<autoResourcePackage qualifier="Language"/>
<autoResourcePackage qualifier="Scale"/>
</packaging>
<index root="\" startIndexAt="\">
<default>
<qualifier name="Language" value="en-US"/>
<qualifier name="Scale" value="100"/>
</default>
<indexer-config type="folder" foldernameAsQualifier="true" filenameAsQualifier="true"/>
<indexer-config type="resw" convertDotsToSlashes="true" initialPath=""/>
< = =/>
Build Commands
# Build MSIX package
msbuild MyApp.wapproj /p:Configuration=Release /p:Platform=x64 /p:AppxBundle=Always
# Create package with makeappx
makeappx pack /d output\ /p MyApp.msix
# Sign package
signtool sign /fd SHA256 /a /f certificate.pfx /p password MyApp.msix
# Create self-signed certificate for testing
$cert = New-SelfSignedCertificate -Type Custom -Subject "CN=MyCompany" `
-KeyUsage DigitalSignature -FriendlyName "MyApp Test Cert" `
-CertStoreLocation "Cert:\CurrentUser\My"
Export-PfxCertificate -cert $cert -FilePath test.pfx -Password (ConvertTo-SecureString -String "password" -Force -AsPlainText)
.csproj Configuration
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
<EnableMsixTooling>true</EnableMsixTooling>
<RuntimeIdentifiers>win-x64;win-arm64</RuntimeIdentifiers>
<PublishProfile>MSIX</PublishProfile>
<ApplicationId>MyCompany.MyApp</ApplicationId>
<ApplicationDisplayVersion>1.0.0</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>
</PropertyGroup>
<ItemGroup>
<Content Include="Assets\**" CopyToOutputDirectory="PreserveNewest"/>
</ItemGroup>
</>
GitHub Actions CI
name: Build MSIX
on: [push]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Decode certificate
run: |
$bytes = [Convert]::FromBase64String("${{ secrets.SIGNING_CERTIFICATE }}")
[IO.File]::WriteAllBytes("cert.pfx", $bytes)
- name: Build MSIX
run: |
dotnet publish -c Release -p:PublishProfile=MSIX
signtool sign /fd SHA256 /f cert.pfx /p "${{ secrets.CERT_PASSWORD }}" MyApp.msix
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: msix-package
path: '**/*.msix'
Best Practices
- Use proper publisher identity: Match your certificate
- Include all required assets: All sizes for all display scales
- Test on multiple Windows versions: MinVersion matters
- Sign with trusted certificate: For production distribution
- Configure capabilities minimally: Request only what you need
- Test sideload deployment: Before Store submission
Related Skills
windows-authenticode-signer - Code signing
wpf-mvvm-scaffold - Application setup
desktop-build-pipeline process - CI/CD
Related Agents
windows-platform-expert - Windows expertise
release-manager - Release workflow