Added ARM64 support

This commit is contained in:
Michael Grafnetter 2023-05-11 12:02:46 +02:00
parent d76ad51f46
commit a273b1371e
11 changed files with 382 additions and 70 deletions

View File

@ -48,15 +48,20 @@ $PSVersion
### Development Environment
If you want to build the module from source code yourself, you need to install these programs first:
- [Microsoft Visual Studio Community](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) 2015, 2017 or 2019 with these features installed:
* Common Tools for Visual C++
* Windows SDK (you have to retarget the [DSInternals.Replication.Interop](../Src/DSInternals.Replication.Interop/DSInternals.Replication.Interop.vcxproj) project to the version you have)
- [Microsoft Visual Studio Community](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) 2022 with these features installed:
* .NET Framework 4.7.2 targeting pack
* C++ 2022 Redistributable Update
* C++/CLI support for v143 build tools (Latest)
* MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest)
* MSVC v143 - VS 2022 C++ ARM64/ARM64EC build tools (Latest)
* Windows Universal C Runtime
* Windows 11 SDK (you might have to retarget the [DSInternals.Replication.Interop](../Src/DSInternals.Replication.Interop/DSInternals.Replication.Interop.vcxproj) project to the version you have)
* PowerShell Tools for Visual Studio (optional)
* Git for Windows (optional)
* GitHub Extension for Visual Studio (optional)
- [Windows Management Framework 5](https://www.microsoft.com/en-us/download/details.aspx?id=50395).
To make IntelliSense work with *.psm1 files, the following code needs to be added to the `C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Xml\Schemas\catalog.xml` file:
To make IntelliSense work with *.psm1 files, the following code needs to be added to the `C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Xml\Schemas\catalog.xml` file:
```xml
<Association extension="ps1xml" schema="https://raw.githubusercontent.com/PowerShell/PowerShell/master/src/Schemas/Format.xsd" enableValidation="true"/>

7
.github/README.md vendored
View File

@ -4,8 +4,9 @@
[![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](../LICENSE.md)
[![PowerShell 3 | 4 | 5](https://img.shields.io/badge/PowerShell-3%20|%204%20|%205-0000FF.svg?logo=PowerShell)](#)
[![Windows Server 2008 R2 | 2012 R2 | 2016 | 2019 | 2022](https://img.shields.io/badge/Windows%20Server-2008%20R2%20|%202012%20R2%20|%202016%20|%202019%20|%202022-007bb8.svg?logo=Windows)](#)
[![.NET Framework 4.7.2+](https://img.shields.io/badge/.NET%20Framework-4.7.2%2B-007FFF.svg)](#)
[![Windows Server 2008 R2 | 2012 R2 | 2016 | 2019 | 2022](https://img.shields.io/badge/Windows%20Server-2008%20R2%20|%202012%20R2%20|%202016%20|%202019%20|%202022-007bb8.svg?logo=Windows%2011)](#)
[![.NET Framework 4.7.2+](https://img.shields.io/badge/Framework-4.7.2%2B-007FFF.svg?logo=.net)](#)
[![Architecture x64 | x86 | amd64](https://img.shields.io/badge/Architecture-x64%20|%20x86%20|%20ARM64-0071c5.svg?logo=Amazon%20EC2)](#)
## Introduction
@ -101,7 +102,7 @@ The easiest way of integrating the DSInternals functionality into .NET applicati
### Building from Source Code
[![Visual Studio 2017 | 2019](https://img.shields.io/badge/Visual%20Studio-2017%20|%202019-383278.svg?logo=Visual-Studio-Code)](CONTRIBUTING.md#building-from-source-code)
[![Visual Studio 2022](https://img.shields.io/badge/Visual%20Studio-2022-383278.svg?logo=Visual-Studio-Code)](CONTRIBUTING.md#building-from-source-code)
[![Build Status](https://dev.azure.com/DSInternals/DSInternals%20CI/_apis/build/status/DSInternals?branchName=master)](https://dev.azure.com/DSInternals/DSInternals%20CI/_build/latest?definitionId=2&branchName=master)
[![Test Results](https://img.shields.io/azure-devops/tests/DSInternals/DSInternals%20CI/2.svg?label=Test%20Results&logo=Azure-DevOps)](https://dev.azure.com/DSInternals/DSInternals%20CI/_build/latest?definitionId=2&branchName=master)

View File

@ -15,7 +15,7 @@ Import-Module $modulePath -ErrorAction Stop
$targets = 'Build' # 'Clean'
$configurations = 'Release', 'Debug'
$platforms = 'x86','x64'
$platforms = 'x86','x64','ARM64'
# Delete the entire Build directory
if(Test-Path $buildDir)

View File

@ -12,7 +12,7 @@
RootModule = 'Invoke-MsBuild.psm1'
# Version number of this module.
ModuleVersion = '2.6.2'
ModuleVersion = '2.7.1'
# Supported PSEditions
# CompatiblePSEditions = @()
@ -107,7 +107,9 @@ PrivateData = @{
# IconUri = ''
# ReleaseNotes of this module
ReleaseNotes = '- Use native -WhatIf parameter functionality.'
ReleaseNotes = 'Fixes:
- Compare MSBuild version numbers in other languages correctly.'
} # End of PSData hashtable

View File

@ -101,7 +101,7 @@ function Invoke-MsBuild
BuildErrorsLogFilePath = The path to the build's error log file.
ItemToBuildFilePath = The item that MsBuild ran against.
CommandUsedToBuild = The full command that was used to invoke MsBuild. This can be useful for inspecting what parameters are passed to MsBuild.exe.
Message = A message describing any problems that were encoutered by Invoke-MsBuild. This is typically an empty string unless something went wrong.
Message = A message describing any problems that were encountered by Invoke-MsBuild. This is typically an empty string unless something went wrong.
MsBuildProcess = The process that was used to execute MsBuild.exe.
BuildDuration = The amount of time the build took to complete, represented as a TimeSpan.
@ -116,7 +116,7 @@ function Invoke-MsBuild
{
Write-Output ("Build failed after {0:N1} seconds. Check the build log file '$($buildResult.BuildLogFilePath)' for errors." -f $buildResult.BuildDuration.TotalSeconds)
}
elseif ($buildResult.BuildSucceeded -eq $null)
elseif ($null -eq $buildResult.BuildSucceeded)
{
Write-Output "Unsure if build passed or failed: $($buildResult.Message)"
}
@ -129,7 +129,7 @@ function Invoke-MsBuild
while (!$process.HasExited)
{
Write-Host "Solution is still buildling..."
Write-Host "Solution is still building..."
Start-Sleep -Seconds 1
}
@ -143,7 +143,7 @@ function Invoke-MsBuild
Write-Output "Build completed successfully."
}
Perfom the build against the file specified at $pathToSolution and checks it for success in a single line.
Perform the build against the file specified at $pathToSolution and checks it for success in a single line.
.EXAMPLE
Invoke-MsBuild -Path "C:\Some Folder\MyProject.csproj" -MsBuildParameters "/target:Clean;Build" -ShowBuildOutputInNewWindow
@ -208,7 +208,7 @@ function Invoke-MsBuild
.NOTES
Name: Invoke-MsBuild
Author: Daniel Schroeder (originally based on the module at http://geekswithblogs.net/dwdii/archive/2011/05/27/part-2-automating-a-visual-studio-build-with-powershell.aspx)
Version: 2.6.2
Version: 2.7.1
#>
[CmdletBinding(SupportsShouldProcess, DefaultParameterSetName="Wait")]
param
@ -284,7 +284,7 @@ function Invoke-MsBuild
# Default the ParameterSet variables that may not have been set depending on which parameter set is being used. This is required for PowerShell v2.0 compatibility.
if (!(Test-Path Variable:Private:AutoLaunchBuildLogOnFailure)) { $AutoLaunchBuildLogOnFailure = $false }
if (!(Test-Path Variable:Private:AutoLaunchBuildLogOnFailure)) { $AutoLaunchBuildErrorsLogOnFailure = $false }
if (!(Test-Path Variable:Private:AutoLaunchBuildErrorsLogOnFailure)) { $AutoLaunchBuildErrorsLogOnFailure = $false }
if (!(Test-Path Variable:Private:KeepBuildLogOnSuccessfulBuilds)) { $KeepBuildLogOnSuccessfulBuilds = $false }
if (!(Test-Path Variable:Private:PromptForInputBeforeClosing)) { $PromptForInputBeforeClosing = $false }
if (!(Test-Path Variable:Private:PassThru)) { $PassThru = $false }
@ -331,12 +331,6 @@ function Invoke-MsBuild
# Build the arguments to pass to MsBuild.
$buildArguments = """$Path"" $MsBuildParameters /fileLoggerParameters:LogFile=""$buildLogFilePath""$verbosityLevel /fileLoggerParameters1:LogFile=""$buildErrorsLogFilePath"";errorsonly"
# If the user hasn't set the UseSharedCompilation mode explicitly, turn it off (it's on by default, but can cause MsBuild to hang for some reason).
if ($buildArguments -notlike '*UseSharedCompilation*')
{
$buildArguments += " /p:UseSharedCompilation=false " # prevent processes from hanging (Roslyn compiler?)
}
# Get the path to the MsBuild executable.
$msBuildPath = $MsBuildFilePath
[bool] $msBuildPathWasNotProvided = [string]::IsNullOrEmpty($msBuildPath)
@ -415,12 +409,14 @@ function Invoke-MsBuild
{
if ($ShowBuildOutputInCurrentWindow)
{
$result.MsBuildProcess = Start-Process cmd.exe -ArgumentList $cmdArgumentsToRunMsBuild -NoNewWindow -Wait -PassThru
$result.MsBuildProcess = Start-Process cmd.exe -ArgumentList $cmdArgumentsToRunMsBuild -NoNewWindow -PassThru
}
else
{
$result.MsBuildProcess = Start-Process cmd.exe -ArgumentList $cmdArgumentsToRunMsBuild -WindowStyle $windowStyleOfNewWindow -Wait -PassThru
$result.MsBuildProcess = Start-Process cmd.exe -ArgumentList $cmdArgumentsToRunMsBuild -WindowStyle $windowStyleOfNewWindow -PassThru
}
Wait-Process -InputObject $result.MsBuildProcess
}
# Perform the build and record how long it takes.
@ -449,7 +445,7 @@ function Invoke-MsBuild
}
# Get if the build succeeded or not.
[bool] $buildOutputDoesNotContainFailureMessage = (Select-String -Path $buildLogFilePath -Pattern "Build FAILED." -SimpleMatch) -eq $null
[bool] $buildOutputDoesNotContainFailureMessage = $null -eq (Select-String -Path $buildLogFilePath -Pattern "Build FAILED." -SimpleMatch)
[bool] $buildReturnedSuccessfulExitCode = $result.MsBuildProcess.ExitCode -eq 0
$buildSucceeded = $buildOutputDoesNotContainFailureMessage -and $buildReturnedSuccessfulExitCode
@ -528,7 +524,7 @@ function Get-VisualStudioCommandPromptPathForVisualStudio2017AndNewer
{
# Later we can probably make use of the VSSetup.PowerShell module to find the MsBuild.exe: https://github.com/Microsoft/vssetup.powershell
# Or perhaps the VsWhere.exe: https://github.com/Microsoft/vswhere
# But for now, to keep this script PowerShell 2.0 compatible and not rely on external executables, let's look for it ourselve in known locations.
# But for now, to keep this script PowerShell 2.0 compatible and not rely on external executables, let's look for it ourselves in known locations.
# Example of known locations:
# "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
@ -543,10 +539,10 @@ function Get-VisualStudioCommandPromptPathForVisualStudio2017AndNewer
$expectedVsCommandPromptPathWithWildcards = "$visualStudioDirectoryPath\*\*\Common7\Tools\VsDevCmd.bat"
$vsCommandPromptPathObjects = Get-Item -Path $expectedVsCommandPromptPathWithWildcards
[bool] $vsCommandPromptWasNotFound = ($vsCommandPromptPathObjects -eq $null) -or ($vsCommandPromptPathObjects.Length -eq 0)
[bool] $vsCommandPromptWasNotFound = ($null -eq $vsCommandPromptPathObjects) -or ($vsCommandPromptPathObjects.Length -eq 0)
if ($vsCommandPromptWasNotFound)
{
# Recurisvely search the entire Microsoft Visual Studio directory for the VS Command Prompt (slower, but will still work if MS changes folder structure).
# Recursively search the entire Microsoft Visual Studio directory for the VS Command Prompt (slower, but will still work if MS changes folder structure).
Write-Verbose "The Visual Studio Command Prompt was not found at an expected location. Searching more locations, but this will be a little slow."
$vsCommandPromptPathObjects = Get-ChildItem -Path $visualStudioDirectoryPath -Recurse | Where-Object { $_.Name -ieq 'VsDevCmd.bat' }
}
@ -582,6 +578,19 @@ function Get-VisualStudioCommandPromptPathForVisualStudio2015AndPrior
return $newestVsCommandPromptPath
}
function Get-LatestMsBuildPath_NotUsedYetButCouldBeIfNeeded
{
[bool] $vsSetupExists = $null -ne (Get-Command Get-VSSetupInstance -ErrorAction SilentlyContinue)
if (!$vsSetupExists)
{
Write-Verbose "Importing the VSSetup module in order to determine TF.exe path..." -Verbose
Install-Module VSSetup -Scope CurrentUser -Force
}
[string] $visualStudioInstallationPath = (Get-VSSetupInstance | Select-VSSetupInstance -Latest -Require Microsoft.Component.MSBuild).InstallationPath
$msBuildExecutableFilePath = (Get-ChildItem $visualStudioInstallationPath -Recurse -Filter "MsBuild.exe" | Select-Object -First 1).FullName
return $msBuildExecutableFilePath
}
function Get-LatestMsBuildPath([switch] $Use32BitMsBuild)
{
<#
@ -616,14 +625,16 @@ function Get-LatestMsBuildPath([switch] $Use32BitMsBuild)
return $msBuildPath
}
function Get-MsBuildPathForVisualStudio2017AndNewer([switch] $Use32BitMsBuild)
function Get-MsBuildPathForVisualStudio2017AndNewer([bool] $Use32BitMsBuild)
{
# Later we can probably make use of the VSSetup.PowerShell module to find the MsBuild.exe: https://github.com/Microsoft/vssetup.powershell
# Or perhaps the VsWhere.exe: https://github.com/Microsoft/vswhere
# But for now, to keep this script PowerShell 2.0 compatible and not rely on external executables, let's look for it ourselve in known locations.
# But for now, to keep this script PowerShell 2.0 compatible and not rely on external executables, let's look for it ourselves in known locations.
# Example of known locations:
# "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe" - 32 bit
# "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\amd64\MSBuild.exe" - 64 bit
# "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe" -32 bit
# "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\amd64\MSBuild.exe" - 64 bit
[string] $visualStudioDirectoryPath = Get-CommonVisualStudioDirectoryPath
[bool] $visualStudioDirectoryPathDoesNotExist = [string]::IsNullOrEmpty($visualStudioDirectoryPath)
@ -637,10 +648,10 @@ function Get-MsBuildPathForVisualStudio2017AndNewer([switch] $Use32BitMsBuild)
$expected64bitPathWithWildcards = "$visualStudioDirectoryPath\*\*\MsBuild\*\Bin\amd64\MsBuild.exe"
$msBuildPathObjects = Get-Item -Path $expected32bitPathWithWildcards, $expected64bitPathWithWildcards
[bool] $msBuildWasNotFound = ($msBuildPathObjects -eq $null) -or ($msBuildPathObjects.Length -eq 0)
[bool] $msBuildWasNotFound = ($null -eq $msBuildPathObjects) -or ($msBuildPathObjects.Length -eq 0)
if ($msBuildWasNotFound)
{
# Recurisvely search the entire Microsoft Visual Studio directory for MsBuild (slower, but will still work if MS changes folder structure).
# Recursively search the entire Microsoft Visual Studio directory for MsBuild (slower, but will still work if MS changes folder structure).
Write-Verbose "MsBuild.exe was not found at an expected location. Searching more locations, but this will be a little slow."
$msBuildPathObjects = Get-ChildItem -Path $visualStudioDirectoryPath -Recurse | Where-Object { $_.Name -ieq 'MsBuild.exe' }
}
@ -657,7 +668,7 @@ function Get-MsBuildPathForVisualStudio2017AndNewer([switch] $Use32BitMsBuild)
return $newest64BitMsBuildPath
}
function Get-MsBuildPathForVisualStudio2015AndPrior([switch] $Use32BitMsBuild)
function Get-MsBuildPathForVisualStudio2015AndPrior([bool] $Use32BitMsBuild)
{
$registryPathToMsBuildToolsVersions = 'HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\'
if ($Use32BitMsBuild)
@ -670,6 +681,10 @@ function Get-MsBuildPathForVisualStudio2015AndPrior([switch] $Use32BitMsBuild)
}
}
# Backup the current culture and force using English US to ensure version numbers are in the expected format (e.g. 17.0).
$previousCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
[System.Threading.Thread]::CurrentThread.CurrentCulture = 'en-US'
# Get the path to the directory that the latest version of MsBuild is in.
$msBuildToolsVersionsStrings = Get-ChildItem -Path $registryPathToMsBuildToolsVersions | Where-Object { $_ -match '[0-9]+\.[0-9]' } | Select-Object -ExpandProperty PsChildName
$msBuildToolsVersions = @{}
@ -679,6 +694,9 @@ function Get-MsBuildPathForVisualStudio2015AndPrior([switch] $Use32BitMsBuild)
$msBuildToolsVersionsKeyToUse = Get-Item -Path $registryPathToMsBuildToolsLatestVersion
$msBuildDirectoryPath = $msBuildToolsVersionsKeyToUse | Get-ItemProperty -Name 'MSBuildToolsPath' | Select-Object -ExpandProperty 'MSBuildToolsPath'
# Restore the previous culture now that we're done comparing version numbers.
[System.Threading.Thread]::CurrentThread.CurrentCulture = $previousCulture
if(!$msBuildDirectoryPath)
{
return $null
@ -692,25 +710,28 @@ function Get-MsBuildPathForVisualStudio2015AndPrior([switch] $Use32BitMsBuild)
function Get-CommonVisualStudioDirectoryPath
{
# As of VS 2022 Visual Studio is 64-bit, so look in "Program Files" directory before "Program Files (x86)".
[string] $programFilesDirectory = $null
try
{
$programFilesDirectory = Get-Item 'Env:\ProgramFiles(x86)' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Value
$programFilesDirectory = Get-Item 'Env:\ProgramFiles' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Value
}
catch
{ }
if ([string]::IsNullOrEmpty($programFilesDirectory))
{
$programFilesDirectory = 'C:\Program Files (x86)'
$programFilesDirectory = 'C:\Program Files'
}
# If we're on a 32-bit machine, we need to go straight after the "Program Files" directory.
if (!(Test-Path -LiteralPath $programFilesDirectory -PathType Container))
[string] $visualStudioDirectoryPath = Join-Path -Path $programFilesDirectory -ChildPath 'Microsoft Visual Studio'
[bool] $visualStudioDirectoryPathExists = (Test-Path -LiteralPath $visualStudioDirectoryPath -PathType Container)
if (!$visualStudioDirectoryPathExists)
{
# Look for Visual Studio in "Program Files (x86)" directory.
try
{
$programFilesDirectory = Get-Item 'Env:\ProgramFiles' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Value
$programFilesDirectory = Get-Item 'Env:\ProgramFiles(x86)' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Value
}
catch
{
@ -719,13 +740,12 @@ function Get-CommonVisualStudioDirectoryPath
if ([string]::IsNullOrEmpty($programFilesDirectory))
{
$programFilesDirectory = 'C:\Program Files'
$programFilesDirectory = 'C:\Program Files (x86)'
}
}
[string] $visualStudioDirectoryPath = Join-Path -Path $programFilesDirectory -ChildPath 'Microsoft Visual Studio'
[bool] $visualStudioDirectoryPathExists = (Test-Path -LiteralPath $visualStudioDirectoryPath -PathType Container)
$visualStudioDirectoryPath = Join-Path -Path $programFilesDirectory -ChildPath 'Microsoft Visual Studio'
$visualStudioDirectoryPathExists = (Test-Path -LiteralPath $visualStudioDirectoryPath -PathType Container)
if (!$visualStudioDirectoryPathExists)
{
return $null

View File

@ -10,6 +10,8 @@
-->
<TargetProcessorArchitecture Condition=" '$(Platform)'=='x64' ">amd64</TargetProcessorArchitecture>
<TargetProcessorArchitecture Condition=" '$(Platform)'=='Win32' ">x86</TargetProcessorArchitecture>
<TargetProcessorArchitecture Condition=" '$(Platform)'=='ARM' ">arm</TargetProcessorArchitecture>
<TargetProcessorArchitecture Condition=" '$(Platform)'=='ARM64' ">arm64</TargetProcessorArchitecture>
</PropertyGroup>
<!-- Output Paths -->
<PropertyGroup>

View File

@ -13,7 +13,7 @@
[string] $interopAssemblyPath = Join-Path $PSScriptRoot "$env:PROCESSOR_ARCHITECTURE\DSInternals.Replication.Interop.dll"
try
{
Add-Type -Path $interopAssemblyPath
Add-Type -Path $interopAssemblyPath -ErrorAction Stop
}
catch [System.IO.IOException]
{
@ -26,7 +26,7 @@ catch [System.IO.IOException]
# Check the presence of the Universal C Runtime
[string] $ucrtPath = Join-Path ([System.Environment]::SystemDirectory) 'ucrtbase.dll'
[bool] $ucrtPresent = Test-Path $ucrtPath
[bool] $ucrtPresent = Test-Path -Path $ucrtPath
if(-not $ucrtPresent)
{
@ -36,7 +36,7 @@ catch [System.IO.IOException]
}
# Check if the interop assembly is blocked
[object] $zoneIdentifier = Get-Item $interopAssemblyPath -Stream 'Zone.Identifier' -ErrorAction SilentlyContinue
[object] $zoneIdentifier = Get-Item -Path $interopAssemblyPath -Stream 'Zone.Identifier' -ErrorAction SilentlyContinue
if($zoneIdentifier -ne $null)
{

View File

@ -41,7 +41,7 @@ DotNetFrameworkVersion = '4.7.2' # This requirement is not enforced by older ver
# Minimum version of the common language runtime (CLR) required by this module
CLRVersion = '4.0.30319.42000' # Corresponds to .NET Framework 4.6 and later
# Processor architecture (None, X86, Amd64) required by this module
# Processor architecture (None, X86, Amd64, ARM64) required by this module
ProcessorArchitecture = 'None'
# Type files (.ps1xml) to be loaded when importing this module
@ -118,6 +118,7 @@ FileList = 'AutoMapper.dll',
'Newtonsoft.Json.dll',
'Numbers.dll',
'amd64\DSInternals.Replication.Interop.dll',
'arm64\DSInternals.Replication.Interop.dll',
'x86\DSInternals.Replication.Interop.dll',
'en-US\about_DSInternals.help.txt',
'en-US\DSInternals.PowerShell.dll-Help.xml'

View File

@ -90,10 +90,10 @@ Describe 'DSInternals PowerShell Module' {
$licenseFile | Should -FileContentMatch ('Copyright \(c\) 2015-{0}' -f (Get-Date).Year)
}
It 'contains Visual C++ Runtime (<Platform>)' -TestCases @{ Platform = 'x86' },@{ Platform = 'amd64' } -Test {
It 'contains Visual C++ Runtime (<Platform>)' -TestCases @{ Platform = 'x86' },@{ Platform = 'amd64' },@{ Platform = 'arm64' } -Test {
param([string] $Platform)
# Regardless of the runtime version, we expect 2-3 additional DLLs to be present in the x86/amd64 directory
# Regardless of the runtime version, we expect 2-3 additional DLLs to be present in the x86/amd64/arm64 directory
$platformSpecificPath = Join-Path $ModulePath $Platform
Get-ChildItem -Path $platformSpecificPath -Recurse -Include msvc*,vcruntime* |
Measure-Object |

View File

@ -2,6 +2,14 @@
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\Configuration\Common.vcxproj.props" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
@ -10,6 +18,14 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
@ -46,6 +62,20 @@
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolSet)</PlatformToolset>
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolSet)</PlatformToolset>
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
@ -60,6 +90,20 @@
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolSet)</PlatformToolset>
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolSet)</PlatformToolset>
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
@ -69,12 +113,24 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
@ -84,6 +140,16 @@
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(ProjectDir);$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(ProjectDir);$(IncludePath)</IncludePath>
<EnableManagedIncrementalBuild>false</EnableManagedIncrementalBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(ProjectDir);$(IncludePath)</IncludePath>
<EnableManagedIncrementalBuild>false</EnableManagedIncrementalBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(ProjectDir);$(IncludePath)</IncludePath>
@ -92,6 +158,16 @@
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(ProjectDir);$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(ProjectDir);$(IncludePath)</IncludePath>
<EnableManagedIncrementalBuild>false</EnableManagedIncrementalBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(ProjectDir);$(IncludePath)</IncludePath>
<EnableManagedIncrementalBuild>false</EnableManagedIncrementalBuild>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
@ -150,6 +226,64 @@
<EnableErrorChecks>All</EnableErrorChecks>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>Use</PrecompiledHeader>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<ExceptionHandling>false</ExceptionHandling>
<CompileAsManaged>true</CompileAsManaged>
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<AdditionalDependencies>RpcRT4.lib;Secur32.lib</AdditionalDependencies>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
</Link>
<Midl>
<HeaderFileName>%(Filename).h</HeaderFileName>
</Midl>
<Midl>
<GenerateClientFiles>Stub</GenerateClientFiles>
</Midl>
<Midl>
<GenerateServerFiles>None</GenerateServerFiles>
<ClientStubFile>%(Filename).cpp</ClientStubFile>
<GenerateTypeLibrary>false</GenerateTypeLibrary>
<EnableErrorChecks>All</EnableErrorChecks>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>Use</PrecompiledHeader>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<ExceptionHandling>false</ExceptionHandling>
<CompileAsManaged>true</CompileAsManaged>
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<AdditionalDependencies>RpcRT4.lib;Secur32.lib</AdditionalDependencies>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
</Link>
<Midl>
<HeaderFileName>%(Filename).h</HeaderFileName>
</Midl>
<Midl>
<GenerateClientFiles>Stub</GenerateClientFiles>
</Midl>
<Midl>
<GenerateServerFiles>None</GenerateServerFiles>
<ClientStubFile>%(Filename).cpp</ClientStubFile>
<GenerateTypeLibrary>false</GenerateTypeLibrary>
<EnableErrorChecks>All</EnableErrorChecks>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
@ -200,6 +334,56 @@
<ClientStubFile>%(Filename).cpp</ClientStubFile>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>Use</PrecompiledHeader>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<ExceptionHandling>Async</ExceptionHandling>
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>Rpcrt4.lib;Secur32.lib</AdditionalDependencies>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
</Link>
<Midl>
<HeaderFileName>%(Filename).h</HeaderFileName>
</Midl>
<Midl>
<GenerateClientFiles>Stub</GenerateClientFiles>
</Midl>
<Midl>
<GenerateServerFiles>None</GenerateServerFiles>
<ClientStubFile>%(Filename).cpp</ClientStubFile>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>Use</PrecompiledHeader>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<ExceptionHandling>Async</ExceptionHandling>
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>Rpcrt4.lib;Secur32.lib</AdditionalDependencies>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
</Link>
<Midl>
<HeaderFileName>%(Filename).h</HeaderFileName>
</Midl>
<Midl>
<GenerateClientFiles>Stub</GenerateClientFiles>
</Midl>
<Midl>
<GenerateServerFiles>None</GenerateServerFiles>
<ClientStubFile>%(Filename).cpp</ClientStubFile>
</Midl>
</ItemDefinitionGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
@ -220,7 +404,11 @@
<ClCompile Include="DrsConnection.cpp" />
<ClCompile Include="drsr.cpp">
<ForcedIncludeFiles Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">stdafx.h;unmanaged.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<ForcedIncludeFiles Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">stdafx.h;unmanaged.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<ForcedIncludeFiles Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">stdafx.h;unmanaged.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<ForcedIncludeFiles Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">stdafx.h;unmanaged.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<ForcedIncludeFiles Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">stdafx.h;unmanaged.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<ForcedIncludeFiles Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">stdafx.h;unmanaged.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<ForcedIncludeFiles Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">stdafx.h;unmanaged.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<ForcedIncludeFiles Condition="'$(Configuration)|$(Platform)'=='Release|x64'">stdafx.h;unmanaged.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
</ClCompile>
@ -258,35 +446,32 @@
<ItemGroup>
<Midl Include="drsr.idl">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
</Midl>
<Midl Include="drsr_imports.idl">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</Midl>
</ItemGroup>
<!-- Visual C++ Runtime Redistribution -->
<PropertyGroup Condition=" '$(PlatformToolsetVersion)' &lt; 141 ">
<!-- Definitions for Visual Studio 2013 and 2015 -->
<VCRuntimePath Condition=" '$(Platform)'=='x64' ">$(VCInstallDir)\redist\x64\Microsoft.VC$(PlatformToolsetVersion).CRT</VCRuntimePath>
<VCRuntimePath Condition=" '$(Platform)'=='Win32' ">$(VCInstallDir)\redist\x86\Microsoft.VC$(PlatformToolsetVersion).CRT</VCRuntimePath>
</PropertyGroup>
<PropertyGroup Condition=" '$(PlatformToolsetVersion)' &gt;= 141 ">
<!-- Definitions for Visual Studio 2017 -->
<VCRuntimePath Condition=" '$(Platform)'=='x64' ">$(VCInstallDir)\Tools\MSVC\$(VCToolsVersion)\bin\Hostx64\x64</VCRuntimePath>
<VCRuntimePath Condition=" '$(Platform)'=='Win32' ">$(VCInstallDir)\Tools\MSVC\$(VCToolsVersion)\bin\Hostx86\x86</VCRuntimePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)' == 'Release'">
<CustomBuildStep>
<!-- Note: The msvcr140.dll file has been replaced by vcruntime140.dll since Visual Studio 2017. The vcruntime140_1.dll file is also required.
<!--
Sample source path: C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Redist\MSVC\14.34.31931\arm64\Microsoft.VC143.CRT\msvcp140.dll
Note: The msvcr140.dll file has been replaced by vcruntime140.dll since Visual Studio 2017. The vcruntime140_1.dll file is also required.
Moreover, $(PlatformToolsetVersion) equals to 150 instead of 140 and thus does not match the names of the runtime files.-->
<Command>
robocopy.exe "$(VCRuntimePath)" "$(OutDir)\." "msvcp*.dll" "msvcr*.dll" "vcruntime*.dll" /xf "msvcp*_*.dll" /FP /NP /NDL /NS /NJH /NJS
robocopy.exe "$(CppRuntimeFilesPath.Replace(';',''))\Microsoft.VC$(PlatformToolsetVersion).CRT" "$(OutDir)\." "msvcp*.dll" "msvcr*.dll" "vcruntime*.dll" /xf "msvcp*_*.dll" /FP /NP /NDL /NS /NJH /NJS
IF %ERRORLEVEL% LSS 8 SET ERRORLEVEL = 0
</Command>
<Outputs>$(OutDir)\msvcr$(PlatformToolsetVersion).dll;$(OutDir)\msvcp$(PlatformToolsetVersion).dll;$(OutDir)\vcruntime$(PlatformToolsetVersion).dll;$(OutDir)\msvcp140.dll;$(OutDir)\vcruntime140.dll</Outputs>
<Outputs>$(OutDir)\msvcp140.dll;$(OutDir)\vcruntime140.dll;$(OutDir)\vcruntime140_1.dll</Outputs>
<Message>Copying VC Runtime</Message>
</CustomBuildStep>
</ItemDefinitionGroup>

View File

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28803.352
# Visual Studio Version 17
VisualStudioVersion = 17.5.33627.172
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DSInternals.PowerShell", "DSInternals.PowerShell\DSInternals.PowerShell.csproj", "{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}"
EndProject
@ -63,6 +63,8 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{9735D030-AEE6-415A-BF03-074076FF776A}"
ProjectSection(SolutionItems) = preProject
..\Documentation\CHANGELOG.md = ..\Documentation\CHANGELOG.md
..\.github\CONTRIBUTING.md = ..\.github\CONTRIBUTING.md
..\.github\README.md = ..\.github\README.md
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Database.Isam", "Microsoft.Database.Isam\Microsoft.Database.Isam.csproj", "{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}"
@ -121,106 +123,200 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PowerShell", "PowerShell",
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Debug|ARM.ActiveCfg = Debug|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Debug|ARM.Build.0 = Debug|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Debug|ARM64.Build.0 = Debug|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Debug|x64.ActiveCfg = Debug|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Debug|x64.Build.0 = Debug|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Debug|x86.ActiveCfg = Debug|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Debug|x86.Build.0 = Debug|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Release|ARM.ActiveCfg = Release|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Release|ARM64.ActiveCfg = Release|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Release|x64.ActiveCfg = Release|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Release|x86.ActiveCfg = Release|Any CPU
{C7EECC1F-1F9C-400B-A981-A8106E2A75F7}.Release|x86.Build.0 = Release|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Debug|ARM.ActiveCfg = Debug|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Debug|ARM.Build.0 = Debug|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Debug|ARM64.Build.0 = Debug|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Debug|x64.ActiveCfg = Debug|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Debug|x64.Build.0 = Debug|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Debug|x86.ActiveCfg = Debug|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Debug|x86.Build.0 = Debug|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Release|ARM.ActiveCfg = Release|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Release|ARM64.ActiveCfg = Release|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Release|x64.ActiveCfg = Release|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Release|x86.ActiveCfg = Release|Any CPU
{924F67C0-8FFF-4714-891A-FC0799F46727}.Release|x86.Build.0 = Release|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Debug|ARM.ActiveCfg = Debug|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Debug|ARM.Build.0 = Debug|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Debug|ARM64.Build.0 = Debug|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Debug|x64.ActiveCfg = Debug|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Debug|x64.Build.0 = Debug|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Debug|x86.ActiveCfg = Debug|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Debug|x86.Build.0 = Debug|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Release|ARM.ActiveCfg = Release|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Release|ARM.Build.0 = Release|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Release|ARM64.ActiveCfg = Release|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Release|ARM64.Build.0 = Release|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Release|x64.ActiveCfg = Release|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Release|x64.Build.0 = Release|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Release|x86.ActiveCfg = Release|Any CPU
{7D47F040-D3A9-43CA-9F69-EF91FAF2C23A}.Release|x86.Build.0 = Release|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Debug|ARM.ActiveCfg = Debug|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Debug|ARM.Build.0 = Debug|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Debug|ARM64.Build.0 = Debug|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Debug|x64.ActiveCfg = Debug|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Debug|x64.Build.0 = Debug|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Debug|x86.ActiveCfg = Debug|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Debug|x86.Build.0 = Debug|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Release|ARM.ActiveCfg = Release|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Release|ARM64.ActiveCfg = Release|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Release|x64.ActiveCfg = Release|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Release|x86.ActiveCfg = Release|Any CPU
{8A857B97-1BE0-4BAE-A4E8-DEE870858BFD}.Release|x86.Build.0 = Release|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Debug|ARM.ActiveCfg = Debug|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Debug|ARM.Build.0 = Debug|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Debug|ARM64.Build.0 = Debug|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Debug|x64.ActiveCfg = Debug|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Debug|x64.Build.0 = Debug|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Debug|x86.ActiveCfg = Debug|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Debug|x86.Build.0 = Debug|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Release|ARM.ActiveCfg = Release|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Release|ARM64.ActiveCfg = Release|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Release|x64.ActiveCfg = Release|Any CPU
{744163E3-AEDA-407C-A917-7C406977B4B8}.Release|x86.ActiveCfg = Release|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Debug|ARM.ActiveCfg = Debug|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Debug|ARM.Build.0 = Debug|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Debug|ARM64.Build.0 = Debug|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Debug|x64.ActiveCfg = Debug|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Debug|x64.Build.0 = Debug|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Debug|x86.ActiveCfg = Debug|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Debug|x86.Build.0 = Debug|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Release|ARM.ActiveCfg = Release|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Release|ARM64.ActiveCfg = Release|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Release|x64.ActiveCfg = Release|Any CPU
{91377A6C-52EE-4267-9D6A-1475E2183648}.Release|x86.ActiveCfg = Release|Any CPU
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Debug|ARM.ActiveCfg = Debug|ARM
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Debug|ARM.Build.0 = Debug|ARM
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Debug|ARM64.ActiveCfg = Debug|ARM64
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Debug|ARM64.Build.0 = Debug|ARM64
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Debug|x64.ActiveCfg = Debug|x64
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Debug|x64.Build.0 = Debug|x64
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Debug|x86.ActiveCfg = Debug|Win32
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Debug|x86.Build.0 = Debug|Win32
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Release|ARM.ActiveCfg = Release|ARM
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Release|ARM.Build.0 = Release|ARM
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Release|ARM64.ActiveCfg = Release|ARM64
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Release|ARM64.Build.0 = Release|ARM64
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Release|x64.ActiveCfg = Release|x64
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Release|x64.Build.0 = Release|x64
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Release|x86.ActiveCfg = Release|Win32
{A70A6658-DD67-4C73-AB9A-581465137C6B}.Release|x86.Build.0 = Release|Win32
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Debug|ARM.ActiveCfg = Debug|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Debug|ARM.Build.0 = Debug|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Debug|ARM64.Build.0 = Debug|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Debug|x64.ActiveCfg = Debug|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Debug|x64.Build.0 = Debug|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Debug|x86.ActiveCfg = Debug|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Debug|x86.Build.0 = Debug|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Release|ARM.ActiveCfg = Release|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Release|ARM.Build.0 = Release|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Release|ARM64.ActiveCfg = Release|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Release|ARM64.Build.0 = Release|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Release|x64.ActiveCfg = Release|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Release|x64.Build.0 = Release|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Release|x86.ActiveCfg = Release|Any CPU
{0BCA513C-5F12-48B6-8288-D3A95EC2994A}.Release|x86.Build.0 = Release|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Debug|ARM.ActiveCfg = Debug|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Debug|ARM.Build.0 = Debug|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Debug|ARM64.Build.0 = Debug|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Debug|x64.ActiveCfg = Debug|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Debug|x64.Build.0 = Debug|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Debug|x86.ActiveCfg = Debug|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Debug|x86.Build.0 = Debug|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Release|ARM.ActiveCfg = Release|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Release|ARM64.ActiveCfg = Release|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Release|x64.ActiveCfg = Release|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Release|x86.ActiveCfg = Release|Any CPU
{2EE0D48F-65BA-4D4F-A8E1-FC01349BA786}.Release|x86.Build.0 = Release|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Debug|ARM.ActiveCfg = Debug|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Debug|ARM.Build.0 = Debug|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Debug|ARM64.Build.0 = Debug|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Debug|x64.ActiveCfg = Debug|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Debug|x64.Build.0 = Debug|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Debug|x86.ActiveCfg = Debug|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Debug|x86.Build.0 = Debug|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Release|ARM.ActiveCfg = Release|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Release|ARM64.ActiveCfg = Release|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Release|x64.ActiveCfg = Release|Any CPU
{11DB6E06-E5E4-4612-9062-0B8E68099880}.Release|x86.ActiveCfg = Release|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Debug|ARM.Build.0 = Debug|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Debug|ARM64.Build.0 = Debug|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Debug|x64.ActiveCfg = Debug|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Debug|x64.Build.0 = Debug|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Debug|x86.ActiveCfg = Debug|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Debug|x86.Build.0 = Debug|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Release|ARM.ActiveCfg = Release|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Release|ARM64.ActiveCfg = Release|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Release|x64.ActiveCfg = Release|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Release|x86.ActiveCfg = Release|Any CPU
{21CC632C-B09A-4DB7-BD6E-7F7D2716F58F}.Release|x86.Build.0 = Release|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Debug|ARM.ActiveCfg = Debug|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Debug|ARM.Build.0 = Debug|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Debug|ARM64.Build.0 = Debug|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Debug|x64.ActiveCfg = Debug|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Debug|x64.Build.0 = Debug|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Debug|x86.ActiveCfg = Debug|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Debug|x86.Build.0 = Debug|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Release|ARM.ActiveCfg = Release|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Release|ARM64.ActiveCfg = Release|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Release|x64.ActiveCfg = Release|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Release|x86.ActiveCfg = Release|Any CPU
{E929E163-52A0-4AAC-917B-6D7FAF70C45E}.Release|x86.Build.0 = Release|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Debug|ARM.Build.0 = Debug|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Debug|ARM64.Build.0 = Debug|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Debug|x64.ActiveCfg = Debug|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Debug|x64.Build.0 = Debug|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Debug|x86.ActiveCfg = Debug|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Debug|x86.Build.0 = Debug|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Release|ARM.ActiveCfg = Release|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Release|ARM64.ActiveCfg = Release|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Release|x64.ActiveCfg = Release|Any CPU
{B7E02A94-DA21-4302-82A6-2D4B7F279F21}.Release|x86.ActiveCfg = Release|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Debug|ARM.ActiveCfg = Debug|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Debug|ARM.Build.0 = Debug|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Debug|ARM64.Build.0 = Debug|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Debug|x64.ActiveCfg = Debug|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Debug|x64.Build.0 = Debug|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Debug|x86.ActiveCfg = Debug|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Debug|x86.Build.0 = Debug|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Release|ARM.ActiveCfg = Release|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Release|ARM64.ActiveCfg = Release|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Release|x64.ActiveCfg = Release|Any CPU
{7420D8C2-14BE-40F2-B724-A88D27BC6743}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection