<# .Synopsis Compiles and signs an APPX package .Description Given the file listing, ensures all the contents are signed and builds and signs the final package. .Parameter mapfile The location on disk of the text mapping file. .Parameter msix The path and name to store the APPX/MSIX. .Parameter sign When set, signs the APPX/MSIX. Packages to be published to the store should not be signed. .Parameter description Description to embed in the signature (optional). .Parameter certname The name of the certificate to sign with (optional). .Parameter certsha1 The SHA1 hash of the certificate to sign with (optional). #> param( [Parameter(Mandatory=$true)][string]$layout, [Parameter(Mandatory=$true)][string]$msix, [switch]$sign, [string]$description, [string]$certname, [string]$certsha1, [string]$certfile ) $tools = $script:MyInvocation.MyCommand.Path | Split-Path -parent; Import-Module $tools\sdktools.psm1 -WarningAction SilentlyContinue -Force Set-Alias makeappx (Find-Tool "makeappx.exe") -Scope Script Set-Alias makepri (Find-Tool "makepri.exe") -Scope Script $msixdir = Split-Path $msix -Parent if ($msixdir) { $msixdir = (mkdir -Force $msixdir).FullName } else { $msixdir = Get-Location } $msix = Join-Path $msixdir (Split-Path $msix -Leaf) pushd $layout try { if (Test-Path resources.pri) { del resources.pri } $name = ([xml](gc AppxManifest.xml)).Package.Identity.Name makepri new /pr . /mn AppxManifest.xml /in $name /cf _resources.xml /of _resources.pri /mf appx /o if (-not $? -or -not (Test-Path _resources.map.txt)) { throw "makepri step failed" } $lines = gc _resources.map.txt $lines | ?{ -not ($_ -match '"_resources[\w\.]+?"') } | Out-File _resources.map.txt -Encoding utf8 makeappx pack /f _resources.map.txt /m AppxManifest.xml /o /p $msix if (-not $?) { throw "makeappx step failed" } } finally { popd } if ($sign) { Sign-File -certname $certname -certsha1 $certsha1 -certfile $certfile -description $description -files $msix if (-not $?) { throw "Package signing failed" } }