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

@ -56,9 +56,9 @@ function Invoke-MsBuild
By default the build output is not shown in any window.
NOTE: This switch will override the ShowBuildOutputInNewWindow switch.
NOTE: There is a problem with the -NoNewWindow parameter of the Start-Process cmdlet; this is used for the ShowBuildOutputInCurrentWindow switch.
The bug is that in some PowerShell consoles, the build output is not directed back to the console calling this function, so nothing is displayed.
To avoid the build process from appearing to hang, PromptForInputBeforeClosing only has an effect with ShowBuildOutputInCurrentWindow when running
in the default "ConsoleHost" PowerShell console window, as we know it works properly with that console (it does not in other consoles like ISE, PowerGUI, etc.).
The bug is that in some PowerShell consoles, the build output is not directed back to the console calling this function, so nothing is displayed.
To avoid the build process from appearing to hang, PromptForInputBeforeClosing only has an effect with ShowBuildOutputInCurrentWindow when running
in the default "ConsoleHost" PowerShell console window, as we know it works properly with that console (it does not in other consoles like ISE, PowerGUI, etc.).
.PARAMETER PromptForInputBeforeClosing
If set, this switch will prompt the user for input after the build completes, and will not continue until the user presses a key.
@ -66,7 +66,7 @@ function Invoke-MsBuild
NOTE: This switch cannot be used with the PassThru switch.
NOTE: The user will need to provide input before execution will return back to the calling script (so do not use this switch for automated builds).
NOTE: To avoid the build process from appearing to hang, PromptForInputBeforeClosing only has an effect with ShowBuildOutputInCurrentWindow when running
in the default "ConsoleHost" PowerShell console window, as we know it works properly with that console (it does not in other consoles like ISE, PowerGUI, etc.).
in the default "ConsoleHost" PowerShell console window, as we know it works properly with that console (it does not in other consoles like ISE, PowerGUI, etc.).
.PARAMETER MsBuildFilePath
By default this script will locate and use the latest version of MsBuild.exe on the machine.
@ -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>
@ -21,4 +23,4 @@
<LinkKeyFile>$(SigningKeyPath)</LinkKeyFile>
<LinkDelaySign>$(PerformDelaySign)</LinkDelaySign>
</PropertyGroup>
</Project>
</Project>

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.
Moreover, $(PlatformToolsetVersion) equals to 150 instead of 140 and thus does not match the names of the runtime files.-->
<!--
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