commit a10f1ab366296ceec95491161c7d5b02bb6c7206 parent a32e1140e2f40b620ddf1fd65988b33e789a9b52 Author: Ruben Guerrero <rubengu@microsoft.com> Date: Mon, 23 Oct 2023 18:28:01 -0700 Microsoft.WinGet.Client Any CPU (#3622) Move to Any CPU projects Moves Microsoft.WinGet.Client.Cmdlet and Microsoft.WinGet.Client.Engine to be Any CPU platform binaries. This is in preparation of PSResourceGet (aka PowerShellGet v3) release and addresses #3501 as $env:PROCESSOR_ARCHITECTURE is not an allowed variable in a psd1. Handle server disconnection Before, we had a static PackageManager object for OOP calls. In the scenario where winget is upgraded, this object will be disconnected, and one would have to close its PowerShell 7 session and open a new one to keep using the cmdlets. This PR creates a wrapper that handles disconnections. Windows PowerShell support Correctly throw NotSupported exception for cmdlets that use winget's COM APIs. For this I had to track down all the types being loaded per command and make sure they get loaded after the constructor of each one. This resulted in some weird cases that I need to pass a string instead of an enum in the virtual methods of some base classes. Fix issue where Microsoft.Win32.Registry.dll was missing. Add Pester tests specifically for Windows PowerShell Expected Layout Microsoft.WinGet.Client\ Format.ps1xml Microsoft.WinGet.Client.psd1 net48\ Microsoft.Win32.Registry.dll Microsoft.WinGet.Client.Cmdlets.dll Microsoft.WinGet.Client.Engine.dll Microsoft.WinGet.SharedLib.dll Newtonsoft.Json.dll Octokit.dll net6.0-windows10.0.22000.0\ Microsoft.WinGet.Client.Cmdlets.dll DirectDependencies\ Microsoft.WinGet.Client.Engine.dll SharedDependencies\ Microsoft.Windows.SDK.NET.dll Microsoft.WinGet.SharedLib.dll Newtonsoft.Json.dll Octokit.dll WinRT.Runtime.dll x64\ Microsoft.Management.Deployment.dll Microsoft.Management.Deployment.winmd WindowsPackageManager.dll winrtact.dll x86\ Microsoft.Management.Deployment.dll Microsoft.Management.Deployment.winmd WindowsPackageManager.dll winrtact.dll I didn't add the native binaries in the Windows PowerShell because they will never be loaded. Additional changes: Remove unnecessary AnyCpu build in AppInstallerCLI.sln Fully remove Microsoft.WinGet.Client tests from AppInstallerCLIE2ETests in favor of Pester tests. Improve Initialize-LocalWinGetModules.ps1 for local development. You can now specify which module to initialize. Diffstat:
37 files changed, 1107 insertions(+), 1164 deletions(-)
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt @@ -333,6 +333,7 @@ objbase objidl ofile ools +oop OPTOUT osfhandle Outptr @@ -476,6 +477,7 @@ TOptions TProgress transitioning TResult +TReturn trimstart TState TStatus diff --git a/azure-pipelines.yml b/azure-pipelines.yml @@ -344,11 +344,34 @@ jobs: condition: succeededOrFailed() - task: CopyFiles@2 - displayName: 'Copy PowerShell Module Files' + displayName: 'Copy native binaries for Microsoft.WinGet.Client' inputs: - SourceFolder: '$(buildOutDir)\PowerShell' - TargetFolder: '$(artifactsDir)\PowerShell' - condition: succeededOrFailed() + SourceFolder: $(buildOutDir) + Contents: | + Microsoft.Management.Deployment.InProc\Microsoft.Management.Deployment.dll + Microsoft.Management.Deployment\Microsoft.Management.Deployment.winmd + WindowsPackageManager\WindowsPackageManager.dll + UndockedRegFreeWinRT\winrtact.dll + TargetFolder: $(buildOutDirAnyCpu)\PowerShell\Microsoft.WinGet.Client\net6.0-windows10.0.22000.0\SharedDependencies\$(BuildPlatform) + flattenFolders: true + + - task: CopyFiles@2 + displayName: 'Copy native binaries for Microsoft.WinGet.Configuration' + inputs: + SourceFolder: $(buildOutDir) + Contents: | + Microsoft.Management.Configuration\Microsoft.Management.Configuration.dll + TargetFolder: $(buildOutDirAnyCpu)\PowerShell\Microsoft.WinGet.Configuration\SharedDependencies\$(BuildPlatform) + flattenFolders: true + + - task: CopyFiles@2 + displayName: 'Copy managed binaries for Microsoft.WinGet.Configuration in arch specific' + inputs: + SourceFolder: $(buildOutDirAnyCpu) + Contents: | + Microsoft.Management.Configuration.Projection\net6.0-windows10.0.19041.0\Microsoft.Management.Configuration.Projection.dll + TargetFolder: $(buildOutDirAnyCpu)\PowerShell\Microsoft.WinGet.Configuration\SharedDependencies\$(BuildPlatform) + flattenFolders: true - task: CopyFiles@2 displayName: 'Copy PowerShell AnyCPU Module Files' @@ -444,14 +467,28 @@ jobs: - pwsh: .\RunTests.ps1 -testModulesPath $(Build.ArtifactStagingDirectory) -outputPath $(Pipeline.Workspace)\PesterTest -packageLayoutPath $(Pipeline.Workspace)\Build.x64release\DevPackage workingDirectory: $(Build.SourcesDirectory)\src\PowerShell\tests\ - displayName: Run Tests + displayName: Run PowerShell 7 Tests + + - powershell: .\RunTests.ps1 -testModulesPath $(Build.ArtifactStagingDirectory) -outputPath $(Pipeline.Workspace)\WPPesterTest + workingDirectory: $(Build.SourcesDirectory)\src\PowerShell\tests\ + displayName: Run Windows PowerShell Tests + condition: succeededOrFailed() - task: PublishTestResults@2 - displayName: Publish Pester Test Results + displayName: Publish Pester Test Results PowerShell 7 inputs: testResultsFormat: 'NUnit' testResultsFiles: '$(Pipeline.Workspace)\PesterTest\Test*.xml' failTaskOnFailedTests: true + condition: succeededOrFailed() + + - task: PublishTestResults@2 + displayName: Publish Pester Test Results Windows PowerShell + inputs: + testResultsFormat: 'NUnit' + testResultsFiles: '$(Pipeline.Workspace)\WPPesterTest\Test*.xml' + failTaskOnFailedTests: true + condition: succeededOrFailed() - task: PublishPipelineArtifact@1 displayName: Publish PowerShell Module Artifacts diff --git a/src/AppInstallerCLI.sln b/src/AppInstallerCLI.sln @@ -204,8 +204,6 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM64.Build.0 = Debug|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -216,20 +214,14 @@ Global {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|x86.Build.0 = Debug|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Debug|x86.Deploy.0 = Debug|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|Any CPU.Build.0 = Release|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|Any CPU.Deploy.0 = Release|Any CPU {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|x64.ActiveCfg = Release|x64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Fuzzing|x86.ActiveCfg = Release|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.PowerShell|Any CPU.Build.0 = Release|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.PowerShell|Any CPU.Deploy.0 = Release|Any CPU {6AA3791A-0713-4548-A357-87A323E7AC3A}.PowerShell|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.PowerShell|x64.ActiveCfg = Release|x64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.PowerShell|x86.ActiveCfg = Release|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|Any CPU.Build.0 = Release|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|Any CPU.Deploy.0 = Release|Any CPU {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM64.Build.0 = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|ARM64.Deploy.0 = Release|ARM64 @@ -240,13 +232,10 @@ Global {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|x86.Build.0 = Release|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.Release|x86.Deploy.0 = Release|x86 {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|Any CPU.Build.0 = Release|Any CPU - {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|Any CPU.Deploy.0 = Release|Any CPU {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|x64.ActiveCfg = Release|x64 {6AA3791A-0713-4548-A357-87A323E7AC3A}.TestRelease|x86.ActiveCfg = Release|x86 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|Any CPU.ActiveCfg = Debug|x64 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|Any CPU.Build.0 = Debug|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|ARM64.Build.0 = Debug|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x64.ActiveCfg = Debug|x64 @@ -254,17 +243,14 @@ Global {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x86.ActiveCfg = Debug|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Debug|x86.Build.0 = Debug|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|Any CPU.Build.0 = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Fuzzing|x86.ActiveCfg = Release|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.PowerShell|Any CPU.Build.0 = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.PowerShell|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.PowerShell|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.PowerShell|x86.ActiveCfg = Release|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|Any CPU.ActiveCfg = Release|x64 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|Any CPU.Build.0 = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|ARM64.Build.0 = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x64.ActiveCfg = Release|x64 @@ -272,12 +258,10 @@ Global {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x86.ActiveCfg = Release|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.Release|x86.Build.0 = Release|Win32 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|Any CPU.Build.0 = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|x64.ActiveCfg = Release|x64 {5B6F90DF-FD19-4BAE-83D9-24DAD128E777}.TestRelease|x86.ActiveCfg = Release|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|Any CPU.ActiveCfg = Debug|x64 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|Any CPU.Build.0 = Debug|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|ARM64.Build.0 = Debug|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x64.ActiveCfg = Debug|x64 @@ -285,12 +269,10 @@ Global {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x86.ActiveCfg = Debug|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Debug|x86.Build.0 = Debug|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|Any CPU.ActiveCfg = ReleaseStatic|x64 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|Any CPU.Build.0 = ReleaseStatic|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|x64.ActiveCfg = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Fuzzing|x86.ActiveCfg = Release|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.PowerShell|Any CPU.ActiveCfg = ReleaseStatic|x64 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.PowerShell|Any CPU.Build.0 = ReleaseStatic|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -298,7 +280,6 @@ Global {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|Any CPU.ActiveCfg = Release|x64 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|Any CPU.Build.0 = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM64.ActiveCfg = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|ARM64.Build.0 = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x64.ActiveCfg = Release|x64 @@ -306,7 +287,6 @@ Global {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x86.ActiveCfg = Release|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.Release|x86.Build.0 = Release|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|Any CPU.Build.0 = Release|x64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|ARM64.Build.0 = Release|ARM64 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x64.ActiveCfg = Release|x64 @@ -314,36 +294,30 @@ Global {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x86.ActiveCfg = Release|Win32 {1C6E0108-2860-4B17-9F7E-FA5C6C1F3D3D}.TestRelease|x86.Build.0 = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|Any CPU.ActiveCfg = Debug|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|Any CPU.Build.0 = Debug|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|ARM64.ActiveCfg = Debug|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x64.ActiveCfg = Debug|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x64.Build.0 = Debug|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x86.ActiveCfg = Debug|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Debug|x86.Build.0 = Debug|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|Any CPU.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|ARM64.ActiveCfg = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Fuzzing|x86.ActiveCfg = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.PowerShell|Any CPU.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.PowerShell|ARM64.ActiveCfg = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.PowerShell|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.PowerShell|x86.ActiveCfg = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|Any CPU.ActiveCfg = Release|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|Any CPU.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|ARM64.ActiveCfg = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x64.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x86.ActiveCfg = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.Release|x86.Build.0 = Release|Win32 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|Any CPU.Build.0 = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|ARM64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|x64.ActiveCfg = Release|x64 {89B1AAB4-2BBC-4B65-9ED7-A01D5CF88230}.TestRelease|x86.ActiveCfg = Release|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|Any CPU.ActiveCfg = Debug|x64 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|Any CPU.Build.0 = Debug|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|ARM64.Build.0 = Debug|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x64.ActiveCfg = Debug|x64 @@ -351,12 +325,10 @@ Global {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x86.ActiveCfg = Debug|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Debug|x86.Build.0 = Debug|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|Any CPU.ActiveCfg = ReleaseStatic|x64 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|Any CPU.Build.0 = ReleaseStatic|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|x64.ActiveCfg = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Fuzzing|x86.ActiveCfg = Release|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.PowerShell|Any CPU.ActiveCfg = ReleaseStatic|x64 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.PowerShell|Any CPU.Build.0 = ReleaseStatic|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -364,7 +336,6 @@ Global {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|Any CPU.ActiveCfg = Release|x64 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|Any CPU.Build.0 = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM64.ActiveCfg = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|ARM64.Build.0 = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x64.ActiveCfg = Release|x64 @@ -372,7 +343,6 @@ Global {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x86.ActiveCfg = Release|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.Release|x86.Build.0 = Release|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|Any CPU.Build.0 = Release|x64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|ARM64.Build.0 = Release|ARM64 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x64.ActiveCfg = Release|x64 @@ -380,7 +350,6 @@ Global {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x86.ActiveCfg = Release|Win32 {5EB88068-5FB9-4E69-89B2-72DBC5E068F9}.TestRelease|x86.Build.0 = Release|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|Any CPU.ActiveCfg = Debug|x64 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|Any CPU.Build.0 = Debug|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|ARM64.Build.0 = Debug|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x64.ActiveCfg = Debug|x64 @@ -388,13 +357,11 @@ Global {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x86.ActiveCfg = Debug|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Debug|x86.Build.0 = Debug|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|x64 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|Any CPU.Build.0 = Fuzzing|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x64.Build.0 = Fuzzing|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Fuzzing|x86.ActiveCfg = Release|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.PowerShell|Any CPU.Build.0 = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -402,7 +369,6 @@ Global {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|Any CPU.ActiveCfg = Release|x64 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|Any CPU.Build.0 = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM64.ActiveCfg = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|ARM64.Build.0 = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x64.ActiveCfg = Release|x64 @@ -410,7 +376,6 @@ Global {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x86.ActiveCfg = Release|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.Release|x86.Build.0 = Release|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|Any CPU.Build.0 = Release|x64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|ARM64.Build.0 = Release|ARM64 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x64.ActiveCfg = Release|x64 @@ -418,7 +383,6 @@ Global {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x86.ActiveCfg = Release|Win32 {8BB94BB8-374F-4294-BCA1-C7811514A6B7}.TestRelease|x86.Build.0 = Release|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|Any CPU.ActiveCfg = Debug|x64 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|Any CPU.Build.0 = Debug|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|ARM64.Build.0 = Debug|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x64.ActiveCfg = Debug|x64 @@ -426,13 +390,11 @@ Global {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x86.ActiveCfg = Debug|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Debug|x86.Build.0 = Debug|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|x64 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|Any CPU.Build.0 = Fuzzing|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x64.Build.0 = Fuzzing|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Fuzzing|x86.ActiveCfg = Release|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.PowerShell|Any CPU.Build.0 = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -440,7 +402,6 @@ Global {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|Any CPU.ActiveCfg = Release|x64 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|Any CPU.Build.0 = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM64.ActiveCfg = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|ARM64.Build.0 = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x64.ActiveCfg = Release|x64 @@ -448,7 +409,6 @@ Global {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x86.ActiveCfg = Release|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.Release|x86.Build.0 = Release|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|Any CPU.Build.0 = Release|x64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|ARM64.Build.0 = Release|ARM64 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x64.ActiveCfg = Release|x64 @@ -456,7 +416,6 @@ Global {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x86.ActiveCfg = Release|Win32 {5890D6ED-7C3B-40F3-B436-B54F640D9E65}.TestRelease|x86.Build.0 = Release|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|Any CPU.ActiveCfg = Debug|x64 - {FB313532-38B0-4676-9303-AB200AA13576}.Debug|Any CPU.Build.0 = Debug|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM64.ActiveCfg = Debug|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|ARM64.Build.0 = Debug|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x64.ActiveCfg = Debug|x64 @@ -464,17 +423,14 @@ Global {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x86.ActiveCfg = Debug|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.Debug|x86.Build.0 = Debug|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|Any CPU.Build.0 = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Fuzzing|x86.ActiveCfg = Release|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {FB313532-38B0-4676-9303-AB200AA13576}.PowerShell|Any CPU.Build.0 = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.PowerShell|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.PowerShell|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.PowerShell|x86.ActiveCfg = Release|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.Release|Any CPU.ActiveCfg = Release|x64 - {FB313532-38B0-4676-9303-AB200AA13576}.Release|Any CPU.Build.0 = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|ARM64.Build.0 = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x64.ActiveCfg = Release|x64 @@ -482,12 +438,10 @@ Global {FB313532-38B0-4676-9303-AB200AA13576}.Release|x86.ActiveCfg = Release|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.Release|x86.Build.0 = Release|Win32 {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|Any CPU.Build.0 = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|x64.ActiveCfg = Release|x64 {FB313532-38B0-4676-9303-AB200AA13576}.TestRelease|x86.ActiveCfg = Release|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|Any CPU.ActiveCfg = Debug|x64 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|Any CPU.Build.0 = Debug|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|ARM64.Build.0 = Debug|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x64.ActiveCfg = Debug|x64 @@ -495,17 +449,14 @@ Global {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x86.ActiveCfg = Debug|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Debug|x86.Build.0 = Debug|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|Any CPU.Build.0 = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Fuzzing|x86.ActiveCfg = Release|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.PowerShell|Any CPU.Build.0 = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.PowerShell|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.PowerShell|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.PowerShell|x86.ActiveCfg = Release|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|Any CPU.ActiveCfg = Release|x64 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|Any CPU.Build.0 = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|ARM64.Build.0 = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x64.ActiveCfg = Release|x64 @@ -513,42 +464,34 @@ Global {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x86.ActiveCfg = Release|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.Release|x86.Build.0 = Release|Win32 {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|Any CPU.Build.0 = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|x64.ActiveCfg = Release|x64 {6CB84692-5994-407D-B9BD-9216AF77FE83}.TestRelease|x86.ActiveCfg = Release|Win32 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|Any CPU.ActiveCfg = Debug|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|Any CPU.Build.0 = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|ARM64.ActiveCfg = Debug|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x64.ActiveCfg = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x64.Build.0 = Debug|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x86.ActiveCfg = Debug|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Debug|x86.Build.0 = Debug|x86 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|Any CPU.ActiveCfg = TestOnly|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|Any CPU.Build.0 = TestOnly|x64 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|Any CPU.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|ARM64.ActiveCfg = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Fuzzing|x86.ActiveCfg = Release|x86 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.PowerShell|Any CPU.ActiveCfg = TestOnly|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.PowerShell|Any CPU.Build.0 = TestOnly|x64 + {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.PowerShell|Any CPU.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.PowerShell|ARM64.ActiveCfg = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.PowerShell|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.PowerShell|x86.ActiveCfg = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|Any CPU.ActiveCfg = Release|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|Any CPU.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|ARM64.ActiveCfg = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x64.Build.0 = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x86.ActiveCfg = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.Release|x86.Build.0 = Release|x86 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|Any CPU.ActiveCfg = TestOnly|x64 - {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|Any CPU.Build.0 = TestOnly|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|ARM64.ActiveCfg = TestOnly|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|x64.ActiveCfg = Release|x64 {3C0269FA-E582-4CA7-9E33-3881A005CA0C}.TestRelease|x86.ActiveCfg = Release|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM64.ActiveCfg = Debug|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM64.Build.0 = Debug|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -559,20 +502,14 @@ Global {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|x86.Build.0 = Debug|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Debug|x86.Deploy.0 = Debug|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|Any CPU.Build.0 = Release|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|Any CPU.Deploy.0 = Release|Any CPU {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|x64.ActiveCfg = Release|x64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Fuzzing|x86.ActiveCfg = Release|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.PowerShell|Any CPU.Build.0 = Release|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.PowerShell|Any CPU.Deploy.0 = Release|Any CPU {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.PowerShell|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.PowerShell|x64.ActiveCfg = Release|x64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.PowerShell|x86.ActiveCfg = Release|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|Any CPU.Build.0 = Release|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|Any CPU.Deploy.0 = Release|Any CPU {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM64.Build.0 = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|ARM64.Deploy.0 = Release|ARM64 @@ -583,8 +520,6 @@ Global {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|x86.Build.0 = Release|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.Release|x86.Deploy.0 = Release|x86 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|Any CPU.Build.0 = Release|Any CPU - {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|Any CPU.Deploy.0 = Release|Any CPU {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|x64.ActiveCfg = Release|x64 {3E2CBA31-CEBA-4D63-BF52-49C0718E19EA}.TestRelease|x86.ActiveCfg = Release|x86 @@ -609,36 +544,30 @@ Global {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|x64.ActiveCfg = Release {C1624B2F-2BF6-4E28-92FA-1BF85C6B62A8}.TestRelease|x86.ActiveCfg = Release {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|Any CPU.ActiveCfg = Debug|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|Any CPU.Build.0 = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|ARM64.ActiveCfg = Debug|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x64.ActiveCfg = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x64.Build.0 = Debug|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x86.ActiveCfg = Debug|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Debug|x86.Build.0 = Debug|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|Any CPU.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|ARM64.ActiveCfg = Release|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Fuzzing|x86.ActiveCfg = Release|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.PowerShell|Any CPU.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.PowerShell|ARM64.ActiveCfg = Release|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.PowerShell|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.PowerShell|x86.ActiveCfg = Release|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|Any CPU.ActiveCfg = Release|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|Any CPU.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|ARM64.ActiveCfg = Release|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x64.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x86.ActiveCfg = Release|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.Release|x86.Build.0 = Release|x86 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|Any CPU.Build.0 = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|ARM64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|x64.ActiveCfg = Release|x64 {3B8466CF-4FDD-4329-9C80-91321C4AAC99}.TestRelease|x86.ActiveCfg = Release|x86 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|Any CPU.ActiveCfg = Debug|x64 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|Any CPU.Build.0 = Debug|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|ARM64.Build.0 = Debug|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x64.ActiveCfg = Debug|x64 @@ -646,13 +575,11 @@ Global {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x86.ActiveCfg = Debug|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Debug|x86.Build.0 = Debug|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|x64 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|Any CPU.Build.0 = Fuzzing|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x64.Build.0 = Fuzzing|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Fuzzing|x86.ActiveCfg = Release|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.PowerShell|Any CPU.Build.0 = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -660,7 +587,6 @@ Global {82B39FDA-E86B-4713-A873-9D56DE00247A}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|Any CPU.ActiveCfg = Release|x64 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|Any CPU.Build.0 = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM64.ActiveCfg = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|ARM64.Build.0 = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x64.ActiveCfg = Release|x64 @@ -668,7 +594,6 @@ Global {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x86.ActiveCfg = Release|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.Release|x86.Build.0 = Release|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|Any CPU.Build.0 = Release|x64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|ARM64.Build.0 = Release|ARM64 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x64.ActiveCfg = Release|x64 @@ -676,75 +601,62 @@ Global {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x86.ActiveCfg = Release|Win32 {82B39FDA-E86B-4713-A873-9D56DE00247A}.TestRelease|x86.Build.0 = Release|Win32 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|Any CPU.ActiveCfg = Debug|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|Any CPU.Build.0 = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|x64.ActiveCfg = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Debug|x86.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|Any CPU.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x64.Build.0 = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Fuzzing|x86.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.PowerShell|Any CPU.ActiveCfg = Debug|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.PowerShell|Any CPU.Build.0 = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.PowerShell|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.PowerShell|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.PowerShell|x86.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|Any CPU.ActiveCfg = Debug|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|Any CPU.Build.0 = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|ARM64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|x64.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.Release|x86.ActiveCfg = Fuzzing|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|Any CPU.ActiveCfg = Debug|x64 - {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|Any CPU.Build.0 = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|ARM64.ActiveCfg = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|x64.ActiveCfg = Debug|x64 {1622DA16-914F-4F57-A259-D5169003CC8C}.TestRelease|x86.ActiveCfg = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|Any CPU.ActiveCfg = Debug|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|Any CPU.Build.0 = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|ARM64.ActiveCfg = Debug|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x64.ActiveCfg = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x64.Build.0 = Debug|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x86.ActiveCfg = Debug|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Debug|x86.Build.0 = Debug|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|Any CPU.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|ARM64.ActiveCfg = Release|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Fuzzing|x86.ActiveCfg = Release|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.PowerShell|Any CPU.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.PowerShell|ARM64.ActiveCfg = Release|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.PowerShell|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.PowerShell|x86.ActiveCfg = Release|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|Any CPU.ActiveCfg = Release|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|Any CPU.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|ARM64.ActiveCfg = Release|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x64.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x86.ActiveCfg = Release|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.Release|x86.Build.0 = Release|x86 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|Any CPU.Build.0 = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|ARM64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|x64.ActiveCfg = Release|x64 {3BAF989F-7F65-465B-ACE8-BAFE42D1017E}.TestRelease|x86.ActiveCfg = Release|x86 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|Any CPU.ActiveCfg = Debug|x64 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|Any CPU.Build.0 = Debug|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|ARM64.Build.0 = Debug|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x64.ActiveCfg = Debug|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x64.Build.0 = Debug|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x86.ActiveCfg = Debug|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Debug|x86.Build.0 = Debug|Win32 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|Any CPU.ActiveCfg = ReleaseStatic|x64 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|Any CPU.Build.0 = ReleaseStatic|x64 + {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|Any CPU.ActiveCfg = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|x64.ActiveCfg = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Fuzzing|x86.ActiveCfg = Release|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.PowerShell|Any CPU.ActiveCfg = ReleaseStatic|x64 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.PowerShell|Any CPU.Build.0 = ReleaseStatic|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -752,7 +664,6 @@ Global {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|Any CPU.ActiveCfg = Release|x64 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|Any CPU.Build.0 = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM64.ActiveCfg = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|ARM64.Build.0 = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x64.ActiveCfg = Release|x64 @@ -760,7 +671,6 @@ Global {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x86.ActiveCfg = Release|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.Release|x86.Build.0 = Release|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|Any CPU.Build.0 = Release|x64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|ARM64.Build.0 = Release|ARM64 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x64.ActiveCfg = Release|x64 @@ -768,7 +678,6 @@ Global {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x86.ActiveCfg = Release|Win32 {866C3F06-636F-4BE8-BC24-5F86ECC606A1}.TestRelease|x86.Build.0 = Release|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|Any CPU.ActiveCfg = Debug|x64 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|Any CPU.Build.0 = Debug|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|ARM64.Build.0 = Debug|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x64.ActiveCfg = Debug|x64 @@ -776,12 +685,10 @@ Global {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x86.ActiveCfg = Debug|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Debug|x86.Build.0 = Debug|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|Any CPU.Build.0 = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|x64.ActiveCfg = Debug|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Fuzzing|x86.ActiveCfg = Debug|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.PowerShell|Any CPU.Build.0 = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -789,7 +696,6 @@ Global {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|Any CPU.ActiveCfg = Release|x64 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|Any CPU.Build.0 = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM64.ActiveCfg = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|ARM64.Build.0 = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x64.ActiveCfg = Release|x64 @@ -797,7 +703,6 @@ Global {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x86.ActiveCfg = Release|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.Release|x86.Build.0 = Release|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|Any CPU.Build.0 = Release|x64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|ARM64.Build.0 = Release|ARM64 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x64.ActiveCfg = Release|x64 @@ -805,7 +710,6 @@ Global {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x86.ActiveCfg = Release|Win32 {1CC41A9A-AE66-459D-9210-1E572DD7BE69}.TestRelease|x86.Build.0 = Release|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|Any CPU.ActiveCfg = Debug|x64 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|Any CPU.Build.0 = Debug|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|ARM64.Build.0 = Debug|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x64.ActiveCfg = Debug|x64 @@ -813,12 +717,10 @@ Global {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x86.ActiveCfg = Debug|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Debug|x86.Build.0 = Debug|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|Any CPU.Build.0 = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|x64.ActiveCfg = Debug|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Fuzzing|x86.ActiveCfg = Debug|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.PowerShell|Any CPU.Build.0 = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.PowerShell|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.PowerShell|ARM64.Build.0 = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.PowerShell|x64.ActiveCfg = Release|x64 @@ -826,7 +728,6 @@ Global {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.PowerShell|x86.ActiveCfg = Release|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.PowerShell|x86.Build.0 = Release|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|Any CPU.ActiveCfg = Release|x64 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|Any CPU.Build.0 = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|ARM64.Build.0 = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x64.ActiveCfg = Release|x64 @@ -834,12 +735,10 @@ Global {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x86.ActiveCfg = Release|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.Release|x86.Build.0 = Release|Win32 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|Any CPU.Build.0 = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|x64.ActiveCfg = Release|x64 {2B00D362-AC92-41F3-A8D2-5B1599BDCA01}.TestRelease|x86.ActiveCfg = Release|Win32 {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|Any CPU.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM64.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|ARM64.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -847,7 +746,6 @@ Global {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x86.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Debug|x86.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|Any CPU.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|ARM64.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|x64.ActiveCfg = Debug|Any CPU @@ -855,12 +753,10 @@ Global {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|x86.ActiveCfg = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Fuzzing|x86.Build.0 = Debug|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.PowerShell|Any CPU.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.PowerShell|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.PowerShell|x64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.PowerShell|x86.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|Any CPU.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|Any CPU.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM64.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|ARM64.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x64.ActiveCfg = Release|Any CPU @@ -868,15 +764,10 @@ Global {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x86.ActiveCfg = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.Release|x86.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|Any CPU.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|ARM64.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|ARM64.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|x64.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|x64.Build.0 = Release|Any CPU {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|x86.ActiveCfg = Release|Any CPU - {846FB88B-BF1B-4F33-9883-E589CEC99739}.TestRelease|x86.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|Any CPU.Build.0 = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|ARM64.ActiveCfg = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|ARM64.Build.0 = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -884,7 +775,6 @@ Global {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x86.ActiveCfg = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|x86.Build.0 = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|Any CPU.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|ARM64.Build.0 = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|x64.ActiveCfg = Debug|Any CPU @@ -892,12 +782,10 @@ Global {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|x86.ActiveCfg = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Fuzzing|x86.Build.0 = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.PowerShell|Any CPU.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.PowerShell|ARM64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.PowerShell|x64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.PowerShell|x86.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|Any CPU.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|ARM64.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|ARM64.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x64.ActiveCfg = Release|Any CPU @@ -905,15 +793,10 @@ Global {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x86.ActiveCfg = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Release|x86.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|Any CPU.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|ARM64.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|ARM64.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|x64.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|x64.Build.0 = Release|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|x86.ActiveCfg = Release|Any CPU - {68808357-902B-406C-8C19-E8E26A69DE8A}.TestRelease|x86.Build.0 = Release|Any CPU {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|Any CPU.ActiveCfg = Debug|x64 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|Any CPU.Build.0 = Debug|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM64.Build.0 = Debug|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x64.ActiveCfg = Debug|x64 @@ -921,7 +804,6 @@ Global {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x86.ActiveCfg = Debug|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|x86.Build.0 = Debug|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|Any CPU.Build.0 = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|ARM64.Build.0 = Debug|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|x64.ActiveCfg = Debug|x64 @@ -929,7 +811,6 @@ Global {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|x86.ActiveCfg = Debug|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Fuzzing|x86.Build.0 = Debug|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.PowerShell|Any CPU.Build.0 = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -937,7 +818,6 @@ Global {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|Any CPU.ActiveCfg = Release|x64 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|Any CPU.Build.0 = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM64.ActiveCfg = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|ARM64.Build.0 = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x64.ActiveCfg = Release|x64 @@ -945,7 +825,6 @@ Global {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x86.ActiveCfg = Release|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Release|x86.Build.0 = Release|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|Any CPU.Build.0 = Release|x64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|ARM64.Build.0 = Release|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x64.ActiveCfg = Release|x64 @@ -953,14 +832,12 @@ Global {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x86.ActiveCfg = Release|Win32 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.TestRelease|x86.Build.0 = Release|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|Any CPU.ActiveCfg = Debug|x64 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|Any CPU.Build.0 = Debug|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|ARM64.ActiveCfg = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x64.ActiveCfg = Debug|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x64.Build.0 = Debug|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x86.ActiveCfg = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Debug|x86.Build.0 = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|Any CPU.Build.0 = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|ARM64.ActiveCfg = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|ARM64.Build.0 = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|x64.ActiveCfg = Debug|x64 @@ -968,7 +845,6 @@ Global {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|x86.ActiveCfg = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Fuzzing|x86.Build.0 = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.PowerShell|Any CPU.Build.0 = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -976,72 +852,56 @@ Global {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|Any CPU.ActiveCfg = Release|x64 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|Any CPU.Build.0 = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|ARM64.ActiveCfg = Release|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x64.ActiveCfg = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x64.Build.0 = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x86.ActiveCfg = Release|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.Release|x86.Build.0 = Release|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|Any CPU.Build.0 = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|ARM64.ActiveCfg = Debug|Win32 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|ARM64.Build.0 = Debug|Win32 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|x64.ActiveCfg = Release|x64 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|x64.Build.0 = Release|x64 {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|x86.ActiveCfg = Release|Win32 - {9AC3C6A4-1875-4D3E-BF9C-C31E81EFF6B4}.TestRelease|x86.Build.0 = Release|Win32 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|Any CPU.ActiveCfg = Debug|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|Any CPU.Build.0 = Debug|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM64.Build.0 = Debug|ARM64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x64.ActiveCfg = Debug|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x64.Build.0 = Debug|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x86.ActiveCfg = Debug|x86 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x86.Build.0 = Debug|x86 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|Any CPU.Build.0 = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM64.Build.0 = Debug|ARM64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x64.ActiveCfg = Debug|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x86.ActiveCfg = Debug|x86 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x86.Build.0 = Debug|x86 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|Any CPU.Build.0 = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|ARM64.ActiveCfg = Release|ARM64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|x64.Build.0 = ReleaseStatic|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|x86.ActiveCfg = ReleaseStatic|x86 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|x86.Build.0 = ReleaseStatic|x86 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|Any CPU.ActiveCfg = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|Any CPU.Build.0 = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM64.ActiveCfg = Release|ARM64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM64.Build.0 = Release|ARM64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x64.ActiveCfg = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x64.Build.0 = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x86.ActiveCfg = Release|x86 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x86.Build.0 = Release|x86 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|Any CPU.Build.0 = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|ARM64.ActiveCfg = Release|ARM64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|ARM64.Build.0 = Release|ARM64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x64.ActiveCfg = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x64.Build.0 = Release|x64 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x86.ActiveCfg = Release|x86 - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x86.Build.0 = Release|x86 + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|ARM64.Build.0 = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x64.ActiveCfg = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x64.Build.0 = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x86.ActiveCfg = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Debug|x86.Build.0 = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|ARM64.Build.0 = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x64.ActiveCfg = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x86.ActiveCfg = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Fuzzing|x86.Build.0 = Debug|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|ARM64.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|x64.ActiveCfg = ReleaseStatic|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|x64.Build.0 = ReleaseStatic|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|x86.ActiveCfg = ReleaseStatic|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.PowerShell|x86.Build.0 = ReleaseStatic|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM64.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|ARM64.Build.0 = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x64.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x64.Build.0 = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x86.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.Release|x86.Build.0 = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|ARM64.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x64.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x86.ActiveCfg = Release|Any CPU {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|Any CPU.ActiveCfg = Debug|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|Any CPU.Build.0 = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|ARM64.ActiveCfg = Debug|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x64.ActiveCfg = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x64.Build.0 = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x86.ActiveCfg = Debug|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x86.Build.0 = Debug|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|Any CPU.ActiveCfg = TestOnly|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|Any CPU.Build.0 = TestOnly|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|ARM64.ActiveCfg = Release|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|x64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Fuzzing|x86.ActiveCfg = Release|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.PowerShell|Any CPU.ActiveCfg = TestOnly|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.PowerShell|Any CPU.Build.0 = TestOnly|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.PowerShell|ARM64.ActiveCfg = Release|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.PowerShell|ARM64.Build.0 = Release|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -1049,19 +909,16 @@ Global {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.PowerShell|x86.ActiveCfg = ReleaseStatic|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.PowerShell|x86.Build.0 = ReleaseStatic|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|Any CPU.ActiveCfg = Release|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|Any CPU.Build.0 = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|ARM64.ActiveCfg = Release|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x64.Build.0 = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x86.ActiveCfg = Release|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Release|x86.Build.0 = Release|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|Any CPU.ActiveCfg = TestOnly|x64 - {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|Any CPU.Build.0 = TestOnly|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|ARM64.ActiveCfg = TestOnly|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|x64.ActiveCfg = Release|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.TestRelease|x86.ActiveCfg = Release|x86 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|Any CPU.ActiveCfg = Debug|x64 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|Any CPU.Build.0 = Debug|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM64.ActiveCfg = Debug|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|ARM64.Build.0 = Debug|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x64.ActiveCfg = Debug|x64 @@ -1069,12 +926,10 @@ Global {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x86.ActiveCfg = Debug|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Debug|x86.Build.0 = Debug|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|Any CPU.Build.0 = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|x64.ActiveCfg = Debug|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Fuzzing|x86.ActiveCfg = Debug|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.PowerShell|Any CPU.Build.0 = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -1082,7 +937,6 @@ Global {31ED69A8-5310-45A9-953F-56C351D2C3E1}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|Any CPU.ActiveCfg = Release|x64 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|Any CPU.Build.0 = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM64.ActiveCfg = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|ARM64.Build.0 = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x64.ActiveCfg = Release|x64 @@ -1090,14 +944,12 @@ Global {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.ActiveCfg = Release|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.Release|x86.Build.0 = Release|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|Any CPU.Build.0 = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x64.ActiveCfg = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x64.Build.0 = Release|x64 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x86.ActiveCfg = Release|Win32 {31ED69A8-5310-45A9-953F-56C351D2C3E1}.TestRelease|x86.Build.0 = Release|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|Any CPU.ActiveCfg = Debug|x64 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|Any CPU.Build.0 = Debug|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM64.ActiveCfg = Debug|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|ARM64.Build.0 = Debug|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x64.ActiveCfg = Debug|x64 @@ -1105,12 +957,10 @@ Global {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x86.ActiveCfg = Debug|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Debug|x86.Build.0 = Debug|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|Any CPU.Build.0 = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|x64.ActiveCfg = Debug|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Fuzzing|x86.ActiveCfg = Debug|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.PowerShell|Any CPU.Build.0 = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -1118,7 +968,6 @@ Global {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|Any CPU.ActiveCfg = Release|x64 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|Any CPU.Build.0 = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM64.ActiveCfg = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|ARM64.Build.0 = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x64.ActiveCfg = Release|x64 @@ -1126,14 +975,12 @@ Global {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x86.ActiveCfg = Release|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.Release|x86.Build.0 = Release|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|Any CPU.Build.0 = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x64.ActiveCfg = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x64.Build.0 = Release|x64 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x86.ActiveCfg = Release|Win32 {787EC629-C0FB-4BA9-9746-4A82CD06B73E}.TestRelease|x86.Build.0 = Release|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|Any CPU.ActiveCfg = Debug|x64 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|Any CPU.Build.0 = Debug|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM64.ActiveCfg = Debug|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|ARM64.Build.0 = Debug|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x64.ActiveCfg = Debug|x64 @@ -1141,12 +988,10 @@ Global {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x86.ActiveCfg = Debug|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Debug|x86.Build.0 = Debug|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|Any CPU.Build.0 = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|x64.ActiveCfg = Debug|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Fuzzing|x86.ActiveCfg = Debug|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.PowerShell|Any CPU.Build.0 = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -1154,7 +999,6 @@ Global {BB14D603-F44E-4415-8770-BF3E13F4C17F}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|Any CPU.ActiveCfg = Release|x64 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|Any CPU.Build.0 = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM64.ActiveCfg = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|ARM64.Build.0 = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x64.ActiveCfg = Release|x64 @@ -1162,7 +1006,6 @@ Global {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x86.ActiveCfg = Release|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.Release|x86.Build.0 = Release|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|Any CPU.Build.0 = Release|x64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|ARM64.Build.0 = Release|ARM64 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x64.ActiveCfg = Release|x64 @@ -1170,7 +1013,6 @@ Global {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x86.ActiveCfg = Release|Win32 {BB14D603-F44E-4415-8770-BF3E13F4C17F}.TestRelease|x86.Build.0 = Release|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|Any CPU.ActiveCfg = Debug|x64 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|Any CPU.Build.0 = Debug|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|ARM64.Build.0 = Debug|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x64.ActiveCfg = Debug|x64 @@ -1178,7 +1020,6 @@ Global {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x86.ActiveCfg = Debug|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Debug|x86.Build.0 = Debug|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|x64 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|Any CPU.Build.0 = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|ARM64.ActiveCfg = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|ARM64.Build.0 = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 @@ -1186,7 +1027,6 @@ Global {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x86.ActiveCfg = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Fuzzing|x86.Build.0 = Fuzzing|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.PowerShell|Any CPU.Build.0 = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -1194,7 +1034,6 @@ Global {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|Any CPU.ActiveCfg = Release|x64 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|Any CPU.Build.0 = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM64.ActiveCfg = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|ARM64.Build.0 = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x64.ActiveCfg = Release|x64 @@ -1202,7 +1041,6 @@ Global {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x86.ActiveCfg = Release|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.Release|x86.Build.0 = Release|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|Any CPU.Build.0 = Release|x64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|ARM64.Build.0 = Release|ARM64 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x64.ActiveCfg = Release|x64 @@ -1210,7 +1048,6 @@ Global {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x86.ActiveCfg = Release|Win32 {F3F6E699-BC5D-4950-8A05-E49DD9EB0D51}.TestRelease|x86.Build.0 = Release|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|Any CPU.ActiveCfg = Debug|x64 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|Any CPU.Build.0 = Debug|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|ARM64.Build.0 = Debug|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x64.ActiveCfg = Debug|x64 @@ -1218,7 +1055,6 @@ Global {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x86.ActiveCfg = Debug|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Debug|x86.Build.0 = Debug|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|Any CPU.Build.0 = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|ARM64.Build.0 = Debug|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|x64.ActiveCfg = Debug|x64 @@ -1226,7 +1062,6 @@ Global {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|x86.ActiveCfg = Debug|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Fuzzing|x86.Build.0 = Debug|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.PowerShell|Any CPU.Build.0 = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -1234,7 +1069,6 @@ Global {CA460806-5E41-4E97-9A3D-1D74B433B663}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|Any CPU.ActiveCfg = Release|x64 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|Any CPU.Build.0 = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM64.ActiveCfg = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|ARM64.Build.0 = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x64.ActiveCfg = Release|x64 @@ -1242,7 +1076,6 @@ Global {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x86.ActiveCfg = Release|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.Release|x86.Build.0 = Release|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|Any CPU.Build.0 = Release|x64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|ARM64.Build.0 = Release|ARM64 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x64.ActiveCfg = Release|x64 @@ -1250,7 +1083,6 @@ Global {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x86.ActiveCfg = Release|Win32 {CA460806-5E41-4E97-9A3D-1D74B433B663}.TestRelease|x86.Build.0 = Release|Win32 {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|Any CPU.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM64.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|ARM64.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1258,7 +1090,6 @@ Global {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x86.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Debug|x86.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|Any CPU.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|ARM64.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|x64.ActiveCfg = Debug|Any CPU @@ -1266,7 +1097,6 @@ Global {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|x86.ActiveCfg = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Fuzzing|x86.Build.0 = Debug|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.PowerShell|Any CPU.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.PowerShell|ARM64.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.PowerShell|x64.ActiveCfg = ReleaseStatic|Any CPU @@ -1274,7 +1104,6 @@ Global {E8454BF1-2068-4513-A525-ABF55CC8742C}.PowerShell|x86.ActiveCfg = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.PowerShell|x86.Build.0 = ReleaseStatic|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|Any CPU.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|ARM64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x64.ActiveCfg = Release|Any CPU @@ -1282,7 +1111,6 @@ Global {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x86.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.Release|x86.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|Any CPU.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|ARM64.Build.0 = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x64.ActiveCfg = Release|Any CPU @@ -1290,7 +1118,6 @@ Global {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x86.ActiveCfg = Release|Any CPU {E8454BF1-2068-4513-A525-ABF55CC8742C}.TestRelease|x86.Build.0 = Release|Any CPU {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|Any CPU.ActiveCfg = Debug|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|Any CPU.Build.0 = Debug|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM64.ActiveCfg = Debug|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|ARM64.Build.0 = Debug|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x64.ActiveCfg = Debug|x64 @@ -1298,7 +1125,6 @@ Global {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x86.ActiveCfg = Debug|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Debug|x86.Build.0 = Debug|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|Any CPU.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|ARM64.ActiveCfg = Debug|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|ARM64.Build.0 = Debug|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|x64.ActiveCfg = Debug|x64 @@ -1306,12 +1132,10 @@ Global {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|x86.ActiveCfg = Debug|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Fuzzing|x86.Build.0 = Debug|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.PowerShell|Any CPU.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.PowerShell|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.PowerShell|x64.ActiveCfg = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.PowerShell|x86.ActiveCfg = Release|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|Any CPU.ActiveCfg = Release|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|Any CPU.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM64.ActiveCfg = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|ARM64.Build.0 = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x64.ActiveCfg = Release|x64 @@ -1319,15 +1143,10 @@ Global {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x86.ActiveCfg = Release|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.Release|x86.Build.0 = Release|x86 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|Any CPU.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|ARM64.ActiveCfg = Release|arm64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|ARM64.Build.0 = Release|arm64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|x64.ActiveCfg = Release|x64 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|x64.Build.0 = Release|x64 {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|x86.ActiveCfg = Release|x86 - {EE43C990-7789-4A60-B077-BF0ED3D093A1}.TestRelease|x86.Build.0 = Release|x86 {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|Any CPU.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM64.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM64.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1335,7 +1154,6 @@ Global {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x86.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|x86.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|Any CPU.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|ARM64.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|x64.ActiveCfg = Debug|Any CPU @@ -1343,7 +1161,6 @@ Global {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|x86.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Fuzzing|x86.Build.0 = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.PowerShell|Any CPU.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.PowerShell|ARM64.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.PowerShell|x64.ActiveCfg = ReleaseStatic|Any CPU @@ -1351,7 +1168,6 @@ Global {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.PowerShell|x86.ActiveCfg = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.PowerShell|x86.Build.0 = ReleaseStatic|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|Any CPU.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|ARM64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x64.ActiveCfg = Release|Any CPU @@ -1359,7 +1175,6 @@ Global {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x86.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Release|x86.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|Any CPU.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM64.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|ARM64.Build.0 = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x64.ActiveCfg = Release|Any CPU @@ -1367,7 +1182,6 @@ Global {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x86.ActiveCfg = Release|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.TestRelease|x86.Build.0 = Release|Any CPU {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|Any CPU.ActiveCfg = Debug|x64 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|Any CPU.Build.0 = Debug|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM64.ActiveCfg = Debug|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|ARM64.Build.0 = Debug|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x64.ActiveCfg = Debug|x64 @@ -1375,7 +1189,6 @@ Global {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x86.ActiveCfg = Debug|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Debug|x86.Build.0 = Debug|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|Any CPU.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|ARM64.ActiveCfg = Debug|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|ARM64.Build.0 = Debug|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|x64.ActiveCfg = Debug|x64 @@ -1383,12 +1196,10 @@ Global {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|x86.ActiveCfg = Debug|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Fuzzing|x86.Build.0 = Debug|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.PowerShell|Any CPU.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.PowerShell|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.PowerShell|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.PowerShell|x86.ActiveCfg = Release|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|Any CPU.ActiveCfg = Release|x64 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|Any CPU.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|ARM64.Build.0 = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x64.ActiveCfg = Release|x64 @@ -1396,54 +1207,44 @@ Global {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x86.ActiveCfg = Release|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.Release|x86.Build.0 = Release|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|Any CPU.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM64.ActiveCfg = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|ARM64.Build.0 = Release|arm64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x64.ActiveCfg = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x64.Build.0 = Release|x64 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x86.ActiveCfg = Release|x86 {6597EB04-D105-49A7-A5A3-D27FE1DF895E}.TestRelease|x86.Build.0 = Release|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|Any CPU.ActiveCfg = Debug|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|Any CPU.Build.0 = Debug|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM64.Build.0 = Debug|ARM64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x64.ActiveCfg = Debug|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x64.Build.0 = Debug|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x86.ActiveCfg = Debug|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x86.Build.0 = Debug|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|Any CPU.Build.0 = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM64.Build.0 = Debug|ARM64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x64.ActiveCfg = Debug|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x64.Build.0 = Debug|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x86.ActiveCfg = Debug|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x86.Build.0 = Debug|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|Any CPU.Build.0 = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|ARM64.ActiveCfg = Release|ARM64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|x64.Build.0 = ReleaseStatic|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|x86.ActiveCfg = ReleaseStatic|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|x86.Build.0 = ReleaseStatic|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|Any CPU.ActiveCfg = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|Any CPU.Build.0 = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM64.ActiveCfg = Release|ARM64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM64.Build.0 = Release|ARM64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x64.ActiveCfg = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x64.Build.0 = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x86.ActiveCfg = Release|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x86.Build.0 = Release|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|Any CPU.Build.0 = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|ARM64.ActiveCfg = Release|ARM64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|ARM64.Build.0 = Release|ARM64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x64.ActiveCfg = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x64.Build.0 = Release|x64 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x86.ActiveCfg = Release|x86 - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x86.Build.0 = Release|x86 + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|ARM64.Build.0 = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x64.ActiveCfg = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x64.Build.0 = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x86.ActiveCfg = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Debug|x86.Build.0 = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|ARM64.Build.0 = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x64.ActiveCfg = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x64.Build.0 = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x86.ActiveCfg = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Fuzzing|x86.Build.0 = Debug|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|ARM64.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|x64.ActiveCfg = ReleaseStatic|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|x64.Build.0 = ReleaseStatic|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|x86.ActiveCfg = ReleaseStatic|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.PowerShell|x86.Build.0 = ReleaseStatic|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM64.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|ARM64.Build.0 = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x64.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x64.Build.0 = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x86.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.Release|x86.Build.0 = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|ARM64.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x64.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x86.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|Any CPU.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM64.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|ARM64.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1451,7 +1252,6 @@ Global {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x86.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|x86.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|Any CPU.ActiveCfg = ReleaseStatic|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|Any CPU.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|ARM64.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|x64.ActiveCfg = Debug|Any CPU @@ -1459,14 +1259,12 @@ Global {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|x86.ActiveCfg = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Fuzzing|x86.Build.0 = Debug|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.PowerShell|Any CPU.ActiveCfg = ReleaseStatic|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.PowerShell|Any CPU.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.PowerShell|ARM64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.PowerShell|x64.ActiveCfg = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.PowerShell|x64.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.PowerShell|x86.ActiveCfg = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.PowerShell|x86.Build.0 = ReleaseStatic|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|Any CPU.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM64.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|ARM64.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x64.ActiveCfg = Release|Any CPU @@ -1474,15 +1272,10 @@ Global {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x86.ActiveCfg = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Release|x86.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|Any CPU.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|ARM64.ActiveCfg = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|ARM64.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|x64.ActiveCfg = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|x64.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|x86.ActiveCfg = Release|Any CPU - {167F634B-A3AD-494E-8E67-B888103E35FF}.TestRelease|x86.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|Any CPU.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM64.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM64.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1490,7 +1283,6 @@ Global {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x86.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|x86.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|Any CPU.ActiveCfg = ReleaseStatic|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|Any CPU.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|ARM64.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|x64.ActiveCfg = Debug|Any CPU @@ -1498,14 +1290,12 @@ Global {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|x86.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Fuzzing|x86.Build.0 = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.PowerShell|Any CPU.ActiveCfg = ReleaseStatic|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.PowerShell|Any CPU.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.PowerShell|ARM64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.PowerShell|x64.ActiveCfg = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.PowerShell|x64.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.PowerShell|x86.ActiveCfg = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.PowerShell|x86.Build.0 = ReleaseStatic|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|Any CPU.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM64.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|ARM64.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x64.ActiveCfg = Release|Any CPU @@ -1513,15 +1303,10 @@ Global {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x86.ActiveCfg = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Release|x86.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|Any CPU.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|ARM64.ActiveCfg = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|ARM64.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|x64.ActiveCfg = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|x64.Build.0 = Release|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|x86.ActiveCfg = Release|Any CPU - {C54F80ED-B736-49B0-9BD3-662F57024D01}.TestRelease|x86.Build.0 = Release|Any CPU {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|Any CPU.ActiveCfg = Debug|x64 - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|Any CPU.Build.0 = Debug|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM64.Build.0 = Debug|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x64.ActiveCfg = Debug|x64 @@ -1529,7 +1314,6 @@ Global {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x86.ActiveCfg = Debug|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|x86.Build.0 = Debug|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|Any CPU.ActiveCfg = Release|x64 - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|Any CPU.Build.0 = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|ARM64.ActiveCfg = ReleaseStatic|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|ARM64.Build.0 = ReleaseStatic|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|x64.ActiveCfg = ReleaseStatic|x64 @@ -1537,7 +1321,6 @@ Global {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|x86.ActiveCfg = Debug|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Fuzzing|x86.Build.0 = Debug|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.PowerShell|Any CPU.ActiveCfg = Release|x64 - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.PowerShell|Any CPU.Build.0 = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.PowerShell|ARM64.ActiveCfg = ReleaseStatic|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.PowerShell|ARM64.Build.0 = ReleaseStatic|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.PowerShell|x64.ActiveCfg = ReleaseStatic|x64 @@ -1545,7 +1328,6 @@ Global {2268D5AD-7F2A-485A-8C4B-C574497514C9}.PowerShell|x86.ActiveCfg = ReleaseStatic|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.PowerShell|x86.Build.0 = ReleaseStatic|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|Any CPU.ActiveCfg = Release|x64 - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|Any CPU.Build.0 = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM64.ActiveCfg = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|ARM64.Build.0 = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x64.ActiveCfg = Release|x64 @@ -1553,7 +1335,6 @@ Global {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x86.ActiveCfg = Release|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Release|x86.Build.0 = Release|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|Any CPU.ActiveCfg = Release|x64 - {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|Any CPU.Build.0 = Release|x64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM64.ActiveCfg = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|ARM64.Build.0 = Release|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x64.ActiveCfg = Release|x64 @@ -1561,7 +1342,6 @@ Global {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x86.ActiveCfg = Release|Win32 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.TestRelease|x86.Build.0 = Release|Win32 {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|Any CPU.Build.0 = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM64.ActiveCfg = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|ARM64.Build.0 = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1569,19 +1349,14 @@ Global {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x86.ActiveCfg = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Debug|x86.Build.0 = Debug|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|Any CPU.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|ARM64.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|ARM64.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|x64.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|x64.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|x86.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Fuzzing|x86.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.PowerShell|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.PowerShell|x64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.PowerShell|x86.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|Any CPU.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM64.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|ARM64.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x64.ActiveCfg = Release|Any CPU @@ -1589,15 +1364,10 @@ Global {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x86.ActiveCfg = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.Release|x86.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|Any CPU.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|ARM64.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|ARM64.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|x64.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|x64.Build.0 = Release|Any CPU {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|x86.ActiveCfg = Release|Any CPU - {52EC37D6-088C-40D3-AD0B-BDE8F8DAF9EB}.TestRelease|x86.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|Any CPU.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM64.ActiveCfg = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|ARM64.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1605,15 +1375,10 @@ Global {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x86.ActiveCfg = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Debug|x86.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|Any CPU.ActiveCfg = Debug|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|Any CPU.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|ARM64.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|x64.ActiveCfg = Debug|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|x64.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|x86.ActiveCfg = Debug|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Fuzzing|x86.Build.0 = Debug|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.PowerShell|Any CPU.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.PowerShell|Any CPU.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.PowerShell|ARM64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.PowerShell|ARM64.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.PowerShell|x64.ActiveCfg = Release|Any CPU @@ -1621,7 +1386,6 @@ Global {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.PowerShell|x86.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.PowerShell|x86.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|Any CPU.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM64.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|ARM64.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x64.ActiveCfg = Release|Any CPU @@ -1629,13 +1393,9 @@ Global {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x86.ActiveCfg = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.Release|x86.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|Any CPU.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|Any CPU.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|ARM64.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|ARM64.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|x64.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|x64.Build.0 = Release|Any CPU {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|x86.ActiveCfg = Release|Any CPU - {272B2B0E-40D4-4F0F-B187-519A6EF89B10}.TestRelease|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/AppInstallerCLIE2ETests/Helpers/TestCommon.cs b/src/AppInstallerCLIE2ETests/Helpers/TestCommon.cs @@ -167,18 +167,6 @@ namespace AppInstallerCLIE2ETests.Helpers } /// <summary> - /// Run PowerShell Core command with result. - /// </summary> - /// <param name="cmdlet">Cmdlet to run.</param> - /// <param name="args">Args.</param> - /// <param name="timeOut">Optional timeout.</param> - /// <returns>Command result.</returns> - public static RunCommandResult RunPowerShellCoreCommandWithResult(string cmdlet, string args, int timeOut = 60000) - { - return RunCommandWithResult("pwsh.exe", $"-Command ipmo {TestSetup.Parameters.PowerShellModuleManifestPath}; {cmdlet} {args}", timeOut); - } - - /// <summary> /// Get test file path. /// </summary> /// <param name="fileName">Test file name.</param> @@ -723,7 +711,7 @@ namespace AppInstallerCLIE2ETests.Helpers ICollection<PSModuleInfo> e2eModule; bool isPresent = false; { - using var pwsh = new PowerShellHost(false); + using var pwsh = new PowerShellHost(); pwsh.AddModulePath($"{wingetModulePath};{customPath}"); e2eModule = pwsh.PowerShell.AddCommand("Get-Module").AddParameter("Name", moduleName).AddParameter("ListAvailable").Invoke<PSModuleInfo>(); @@ -763,7 +751,7 @@ namespace AppInstallerCLIE2ETests.Helpers if (location == TestModuleLocation.CurrentUser || location == TestModuleLocation.AllUsers) { - using var pwsh = new PowerShellHost(false); + using var pwsh = new PowerShellHost(); pwsh.AddModulePath($"{wingetModulePath};{customPath}"); pwsh.PowerShell.AddCommand("Install-Module").AddParameter("Name", moduleName).AddParameter("Force"); @@ -788,7 +776,7 @@ namespace AppInstallerCLIE2ETests.Helpers path = wingetModulePath; } - using var pwsh = new PowerShellHost(false); + using var pwsh = new PowerShellHost(); pwsh.AddModulePath($"{wingetModulePath};{customPath}"); pwsh.PowerShell.AddCommand("Save-Module").AddParameter("Name", moduleName).AddParameter("Path", path).AddParameter("Force"); diff --git a/src/AppInstallerCLIE2ETests/Helpers/TestSetup.cs b/src/AppInstallerCLIE2ETests/Helpers/TestSetup.cs @@ -38,7 +38,6 @@ namespace AppInstallerCLIE2ETests.Helpers this.StaticFileRootPath = this.InitializeDirectoryParam(Constants.StaticFileRootPathParameter, Path.GetTempPath()); - this.PowerShellModuleManifestPath = this.InitializeFileParam(Constants.PowerShellModulePathParameter); this.LocalServerCertPath = this.InitializeFileParam(Constants.LocalServerCertPathParameter); this.PackageCertificatePath = this.InitializeFileParam(Constants.PackageCertificatePathParameter); this.ExeInstallerPath = this.InitializeFileParam(Constants.ExeInstallerPathParameter); @@ -118,11 +117,6 @@ namespace AppInstallerCLIE2ETests.Helpers public string PackageCertificatePath { get; } /// <summary> - /// Gets the PowerShell module path. - /// </summary> - public string PowerShellModuleManifestPath { get; } - - /// <summary> /// Gets a value indicating whether to skip creating test source. /// </summary> public bool SkipTestSource { get; } diff --git a/src/AppInstallerCLIE2ETests/PowerShell/PowerShellHost.cs b/src/AppInstallerCLIE2ETests/PowerShell/PowerShellHost.cs @@ -26,20 +26,11 @@ namespace AppInstallerCLIE2ETests.PowerShell /// <summary> /// Initializes a new instance of the <see cref="PowerShellHost"/> class. /// </summary> - /// <param name="importModule">If to import modules.</param> - public PowerShellHost(bool importModule = true) + public PowerShellHost() { InitialSessionState initialSessionState = InitialSessionState.CreateDefault(); initialSessionState.ExecutionPolicy = ExecutionPolicy.Unrestricted; - if (importModule) - { - initialSessionState.ImportPSModule(new string[] - { - TestSetup.Parameters.PowerShellModuleManifestPath, - }); - } - this.runspace = RunspaceFactory.CreateRunspace(initialSessionState); this.runspace.Open(); this.VerifyErrorState(); diff --git a/src/AppInstallerCLIE2ETests/PowerShell/WinGetClientModule.cs b/src/AppInstallerCLIE2ETests/PowerShell/WinGetClientModule.cs @@ -1,102 +0,0 @@ -// ----------------------------------------------------------------------------- -// <copyright file="WinGetClientModule.cs" company="Microsoft Corporation"> -// Copyright (c) Microsoft Corporation. Licensed under the MIT License. -// </copyright> -// ----------------------------------------------------------------------------- - -namespace AppInstallerCLIE2ETests.PowerShell -{ - using System; - using System.Diagnostics; - using System.Linq; - using AppInstallerCLIE2ETests.Helpers; - using NUnit.Framework; - - /// <summary> - /// Basic E2E smoke tests for verifying the behavior of the PowerShell Microsoft.WinGet.Client module cmdlets. - /// Running the x86 PowerShell Module requires PowerShell Core (x86). These tests currently only target PowerShell Core (x64) - /// in the CI/CD pipeline. - /// </summary> - [Category("PowerShell")] - public class WinGetClientModule - { - /// <summary> - /// Set setup. - /// </summary> - [OneTimeSetUp] - public void Setup() - { - TestCommon.RunAICLICommand("source add", $"-n {Constants.TestSourceName} {Constants.TestSourceUrl}"); - } - - /// <summary> - /// Tear down. - /// </summary> - [OneTimeTearDown] - public void TearDown() - { - // TODO: This is a workaround to an issue where the server takes longer than expected to terminate when - // running from the E2E tests. This can cause other E2E tests to fail when attempting to reset the test source. - if (this.IsRunning(Constants.WindowsPackageManagerServer)) - { - // There should only be one WinGetServer process running at a time. - Process serverProcess = Process.GetProcessesByName(Constants.WindowsPackageManagerServer).First(); - serverProcess.Kill(); - } - - TestCommon.RunAICLICommand("source remove", $"{Constants.TestSourceName}"); - WinGetSettingsHelper.InitializeWingetSettings(); - } - - /// <summary> - /// Assert server shutdown. - /// </summary> - [Test] - public void AssertServerShutdownAfterExecution() - { - if (!Environment.Is64BitProcess) - { - return; - } - - var result = TestCommon.RunPowerShellCoreCommandWithResult(Constants.GetSourceCmdlet, $"-Name {Constants.TestSourceName}"); - Assert.AreEqual(Constants.ErrorCode.S_OK, result.ExitCode, $"ExitCode: {result.ExitCode} Failed with the following output: {result.StdOut}, {result.StdErr}"); - - Assert.IsTrue(this.IsRunning(Constants.WindowsPackageManagerServer), $"{Constants.WindowsPackageManagerServer} is not running."); - Process serverProcess = Process.GetProcessesByName(Constants.WindowsPackageManagerServer).First(); - - // Wait a maximum of 30 seconds for the server process to exit. - bool serverProcessExit = serverProcess.WaitForExit(30000); - Assert.IsTrue(serverProcessExit, $"{Constants.WindowsPackageManagerServer} failed to terminate after creating COM object."); - } - - /// <summary> - /// There is a known issue where the server takes an abnormally long time to terminate after the E2E test pwsh processes finish execution. - /// This test verifies that the server does indeed terminate within 5 minutes after running all of the cmdlets. - /// Commented out to reduce the overall duration of the build pipeline. - /// </summary> - [Test] - [Ignore("Ignoring")] - public void VerifyServerTermination() - { - TestCommon.RunPowerShellCoreCommandWithResult(Constants.GetSourceCmdlet, $"-Name {Constants.TestSourceName}"); - TestCommon.RunPowerShellCoreCommandWithResult(Constants.FindCmdlet, $"-Id {Constants.ExeInstallerPackageId}"); - TestCommon.RunPowerShellCoreCommandWithResult(Constants.InstallCmdlet, $"-Id {Constants.ExeInstallerPackageId} -Version 1.0.0.0"); - TestCommon.RunPowerShellCoreCommandWithResult(Constants.UpdateCmdlet, $"-Id {Constants.ExeInstallerPackageId}"); - TestCommon.RunPowerShellCoreCommandWithResult(Constants.GetCmdlet, $"-Id {Constants.ExeInstallerPackageId}"); - TestCommon.RunPowerShellCoreCommandWithResult(Constants.UninstallCmdlet, $"-Id {Constants.ExeInstallerPackageId}"); - - Assert.IsTrue(this.IsRunning(Constants.WindowsPackageManagerServer), $"{Constants.WindowsPackageManagerServer} is not running."); - Process serverProcess = Process.GetProcessesByName(Constants.WindowsPackageManagerServer).First(); - - // Wait a maximum of 5 minutes for the server process to exit. - bool serverProcessExit = serverProcess.WaitForExit(300000); - Assert.IsTrue(serverProcessExit, $"{Constants.WindowsPackageManagerServer} failed to terminate after creating COM object."); - } - - private bool IsRunning(string processName) - { - return Process.GetProcessesByName(processName).Length > 0; - } - } -}- \ No newline at end of file diff --git a/src/Microsoft.Management.Deployment.InProc/Microsoft.Management.Deployment.InProc.vcxproj b/src/Microsoft.Management.Deployment.InProc/Microsoft.Management.Deployment.InProc.vcxproj @@ -454,4 +454,8 @@ <Error Condition="!Exists('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.210505.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.210505.3\build\native\Microsoft.Windows.CppWinRT.props'))" /> <Error Condition="!Exists('$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.210505.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.CppWinRT.2.0.210505.3\build\native\Microsoft.Windows.CppWinRT.targets'))" /> </Target> + <!-- Rename Microsoft.Management.Deployment.InProc.dll to Microsoft.Management.Deployment.dll --> + <Target Name="RenameMicrosoftManagementDeployment" AfterTargets="AfterBuild"> + <Copy SourceFiles="$(OutDir)\Microsoft.Management.Deployment.InProc.dll" DestinationFiles="$(OutDir)\Microsoft.Management.Deployment.dll" /> + </Target> </Project> \ No newline at end of file diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Acl/WinGetAssemblyLoadContext.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Acl/WinGetAssemblyLoadContext.cs @@ -11,6 +11,7 @@ namespace Microsoft.WinGet.Client.Acl using System.IO; using System.Linq; using System.Reflection; + using System.Runtime.InteropServices; using System.Runtime.Loader; /// <summary> @@ -36,11 +37,22 @@ namespace Microsoft.WinGet.Client.Acl Path.GetDirectoryName(typeof(WinGetAssemblyLoadContext).Assembly.Location), "DirectDependencies"); + private static readonly IEnumerable<Architecture> ValidArchs = new Architecture[] { Architecture.X86, Architecture.X64 }; + private static readonly WinGetAssemblyLoadContext WinGetAcl = new (); + private readonly string sharedArchDependencyPath; + private WinGetAssemblyLoadContext() : base("WinGetAssemblyLoadContext", isCollectible: false) { + var arch = RuntimeInformation.ProcessArchitecture; + if (!ValidArchs.Contains(arch)) + { + throw new NotSupportedException(arch.ToString()); + } + + this.sharedArchDependencyPath = Path.Combine(SharedDependencyPath, arch.ToString().ToLower()); } /// <summary> @@ -85,6 +97,12 @@ namespace Microsoft.WinGet.Client.Acl return this.LoadFromAssemblyPath(path); } + path = $"{Path.Combine(this.sharedArchDependencyPath, assemblyName.Name)}.dll"; + if (File.Exists(path)) + { + return this.LoadFromAssemblyPath(path); + } + path = Path.Combine(DirectDependencyPath, name); if (File.Exists(path)) { @@ -97,7 +115,7 @@ namespace Microsoft.WinGet.Client.Acl /// <inheritdoc/> protected override IntPtr LoadUnmanagedDll(string unmanagedDllName) { - string path = Path.Combine(SharedDependencyPath, unmanagedDllName); + string path = Path.Combine(this.sharedArchDependencyPath, unmanagedDllName); if (File.Exists(path)) { return this.LoadUnmanagedDllFromPath(path); diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/FindPackageCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/FindPackageCmdlet.cs @@ -6,7 +6,7 @@ namespace Microsoft.WinGet.Client.Commands { - using System.Management.Automation; + using System.Management.Automation; using Microsoft.WinGet.Client.Commands.Common; using Microsoft.WinGet.Client.Common; using Microsoft.WinGet.Client.Engine.Commands; @@ -23,20 +23,19 @@ namespace Microsoft.WinGet.Client.Commands /// Searches for configured sources for packages. /// </summary> protected override void ProcessRecord() - { - var command = new FinderPackageCommand( - this, - this.Id, - this.Name, - this.Moniker, - this.Source, - this.Query, - this.MatchOption.ToString(), - this.Tag, - this.Command, - this.Count); - - command.Find(); + { + var command = new FinderPackageCommand( + this, + this.Id, + this.Name, + this.Moniker, + this.Source, + this.Query, + this.Tag, + this.Command, + this.Count); + + command.Find(this.MatchOption.ToString()); } } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/GetPackageCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/GetPackageCmdlet.cs @@ -8,8 +8,8 @@ namespace Microsoft.WinGet.Client.Commands { using System.Management.Automation; using Microsoft.WinGet.Client.Commands.Common; - using Microsoft.WinGet.Client.Common; - using Microsoft.WinGet.Client.Engine.Commands; + using Microsoft.WinGet.Client.Common; + using Microsoft.WinGet.Client.Engine.Commands; using Microsoft.WinGet.Client.Engine.PSObjects; /// <summary> @@ -23,20 +23,19 @@ namespace Microsoft.WinGet.Client.Commands /// Searches for configured sources for packages. /// </summary> protected override void ProcessRecord() - { - var command = new FinderPackageCommand( - this, - this.Id, - this.Name, - this.Moniker, - this.Source, - this.Query, - this.MatchOption.ToString(), - this.Tag, - this.Command, + { + var command = new FinderPackageCommand( + this, + this.Id, + this.Name, + this.Moniker, + this.Source, + this.Query, + this.Tag, + this.Command, this.Count); - command.Get(); + command.Get(this.MatchOption.ToString()); } } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/InstallPackageCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/InstallPackageCmdlet.cs @@ -6,7 +6,7 @@ namespace Microsoft.WinGet.Client.Commands { - using System.Management.Automation; + using System.Management.Automation; using Microsoft.WinGet.Client.Commands.Common; using Microsoft.WinGet.Client.Common; using Microsoft.WinGet.Client.Engine.Commands; @@ -40,26 +40,25 @@ namespace Microsoft.WinGet.Client.Commands /// Installs a package from the pipeline or from a configured source. /// </summary> protected override void ProcessRecord() - { - var command = new InstallerPackageCommand( - this, - this.Mode.ToString(), - this.Override, - this.Custom, - this.Location, - this.AllowHashMismatch.ToBool(), - this.Force.ToBool(), - this.Header, - this.PSCatalogPackage, - this.Version, - this.Log, - this.Id, - this.Name, - this.Moniker, - this.Source, - this.Query, - this.MatchOption.ToString()); - command.Install(this.Scope.ToString(), this.Architecture.ToString()); + { + var command = new InstallerPackageCommand( + this, + this.Mode.ToString(), + this.Override, + this.Custom, + this.Location, + this.AllowHashMismatch.ToBool(), + this.Force.ToBool(), + this.Header, + this.PSCatalogPackage, + this.Version, + this.Log, + this.Id, + this.Name, + this.Moniker, + this.Source, + this.Query); + command.Install(this.Scope.ToString(), this.Architecture.ToString(), this.MatchOption.ToString(), this.Mode.ToString()); } } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/UninstallPackageCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/UninstallPackageCmdlet.cs @@ -6,7 +6,7 @@ namespace Microsoft.WinGet.Client.Commands { - using System.Management.Automation; + using System.Management.Automation; using Microsoft.WinGet.Client.Commands.Common; using Microsoft.WinGet.Client.Common; using Microsoft.WinGet.Client.Engine.Commands; @@ -40,19 +40,18 @@ namespace Microsoft.WinGet.Client.Commands /// Uninstalls a package from the local system. /// </summary> protected override void ProcessRecord() - { - var command = new UninstallPackageCommand( - this, - this.PSCatalogPackage, - this.Version, - this.Log, - this.Id, - this.Name, - this.Moniker, - this.Source, - this.Query, - this.MatchOption.ToString()); - command.Uninstall(this.Mode.ToString(), this.Force.ToBool()); + { + var command = new UninstallPackageCommand( + this, + this.PSCatalogPackage, + this.Version, + this.Log, + this.Id, + this.Name, + this.Moniker, + this.Source, + this.Query); + command.Uninstall(this.Mode.ToString(), this.MatchOption.ToString(), this.Force.ToBool()); } } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/UpdatePackageCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/UpdatePackageCmdlet.cs @@ -35,24 +35,23 @@ namespace Microsoft.WinGet.Client.Commands protected override void ProcessRecord() { var command = new InstallerPackageCommand( - this, - this.Mode.ToString(), - this.Override, - this.Custom, - this.Location, - this.AllowHashMismatch.ToBool(), - this.Force.ToBool(), - this.Header, - this.PSCatalogPackage, - this.Version, - this.Log, - this.Id, - this.Name, - this.Moniker, - this.Source, - this.Query, - this.MatchOption.ToString()); - command.Update(this.IncludeUnknown.ToBool()); + this, + this.Mode.ToString(), + this.Override, + this.Custom, + this.Location, + this.AllowHashMismatch.ToBool(), + this.Force.ToBool(), + this.Header, + this.PSCatalogPackage, + this.Version, + this.Log, + this.Id, + this.Name, + this.Moniker, + this.Source, + this.Query); + command.Update(this.IncludeUnknown.ToBool(), this.MatchOption.ToString(), this.Mode.ToString()); } } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Microsoft.WinGet.Client.Cmdlets.csproj b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Microsoft.WinGet.Client.Cmdlets.csproj @@ -14,7 +14,6 @@ <LangVersion>10</LangVersion> <BuildOutputDirectory>$(SolutionDir)$(Platform)\$(Configuration)\</BuildOutputDirectory> <OutputPath>$(BuildOutputDirectory)$(MSBuildProjectName)</OutputPath> - <Platforms>x64;x86;ARM64</Platforms> <TargetFrameworks>$(CoreFramework);$(DesktopFramework)</TargetFrameworks> <DocumentationFile>$(OutputPath)\Microsoft.WinGet.Client.Cmdlets.xml</DocumentationFile> </PropertyGroup> @@ -44,7 +43,7 @@ </PropertyGroup> <PropertyGroup Condition="'$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifiers>win10-x64;win10-x86;win10-arm;win10-arm64</RuntimeIdentifiers> + <RuntimeIdentifier>win10</RuntimeIdentifier> </PropertyGroup> <!-- This project doesn't reference it directly, but if I don't add it here it will fail with NETSDK1130 *.winmd cannot be referenced. --> @@ -56,26 +55,15 @@ <ProjectReference Include="..\Microsoft.WinGet.Client.Engine\Microsoft.WinGet.Client.Engine.csproj" /> </ItemGroup> - <PropertyGroup Condition=" '$(Platform)' == 'x64' AND '$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifier>win10-x64</RuntimeIdentifier> - </PropertyGroup> - - <PropertyGroup Condition=" '$(Platform)' == 'x86' AND '$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifier>win10-x86</RuntimeIdentifier> - </PropertyGroup> - - <PropertyGroup Condition=" '$(Platform)' == 'arm' AND '$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifier>win10-arm</RuntimeIdentifier> - </PropertyGroup> - - <PropertyGroup Condition=" '$(Platform)' == 'arm64' AND '$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifier>win10-arm64</RuntimeIdentifier> + <!-- This project doesn't reference CSWinRT, but specify this everywhere it will fail with NETSDK1130 and MSB3271. --> + <PropertyGroup> + <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch> </PropertyGroup> <!-- Build PowerShell Module --> <PropertyGroup> <PowerShellModuleOutputDirectory>$(BuildOutputDirectory)PowerShell\Microsoft.WinGet.Client</PowerShellModuleOutputDirectory> - <PowerShellModuleRuntimesDir>$(PowerShellModuleOutputDirectory)\runtimes\win10-$(Platform)\lib\$(TargetFramework)</PowerShellModuleRuntimesDir> + <PowerShellModuleRuntimesDir>$(PowerShellModuleOutputDirectory)\$(TargetFramework)</PowerShellModuleRuntimesDir> </PropertyGroup> <PropertyGroup Condition="'$(TargetFramework)' == '$(CoreFramework)'"> @@ -88,7 +76,7 @@ <PowerShellModuleDirectDependencies>$(PowerShellModuleRuntimesDir)</PowerShellModuleDirectDependencies> </PropertyGroup> - <!-- psm1, psd1 and ps1xml--> + <!-- psd1 and ps1xml--> <Target Name="CopyModuleFiles" AfterTargets="AfterBuild"> <ItemGroup> <ModuleFiles Include="$(ProjectDir)\..\Microsoft.WinGet.Client\ModuleFiles\**\*.*" /> @@ -101,7 +89,7 @@ <Target Name="CopyWinGetBinaries" AfterTargets="AfterBuild" Condition="'$(Platform)' != 'ARM'"> <ItemGroup> <ModuleWinGetFile Include="$(OutputPath)Microsoft.WinGet.Client.Cmdlets.dll" /> - <ModuleWinGetFile Include="$(OutputPath)Microsoft.WinGet.Client.Cmdlets.pdb" /> + <ModuleWinGetFile Include="$(OutputPath)Microsoft.WinGet.Client.Cmdlets.pdb" Condition="'$(Configuration)' == 'Debug'"/> </ItemGroup> <Message Importance="high" Text="Copying CopyWinGetBinaries: '@(ModuleWinGetFile)'" /> <Copy SourceFiles="@(ModuleWinGetFile)" DestinationFolder="$(PowerShellModuleRuntimesDir)" /> @@ -111,52 +99,24 @@ <Target Name="CopyDirectDependencies" AfterTargets="AfterBuild" Condition="'$(Platform)' != 'ARM'"> <ItemGroup> <ModuleDirectDependency Include="$(OutputPath)Microsoft.WinGet.Client.Engine.dll" /> - <ModuleDirectDependency Include="$(OutputPath)Microsoft.WinGet.Client.Engine.pdb" /> + <ModuleDirectDependency Include="$(OutputPath)Microsoft.WinGet.Client.Engine.pdb" Condition="'$(Configuration)' == 'Debug'" /> </ItemGroup> <Message Importance="high" Text="Copying direct dependencies: '@(ModuleDirectDependency)'" /> <Copy SourceFiles="@(ModuleDirectDependency)" DestinationFolder="$(PowerShellModuleDirectDependencies)" /> </Target> - <!-- Shared dependencies --> - <Target Name="CopySharedDependencies" AfterTargets="AfterBuild" Condition="'$(Platform)' != 'ARM'"> - <ItemGroup> - <ModuleSharedDependency Include="$(OutputPath)Microsoft.Windows.SDK.NET.dll" Condition="'$(TargetFramework)' == '$(CoreFramework)'" /> - <ModuleSharedDependency Include="$(OutputPath)Newtonsoft.Json.dll" /> - <ModuleSharedDependency Include="$(OutputPath)Octokit.dll" /> - <ModuleSharedDependency Include="$(OutputPath)WinRT.Runtime.dll" Condition="'$(TargetFramework)' == '$(CoreFramework)'" /> - </ItemGroup> - <Message Importance="high" Text="Copying shared dependencies: '@(ModuleSharedDependency)'" /> - <Copy SourceFiles="@(ModuleSharedDependency)" DestinationFolder="$(PowerShellModuleSharedDependencies)" /> - </Target> - - <!-- Dependencies of Engine that doesn't get copied in the output directory --> - <Target Name="CopyEngineDependencies" AfterTargets="AfterBuild" Condition="'$(Platform)' != 'ARM'"> - <PropertyGroup> - <EngineOutDir>$(OutputPath)..\..\..\Microsoft.WinGet.Client.Engine\$(TargetFramework)\win10-$(Platform)\</EngineOutDir> - <!-- The output path for this project is different on some builds where the RIDs are not used in the output. --> - <EngineOutDir Condition="!Exists('$(EngineOutDir)Microsoft.WinGet.Client.Engine.dll')">$(OutputPath)..\..\..\Microsoft.WinGet.Client.Engine\$(TargetFramework)\</EngineOutDir> - <EngineOutDir Condition="!Exists('$(EngineOutDir)Microsoft.WinGet.Client.Engine.dll')">$(OutputPath)..\..\Microsoft.WinGet.Client.Engine\$(TargetFramework)\</EngineOutDir> - </PropertyGroup> - <ItemGroup> - <ModuleEngineDependency Include="$(EngineOutDir)Microsoft.Management.Deployment.InProc.dll" /> - <ModuleEngineDependency Include="$(EngineOutDir)Microsoft.Management.Deployment.winmd" /> - <ModuleEngineDependency Include="$(EngineOutDir)WindowsPackageManager.dll" /> - <ModuleEngineDependency Include="$(EngineOutDir)winrtact.dll" /> - <ModuleEngineDependency Include="$(EngineOutDir)Microsoft.WinGet.SharedLib.dll" /> - </ItemGroup> - <Message Importance="high" Text="Copying CopyEngineDependencies: '@(ModuleEngineDependency)'" /> - <Copy SourceFiles="@(ModuleEngineDependency)" DestinationFolder="$(PowerShellModuleSharedDependencies)" /> - </Target> - - <!-- Rename Microsoft.Management.Deployment.InProc.dll to Microsoft.Management.Deployment.dll --> - <Target Name="RenameMicrosoftManagementDeployment" AfterTargets="AfterBuild"> + <!-- Shared managed dependencies --> + <Target Name="CopyManagedDependencies" AfterTargets="AfterBuild" Condition="'$(Platform)' != 'ARM'"> <ItemGroup> - <RenameModuleFiles Include="$(PowerShellModuleSharedDependencies)\**\Microsoft.Management.Deployment.InProc.dll"> - <NewName>Microsoft.Management.Deployment.dll</NewName> - </RenameModuleFiles> + <ManagedDependency Include="$(OutputPath)Newtonsoft.Json.dll" /> + <ManagedDependency Include="$(OutputPath)Octokit.dll" /> + <ManagedDependency Include="$(OutputPath)Microsoft.WinGet.SharedLib.dll" /> + <ManagedDependency Include="$(OutputPath)Microsoft.Windows.SDK.NET.dll" Condition="'$(TargetFramework)' == '$(CoreFramework)'" /> + <ManagedDependency Include="$(OutputPath)WinRT.Runtime.dll" Condition="'$(TargetFramework)' == '$(CoreFramework)'" /> + <ManagedDependency Include="$(OutputPath)Microsoft.Win32.Registry.dll" Condition="'$(TargetFramework)' == '$(DesktopFramework)'" /> </ItemGroup> - <Message Importance="high" Text="Renaming file '%(RenameModuleFiles.Identity)' to '$(PowerShellModuleSharedDependencies)\%(RenameModuleFiles.RecursiveDir)\%(RenameModuleFiles.NewName)'" /> - <Move SourceFiles="%(RenameModuleFiles.Identity)" DestinationFiles="$(PowerShellModuleSharedDependencies)\%(RenameModuleFiles.RecursiveDir)\%(RenameModuleFiles.NewName)" /> + <Message Importance="high" Text="Copying managed shared dependencies: '@(ManagedDependency)'" /> + <Copy SourceFiles="@(ManagedDependency)" DestinationFolder="$(PowerShellModuleSharedDependencies)" /> </Target> </Project> diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs @@ -1,71 +0,0 @@ -// ----------------------------------------------------------------------------- -// <copyright file="ClientCommand.cs" company="Microsoft Corporation"> -// Copyright (c) Microsoft Corporation. Licensed under the MIT License. -// </copyright> -// ----------------------------------------------------------------------------- - -namespace Microsoft.WinGet.Client.Engine.Commands.Common -{ - using System; - using System.Collections.Generic; - using System.Management.Automation; - using System.Runtime.InteropServices; - using Microsoft.Management.Deployment; - using Microsoft.WinGet.Client.Engine.Exceptions; - using Microsoft.WinGet.Client.Engine.Helpers; - - /// <summary> - /// This is the base class for all of the commands in this module that use the COM APIs. - /// </summary> - public abstract class ClientCommand : BaseCommand - { - static ClientCommand() - { - InitializeUndockedRegFreeWinRT(); - } - - /// <summary> - /// Initializes a new instance of the <see cref="ClientCommand"/> class. - /// </summary> - /// <param name="psCmdlet">psCmdlet.</param> - internal ClientCommand(PSCmdlet psCmdlet) - : base(psCmdlet) - { - } - - /// <summary> - /// Gets the instance of the <see cref="ComObjectFactory" /> class. - /// </summary> - protected static Lazy<ComObjectFactory> ComObjectFactory { get; } = new (); - - /// <summary> - /// Gets the instance of the <see cref="PackageManager" /> class. - /// </summary> - protected static Lazy<PackageManager> PackageManager { get; } = new (() => ComObjectFactory.Value.CreatePackageManager()); - - /// <summary> - /// Retrieves the specified source or all sources if <paramref name="source" /> is null. - /// </summary> - /// <returns>A list of <see cref="PackageCatalogReference" /> instances.</returns> - /// <param name="source">The name of the source to retrieve. If null, then all sources are returned.</param> - /// <exception cref="ArgumentException">The source does not exist.</exception> - protected static IReadOnlyList<PackageCatalogReference> GetPackageCatalogReferences(string source) - { - if (string.IsNullOrEmpty(source)) - { - return PackageManager.Value.GetPackageCatalogs(); - } - else - { - return new List<PackageCatalogReference>() - { - PackageManager.Value.GetPackageCatalogByName(source) - ?? throw new InvalidSourceException(source), - }; - } - } - - [DllImport("winrtact.dll", EntryPoint = "winrtact_Initialize", ExactSpelling = true, PreserveSig = true)] - private static extern void InitializeUndockedRegFreeWinRT(); - } -} diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs @@ -14,12 +14,13 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common using Microsoft.Management.Deployment; using Microsoft.WinGet.Client.Engine.Attributes; using Microsoft.WinGet.Client.Engine.Exceptions; + using Microsoft.WinGet.Client.Engine.Helpers; /// <summary> /// This is the base class for all commands that might need to search for a package. It contains an initial /// set of parameters that corresponds to the intersection of i.e., the "install" and "search" commands. /// </summary> - public abstract class FinderCommand : ClientCommand + public abstract class FinderCommand : ManagementDeploymentCommand { /// <summary> /// Initializes a new instance of the <see cref="FinderCommand"/> class. @@ -58,11 +59,6 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common /// </summary> protected string[] Query { get; set; } - /// <summary> - /// Gets or sets a value indicating whether to match exactly against package fields. - /// </summary> - protected PackageFieldMatchOption MatchOption { get; set; } - private string QueryAsJoinedString { get @@ -78,35 +74,40 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common /// </summary> /// <param name="behavior">The <see cref="CompositeSearchBehavior" /> value.</param> /// <param name="limit">The limit on the number of matches returned.</param> + /// <param name="match">The match option.</param> /// <returns>A list of <see cref="MatchResult" /> objects.</returns> protected IReadOnlyList<MatchResult> FindPackages( CompositeSearchBehavior behavior, - uint limit) + uint limit, + PackageFieldMatchOption match) { PackageCatalog catalog = this.GetPackageCatalog(behavior); - FindPackagesOptions options = this.GetFindPackagesOptions(limit); - return GetMatchResults(catalog, options); + FindPackagesOptions options = this.GetFindPackagesOptions(limit, match); + return this.GetMatchResults(catalog, options); } /// <summary> /// Sets the find package options for a query input. + /// DO NOT pass PackageFieldMatchOption WinRT enum type in this method. + /// That will cause the type to attempt to be loaded in the construction + /// of this method and throw a different exception for Windows PowerShell. /// </summary> /// <param name="options">The options object.</param> - /// <param name="match">The match type.</param> + /// <param name="match">The match type as string.</param> /// <param name="value">The query value.</param> protected virtual void SetQueryInFindPackagesOptions( ref FindPackagesOptions options, - PackageFieldMatchOption match, + string match, string value) { - var selector = ComObjectFactory.Value.CreatePackageMatchFilter(); + var selector = ManagementDeploymentFactory.Instance.CreatePackageMatchFilter(); selector.Field = PackageMatchField.CatalogDefault; selector.Value = value ?? string.Empty; - selector.Option = match; + selector.Option = PSEnumHelpers.ToPackageFieldMatchOption(match); options.Selectors.Add(selector); } - private static void AddFilterToFindPackagesOptionsIfNotNull( + private void AddFilterToFindPackagesOptionsIfNotNull( ref FindPackagesOptions options, PackageMatchField field, PackageFieldMatchOption match, @@ -114,7 +115,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common { if (value != null) { - var filter = ComObjectFactory.Value.CreatePackageMatchFilter(); + var filter = ManagementDeploymentFactory.Instance.CreatePackageMatchFilter(); filter.Field = field; filter.Value = value; filter.Option = match; @@ -122,7 +123,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common } } - private static IReadOnlyList<MatchResult> GetMatchResults( + private IReadOnlyList<MatchResult> GetMatchResults( PackageCatalog catalog, FindPackagesOptions options) { @@ -153,22 +154,22 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common private PackageCatalogReference GetPackageCatalogReference(CompositeSearchBehavior behavior) { - CreateCompositePackageCatalogOptions options = ComObjectFactory.Value.CreateCreateCompositePackageCatalogOptions(); - IReadOnlyList<PackageCatalogReference> references = GetPackageCatalogReferences(this.Source); + CreateCompositePackageCatalogOptions options = ManagementDeploymentFactory.Instance.CreateCreateCompositePackageCatalogOptions(); + IReadOnlyList<PackageCatalogReference> references = this.GetPackageCatalogReferences(this.Source); for (var i = 0; i < references.Count; i++) { options.Catalogs.Add(references[i]); } options.CompositeSearchBehavior = behavior; - return PackageManager.Value.CreateCompositePackageCatalog(options); + return PackageManagerWrapper.Instance.CreateCompositePackageCatalog(options); } - private FindPackagesOptions GetFindPackagesOptions(uint limit) + private FindPackagesOptions GetFindPackagesOptions(uint limit, PackageFieldMatchOption match) { - var options = ComObjectFactory.Value.CreateFindPackagesOptions(); - this.SetQueryInFindPackagesOptions(ref options, this.MatchOption, this.QueryAsJoinedString); - this.AddAttributedFiltersToFindPackagesOptions(ref options, this.MatchOption); + var options = ManagementDeploymentFactory.Instance.CreateFindPackagesOptions(); + this.SetQueryInFindPackagesOptions(ref options, match.ToString(), this.QueryAsJoinedString); + this.AddAttributedFiltersToFindPackagesOptions(ref options, match); options.ResultLimit = limit; return options; } @@ -187,7 +188,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common { PackageMatchField field = attribute.Field; string value = info.GetValue(this, null) as string; - AddFilterToFindPackagesOptionsIfNotNull(ref options, field, match, value); + this.AddFilterToFindPackagesOptionsIfNotNull(ref options, field, match, value); } } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderExtendedCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderExtendedCommand.cs @@ -48,10 +48,11 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common /// Searches for packages from configured sources. /// </summary> /// <param name="behavior">A <see cref="CompositeSearchBehavior" /> value.</param> + /// <param name="match">The match option.</param> /// <returns>A list of <see cref="MatchResult" /> objects.</returns> - protected IReadOnlyList<MatchResult> FindPackages(CompositeSearchBehavior behavior) + protected IReadOnlyList<MatchResult> FindPackages(CompositeSearchBehavior behavior, PackageFieldMatchOption match) { - return this.FindPackages(behavior, this.Count); + return this.FindPackages(behavior, this.Count, match); } } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs @@ -27,11 +27,6 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common } /// <summary> - /// Gets or sets the mode to manipulate the package with. - /// </summary> - protected PackageInstallMode Mode { get; set; } = PackageInstallMode.Default; - - /// <summary> /// Gets or sets the override arguments to be passed on to the installer. /// </summary> protected string Override { get; set; } @@ -63,15 +58,19 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common /// <summary> /// Gets the install options from the configured parameters. + /// DO NOT pass PackageInstallMode WinRT enum type in this method. + /// That will cause the type to attempt to be loaded in the construction + /// of this method and throw a different exception for Windows PowerShell. /// </summary> /// <param name="version">The <see cref="PackageVersionId" /> to install.</param> + /// <param name="mode">Package install mode as string.</param> /// <returns>An <see cref="InstallOptions" /> instance.</returns> - protected virtual InstallOptions GetInstallOptions(PackageVersionId version) + protected virtual InstallOptions GetInstallOptions(PackageVersionId version, string mode) { - InstallOptions options = ComObjectFactory.Value.CreateInstallOptions(); + InstallOptions options = ManagementDeploymentFactory.Instance.CreateInstallOptions(); options.AllowHashMismatch = this.AllowHashMismatch; options.Force = this.Force; - options.PackageInstallMode = this.Mode; + options.PackageInstallMode = PSEnumHelpers.ToPackageInstallMode(mode); if (version != null) { options.PackageVersionId = version; diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ManagementDeploymentCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ManagementDeploymentCommand.cs @@ -0,0 +1,67 @@ +// ----------------------------------------------------------------------------- +// <copyright file="ManagementDeploymentCommand.cs" company="Microsoft Corporation"> +// Copyright (c) Microsoft Corporation. Licensed under the MIT License. +// </copyright> +// ----------------------------------------------------------------------------- + +namespace Microsoft.WinGet.Client.Engine.Commands.Common +{ + using System; + using System.Collections.Generic; + using System.Management.Automation; + using System.Runtime.InteropServices; + using Microsoft.Management.Deployment; + using Microsoft.WinGet.Client.Engine.Exceptions; + using Microsoft.WinGet.Client.Engine.Helpers; + using Microsoft.WinGet.Client.Engine.Properties; + + /// <summary> + /// This is the base class for all of the commands in this module that use the COM APIs. + /// </summary> + public abstract class ManagementDeploymentCommand : BaseCommand + { + static ManagementDeploymentCommand() + { +#if !POWERSHELL_WINDOWS + InitializeUndockedRegFreeWinRT(); +#endif + } + + /// <summary> + /// Initializes a new instance of the <see cref="ManagementDeploymentCommand"/> class. + /// </summary> + /// <param name="psCmdlet">psCmdlet.</param> + internal ManagementDeploymentCommand(PSCmdlet psCmdlet) + : base(psCmdlet) + { +#if POWERSHELL_WINDOWS + throw new WindowsPowerShellNotSupported(); +#endif + } + + /// <summary> + /// Retrieves the specified source or all sources if <paramref name="source" /> is null. + /// </summary> + /// <returns>A list of <see cref="PackageCatalogReference" /> instances.</returns> + /// <param name="source">The name of the source to retrieve. If null, then all sources are returned.</param> + /// <exception cref="ArgumentException">The source does not exist.</exception> + protected IReadOnlyList<PackageCatalogReference> GetPackageCatalogReferences(string source) + { + if (string.IsNullOrEmpty(source)) + { + return PackageManagerWrapper.Instance.GetPackageCatalogs(); + } + else + { + return new List<PackageCatalogReference>() + { + PackageManagerWrapper.Instance.GetPackageCatalogByName(source) + ?? throw new InvalidSourceException(source), + }; + } + } + + [DllImport("winrtact.dll", EntryPoint = "winrtact_Initialize", ExactSpelling = true, PreserveSig = true)] + private static extern void InitializeUndockedRegFreeWinRT(); + } +} diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs @@ -12,6 +12,8 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common using Microsoft.Management.Deployment; using Microsoft.WinGet.Client.Engine.Exceptions; using Microsoft.WinGet.Client.Engine.Extensions; + using Microsoft.WinGet.Client.Engine.Helpers; + using Microsoft.WinGet.Client.Engine.PSObjects; /// <summary> /// This is the base class for commands which operate on a specific package and version i.e., @@ -34,7 +36,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common /// <remarks> /// Must match the name of the <see cref="CatalogPackage" /> field on the <see cref="MatchResult" /> class. /// </remarks> - protected CatalogPackage CatalogPackage { get; set; } = null; + protected PSCatalogPackage CatalogPackage { get; set; } = null; /// <summary> /// Gets or sets the version to install. @@ -50,12 +52,14 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common /// Executes a command targeting a specific package version. /// </summary> /// <param name="behavior">The <see cref="CompositeSearchBehavior" /> value.</param> + /// <param name="match">The match option.</param> /// <param name="callback">The method to call after retrieving the package and version to operate upon.</param> protected void GetPackageAndExecute( CompositeSearchBehavior behavior, + PackageFieldMatchOption match, Action<CatalogPackage, PackageVersionId> callback) { - CatalogPackage package = this.GetCatalogPackage(behavior); + CatalogPackage package = this.GetCatalogPackage(behavior, match); PackageVersionId version = this.GetPackageVersionId(package); if (this.PsCmdlet.ShouldProcess(package.ToString(version))) { @@ -65,35 +69,39 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common /// <summary> /// Sets the find package options for a query input that is looking for a specific package. + /// DO NOT pass PackageFieldMatchOption WinRT enum type in this method. + /// That will cause the type to attempt to be loaded in the construction + /// of this method and throw a different exception for Windows PowerShell. /// </summary> /// <param name="options">The options object.</param> /// <param name="match">The match type.</param> /// <param name="value">The query value.</param> protected override void SetQueryInFindPackagesOptions( ref FindPackagesOptions options, - PackageFieldMatchOption match, + string match, string value) { + var matchOption = PSEnumHelpers.ToPackageFieldMatchOption(match); foreach (PackageMatchField field in new PackageMatchField[] { PackageMatchField.Id, PackageMatchField.Name, PackageMatchField.Moniker }) { - var selector = ComObjectFactory.Value.CreatePackageMatchFilter(); + var selector = ManagementDeploymentFactory.Instance.CreatePackageMatchFilter(); selector.Field = field; selector.Value = value ?? string.Empty; - selector.Option = match; + selector.Option = matchOption; options.Selectors.Add(selector); } } - private CatalogPackage GetCatalogPackage(CompositeSearchBehavior behavior) + private CatalogPackage GetCatalogPackage(CompositeSearchBehavior behavior, PackageFieldMatchOption match) { if (this.CatalogPackage != null) { // The package was already provided via a parameter or the pipeline. - return this.CatalogPackage; + return this.CatalogPackage.CatalogPackageCOM; } else { - IReadOnlyList<MatchResult> results = this.FindPackages(behavior, 0); + IReadOnlyList<MatchResult> results = this.FindPackages(behavior, 0, match); if (results.Count == 1) { // Exactly one package matched, so we can just return it. diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/FinderPackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/FinderPackageCommand.cs @@ -6,13 +6,10 @@ namespace Microsoft.WinGet.Client.Engine.Commands { - using System; using System.Management.Automation; using Microsoft.Management.Deployment; using Microsoft.WinGet.Client.Engine.Commands.Common; - using Microsoft.WinGet.Client.Engine.Extensions; using Microsoft.WinGet.Client.Engine.Helpers; - using Microsoft.WinGet.Client.Engine.Properties; using Microsoft.WinGet.Client.Engine.PSObjects; /// <summary> @@ -29,7 +26,6 @@ namespace Microsoft.WinGet.Client.Engine.Commands /// <param name="moniker">Moniker of package.</param> /// <param name="source">Source to search. If null, all are searched.</param> /// <param name="query">Match against any field of a package.</param> - /// <param name="matchOption">Match option.</param> /// <param name="tag">Tag of the package.</param> /// <param name="command">Command of the package.</param> /// <param name="count">Max results to return.</param> @@ -40,36 +36,31 @@ namespace Microsoft.WinGet.Client.Engine.Commands string moniker, string source, string[] query, - string matchOption, string tag, string command, uint count) : base(psCmdlet) { -#if POWERSHELL_WINDOWS - throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); -#else // FinderCommand this.Id = id; this.Name = name; this.Moniker = moniker; this.Source = source; this.Query = query; - this.MatchOption = PSEnumHelpers.ToPackageFieldMatchOption(matchOption); // FinderExtendedCommand this.Tag = tag; this.Command = command; this.Count = count; -#endif } /// <summary> /// Process find package command. /// </summary> - public void Find() + /// <param name="psPackageFieldMatchOption">PSPackageFieldMatchOption.</param> + public void Find(string psPackageFieldMatchOption) { - var results = this.FindPackages(CompositeSearchBehavior.RemotePackagesFromRemoteCatalogs); + var results = this.FindPackages(CompositeSearchBehavior.RemotePackagesFromRemoteCatalogs, PSEnumHelpers.ToPackageFieldMatchOption(psPackageFieldMatchOption)); for (var i = 0; i < results.Count; i++) { this.PsCmdlet.WriteObject(new PSFoundCatalogPackage(results[i].CatalogPackage)); @@ -79,9 +70,10 @@ namespace Microsoft.WinGet.Client.Engine.Commands /// <summary> /// Process get package command. /// </summary> - public void Get() + /// <param name="psPackageFieldMatchOption">PSPackageFieldMatchOption.</param> + public void Get(string psPackageFieldMatchOption) { - var results = this.FindPackages(CompositeSearchBehavior.LocalCatalogs); + var results = this.FindPackages(CompositeSearchBehavior.LocalCatalogs, PSEnumHelpers.ToPackageFieldMatchOption(psPackageFieldMatchOption)); for (var i = 0; i < results.Count; i++) { this.PsCmdlet.WriteObject(new PSInstalledCatalogPackage(results[i].CatalogPackage)); diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs @@ -6,7 +6,6 @@ namespace Microsoft.WinGet.Client.Engine.Commands { - using System; using System.Management.Automation; using Microsoft.Management.Deployment; using Microsoft.WinGet.Client.Engine.Commands.Common; @@ -38,7 +37,6 @@ namespace Microsoft.WinGet.Client.Engine.Commands /// <param name="moniker">Moniker of package.</param> /// <param name="source">Source to search. If null, all are searched.</param> /// <param name="query">Match against any field of a package.</param> - /// <param name="matchOption">Match option.</param> public InstallerPackageCommand( PSCmdlet psCmdlet, string psInstallMode, @@ -55,15 +53,10 @@ namespace Microsoft.WinGet.Client.Engine.Commands string name, string moniker, string source, - string[] query, - string matchOption) + string[] query) : base(psCmdlet) { -#if POWERSHELL_WINDOWS - throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); -#else // InstallCommand. - this.Mode = PSEnumHelpers.ToPackageInstallMode(psInstallMode); this.Override = @override; this.Custom = custom; this.Location = location; @@ -74,7 +67,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands // PackageCommand. if (psCatalogPackage != null) { - this.CatalogPackage = psCatalogPackage.CatalogPackageCOM; + this.CatalogPackage = psCatalogPackage; } this.Version = version; @@ -86,8 +79,6 @@ namespace Microsoft.WinGet.Client.Engine.Commands this.Moniker = moniker; this.Source = source; this.Query = query; - this.MatchOption = PSEnumHelpers.ToPackageFieldMatchOption(matchOption); -#endif } /// <summary> @@ -95,47 +86,62 @@ namespace Microsoft.WinGet.Client.Engine.Commands /// </summary> /// <param name="psPackageInstallScope">PSPackageInstallScope.</param> /// <param name="psProcessorArchitecture">PSProcessorArchitecture.</param> + /// <param name="psPackageFieldMatchOption">PSPackageFieldMatchOption.</param> + /// <param name="psPackageInstallMode">PSPackageInstallMode.</param> public void Install( string psPackageInstallScope, - string psProcessorArchitecture) + string psProcessorArchitecture, + string psPackageFieldMatchOption, + string psPackageInstallMode) { - this.GetPackageAndExecute(CompositeSearchBehavior.RemotePackagesFromRemoteCatalogs, (package, version) => - { - InstallOptions options = this.GetInstallOptions(version); - if (psProcessorArchitecture != "Default") + this.GetPackageAndExecute( + CompositeSearchBehavior.RemotePackagesFromRemoteCatalogs, + PSEnumHelpers.ToPackageFieldMatchOption(psPackageFieldMatchOption), + (package, version) => { - options.AllowedArchitectures.Clear(); - options.AllowedArchitectures.Add(PSEnumHelpers.ToProcessorArchitecture(psProcessorArchitecture)); - } + InstallOptions options = this.GetInstallOptions(version, psPackageInstallMode); + if (psProcessorArchitecture != "Default") + { + options.AllowedArchitectures.Clear(); + options.AllowedArchitectures.Add(PSEnumHelpers.ToProcessorArchitecture(psProcessorArchitecture)); + } - options.PackageInstallScope = PSEnumHelpers.ToPackageInstallScope(psPackageInstallScope); + options.PackageInstallScope = PSEnumHelpers.ToPackageInstallScope(psPackageInstallScope); - InstallResult result = this.InstallPackage(package, options); - this.PsCmdlet.WriteObject(new PSInstallResult(result)); - }); + InstallResult result = this.InstallPackage(package, options); + this.PsCmdlet.WriteObject(new PSInstallResult(result)); + }); } /// <summary> /// Process update package command. /// </summary> /// <param name="includeUnknown">If updating to an unknown version is allowed.</param> - public void Update(bool includeUnknown) + /// <param name="psPackageFieldMatchOption">PSPackageFieldMatchOption.</param> + /// <param name="psPackageInstallMode">PSPackageInstallMode.</param> + public void Update( + bool includeUnknown, + string psPackageFieldMatchOption, + string psPackageInstallMode) { - this.GetPackageAndExecute(CompositeSearchBehavior.LocalCatalogs, (package, version) => - { - InstallOptions options = this.GetInstallOptions(version); - options.AllowUpgradeToUnknownVersion = includeUnknown; + this.GetPackageAndExecute( + CompositeSearchBehavior.LocalCatalogs, + PSEnumHelpers.ToPackageFieldMatchOption(psPackageFieldMatchOption), + (package, version) => + { + InstallOptions options = this.GetInstallOptions(version, psPackageInstallMode); + options.AllowUpgradeToUnknownVersion = includeUnknown; - InstallResult result = this.UpgradePackage(package, options); - this.PsCmdlet.WriteObject(new PSInstallResult(result)); - }); + InstallResult result = this.UpgradePackage(package, options); + this.PsCmdlet.WriteObject(new PSInstallResult(result)); + }); } private InstallResult InstallPackage( CatalogPackage package, InstallOptions options) { - var operation = PackageManager.Value.InstallPackageAsync(package, options); + var operation = PackageManagerWrapper.Instance.InstallPackageAsync(package, options); return this.RegisterCallbacksAndWait(operation, string.Format( Resources.ProgressRecordActivityInstalling, package.Name)); @@ -145,7 +151,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands CatalogPackage package, InstallOptions options) { - var operation = PackageManager.Value.UpgradePackageAsync(package, options); + var operation = PackageManagerWrapper.Instance.UpgradePackageAsync(package, options); return this.RegisterCallbacksAndWait( operation, string.Format( diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/SourceCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/SourceCommand.cs @@ -6,16 +6,14 @@ namespace Microsoft.WinGet.Client.Engine.Commands { - using System; using System.Management.Automation; using Microsoft.WinGet.Client.Engine.Commands.Common; - using Microsoft.WinGet.Client.Engine.Properties; using Microsoft.WinGet.Client.Engine.PSObjects; /// <summary> /// Wrapper for source cmdlets. /// </summary> - public sealed class SourceCommand : ClientCommand + public sealed class SourceCommand : ManagementDeploymentCommand { /// <summary> /// Initializes a new instance of the <see cref="SourceCommand"/> class. @@ -25,9 +23,6 @@ namespace Microsoft.WinGet.Client.Engine.Commands public SourceCommand(PSCmdlet psCmdlet) : base(psCmdlet) { -#if POWERSHELL_WINDOWS - throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); -#endif } /// <summary> @@ -36,7 +31,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands /// <param name="name">Optional name.</param> public void Get(string name) { - var results = GetPackageCatalogReferences(name); + var results = this.GetPackageCatalogReferences(name); for (var i = 0; i < results.Count; i++) { this.PsCmdlet.WriteObject(new PSSourceResult(results[i])); diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs @@ -31,7 +31,6 @@ namespace Microsoft.WinGet.Client.Engine.Commands /// <param name="moniker">Moniker of package.</param> /// <param name="source">Source to search. If null, all are searched.</param> /// <param name="query">Match against any field of a package.</param> - /// <param name="matchOption">Match option.</param> public UninstallPackageCommand( PSCmdlet psCmdlet, PSCatalogPackage psCatalogPackage, @@ -41,17 +40,13 @@ namespace Microsoft.WinGet.Client.Engine.Commands string name, string moniker, string source, - string[] query, - string matchOption) + string[] query) : base(psCmdlet) { -#if POWERSHELL_WINDOWS - throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); -#else // PackageCommand. if (psCatalogPackage != null) { - this.CatalogPackage = psCatalogPackage.CatalogPackageCOM; + this.CatalogPackage = psCatalogPackage; } this.Version = version; @@ -63,25 +58,28 @@ namespace Microsoft.WinGet.Client.Engine.Commands this.Moniker = moniker; this.Source = source; this.Query = query; - this.MatchOption = PSEnumHelpers.ToPackageFieldMatchOption(matchOption); -#endif } /// <summary> /// Process uninstall package. /// </summary> /// <param name="psPackageUninstallMode">PSPackageUninstallMode.</param> + /// <param name="psPackageFieldMatchOption">PSPackageFieldMatchOption.</param> /// <param name="force">Force.</param> public void Uninstall( string psPackageUninstallMode, + string psPackageFieldMatchOption, bool force) { - this.GetPackageAndExecute(CompositeSearchBehavior.LocalCatalogs, (package, version) => - { - UninstallOptions options = this.GetUninstallOptions(version, PSEnumHelpers.ToPackageUninstallMode(psPackageUninstallMode), force); - UninstallResult result = this.UninstallPackage(package, options); - this.PsCmdlet.WriteObject(new PSUninstallResult(result)); - }); + this.GetPackageAndExecute( + CompositeSearchBehavior.LocalCatalogs, + PSEnumHelpers.ToPackageFieldMatchOption(psPackageFieldMatchOption), + (package, version) => + { + UninstallOptions options = this.GetUninstallOptions(version, PSEnumHelpers.ToPackageUninstallMode(psPackageUninstallMode), force); + UninstallResult result = this.UninstallPackage(package, options); + this.PsCmdlet.WriteObject(new PSUninstallResult(result)); + }); } private UninstallOptions GetUninstallOptions( @@ -89,7 +87,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands PackageUninstallMode packageUninstallMode, bool force) { - var options = ComObjectFactory.Value.CreateUninstallOptions(); + var options = ManagementDeploymentFactory.Instance.CreateUninstallOptions(); options.Force = force; if (this.Log != null) { @@ -114,7 +112,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands Resources.ProgressRecordActivityUninstalling, package.Name); - var operation = PackageManager.Value.UninstallPackageAsync(package, options); + var operation = PackageManagerWrapper.Instance.UninstallPackageAsync(package, options); WriteProgressAdapter adapter = new (this.PsCmdlet); operation.Progress = (context, progress) => { diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Common/ErrorCode.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Common/ErrorCode.cs @@ -9,11 +9,21 @@ namespace Microsoft.WinGet.Client.Engine.Common /// <summary> /// Error code constants. /// </summary> - public static class ErrorCode + internal static class ErrorCode { /// <summary> /// Error code for ERROR_FILE_NOT_FOUND. /// </summary> public const int FileNotFound = unchecked((int)0x80070002); + + /// <summary> + /// Error code for RPC_S_SERVER_UNAVAILABLE. + /// </summary> + public const int RpcServerUnavailable = unchecked((int)0x800706BA); + + /// <summary> + /// Error code for RPC_S_CALL_FAILED. + /// </summary> + public const int RpcCallFailed = unchecked((int)0x800706BE); } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Exceptions/WindowsPowerShellNotSupported.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Exceptions/WindowsPowerShellNotSupported.cs @@ -0,0 +1,27 @@ +// ----------------------------------------------------------------------------- +// <copyright file="WindowsPowerShellNotSupported.cs" company="Microsoft Corporation"> +// Copyright (c) Microsoft Corporation. Licensed under the MIT License. +// </copyright> +// ----------------------------------------------------------------------------- + +namespace Microsoft.WinGet.Client.Engine.Exceptions +{ + using System; + using System.Management.Automation; + using Microsoft.WinGet.Client.Engine.Properties; + + /// <summary> + /// Windows PowerShell is not supported. + /// </summary> + [Serializable] + public class WindowsPowerShellNotSupported : RuntimeException + { + /// <summary> + /// Initializes a new instance of the <see cref="WindowsPowerShellNotSupported"/> class. + /// </summary> + public WindowsPowerShellNotSupported() + : base(Resources.WindowsPowerShellNotSupported) + { + } + } +} diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ComObjectFactory.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ComObjectFactory.cs @@ -1,203 +0,0 @@ -// ----------------------------------------------------------------------------- -// <copyright file="ComObjectFactory.cs" company="Microsoft Corporation"> -// Copyright (c) Microsoft Corporation. Licensed under the MIT License. -// </copyright> -// ----------------------------------------------------------------------------- - -namespace Microsoft.WinGet.Client.Engine.Helpers -{ - using System; - using System.IO; - using System.Reflection; - using System.Runtime.InteropServices; - using Microsoft.Management.Deployment; - using Microsoft.WinGet.Client.Engine.Common; - using Microsoft.WinGet.Client.Engine.Exceptions; - -#if NET - using WinRT; -#endif - - /// <summary> - /// Constructs instances of classes from the <see cref="Management.Deployment" /> namespace. - /// </summary> - public class ComObjectFactory - { -#if USE_PROD_CLSIDS - private static readonly Guid PackageManagerClsid = Guid.Parse("C53A4F16-787E-42A4-B304-29EFFB4BF597"); - private static readonly Guid FindPackagesOptionsClsid = Guid.Parse("572DED96-9C60-4526-8F92-EE7D91D38C1A"); - private static readonly Guid CreateCompositePackageCatalogOptionsClsid = Guid.Parse("526534B8-7E46-47C8-8416-B1685C327D37"); - private static readonly Guid InstallOptionsClsid = Guid.Parse("1095F097-EB96-453B-B4E6-1613637F3B14"); - private static readonly Guid UninstallOptionsClsid = Guid.Parse("E1D9A11E-9F85-4D87-9C17-2B93143ADB8D"); - private static readonly Guid PackageMatchFilterClsid = Guid.Parse("D02C9DAF-99DC-429C-B503-4E504E4AB000"); - private static readonly Guid DownloadOptionsClsid = Guid.Parse("4CBABE76-7322-4BE4-9CEA-2589A80682DC"); -#else - private static readonly Guid PackageManagerClsid = Guid.Parse("74CB3139-B7C5-4B9E-9388-E6616DEA288C"); - private static readonly Guid FindPackagesOptionsClsid = Guid.Parse("1BD8FF3A-EC50-4F69-AEEE-DF4C9D3BAA96"); - private static readonly Guid CreateCompositePackageCatalogOptionsClsid = Guid.Parse("EE160901-B317-4EA7-9CC6-5355C6D7D8A7"); - private static readonly Guid InstallOptionsClsid = Guid.Parse("44FE0580-62F7-44D4-9E91-AA9614AB3E86"); - private static readonly Guid UninstallOptionsClsid = Guid.Parse("AA2A5C04-1AD9-46C4-B74F-6B334AD7EB8C"); - private static readonly Guid PackageMatchFilterClsid = Guid.Parse("3F85B9F4-487A-4C48-9035-2903F8A6D9E8"); - private static readonly Guid DownloadOptionsClsid = Guid.Parse("8EF324ED-367C-4880-83E5-BB2ABD0B72F6"); -#endif - [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] - private static readonly Type PackageManagerType = Type.GetTypeFromCLSID(PackageManagerClsid); - [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] - private static readonly Type FindPackagesOptionsType = Type.GetTypeFromCLSID(FindPackagesOptionsClsid); - [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] - private static readonly Type CreateCompositePackageCatalogOptionsType = Type.GetTypeFromCLSID(CreateCompositePackageCatalogOptionsClsid); - [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] - private static readonly Type InstallOptionsType = Type.GetTypeFromCLSID(InstallOptionsClsid); - [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] - private static readonly Type UninstallOptionsType = Type.GetTypeFromCLSID(UninstallOptionsClsid); - [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] - private static readonly Type PackageMatchFilterType = Type.GetTypeFromCLSID(PackageMatchFilterClsid); - [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] - private static readonly Type DownloadOptionsType = Type.GetTypeFromCLSID(DownloadOptionsClsid); - - private static readonly Guid PackageManagerIid = Guid.Parse("B375E3B9-F2E0-5C93-87A7-B67497F7E593"); - private static readonly Guid FindPackagesOptionsIid = Guid.Parse("A5270EDD-7DA7-57A3-BACE-F2593553561F"); - private static readonly Guid CreateCompositePackageCatalogOptionsIid = Guid.Parse("21ABAA76-089D-51C5-A745-C85EEFE70116"); - private static readonly Guid InstallOptionsIid = Guid.Parse("6EE9DB69-AB48-5E72-A474-33A924CD23B3"); - private static readonly Guid UninstallOptionsIid = Guid.Parse("3EBC67F0-8339-594B-8A42-F90B69D02BBE"); - private static readonly Guid PackageMatchFilterIid = Guid.Parse("D981ECA3-4DE5-5AD7-967A-698C7D60FC3B"); - private static readonly Guid DownloadOptionsIid = Guid.Parse("B4D72A63-40FF-597D-A7DA-43580268DC96"); - - /// <summary> - /// Initializes static members of the <see cref="ComObjectFactory"/> class. - /// </summary> - static ComObjectFactory() - { - if (Utilities.UsesInProcWinget) - { - PackageManagerSettings settings = new PackageManagerSettings(); - settings.SetCallerIdentifier("PowerShellInProc"); - } - } - - /// <summary> - /// Creates an instance of the <see cref="PackageManager" /> class. - /// </summary> - /// <returns>A <see cref="PackageManager" /> instance.</returns> - public virtual PackageManager CreatePackageManager() - { - return Create<PackageManager>(PackageManagerType, PackageManagerIid); - } - - /// <summary> - /// Creates an instance of the <see cref="FindPackagesOptions" /> class. - /// </summary> - /// <returns>A <see cref="FindPackagesOptions" /> instance.</returns> - public virtual FindPackagesOptions CreateFindPackagesOptions() - { - return Create<FindPackagesOptions>(FindPackagesOptionsType, FindPackagesOptionsIid); - } - - /// <summary> - /// Creates an instance of the <see cref="CreateCompositePackageCatalogOptions" /> class. - /// </summary> - /// <returns>A <see cref="CreateCompositePackageCatalogOptions" /> instance.</returns> - public virtual CreateCompositePackageCatalogOptions CreateCreateCompositePackageCatalogOptions() - { - return Create<CreateCompositePackageCatalogOptions>(CreateCompositePackageCatalogOptionsType, CreateCompositePackageCatalogOptionsIid); - } - - /// <summary> - /// Creates an instance of the <see cref="InstallOptions" /> class. - /// </summary> - /// <returns>An <see cref="InstallOptions" /> instance.</returns> - public virtual InstallOptions CreateInstallOptions() - { - return Create<InstallOptions>(InstallOptionsType, InstallOptionsIid); - } - - /// <summary> - /// Creates an instance of the <see cref="UninstallOptions" /> class. - /// </summary> - /// <returns>A <see cref="UninstallOptions" /> instance.</returns> - public virtual UninstallOptions CreateUninstallOptions() - { - return Create<UninstallOptions>(UninstallOptionsType, UninstallOptionsIid); - } - - /// <summary> - /// Creates an instance of the <see cref="DownloadOptions" /> class. - /// </summary> - /// <returns>A <see cref="DownloadOptions" /> instance.</returns> - public virtual DownloadOptions CreateDownloadOptions() - { - return Create<DownloadOptions>(DownloadOptionsType, DownloadOptionsIid); - } - - /// <summary> - /// Creates an instance of the <see cref="PackageMatchFilter" /> class. - /// </summary> - /// <returns>A <see cref="PackageMatchFilter" /> instance.</returns> - public virtual PackageMatchFilter CreatePackageMatchFilter() - { - return Create<PackageMatchFilter>(PackageMatchFilterType, PackageMatchFilterIid); - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] - private static T Create<T>(Type type, in Guid iid) - where T : new() - { - if (Utilities.UsesInProcWinget) - { - string executingAssemblyLocation = Assembly.GetExecutingAssembly().Location; - string executingAssemblyDirectory = Path.GetDirectoryName(executingAssemblyLocation); - SetDllDirectoryW(executingAssemblyDirectory); - - try - { - return new T(); - } - finally - { - SetDllDirectoryW(null); - } - } - - object instance = null; - - if (Utilities.ExecutingAsAdministrator) - { - int hr = WinGetServerManualActivation_CreateInstance(type.GUID, iid, 0, out instance); - - if (hr < 0) - { - if (hr == ErrorCode.FileNotFound) - { - throw new WinGetIntegrityException(IntegrityCategory.AppInstallerNotInstalled); - } - else - { - throw new COMException($"Failed to create instance: {hr}", hr); - } - } - } - else - { - instance = Activator.CreateInstance(type); - } - -#if NET - IntPtr pointer = Marshal.GetIUnknownForObject(instance); - return MarshalInterface<T>.FromAbi(pointer); -#else - return (T)instance; -#endif - } - - [DllImport("winrtact.dll", EntryPoint = "WinGetServerManualActivation_CreateInstance", ExactSpelling = true, PreserveSig = true)] - private static extern int WinGetServerManualActivation_CreateInstance( - [In, MarshalAs(UnmanagedType.LPStruct)] Guid clsid, - [In, MarshalAs(UnmanagedType.LPStruct)] Guid iid, - uint flags, - [Out, MarshalAs(UnmanagedType.IUnknown)] out object instance); - - [DllImport("kernel32.dll", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool SetDllDirectoryW([MarshalAs(UnmanagedType.LPWStr)] string directory); - } -} diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs @@ -0,0 +1,228 @@ +// ----------------------------------------------------------------------------- +// <copyright file="ManagementDeploymentFactory.cs" company="Microsoft Corporation"> +// Copyright (c) Microsoft Corporation. Licensed under the MIT License. +// </copyright> +// ----------------------------------------------------------------------------- + +namespace Microsoft.WinGet.Client.Engine.Helpers +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Reflection; + using System.Runtime.InteropServices; + using Microsoft.Management.Deployment; + using Microsoft.WinGet.Client.Engine.Common; + using Microsoft.WinGet.Client.Engine.Exceptions; + +#if NET + using WinRT; +#endif + + /// <summary> + /// Constructs instances of classes from the <see cref="Management.Deployment" /> namespace. + /// </summary> + internal sealed class ManagementDeploymentFactory + { +#if USE_PROD_CLSIDS + private static readonly Guid PackageManagerClsid = Guid.Parse("C53A4F16-787E-42A4-B304-29EFFB4BF597"); + private static readonly Guid FindPackagesOptionsClsid = Guid.Parse("572DED96-9C60-4526-8F92-EE7D91D38C1A"); + private static readonly Guid CreateCompositePackageCatalogOptionsClsid = Guid.Parse("526534B8-7E46-47C8-8416-B1685C327D37"); + private static readonly Guid InstallOptionsClsid = Guid.Parse("1095F097-EB96-453B-B4E6-1613637F3B14"); + private static readonly Guid UninstallOptionsClsid = Guid.Parse("E1D9A11E-9F85-4D87-9C17-2B93143ADB8D"); + private static readonly Guid PackageMatchFilterClsid = Guid.Parse("D02C9DAF-99DC-429C-B503-4E504E4AB000"); + private static readonly Guid DownloadOptionsClsid = Guid.Parse("4CBABE76-7322-4BE4-9CEA-2589A80682DC"); +#else + private static readonly Guid PackageManagerClsid = Guid.Parse("74CB3139-B7C5-4B9E-9388-E6616DEA288C"); + private static readonly Guid FindPackagesOptionsClsid = Guid.Parse("1BD8FF3A-EC50-4F69-AEEE-DF4C9D3BAA96"); + private static readonly Guid CreateCompositePackageCatalogOptionsClsid = Guid.Parse("EE160901-B317-4EA7-9CC6-5355C6D7D8A7"); + private static readonly Guid InstallOptionsClsid = Guid.Parse("44FE0580-62F7-44D4-9E91-AA9614AB3E86"); + private static readonly Guid UninstallOptionsClsid = Guid.Parse("AA2A5C04-1AD9-46C4-B74F-6B334AD7EB8C"); + private static readonly Guid PackageMatchFilterClsid = Guid.Parse("3F85B9F4-487A-4C48-9035-2903F8A6D9E8"); + private static readonly Guid DownloadOptionsClsid = Guid.Parse("8EF324ED-367C-4880-83E5-BB2ABD0B72F6"); +#endif + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] + private static readonly Type PackageManagerType = Type.GetTypeFromCLSID(PackageManagerClsid); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] + private static readonly Type FindPackagesOptionsType = Type.GetTypeFromCLSID(FindPackagesOptionsClsid); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] + private static readonly Type CreateCompositePackageCatalogOptionsType = Type.GetTypeFromCLSID(CreateCompositePackageCatalogOptionsClsid); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] + private static readonly Type InstallOptionsType = Type.GetTypeFromCLSID(InstallOptionsClsid); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] + private static readonly Type UninstallOptionsType = Type.GetTypeFromCLSID(UninstallOptionsClsid); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] + private static readonly Type PackageMatchFilterType = Type.GetTypeFromCLSID(PackageMatchFilterClsid); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] + private static readonly Type DownloadOptionsType = Type.GetTypeFromCLSID(DownloadOptionsClsid); + + private static readonly Guid PackageManagerIid = Guid.Parse("B375E3B9-F2E0-5C93-87A7-B67497F7E593"); + private static readonly Guid FindPackagesOptionsIid = Guid.Parse("A5270EDD-7DA7-57A3-BACE-F2593553561F"); + private static readonly Guid CreateCompositePackageCatalogOptionsIid = Guid.Parse("21ABAA76-089D-51C5-A745-C85EEFE70116"); + private static readonly Guid InstallOptionsIid = Guid.Parse("6EE9DB69-AB48-5E72-A474-33A924CD23B3"); + private static readonly Guid UninstallOptionsIid = Guid.Parse("3EBC67F0-8339-594B-8A42-F90B69D02BBE"); + private static readonly Guid PackageMatchFilterIid = Guid.Parse("D981ECA3-4DE5-5AD7-967A-698C7D60FC3B"); + private static readonly Guid DownloadOptionsIid = Guid.Parse("B4D72A63-40FF-597D-A7DA-43580268DC96"); + + private static readonly IEnumerable<Architecture> ValidArchs = new Architecture[] { Architecture.X86, Architecture.X64 }; + + private static readonly Lazy<ManagementDeploymentFactory> Lazy = new (() => new ManagementDeploymentFactory()); + + /// <summary> + /// Initializes static members of the <see cref="ManagementDeploymentFactory"/> class. + /// </summary> + static ManagementDeploymentFactory() + { + if (Utilities.UsesInProcWinget) + { + PackageManagerSettings settings = new PackageManagerSettings(); + settings.SetCallerIdentifier("PowerShellInProc"); + } + } + + private ManagementDeploymentFactory() + { + } + + /// <summary> + /// Gets the instance object. + /// </summary> + public static ManagementDeploymentFactory Instance + { + get { return Lazy.Value; } + } + + /// <summary> + /// Creates an instance of the <see cref="PackageManager" /> class. + /// </summary> + /// <returns>A <see cref="PackageManager" /> instance.</returns> + public PackageManager CreatePackageManager() + { + return Create<PackageManager>(PackageManagerType, PackageManagerIid); + } + + /// <summary> + /// Creates an instance of the <see cref="FindPackagesOptions" /> class. + /// </summary> + /// <returns>A <see cref="FindPackagesOptions" /> instance.</returns> + public FindPackagesOptions CreateFindPackagesOptions() + { + return Create<FindPackagesOptions>(FindPackagesOptionsType, FindPackagesOptionsIid); + } + + /// <summary> + /// Creates an instance of the <see cref="CreateCompositePackageCatalogOptions" /> class. + /// </summary> + /// <returns>A <see cref="CreateCompositePackageCatalogOptions" /> instance.</returns> + public CreateCompositePackageCatalogOptions CreateCreateCompositePackageCatalogOptions() + { + return Create<CreateCompositePackageCatalogOptions>(CreateCompositePackageCatalogOptionsType, CreateCompositePackageCatalogOptionsIid); + } + + /// <summary> + /// Creates an instance of the <see cref="InstallOptions" /> class. + /// </summary> + /// <returns>An <see cref="InstallOptions" /> instance.</returns> + public InstallOptions CreateInstallOptions() + { + return Create<InstallOptions>(InstallOptionsType, InstallOptionsIid); + } + + /// <summary> + /// Creates an instance of the <see cref="UninstallOptions" /> class. + /// </summary> + /// <returns>A <see cref="UninstallOptions" /> instance.</returns> + public UninstallOptions CreateUninstallOptions() + { + return Create<UninstallOptions>(UninstallOptionsType, UninstallOptionsIid); + } + + /// <summary> + /// Creates an instance of the <see cref="DownloadOptions" /> class. + /// </summary> + /// <returns>A <see cref="DownloadOptions" /> instance.</returns> + public DownloadOptions CreateDownloadOptions() + { + return Create<DownloadOptions>(DownloadOptionsType, DownloadOptionsIid); + } + + /// <summary> + /// Creates an instance of the <see cref="PackageMatchFilter" /> class. + /// </summary> + /// <returns>A <see cref="PackageMatchFilter" /> instance.</returns> + public PackageMatchFilter CreatePackageMatchFilter() + { + return Create<PackageMatchFilter>(PackageMatchFilterType, PackageMatchFilterIid); + } + + [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "COM only usage.")] + private static T Create<T>(Type type, in Guid iid) + where T : new() + { + if (Utilities.UsesInProcWinget) + { + var arch = RuntimeInformation.ProcessArchitecture; + if (!ValidArchs.Contains(arch)) + { + throw new NotSupportedException(arch.ToString()); + } + + string executingAssemblyLocation = Assembly.GetExecutingAssembly().Location; + string executingAssemblyDirectory = Path.Combine(Path.GetDirectoryName(executingAssemblyLocation), arch.ToString().ToLower()); + + SetDllDirectoryW(executingAssemblyDirectory); + + try + { + return new T(); + } + finally + { + SetDllDirectoryW(null); + } + } + + object instance = null; + + if (Utilities.ExecutingAsAdministrator) + { + int hr = WinGetServerManualActivation_CreateInstance(type.GUID, iid, 0, out instance); + + if (hr < 0) + { + if (hr == ErrorCode.FileNotFound) + { + throw new WinGetIntegrityException(IntegrityCategory.AppInstallerNotInstalled); + } + else + { + throw new COMException($"Failed to create instance: {hr}", hr); + } + } + } + else + { + instance = Activator.CreateInstance(type); + } + +#if NET + IntPtr pointer = Marshal.GetIUnknownForObject(instance); + return MarshalInterface<T>.FromAbi(pointer); +#else + return (T)instance; +#endif + } + + [DllImport("winrtact.dll", EntryPoint = "WinGetServerManualActivation_CreateInstance", ExactSpelling = true, PreserveSig = true)] + private static extern int WinGetServerManualActivation_CreateInstance( + [In, MarshalAs(UnmanagedType.LPStruct)] Guid clsid, + [In, MarshalAs(UnmanagedType.LPStruct)] Guid iid, + uint flags, + [Out, MarshalAs(UnmanagedType.IUnknown)] out object instance); + + [DllImport("kernel32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool SetDllDirectoryW([MarshalAs(UnmanagedType.LPWStr)] string directory); + } +} diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs @@ -0,0 +1,140 @@ +// ----------------------------------------------------------------------------- +// <copyright file="PackageManagerWrapper.cs" company="Microsoft Corporation"> +// Copyright (c) Microsoft Corporation. Licensed under the MIT License. +// </copyright> +// ----------------------------------------------------------------------------- + +namespace Microsoft.WinGet.Client.Engine.Helpers +{ + using System; + using System.Collections.Generic; + using System.Runtime.InteropServices; + using Microsoft.Management.Deployment; + using Microsoft.WinGet.Client.Engine.Common; + using Windows.Foundation; + + /// <summary> + /// Wrapper for PackageManager that handles rpc disconnections. + /// The object is disconnected when the server is killed or on an update. + /// </summary> + internal sealed class PackageManagerWrapper + { + private static readonly Lazy<PackageManagerWrapper> Lazy = new (() => new PackageManagerWrapper()); + + private PackageManager packageManager = null; + + private PackageManagerWrapper() + { + } + + /// <summary> + /// Gets the instance object. + /// </summary> + public static PackageManagerWrapper Instance + { + get { return Lazy.Value; } + } + + /// <summary> + /// Wrapper for InstallPackageAsync. + /// </summary> + /// <param name="package">The package to install.</param> + /// <param name="options">The install options.</param> + /// <returns>An async operation with progress.</returns> + public IAsyncOperationWithProgress<InstallResult, InstallProgress> InstallPackageAsync(CatalogPackage package, InstallOptions options) + { + return this.Execute( + () => this.packageManager.InstallPackageAsync(package, options), + false); + } + + /// <summary> + /// Wrapper for UpgradePackageAsync. + /// </summary> + /// <param name="package">The package to upgrade.</param> + /// <param name="options">The install options.</param> + /// <returns>An async operation with progress.</returns> + public IAsyncOperationWithProgress<InstallResult, InstallProgress> UpgradePackageAsync(CatalogPackage package, InstallOptions options) + { + return this.Execute( + () => this.packageManager.UpgradePackageAsync(package, options), + false); + } + + /// <summary> + /// Wrapper for UninstallPackageAsync. + /// </summary> + /// <param name="package">The package to uninstall.</param> + /// <param name="options">The uninstall options.</param> + /// <returns>An async operation with progress.</returns> + public IAsyncOperationWithProgress<UninstallResult, UninstallProgress> UninstallPackageAsync(CatalogPackage package, UninstallOptions options) + { + return this.Execute( + () => this.packageManager.UninstallPackageAsync(package, options), + false); + } + + /// <summary> + /// Wrapper for GetPackageCatalogs. + /// </summary> + /// <returns>A list of PackageCatalogReferences.</returns> + public IReadOnlyList<PackageCatalogReference> GetPackageCatalogs() + { + return this.Execute( + () => this.packageManager.GetPackageCatalogs(), + true); + } + + /// <summary> + /// Wrapper for GetPackageCatalogByName. + /// </summary> + /// <param name="source">The name of the source.</param> + /// <returns>A PackageCatalogReference.</returns> + public PackageCatalogReference GetPackageCatalogByName(string source) + { + return this.Execute( + () => this.packageManager.GetPackageCatalogByName(source), + true); + } + + /// <summary> + /// Wrapper for CreateCompositePackageCatalog. + /// </summary> + /// <param name="options">CreateCompositePackageCatalogOptions.</param> + /// <returns>A PackageCatalogReference.</returns> + public PackageCatalogReference CreateCompositePackageCatalog(CreateCompositePackageCatalogOptions options) + { + return this.Execute( + () => this.packageManager.CreateCompositePackageCatalog(options), + false); + } + + private TReturn Execute<TReturn>(Func<TReturn> func, bool canRetry) + { + bool stopRetry = false; + while (true) + { + if (this.packageManager == null) + { + this.packageManager = ManagementDeploymentFactory.Instance.CreatePackageManager(); + } + + try + { + return func(); + } + catch (COMException ex) when (ex.HResult == ErrorCode.RpcServerUnavailable || ex.HResult == ErrorCode.RpcCallFailed) + { + this.packageManager = null; + + if (stopRetry || !canRetry) + { + throw; + } + + stopRetry = true; + } + } + } + } +} diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Microsoft.WinGet.Client.Engine.csproj b/src/PowerShell/Microsoft.WinGet.Client.Engine/Microsoft.WinGet.Client.Engine.csproj @@ -15,7 +15,6 @@ <LangVersion>10</LangVersion> <BuildOutputDirectory>$(SolutionDir)$(Platform)\$(Configuration)\</BuildOutputDirectory> <OutputPath>$(BuildOutputDirectory)$(MSBuildProjectName)</OutputPath> - <Platforms>x64;x86;ARM64</Platforms> <TargetFrameworks>$(CoreFramework);$(DesktopFramework)</TargetFrameworks> <DocumentationFile>$(OutputPath)\Microsoft.WinGet.Client.Engine.xml</DocumentationFile> <SupportedOSPlatformVersion>10.0.18362.0</SupportedOSPlatformVersion> @@ -29,6 +28,10 @@ <AdditionalFiles Include="..\..\stylecop.json" Link="stylecop.json" /> </ItemGroup> + <PropertyGroup> + <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch> + </PropertyGroup> + <ItemGroup> <PackageReference Include="Octokit" Version="4.0.3" /> <PackageReference Include="PowerShellStandard.Library" Version="5.1.1" PrivateAssets="all" /> @@ -39,6 +42,8 @@ <PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> <PackageReference Include="Microsoft.CSharp" Version="4.7.0" Condition="'$(TargetFramework)' == '$(DesktopFramework)'" /> + <PackageReference Include="Microsoft.Windows.CsWinRT" Version="1.6.5" Condition="'$(TargetFramework)' == '$(CoreFramework)'"/> + <PackageReference Include="Microsoft.Windows.SDK.Contracts" Version="10.0.22000.196" PrivateAssets="all" Condition="'$(TargetFramework)' == '$(DesktopFramework)'"/> </ItemGroup> <ItemGroup> @@ -76,33 +81,9 @@ </PropertyGroup> <PropertyGroup Condition="'$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifiers>win10-x64;win10-x86;win10-arm;win10-arm64</RuntimeIdentifiers> - </PropertyGroup> - - <PropertyGroup Condition=" '$(Platform)' == 'x64' AND '$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifier>win10-x64</RuntimeIdentifier> - </PropertyGroup> - - <PropertyGroup Condition=" '$(Platform)' == 'x86' AND '$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifier>win10-x86</RuntimeIdentifier> - </PropertyGroup> - - <PropertyGroup Condition=" '$(Platform)' == 'arm' AND '$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifier>win10-arm</RuntimeIdentifier> - </PropertyGroup> - - <PropertyGroup Condition=" '$(Platform)' == 'arm64' AND '$(TargetFramework)' == '$(CoreFramework)'"> - <RuntimeIdentifier>win10-arm64</RuntimeIdentifier> + <RuntimeIdentifier>win10</RuntimeIdentifier> </PropertyGroup> - <ItemGroup Condition="'$(TargetFramework)' == '$(CoreFramework)'"> - <PackageReference Include="Microsoft.Windows.CsWinRT" Version="1.6.5" /> - </ItemGroup> - - <ItemGroup Condition="'$(TargetFramework)' == '$(DesktopFramework)'"> - <PackageReference Include="Microsoft.Windows.SDK.Contracts" Version="10.0.22000.196" PrivateAssets="all" /> - </ItemGroup> - <ItemGroup> <Compile Update="Properties\Resources.Designer.cs"> <DesignTime>True</DesignTime> @@ -144,44 +125,4 @@ <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion> </PropertyGroup> - <!-- Copy unmanaged dlls that are not copied in the build server --> - <Target Name="CopyWinRTAct" AfterTargets="AfterBuild"> - <PropertyGroup> - <WinRTActDir>$(OutputPath)..\..\..\UndockedRegFreeWinRT\</WinRTActDir> - <!-- The output path for this project is different on some builds where the RIDs are not used in the output. --> - <WinRTActDir Condition="!Exists('$(WinRTActDir)winrtact.dll')">$(OutputPath)..\..\UndockedRegFreeWinRT\</WinRTActDir> - </PropertyGroup> - <ItemGroup> - <WinRTActDll Include="$(WinRTActDir)winrtact.dll" /> - </ItemGroup> - <Message Importance="high" Text="Copying '@(WinRTActDll)'" /> - <Copy SourceFiles="@(WinRTActDll)" DestinationFolder="$(OutputPath)" /> - </Target> - - <Target Name="CopyDeploymentInproc" AfterTargets="AfterBuild"> - <PropertyGroup> - <DeploymentInprocDir>$(OutputPath)..\..\..\Microsoft.Management.Deployment.InProc\</DeploymentInprocDir> - <!-- The output path for this project is different on some builds where the RIDs are not used in the output. --> - <DeploymentInprocDir Condition="!Exists('$(DeploymentInprocDir)Microsoft.Management.Deployment.InProc.dll')">$(OutputPath)..\..\Microsoft.Management.Deployment.InProc\</DeploymentInprocDir> - </PropertyGroup> - <ItemGroup> - <DeploymentInprocDll Include="$(DeploymentInprocDir)Microsoft.Management.Deployment.InProc.dll" /> - </ItemGroup> - <Message Importance="high" Text="Copying '@(DeploymentInprocDll)'" /> - <Copy SourceFiles="@(DeploymentInprocDll)" DestinationFolder="$(OutputPath)" /> - </Target> - - <Target Name="CopyWindowsPackageManager" AfterTargets="AfterBuild"> - <PropertyGroup> - <WindowsPackageManagerDir>$(OutputPath)..\..\..\WindowsPackageManager\</WindowsPackageManagerDir> - <!-- The output path for this project is different on some builds where the RIDs are not used in the output. --> - <WindowsPackageManagerDir Condition="!Exists('$(WindowsPackageManagerDir)WindowsPackageManager.dll')">$(OutputPath)..\..\WindowsPackageManager\</WindowsPackageManagerDir> - </PropertyGroup> - <ItemGroup> - <WindowsPackageManagerDll Include="$(WindowsPackageManagerDir)WindowsPackageManager.dll" /> - </ItemGroup> - <Message Importance="high" Text="Copying '@(WindowsPackageManagerDll)'" /> - <Copy SourceFiles="@(WindowsPackageManagerDll)" DestinationFolder="$(OutputPath)" /> - </Target> - </Project> diff --git a/src/PowerShell/Microsoft.WinGet.Client/ModuleFiles/Microsoft.WinGet.Client.psd1 b/src/PowerShell/Microsoft.WinGet.Client/ModuleFiles/Microsoft.WinGet.Client.psd1 @@ -9,27 +9,13 @@ @{ # Script module or binary module file associated with this manifest. -RootModule = if ($env:PROCESSOR_ARCHITECTURE -like 'x86') +RootModule = if ($PSEdition -like 'Core') { - if ($PSEdition -eq 'Core') - { - "runtimes\win10-x86\lib\net6.0-windows10.0.22000.0\Microsoft.WinGet.Client.Cmdlets.dll" - } - else - { - "runtimes\win10-x86\lib\net48\Microsoft.WinGet.Client.Cmdlets.dll" - } + "net6.0-windows10.0.22000.0\Microsoft.WinGet.Client.Cmdlets.dll" } else { - if ($PSEdition -eq 'Core') - { - "runtimes\win10-x64\lib\net6.0-windows10.0.22000.0\Microsoft.WinGet.Client.Cmdlets.dll" - } - else - { - "runtimes\win10-x64\lib\net48\Microsoft.WinGet.Client.Cmdlets.dll" - } + "net48\Microsoft.WinGet.Client.Cmdlets.dll" } # Version number of this module. diff --git a/src/PowerShell/Microsoft.WinGet.Configuration.Cmdlets/Acl/CustomAssemblyLoadContext.cs b/src/PowerShell/Microsoft.WinGet.Configuration.Cmdlets/Acl/CustomAssemblyLoadContext.cs @@ -10,6 +10,7 @@ namespace Microsoft.WinGet.Configuration.Acl using System.IO; using System.Linq; using System.Reflection; + using System.Runtime.InteropServices; using System.Runtime.Loader; /// <summary> @@ -35,7 +36,7 @@ namespace Microsoft.WinGet.Configuration.Acl Path.GetDirectoryName(typeof(CustomAssemblyLoadContext).Assembly.Location), "DirectDependencies"); - private static readonly IEnumerable<string> ValidArchs = new string[] { "x86", "x64", "arm64" }; + private static readonly IEnumerable<Architecture> ValidArchs = new Architecture[] { Architecture.X86, Architecture.X64, Architecture.Arm64 }; private static readonly CustomAssemblyLoadContext WinGetAcl = new (); @@ -44,24 +45,14 @@ namespace Microsoft.WinGet.Configuration.Acl private CustomAssemblyLoadContext() : base("WinGetAssemblyLoadContext", isCollectible: false) { - var arch = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE", EnvironmentVariableTarget.Process); - if (string.IsNullOrEmpty(arch)) - { - throw new ArgumentNullException("PROCESSOR_ARCHITECTURE"); - } - - arch = arch.ToLower(); - if (arch == "amd64") - { - arch = "x64"; - } + var arch = RuntimeInformation.ProcessArchitecture; if (!ValidArchs.Contains(arch)) { - throw new NotSupportedException(arch); + throw new NotSupportedException(arch.ToString()); } - this.sharedArchDependencyPath = Path.Combine(SharedDependencyPath, arch); + this.sharedArchDependencyPath = Path.Combine(SharedDependencyPath, arch.ToString().ToLower()); } /// <summary> diff --git a/src/PowerShell/Microsoft.WinGet.Configuration.Cmdlets/Microsoft.WinGet.Configuration.Cmdlets.csproj b/src/PowerShell/Microsoft.WinGet.Configuration.Cmdlets/Microsoft.WinGet.Configuration.Cmdlets.csproj @@ -94,40 +94,4 @@ <Copy SourceFiles="@(ModuleSharedDependency)" DestinationFolder="$(PowerShellModuleSharedDependencies)" /> </Target> - <!-- Since this is Any CPU we will have to probe for arch specific binaries --> - <!-- This gets defined before the target framework and the rid gets appended to the OutputPath --> - <PropertyGroup> - <Configx64Path>$(OutputPath)..\..\..\x64\$(Configuration)\Microsoft.Management.Configuration\</Configx64Path> - <Configx86Path>$(OutputPath)..\..\..\x86\$(Configuration)\Microsoft.Management.Configuration\</Configx86Path> - <ConfigArm64Path>$(OutputPath)..\..\..\ARM64\$(Configuration)\Microsoft.Management.Configuration\</ConfigArm64Path> - </PropertyGroup> - - <!-- The projection dll is Any CPU, but WinRT.Runtime.dll expects file to be in the same location as the native dll --> - <Target Name="CopyConfigx64" AfterTargets="AfterBuild" Condition="Exists('$(Configx64Path)Microsoft.Management.Configuration.dll')"> - <ItemGroup> - <Configx64File Include="$(OutputPath)\Microsoft.Management.Configuration.Projection.dll" /> - <Configx64File Include="$(Configx64Path)\Microsoft.Management.Configuration.dll" /> - </ItemGroup> - <Message Importance="high" Text="Copying x64 '@(Configx64File)'" /> - <Copy SourceFiles="@(Configx64File)" DestinationFolder="$(PowerShellModuleSharedDependencies)\x64" /> - </Target> - - <Target Name="CopyConfigx86" AfterTargets="AfterBuild" Condition="Exists('$(Configx86Path)Microsoft.Management.Configuration.dll')"> - <ItemGroup> - <Configx86File Include="$(OutputPath)\Microsoft.Management.Configuration.Projection.dll" /> - <Configx86File Include="$(Configx86Path)\Microsoft.Management.Configuration.dll" /> - </ItemGroup> - <Message Importance="high" Text="Copying x86 '@(Configx86File)'" /> - <Copy SourceFiles="@(Configx86File)" DestinationFolder="$(PowerShellModuleSharedDependencies)\x86" /> - </Target> - - <Target Name="CopyConfigArm64" AfterTargets="AfterBuild" Condition="Exists('$(ConfigArm64Path)Microsoft.Management.Configuration.dll')"> - <ItemGroup> - <ConfigArm64File Include="$(OutputPath)\Microsoft.Management.Configuration.Projection.dll" /> - <ConfigArm64File Include="$(ConfigArm64Path)\Microsoft.Management.Configuration.dll" /> - </ItemGroup> - <Message Importance="high" Text="Copying arm64 '@(ConfigArm64File)'" /> - <Copy SourceFiles="@(ConfigArm64File)" DestinationFolder="$(PowerShellModuleSharedDependencies)\arm64" /> - </Target> - </Project> diff --git a/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 b/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 @@ -20,15 +20,14 @@ [CmdletBinding()] param ( [Parameter(Mandatory)] - [ValidateSet("x64", "x86", "AnyCpu")] - [string] - $Platform, - - [Parameter(Mandatory)] [ValidateSet("Debug", "Release", "ReleaseStatic")] [string] $Configuration, + [ValidateSet("Client", "DSC", "Configuration", "All")] + [string] + $ModuleType = "All", + [string] $BuildRoot = "", @@ -40,14 +39,117 @@ class WinGetModule { [string]$Name [string]$ModuleRoot - [bool]$HasBinary + [string]$Output + [string[]]$ArchSpecificFiles = $null - WinGetModule([string]$n, [string]$m, [bool]$b) + WinGetModule([string]$n, [string]$m, [string]$o) { $this.Name = $n $this.ModuleRoot = $m - $this.HasBinary = $b + $this.Output = "$o\$($this.Name)\" + + if (Get-Module -Name $this.Name) + { + Remove-Module $this.Name -Force + } + } + + [void]PrepareScriptFiles() + { + xcopy $this.ModuleRoot $this.Output /d /s /f /y + } + + [void]PrepareBinaryFiles([string] $buildRoot, [string] $config) + { + $copyErrors = $null + Copy-Item "$buildRoot\AnyCpu\$config\PowerShell\$($this.Name)\*" $this.Output -Force -Recurse -ErrorVariable copyErrors -ErrorAction SilentlyContinue + $copyErrors | ForEach-Object { Write-Warning $_ } + } + + # Location is the path relative to the out module directory + [void]AddArchSpecificFiles([string[]] $files, [string]$location, [string] $buildRoot, [string] $config) + { + $x64Path = "$($this.Output)\$location\x64\" + $x86Path = "$($this.Output)\$location\x86\" + if (-not (Test-Path $x64Path)) + { + New-Item $x64Path -ItemType directory + } + + if (-not (Test-Path $x86Path)) + { + New-Item $x86Path -ItemType directory + } + + foreach ($f in $files) + { + $copyErrors = $null + Copy-Item "$buildRoot\x64\$config\$f" "$($this.Output)\$location\x64\" -Force -ErrorVariable copyErrors -ErrorAction SilentlyContinue + $copyErrors | ForEach-Object { Write-Warning $_ } + Copy-Item "$buildRoot\x86\$config\$f" "$($this.Output)\$location\x86\" -Force -ErrorVariable copyErrors -ErrorAction SilentlyContinue + $copyErrors | ForEach-Object { Write-Warning $_ } + } + } + + [void]AddAnyCpuSpecificFilesToArch([string[]] $files, [string]$location, [string] $buildRoot, [string] $config) + { + $x64Path = "$($this.Output)\$location\x64\" + $x86Path = "$($this.Output)\$location\x86\" + if (-not (Test-Path $x64Path)) + { + New-Item $x64Path -ItemType directory + } + + if (-not (Test-Path $x86Path)) + { + New-Item $x86Path -ItemType directory + } + + foreach ($f in $files) + { + $copyErrors = $null + Copy-Item "$buildRoot\AnyCpu\$config\$f" "$($this.Output)\$location\x64\" -Force -ErrorVariable copyErrors -ErrorAction SilentlyContinue + $copyErrors | ForEach-Object { Write-Warning $_ } + Copy-Item "$buildRoot\AnyCpu\$config\$f" "$($this.Output)\$location\x86\" -Force -ErrorVariable copyErrors -ErrorAction SilentlyContinue + $copyErrors | ForEach-Object { Write-Warning $_ } + } + } +} + +[Flags()] enum ModuleType +{ + None = 0 + Client = 1 + DSC = 2 + Configuration = 4 +} + +$local:moduleToConfigure = [ModuleType]::None +switch ($ModuleType) +{ + "Client" + { + $moduleToConfigure = [ModuleType]::Client; + break + } + + "DSC" + { + $moduleToConfigure = [ModuleType]::DSC; + break } + + "Configuration" + { + $moduleToConfigure = [ModuleType]::Configuration; + break + } + + "All" + { + $moduleToConfigure = [ModuleType]::Client + [ModuleType]::DSC + [ModuleType]::Configuration; + break + } } # I know it makes sense, but please don't do a clean up of $moduleRootOutput. When the modules are loaded @@ -60,42 +162,46 @@ if ($BuildRoot -eq "") } # Modules, they should be in dependency order so that when importing we don't pick up the release modules. -[WinGetModule[]]$local:modules = - [WinGetModule]::new( - "Microsoft.WinGet.Client", - "$PSScriptRoot\..\Microsoft.WinGet.Client\ModuleFiles\", - $true), - [WinGetModule]::new( - "Microsoft.WinGet.DSC", - "$PSScriptRoot\..\Microsoft.WinGet.DSC\", - $false), - [WinGetModule]::new( - "Microsoft.WinGet.Configuration", - "$PSScriptRoot\..\Microsoft.WinGet.Configuration\ModuleFiles\", - $true) - -foreach($module in $modules) +$local:modules = @() +if ($moduleToConfigure.HasFlag([ModuleType]::Client)) { - # Import-Module with Force just changes functions in the root module, not any nested ones. There's no way to load any - # updated classes. To ensure that you are running the latest version run Remove-Module - if (Get-Module -Name $module.Name) - { - Write-Host "Removing module $($module.Name)" -ForegroundColor Green - Remove-Module $module.Name -Force - } + Write-Host "Setting up Microsoft.WinGet.Client" + $module = [WinGetModule]::new("Microsoft.WinGet.Client", "$PSScriptRoot\..\Microsoft.WinGet.Client\ModuleFiles\", $moduleRootOutput) + $module.PrepareScriptFiles() + $module.PrepareBinaryFiles($BuildRoot, $Configuration) + $additionalFiles = @( + "Microsoft.Management.Deployment.InProc\Microsoft.Management.Deployment.dll" + "Microsoft.Management.Deployment\Microsoft.Management.Deployment.winmd" + "WindowsPackageManager\WindowsPackageManager.dll" + "UndockedRegFreeWinRT\winrtact.dll" + ) + $module.AddArchSpecificFiles($additionalFiles, "net6.0-windows10.0.22000.0\SharedDependencies", $BuildRoot, $Configuration) + $modules += $module +} - # Use xcopy to copy only files that have changed. - if ($module.HasBinary) - { - # Copy output files from VS. - Write-Host "Copying binary module $($module.Name)" -ForegroundColor Green - xcopy "$BuildRoot\$Platform\$Configuration\PowerShell\$($module.Name)\" "$moduleRootOutput\$($module.Name)\" /d /s /f /y - } +if ($moduleToConfigure.HasFlag([ModuleType]::DSC)) +{ + Write-Host "Setting up Microsoft.WinGet.DSC" + $module = [WinGetModule]::new("Microsoft.WinGet.DSC", "$PSScriptRoot\..\Microsoft.WinGet.DSC\", $moduleRootOutput) + $module.PrepareScriptFiles() + $modules += $module +} - # Copy PowerShell files even for modules with binary resources. - # VS won't update the files if there's nothing to build... - Write-Host "Copying module $($module.Name)" -ForegroundColor Green - xcopy $module.ModuleRoot "$moduleRootOutput\$($module.Name)\" /d /s /f /y +if ($moduleToConfigure.HasFlag([ModuleType]::Configuration)) +{ + Write-Host "Setting up Microsoft.WinGet.Configuration" + $module = [WinGetModule]::new("Microsoft.WinGet.Configuration", "$PSScriptRoot\..\Microsoft.WinGet.Configuration\ModuleFiles\", $moduleRootOutput) + $module.PrepareScriptFiles() + $module.PrepareBinaryFiles($BuildRoot, $Configuration) + $additionalFiles = @( + "Microsoft.Management.Configuration\Microsoft.Management.Configuration.dll" + ) + $module.AddArchSpecificFiles($additionalFiles, "net6.0-windows10.0.22000.0\SharedDependencies", $BuildRoot, $Configuration) + $additionalFiles = @( + "Microsoft.Management.Configuration.Projection\net6.0-windows10.0.19041.0\Microsoft.Management.Configuration.Projection.dll" + ) + $module.AddAnyCpuSpecificFilesToArch($additionalFiles, "net6.0-windows10.0.22000.0\SharedDependencies", $BuildRoot, $Configuration) + $modules += $module } # Add it to module path if not there. diff --git a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 @@ -33,14 +33,17 @@ BeforeAll { } function RemoveTestSource { - try { - Get-WinGetSource -Name 'TestSource' - } - catch { - # Source Remove requires admin privileges, this will only execute successfully in an elevated PowerShell. - # This is a workaround to an issue where the server takes longer than expected to terminate when - # running from PowerShell. This can cause other E2E tests to fail when attempting to reset the test source. - Start-Process -FilePath "wingetdev" -ArgumentList "source remove TestSource" + if ($PSEdition -eq "Core") + { + try { + Get-WinGetSource -Name 'TestSource' + } + catch { + # Source Remove requires admin privileges, this will only execute successfully in an elevated PowerShell. + # This is a workaround to an issue where the server takes longer than expected to terminate when + # running from PowerShell. This can cause other E2E tests to fail when attempting to reset the test source. + Start-Process -FilePath "wingetdev" -ArgumentList "source remove TestSource" + } } } @@ -73,6 +76,31 @@ BeforeAll { Remove-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name * } } + + function WaitForWindowsPackageManagerServer([bool]$force = $false) + { + $processes = Get-Process | Where-Object { $_.Name -eq "WindowsPackageManagerServer" } + foreach ($p in $processes) + { + if ($force) + { + Stop-Process $p + } + + $timeout = 300 + $secondsToWait = 5 + $time = 0 + while ($p.HasExited -eq $false) + { + $time += $secondsToWait + if ($time -ge $timeout ) + { + throw "Timeout waiting for $($p.Id) to exit" + } + Start-Sleep -Seconds 5 + } + } + } } Describe 'Get-WinGetVersion' { @@ -83,7 +111,7 @@ Describe 'Get-WinGetVersion' { } } -Describe 'Get|Add|Reset-WinGetSource' { +Describe 'Get|Add|Reset-WinGetSource' -Skip:($PSEdition -eq "Desktop") { BeforeAll { AddTestSource @@ -108,7 +136,7 @@ Describe 'Get|Add|Reset-WinGetSource' { } } -Describe 'Find-WinGetPackage' { +Describe 'Find-WinGetPackage' -Skip:($PSEdition -eq "Desktop") { BeforeAll { AddTestSource @@ -161,7 +189,7 @@ Describe 'Find-WinGetPackage' { } } -Describe 'Install|Update|Uninstall-WinGetPackage' { +Describe 'Install|Update|Uninstall-WinGetPackage' -Skip:($PSEdition -eq "Desktop") { BeforeAll { AddTestSource @@ -237,7 +265,7 @@ Describe 'Install|Update|Uninstall-WinGetPackage' { } } -Describe 'Get-WinGetPackage' { +Describe 'Get-WinGetPackage' -Skip:($PSEdition -eq "Desktop") { BeforeAll { AddTestSource @@ -521,7 +549,7 @@ Describe 'Test-GroupPolicies' { CreatePolicyKeyIfNotExists } - It "Disable WinGetPolicy and run Get-WinGetSources" { + It "Disable WinGetPolicy and run Get-WinGetVersion" { $policyKeyValueName = "EnableAppInstaller" Set-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName -Value 0 @@ -529,12 +557,12 @@ Describe 'Test-GroupPolicies' { $registryKey | Should -Not -BeNullOrEmpty $registryKey.EnableAppInstaller | Should -Be 0 - { Get-WinGetSource } | Should -Throw "This operation is disabled by Group Policy : Enable Windows Package Manager" + { Get-WinGetVersion } | Should -Throw "This operation is disabled by Group Policy : Enable Windows Package Manager" CleanupGroupPolicies } - It "Disable EnableWindowsPackageManagerCommandLineInterfaces Policy and run Get-WinGetSources" { + It "Disable EnableWindowsPackageManagerCommandLineInterfaces Policy and run Get-WinGetVersion" { $policyKeyValueName = "EnableWindowsPackageManagerCommandLineInterfaces" Set-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName -Value 0 @@ -542,7 +570,7 @@ Describe 'Test-GroupPolicies' { $registryKey | Should -Not -BeNullOrEmpty $registryKey.EnableWindowsPackageManagerCommandLineInterfaces | Should -Be 0 - { Get-WinGetSource } | Should -Throw "This operation is disabled by Group Policy : Enable Windows Package Manager command line interfaces" + { Get-WinGetVersion } | Should -Throw "This operation is disabled by Group Policy : Enable Windows Package Manager command line interfaces" CleanupGroupPolicies } @@ -553,6 +581,84 @@ Describe 'Test-GroupPolicies' { } } +Describe 'WindowsPackageManagerServer' -Skip:($PSEdition -eq "Desktop") { + + BeforeEach { + AddTestSource + WaitForWindowsPackageManagerServer $true + } + + # When WindowsPackageManagerServer dies, we should not fail. + It 'Forced termination' { + $source = Get-WinGetSource -Name 'TestSource' + $source | Should -Not -BeNullOrEmpty + $source.Name | Should -Be 'TestSource' + + $process = Get-Process -Name "WindowsPackageManagerServer" + $process | Should -Not -BeNullOrEmpty + + # At least one is running. + $process | Where-Object { $_.HasExited -eq $false } | Should -Not -BeNullOrEmpty + + WaitForWindowsPackageManagerServer $true + + # From the ones we got, at least one exited + $process | Where-Object { $_.HasExited -eq $true } | Should -Not -BeNullOrEmpty + + $source2 = Get-WinGetSource -Name 'TestSource' + $source2 | Should -Not -BeNullOrEmpty + $source2.Name | Should -Be 'TestSource' + + $process2 = Get-Process -Name "WindowsPackageManagerServer" + $process2 | Should -Not -BeNullOrEmpty + $process2.Id | Should -Not -Be $process.Id + } + + # The Microsoft.WinGet.Client has static proxy objects of WindowsPackageManagerServer + # This tests does all the Microsoft.WinGet.Client calls in a different pwsh instance. + It 'Graceful termination' { + $typeTable = [System.Management.Automation.Runspaces.TypeTable]::LoadDefaultTypeFiles() + $oopRunspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateOutOfProcessRunspace($typeTable) + $oopRunspace.Open() + $oopPwsh = [PowerShell]::Create() + $oopPwsh.Runspace = $oopRunspace + $oopPwshPid = $oopPwsh.AddScript("`$PID").Invoke() + $oopPwshProcess = Get-Process -Id $oopPwshPid + $oopPwshProcess.HasExited | Should -Be $false + + $source = $oopPwsh.AddScript("Get-WinGetSource -Name TestSource").Invoke() + $source | Should -Not -BeNullOrEmpty + $source.Name | Should -Be 'TestSource' + + $wingetProcess = Get-Process -Name "WindowsPackageManagerServer" + $wingetProcess | Should -Not -BeNullOrEmpty + + # At least one is running. + $wingetProcess | Where-Object { $_.HasExited -eq $false } | Should -Not -BeNullOrEmpty + + $oopRunspace.Close() + + Start-Sleep -Seconds 30 + $oopPwshProcess.HasExited | Should -Be $true + + # From the ones we got, at least one exited + WaitForWindowsPackageManagerServer + $wingetProcess | Where-Object { $_.HasExited -eq $true } | Should -Not -BeNullOrEmpty + } +} + +Describe 'WindowsPowerShell not supported' -Skip:($PSEdition -eq "Core") { + + It 'Throw not supported' { + { Find-WinGetPackage -Id "Fake.Id" } | Should -Throw "This cmdlet is not supported in Windows PowerShell." + { Get-WinGetPackage -Id "Fake.Id" } | Should -Throw "This cmdlet is not supported in Windows PowerShell." + { Install-WinGetPackage -Id "Fake.Id" } | Should -Throw "This cmdlet is not supported in Windows PowerShell." + { Uninstall-WinGetPackage -Id "Fake.Id" } | Should -Throw "This cmdlet is not supported in Windows PowerShell." + { Update-WinGetPackage -Id "Fake.Id" } | Should -Throw "This cmdlet is not supported in Windows PowerShell." + { Get-WinGetSource } | Should -Throw "This cmdlet is not supported in Windows PowerShell." + } +} + AfterAll { RemoveTestSource } \ No newline at end of file diff --git a/src/PowerShell/tests/RunTests.ps1 b/src/PowerShell/tests/RunTests.ps1 @@ -42,4 +42,9 @@ if (-not [System.String]::IsNullOrEmpty($packageLayoutPath)) } Invoke-Pester -Script $PSScriptRoot\Microsoft.WinGet.Client.Tests.ps1 -OutputFile $outputPath\Tests-WinGetClient.XML -OutputFormat NUnitXML -Invoke-Pester -Script $PSScriptRoot\Microsoft.WinGet.Configuration.Tests.ps1 -OutputFile $outputPath\Tests-WinGetConfiguration.XML -OutputFormat NUnitXML + +if ($PSEdition -eq "Core") +{ + Invoke-Pester -Script $PSScriptRoot\Microsoft.WinGet.Configuration.Tests.ps1 -OutputFile $outputPath\Tests-WinGetConfiguration.XML -OutputFormat NUnitXML +} +