- Use Visual Studio 2022 - Use an Azure Pipelines image which has Visual Studio 2022 installed - Use the v143 C++ build tools - Use the Windows SDK version 22000 - Raise the minimum platform version to 17763 - As a consequence of this change, we will use the "msix" file extension instead of "appx" for our packages - Update UI tests from .NET Core 2.1 to .NET Core 3.1
98 lines
2.9 KiB
PowerShell
98 lines
2.9 KiB
PowerShell
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Generates a mapping file to be used with the MakeAppx tool. It generates the file based on
|
|
a folder structure grouped by architecture then by project, like this example:
|
|
|
|
drop\
|
|
ARM\
|
|
Project\
|
|
AppPackages\
|
|
Project_ARM.msix
|
|
Project_scale-100.msix
|
|
x64\
|
|
Project\
|
|
AppPackages\
|
|
Project_x64.msix
|
|
Project_scale-100.msix
|
|
|
|
.PARAMETER InputPath
|
|
The path where msix packages to bundle are located.
|
|
|
|
.PARAMETER ProjectName
|
|
The folder name within each architecture to search recursively for msix packages. The msix files
|
|
must also have the ProjectName in their file names.
|
|
|
|
.PARAMETER OutputFile
|
|
The path to write the generated mapping file.
|
|
|
|
.EXAMPLE
|
|
Create-MsixBundleMapping -InputPath "C:\drop" -ProjectName "CalculatorApp" -OutputFile "C:\Temp\MsixBundleMapping.txt"
|
|
#>
|
|
param(
|
|
[Parameter(Mandatory)]
|
|
[string]
|
|
$InputPath,
|
|
|
|
[Parameter(Mandatory)]
|
|
[string]
|
|
$ProjectName,
|
|
|
|
[Parameter(Mandatory)]
|
|
[string]
|
|
$OutputFile
|
|
)
|
|
|
|
# List all msix packages by architecture
|
|
$architectures = @(Get-ChildItem -Path $InputPath -Directory | Foreach-Object Name | Foreach-Object ToLower)
|
|
if ($architectures.Count -lt 1)
|
|
{
|
|
throw "No architecture-specific folders found in $InputPath"
|
|
}
|
|
|
|
$defaultArchitecture = $architectures[0]
|
|
$packages = @{}
|
|
foreach ($architecture in $architectures)
|
|
{
|
|
$projectPath = [IO.Path]::Combine($InputPath, $architecture, $ProjectName)
|
|
$packages[$architecture] = Get-ChildItem -Path $projectPath -Recurse -Filter *$ProjectName*.msix
|
|
|
|
if ($packages[$architecture].Count -lt 1)
|
|
{
|
|
throw "No .msix files found for architecture $architecture in $projectPath"
|
|
}
|
|
}
|
|
|
|
# List msix packages which are common to all architectures
|
|
$commonPackages = $packages[$defaultArchitecture]
|
|
foreach ($architecture in $architectures)
|
|
{
|
|
$commonPackages = $packages[$architecture] | Where {$commonPackages.Name -Contains $_.Name}
|
|
}
|
|
|
|
# List msix packages which are architecture-specific and verify that there is exactly one per
|
|
# architecture.
|
|
$architectureSpecificPackages = @()
|
|
if ($architectures.Count -gt 1)
|
|
{
|
|
foreach ($architecture in $architectures)
|
|
{
|
|
$uniquePackages = $packages[$architecture] | Where {$commonPackages.Name -NotContains $_.Name}
|
|
if ($uniquePackages.Count -ne 1)
|
|
{
|
|
throw "Found multiple architecture-specific packages for architecture $($architecture): $($uniquePackages.Name)"
|
|
}
|
|
$architectureSpecificPackages += $uniquePackages[0]
|
|
}
|
|
}
|
|
|
|
# Write the mapping file
|
|
Set-Content $OutputFile "[Files]"
|
|
foreach ($package in ($architectureSpecificPackages + $commonPackages))
|
|
{
|
|
$mapping = "`"$($package.FullName)`" `"$($package.Name)`""
|
|
Write-Host $mapping
|
|
Add-Content $OutputFile $mapping
|
|
} |