mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-03 09:46:54 +02:00
[Build][Installer] Fix Runtime Parsing for .NET Runtime and WPF dependencies (#23626)
* Update parseRuntimes to use separate JSON for .NET Runtime / WPF * Update parseRuntimes script to filter duplicate dlls from WPF Runtime List * Fix spelling * Override dlls --------- Co-authored-by: Stefan Markovic <stefan@janeasystems.com>
This commit is contained in:
@@ -48,7 +48,7 @@
|
||||
<Command>
|
||||
call cmd /C "copy ""$(ProjectDir)DepsFilesLists.h"" ""$(ProjectDir)DepsFilesLists.h.bk"""
|
||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetup\Core.wxs"" ""$(ProjectDir)..\PowerToysSetup\Core.wxs.bk""""
|
||||
call powershell.exe -NonInteractive -executionpolicy Unrestricted -File parseRuntimes.ps1 -depsjsonpath "$(ProjectDir)..\..\$(Platform)\$(Configuration)\modules\ColorPicker\PowerToys.ColorPickerUI.deps.json" -depsfileslistspath "$(ProjectDir)DepsFilesLists.h" -productwxspath "$(ProjectDir)..\PowerToysSetup\Core.wxs"
|
||||
call powershell.exe -NonInteractive -executionpolicy Unrestricted -File parseRuntimes.ps1 -runtimedepsjsonpath "$(ProjectDir)..\..\$(Platform)\$(Configuration)\Settings\PowerToys.Settings.deps.json" -wpfdepsjsonpath "$(ProjectDir)..\..\$(Platform)\$(Configuration)\modules\ColorPicker\PowerToys.ColorPickerUI.deps.json" -depsfileslistspath "$(ProjectDir)DepsFilesLists.h" -productwxspath "$(ProjectDir)..\PowerToysSetup\Core.wxs"
|
||||
</Command>
|
||||
<Message>Backing up original files and populating .NET and WPF Runtime dependencies </Message>
|
||||
</PreBuildEvent>
|
||||
|
||||
@@ -1,13 +1,46 @@
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
[Parameter(Mandatory = $True, Position = 1)]
|
||||
[string]$depsjsonpath,
|
||||
[string]$runtimedepsjsonpath,
|
||||
[Parameter(Mandatory = $True, Position = 2)]
|
||||
[string]$depsfileslistspath,
|
||||
[string]$wpfdepsjsonpath,
|
||||
[Parameter(Mandatory = $True, Position = 3)]
|
||||
[string]$depsfileslistspath,
|
||||
[Parameter(Mandatory = $True, Position = 4)]
|
||||
[string]$productwxspath
|
||||
)
|
||||
|
||||
function Get-RuntimePack ($depsJsonFile, $runtimeName) {
|
||||
Write-Host "Parsing $runtimeName Runtime"
|
||||
$runtimePackList = ([array]$depsJsonFile.targets.PSObject.Properties)[-1].Value.PSObject.Properties | Where-Object { $_.Name -match "runtimepack.$runtimeName" };
|
||||
|
||||
if ($runtimePackList.Length -eq 0) {
|
||||
Write-Host -ForegroundColor Red "$runtimeName has not been found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Enumerate through array of custom objects and parse the names of the property values into a HashTable
|
||||
$runtimePackList | ForEach-Object {
|
||||
$runtimes += @{"$($_.Name -replace "runtimepack\.(\S+)\.\S+/\S+",'$1')" = $_.Value.PSObject.Properties.Value | ForEach-Object {
|
||||
$_.PSObject.Properties.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
Write-Output $runtimes;
|
||||
}
|
||||
|
||||
function Update-RuntimeHashTable () {
|
||||
$runtimes = Get-RuntimePack $runtimeFile "Microsoft.NETCore.App.Runtime"
|
||||
$runtimes = Get-RuntimePack $wpfRuntimeFile "Microsoft.WindowsDesktop.App.Runtime"
|
||||
|
||||
# Find the dlls that exist in both the .NET Runtime and WPF Runtime deps list and filter out of WPF
|
||||
$runtimeFileComparison = Compare-Object -ReferenceObject $runtimes["Microsoft.NETCore.App.Runtime"] -DifferenceObject $runtimes["Microsoft.WindowsDesktop.App.Runtime"] -IncludeEqual -ExcludeDifferent
|
||||
|
||||
$runtimes["Microsoft.WindowsDesktop.App.Runtime"] = $runtimes["Microsoft.WindowsDesktop.App.Runtime"] | Where-Object { $_ -notin $runtimeFileComparison.InputObject }
|
||||
|
||||
Write-Output $runtimes;
|
||||
}
|
||||
|
||||
function Update-RuntimeFileList($runtimeToken, $runtimeKey) {
|
||||
$depsFilesLists -replace "($runtimeToken = )(.*);", "`$1 {`r`n$(($runtimes[$runtimeKey] | ForEach-Object {' L"'+$_+'"'} | Sort-Object) -join ",`r`n") };"
|
||||
}
|
||||
@@ -16,8 +49,7 @@ function Update-ProductWxsRuntimeFileList($runtimeToken, $runtimeKey) {
|
||||
$productWxs -replace "(define $runtimeToken=)(.*)?>", "`$1$($runtimes[$runtimeKey] -join ';')?>"
|
||||
}
|
||||
|
||||
function Update-DotnetFilesComponentGuid()
|
||||
{
|
||||
function Update-DotnetFilesComponentGuid() {
|
||||
$productWxs -replace "Dlls_DotnetFiles_Component"" Guid=""([{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?)""", "Dlls_DotnetFiles_Component"" Guid=""$((New-Guid).ToString().ToUpper())"""
|
||||
}
|
||||
|
||||
@@ -28,26 +60,12 @@ $depsFilesLists = Get-Content $depsfileslistspath;
|
||||
$productWxs = Get-Content $productwxspath;
|
||||
|
||||
# Read the deps.json file and convert it to a JSON object
|
||||
$runtimeFile = Get-Content $depsjsonpath | ConvertFrom-Json;
|
||||
$runtimeFile = Get-Content $runtimedepsjsonpath | ConvertFrom-Json;
|
||||
$wpfRuntimeFile = Get-Content $wpfdepsjsonpath | ConvertFrom-Json;
|
||||
|
||||
$runtimes = @{}
|
||||
|
||||
Write-Host "Parsing .NET Runtimes from $depsjsonpath `r`n"
|
||||
|
||||
$runtimeList = ([array]$runtimeFile.targets.PSObject.Properties)[-1].Value.PSObject.Properties | Where-Object { $_.Name -match "runtimepack" };
|
||||
|
||||
if ($runtimeList.Length -eq 0) {
|
||||
Write-Host -ForegroundColor Red "No runtimes have been detected"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Enumerate through array of custom objects and parse the names of the property values into a HashTable
|
||||
$runtimeList | ForEach-Object {
|
||||
$runtimes += @{"$($_.Name -replace "runtimepack\.(\S+)\.\S+/\S+",'$1')" = $_.Value.PSObject.Properties.Value | ForEach-Object {
|
||||
$_.PSObject.Properties.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
$runtimes = Update-RuntimeHashTable
|
||||
|
||||
Write-Host "Writing Microsoft.NETCore.App.Runtime files"
|
||||
$depsFilesLists = Update-RuntimeFileList "dotnetRuntimeFiles" "Microsoft.NETCore.App.Runtime"
|
||||
@@ -64,6 +82,4 @@ Write-Host "Updating $depsfileslistspath"
|
||||
Set-Content -Path $depsfileslistspath -Value $depsFilesLists
|
||||
|
||||
Write-Host "Updating $productwxspath"
|
||||
Set-Content -Path $productwxspath -Value $productWxs
|
||||
|
||||
|
||||
Set-Content -Path $productwxspath -Value $productWxs
|
||||
Reference in New Issue
Block a user