| <# | |
| .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" | |
| } | |
| } |