From 728b72666cd49d9c33f603548fb28ca20c337054 Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Wed, 13 Sep 2023 17:53:49 -0700 Subject: [PATCH 01/13] Change to any cpu --- azure-pipelines.yml | 11 +- src/AppInstallerCLI.sln | 356 ++++-------------- .../Helpers/TestCommon.cs | 18 +- .../Helpers/TestSetup.cs | 6 - .../PowerShell/PowerShellHost.cs | 11 +- .../PowerShell/WinGetClientModule.cs | 102 ----- ...osoft.Management.Deployment.InProc.vcxproj | 4 + .../Acl/WinGetAssemblyLoadContext.cs | 30 +- .../Microsoft.WinGet.Client.Cmdlets.csproj | 76 +--- .../Commands/Common/ClientCommand.cs | 18 +- .../Commands/Common/FinderCommand.cs | 11 +- .../Commands/Common/InstallCommand.cs | 2 +- .../Commands/Common/PackageCommand.cs | 3 +- .../Commands/FinderPackageCommand.cs | 4 - .../Commands/InstallerPackageCommand.cs | 8 +- .../Commands/SourceCommand.cs | 4 - .../Commands/UninstallPackageCommand.cs | 8 +- ...tory.cs => ManagementDeploymentFactory.cs} | 61 ++- .../Microsoft.WinGet.Client.Engine.csproj | 69 +--- .../ModuleFiles/Microsoft.WinGet.Client.psd1 | 20 +- 20 files changed, 206 insertions(+), 616 deletions(-) delete mode 100644 src/AppInstallerCLIE2ETests/PowerShell/WinGetClientModule.cs rename src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/{ComObjectFactory.cs => ManagementDeploymentFactory.cs} (81%) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5b92e4a54f..9d0ec15e58 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -344,11 +344,14 @@ 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.Configuration.Projection\Microsoft.Management.Configuration.Projection.dll + TargetFolder: $(Build.ArtifactStagingDirectory)\WinGetPowerShell\Microsoft.WinGet.Configuration\SharedDependencies\$(BuildPlatform) + flattenFolders: true - task: CopyFiles@2 displayName: 'Copy PowerShell AnyCPU Module Files' diff --git a/src/AppInstallerCLI.sln b/src/AppInstallerCLI.sln index 924fc183e5..1a56965d99 100644 --- 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,7 +764,6 @@ 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 @@ -876,7 +771,6 @@ Global {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 +778,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 +785,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,7 +796,6 @@ 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 @@ -913,7 +803,6 @@ Global {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 +810,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 +817,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 +824,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 +831,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 +838,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 +851,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 +858,62 @@ 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|ARM64.Build.0 = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x64.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x64.Build.0 = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x86.ActiveCfg = Release|Any CPU + {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x86.Build.0 = 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 +921,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 +938,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 +949,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 +956,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 +969,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 +980,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 +987,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 +1000,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 +1011,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 +1018,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 +1025,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 +1032,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 +1039,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 +1046,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 +1053,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 +1060,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 +1067,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 +1074,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 +1081,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 +1088,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 +1095,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 +1102,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 +1109,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 +1116,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 +1123,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 +1130,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 +1137,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 +1144,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,7 +1155,6 @@ 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 @@ -1327,7 +1162,6 @@ Global {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 +1169,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 +1176,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 +1183,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 +1190,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 +1197,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 +1204,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 +1211,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 +1222,47 @@ 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|ARM64.Build.0 = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x64.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x64.Build.0 = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x86.ActiveCfg = Release|Any CPU + {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x86.Build.0 = 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 +1270,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 +1277,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,7 +1290,6 @@ 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 @@ -1482,7 +1297,6 @@ Global {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 +1304,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 +1311,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,7 +1324,6 @@ 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 @@ -1521,7 +1331,6 @@ Global {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 +1338,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 +1345,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 +1352,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 +1359,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 +1366,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 +1373,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 +1388,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 +1399,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 +1410,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 +1417,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 index 8746cae1af..d07e099127 100644 --- a/src/AppInstallerCLIE2ETests/Helpers/TestCommon.cs +++ b/src/AppInstallerCLIE2ETests/Helpers/TestCommon.cs @@ -316,18 +316,6 @@ public static RunCommandResult RunCommandWithResult(string fileName, string args return result; } - /// - /// Run PowerShell Core command with result. - /// - /// Cmdlet to run. - /// Args. - /// Optional timeout. - /// Command result. - public static RunCommandResult RunPowerShellCoreCommandWithResult(string cmdlet, string args, int timeOut = 60000) - { - return RunCommandWithResult("pwsh.exe", $"-Command ipmo {TestSetup.Parameters.PowerShellModuleManifestPath}; {cmdlet} {args}", timeOut); - } - /// /// Get test file path. /// @@ -857,7 +845,7 @@ public static void EnsureModuleState(string moduleName, bool present, string rep ICollection 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(); @@ -897,7 +885,7 @@ public static void EnsureModuleState(string moduleName, bool present, string rep 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"); @@ -922,7 +910,7 @@ public static void EnsureModuleState(string moduleName, bool present, string rep 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 index b8a2f3bc31..01fa8b8cd3 100644 --- a/src/AppInstallerCLIE2ETests/Helpers/TestSetup.cs +++ b/src/AppInstallerCLIE2ETests/Helpers/TestSetup.cs @@ -44,7 +44,6 @@ private TestSetup() 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); @@ -128,11 +127,6 @@ public static TestSetup Parameters /// public string PackageCertificatePath { get; } - /// - /// Gets the PowerShell module path. - /// - public string PowerShellModuleManifestPath { get; } - /// /// Gets a value indicating whether to skip creating test source. /// diff --git a/src/AppInstallerCLIE2ETests/PowerShell/PowerShellHost.cs b/src/AppInstallerCLIE2ETests/PowerShell/PowerShellHost.cs index 4684a0cc4d..91db986fb4 100644 --- a/src/AppInstallerCLIE2ETests/PowerShell/PowerShellHost.cs +++ b/src/AppInstallerCLIE2ETests/PowerShell/PowerShellHost.cs @@ -26,20 +26,11 @@ internal class PowerShellHost : IDisposable /// /// Initializes a new instance of the class. /// - /// If to import modules. - 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 deleted file mode 100644 index 44810db550..0000000000 --- a/src/AppInstallerCLIE2ETests/PowerShell/WinGetClientModule.cs +++ /dev/null @@ -1,102 +0,0 @@ -// ----------------------------------------------------------------------------- -// -// Copyright (c) Microsoft Corporation. Licensed under the MIT License. -// -// ----------------------------------------------------------------------------- - -namespace AppInstallerCLIE2ETests.PowerShell -{ - using System; - using System.Diagnostics; - using System.Linq; - using AppInstallerCLIE2ETests.Helpers; - using NUnit.Framework; - - /// - /// 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. - /// - [Category("PowerShell")] - public class WinGetClientModule - { - /// - /// Set setup. - /// - [OneTimeSetUp] - public void Setup() - { - TestCommon.RunAICLICommand("source add", $"-n {Constants.TestSourceName} {Constants.TestSourceUrl}"); - } - - /// - /// Tear down. - /// - [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(); - } - - /// - /// Assert server shutdown. - /// - [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."); - } - - /// - /// 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. - /// - [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 index 8a0fead12a..e64a31daa3 100644 --- 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 @@ + + + + \ 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 index 420ecbbf27..300f275a3f 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Acl/WinGetAssemblyLoadContext.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Acl/WinGetAssemblyLoadContext.cs @@ -36,11 +36,33 @@ internal class WinGetAssemblyLoadContext : AssemblyLoadContext Path.GetDirectoryName(typeof(WinGetAssemblyLoadContext).Assembly.Location), "DirectDependencies"); + private static readonly IEnumerable ValidArchs = new string[] { "x86", "x64" }; + private static readonly WinGetAssemblyLoadContext WinGetAcl = new (); + private readonly string sharedArchDependencyPath; + private WinGetAssemblyLoadContext() : 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"; + } + + if (!ValidArchs.Contains(arch)) + { + throw new NotSupportedException(arch); + } + + this.sharedArchDependencyPath = Path.Combine(SharedDependencyPath, arch); } /// @@ -85,6 +107,12 @@ protected override Assembly Load(AssemblyName assemblyName) 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 +125,7 @@ protected override Assembly Load(AssemblyName assemblyName) /// 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/Microsoft.WinGet.Client.Cmdlets.csproj b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Microsoft.WinGet.Client.Cmdlets.csproj index 7977a3d3c0..0c8e6a09bb 100644 --- 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 @@ 10 $(SolutionDir)$(Platform)\$(Configuration)\ $(BuildOutputDirectory)$(MSBuildProjectName) - x64;x86;ARM64 $(CoreFramework);$(DesktopFramework) $(OutputPath)\Microsoft.WinGet.Client.Cmdlets.xml @@ -44,7 +43,7 @@ - win10-x64;win10-x86;win10-arm;win10-arm64 + win10 @@ -56,26 +55,15 @@ - - win10-x64 - - - - win10-x86 - - - - win10-arm - - - - win10-arm64 + + + None $(BuildOutputDirectory)PowerShell\Microsoft.WinGet.Client - $(PowerShellModuleOutputDirectory)\runtimes\win10-$(Platform)\lib\$(TargetFramework) + $(PowerShellModuleOutputDirectory)\$(TargetFramework) @@ -88,7 +76,7 @@ $(PowerShellModuleRuntimesDir) - + @@ -101,7 +89,7 @@ - + @@ -111,52 +99,24 @@ - + - - - - - - - - - - - - - - - - $(OutputPath)..\..\..\Microsoft.WinGet.Client.Engine\$(TargetFramework)\win10-$(Platform)\ - - $(OutputPath)..\..\..\Microsoft.WinGet.Client.Engine\$(TargetFramework)\ - $(OutputPath)..\..\Microsoft.WinGet.Client.Engine\$(TargetFramework)\ - - - - - - - - - - - - - - + + - - Microsoft.Management.Deployment.dll - + + + + + + - - + + diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs index d95d5873ee..2061f24928 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs @@ -13,6 +13,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common using Microsoft.Management.Deployment; using Microsoft.WinGet.Client.Engine.Exceptions; using Microsoft.WinGet.Client.Engine.Helpers; + using Microsoft.WinGet.Client.Engine.Properties; /// /// This is the base class for all of the commands in this module that use the COM APIs. @@ -31,18 +32,11 @@ static ClientCommand() internal ClientCommand(PSCmdlet psCmdlet) : base(psCmdlet) { +#if POWERSHELL_WINDOWS + throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); +#endif } - /// - /// Gets the instance of the class. - /// - protected static Lazy ComObjectFactory { get; } = new (); - - /// - /// Gets the instance of the class. - /// - protected static Lazy PackageManager { get; } = new (() => ComObjectFactory.Value.CreatePackageManager()); - /// /// Retrieves the specified source or all sources if is null. /// @@ -53,13 +47,13 @@ protected static IReadOnlyList GetPackageCatalogReferen { if (string.IsNullOrEmpty(source)) { - return PackageManager.Value.GetPackageCatalogs(); + return ManagementDeploymentFactory.Instance.GetPackageManager().GetPackageCatalogs(); } else { return new List() { - PackageManager.Value.GetPackageCatalogByName(source) + ManagementDeploymentFactory.Instance.GetPackageManager().GetPackageCatalogByName(source) ?? throw new InvalidSourceException(source), }; } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs index a739d1526e..aed5e93814 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs @@ -14,6 +14,7 @@ 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; /// /// This is the base class for all commands that might need to search for a package. It contains an initial @@ -99,7 +100,7 @@ protected virtual void SetQueryInFindPackagesOptions( PackageFieldMatchOption 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; @@ -114,7 +115,7 @@ private static void AddFilterToFindPackagesOptionsIfNotNull( { if (value != null) { - var filter = ComObjectFactory.Value.CreatePackageMatchFilter(); + var filter = ManagementDeploymentFactory.Instance.CreatePackageMatchFilter(); filter.Field = field; filter.Value = value; filter.Option = match; @@ -153,7 +154,7 @@ private PackageCatalog GetPackageCatalog(CompositeSearchBehavior behavior) private PackageCatalogReference GetPackageCatalogReference(CompositeSearchBehavior behavior) { - CreateCompositePackageCatalogOptions options = ComObjectFactory.Value.CreateCreateCompositePackageCatalogOptions(); + CreateCompositePackageCatalogOptions options = ManagementDeploymentFactory.Instance.CreateCreateCompositePackageCatalogOptions(); IReadOnlyList references = GetPackageCatalogReferences(this.Source); for (var i = 0; i < references.Count; i++) { @@ -161,12 +162,12 @@ private PackageCatalogReference GetPackageCatalogReference(CompositeSearchBehavi } options.CompositeSearchBehavior = behavior; - return PackageManager.Value.CreateCompositePackageCatalog(options); + return ManagementDeploymentFactory.Instance.GetPackageManager().CreateCompositePackageCatalog(options); } private FindPackagesOptions GetFindPackagesOptions(uint limit) { - var options = ComObjectFactory.Value.CreateFindPackagesOptions(); + var options = ManagementDeploymentFactory.Instance.CreateFindPackagesOptions(); this.SetQueryInFindPackagesOptions(ref options, this.MatchOption, this.QueryAsJoinedString); this.AddAttributedFiltersToFindPackagesOptions(ref options, this.MatchOption); options.ResultLimit = limit; diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs index c844004b0b..fc1f4ea79d 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs @@ -68,7 +68,7 @@ internal InstallCommand(PSCmdlet psCmdlet) /// An instance. protected virtual InstallOptions GetInstallOptions(PackageVersionId version) { - InstallOptions options = ComObjectFactory.Value.CreateInstallOptions(); + InstallOptions options = ManagementDeploymentFactory.Instance.CreateInstallOptions(); options.AllowHashMismatch = this.AllowHashMismatch; options.Force = this.Force; options.PackageInstallMode = this.Mode; diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs index e6b384ac83..ef7be8d58d 100644 --- 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,7 @@ 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; /// /// This is the base class for commands which operate on a specific package and version i.e., @@ -76,7 +77,7 @@ protected override void SetQueryInFindPackagesOptions( { 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; diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/FinderPackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/FinderPackageCommand.cs index 0fdf9f66b1..67c8fbc624 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/FinderPackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/FinderPackageCommand.cs @@ -46,9 +46,6 @@ public FinderPackageCommand( uint count) : base(psCmdlet) { -#if POWERSHELL_WINDOWS - throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); -#else // FinderCommand this.Id = id; this.Name = name; @@ -61,7 +58,6 @@ public FinderPackageCommand( this.Tag = tag; this.Command = command; this.Count = count; -#endif } /// diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs index ad28aa43dc..6d0823eeec 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs @@ -59,9 +59,6 @@ public InstallerPackageCommand( string matchOption) : base(psCmdlet) { -#if POWERSHELL_WINDOWS - throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); -#else // InstallCommand. this.Mode = PSEnumHelpers.ToPackageInstallMode(psInstallMode); this.Override = @override; @@ -87,7 +84,6 @@ public InstallerPackageCommand( this.Source = source; this.Query = query; this.MatchOption = PSEnumHelpers.ToPackageFieldMatchOption(matchOption); -#endif } /// @@ -135,7 +131,7 @@ private InstallResult InstallPackage( CatalogPackage package, InstallOptions options) { - var operation = PackageManager.Value.InstallPackageAsync(package, options); + var operation = ManagementDeploymentFactory.Instance.GetPackageManager().InstallPackageAsync(package, options); return this.RegisterCallbacksAndWait(operation, string.Format( Resources.ProgressRecordActivityInstalling, package.Name)); @@ -145,7 +141,7 @@ private InstallResult UpgradePackage( CatalogPackage package, InstallOptions options) { - var operation = PackageManager.Value.UpgradePackageAsync(package, options); + var operation = ManagementDeploymentFactory.Instance.GetPackageManager().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 index 622d387ac7..3570002e95 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/SourceCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/SourceCommand.cs @@ -9,7 +9,6 @@ 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; /// @@ -25,9 +24,6 @@ public sealed class SourceCommand : ClientCommand public SourceCommand(PSCmdlet psCmdlet) : base(psCmdlet) { -#if POWERSHELL_WINDOWS - throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); -#endif } /// diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs index 44ebd3a6be..f15c317027 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs @@ -45,9 +45,6 @@ public UninstallPackageCommand( string matchOption) : base(psCmdlet) { -#if POWERSHELL_WINDOWS - throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); -#else // PackageCommand. if (psCatalogPackage != null) { @@ -64,7 +61,6 @@ public UninstallPackageCommand( this.Source = source; this.Query = query; this.MatchOption = PSEnumHelpers.ToPackageFieldMatchOption(matchOption); -#endif } /// @@ -89,7 +85,7 @@ private UninstallOptions GetUninstallOptions( PackageUninstallMode packageUninstallMode, bool force) { - var options = ComObjectFactory.Value.CreateUninstallOptions(); + var options = ManagementDeploymentFactory.Instance.CreateUninstallOptions(); options.Force = force; if (this.Log != null) { @@ -114,7 +110,7 @@ private UninstallResult UninstallPackage( Resources.ProgressRecordActivityUninstalling, package.Name); - var operation = PackageManager.Value.UninstallPackageAsync(package, options); + var operation = ManagementDeploymentFactory.Instance.GetPackageManager().UninstallPackageAsync(package, options); WriteProgressAdapter adapter = new (this.PsCmdlet); operation.Progress = (context, progress) => { diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ComObjectFactory.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs similarity index 81% rename from src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ComObjectFactory.cs rename to src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs index c1547db46e..998c6ebf88 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ComObjectFactory.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs @@ -1,5 +1,5 @@ // ----------------------------------------------------------------------------- -// +// // Copyright (c) Microsoft Corporation. Licensed under the MIT License. // // ----------------------------------------------------------------------------- @@ -8,6 +8,7 @@ namespace Microsoft.WinGet.Client.Engine.Helpers { using System; using System.IO; + using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using Microsoft.Management.Deployment; @@ -21,7 +22,7 @@ namespace Microsoft.WinGet.Client.Engine.Helpers /// /// Constructs instances of classes from the namespace. /// - public class ComObjectFactory + internal sealed class ManagementDeploymentFactory { #if USE_PROD_CLSIDS private static readonly Guid PackageManagerClsid = Guid.Parse("C53A4F16-787E-42A4-B304-29EFFB4BF597"); @@ -63,10 +64,13 @@ public class ComObjectFactory 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 Lazy Lazy = new (); + private PackageManager packageManager = null; + /// - /// Initializes static members of the class. + /// Initializes static members of the class. /// - static ComObjectFactory() + static ManagementDeploymentFactory() { if (Utilities.UsesInProcWinget) { @@ -75,12 +79,26 @@ static ComObjectFactory() } } + /// + /// Gets the instance object. + /// + public static ManagementDeploymentFactory Instance + { + get { return Lazy.Value; } + } + /// /// Creates an instance of the class. /// /// A instance. - public virtual PackageManager CreatePackageManager() + public PackageManager GetPackageManager() { + // TODO: add try catch. + if (this.packageManager != null) + { + return this.packageManager; + } + return Create(PackageManagerType, PackageManagerIid); } @@ -88,7 +106,7 @@ public virtual PackageManager CreatePackageManager() /// Creates an instance of the class. /// /// A instance. - public virtual FindPackagesOptions CreateFindPackagesOptions() + public FindPackagesOptions CreateFindPackagesOptions() { return Create(FindPackagesOptionsType, FindPackagesOptionsIid); } @@ -97,7 +115,7 @@ public virtual FindPackagesOptions CreateFindPackagesOptions() /// Creates an instance of the class. /// /// A instance. - public virtual CreateCompositePackageCatalogOptions CreateCreateCompositePackageCatalogOptions() + public CreateCompositePackageCatalogOptions CreateCreateCompositePackageCatalogOptions() { return Create(CreateCompositePackageCatalogOptionsType, CreateCompositePackageCatalogOptionsIid); } @@ -106,7 +124,7 @@ public virtual CreateCompositePackageCatalogOptions CreateCreateCompositePackage /// Creates an instance of the class. /// /// An instance. - public virtual InstallOptions CreateInstallOptions() + public InstallOptions CreateInstallOptions() { return Create(InstallOptionsType, InstallOptionsIid); } @@ -115,7 +133,7 @@ public virtual InstallOptions CreateInstallOptions() /// Creates an instance of the class. /// /// A instance. - public virtual UninstallOptions CreateUninstallOptions() + public UninstallOptions CreateUninstallOptions() { return Create(UninstallOptionsType, UninstallOptionsIid); } @@ -124,7 +142,7 @@ public virtual UninstallOptions CreateUninstallOptions() /// Creates an instance of the class. /// /// A instance. - public virtual DownloadOptions CreateDownloadOptions() + public DownloadOptions CreateDownloadOptions() { return Create(DownloadOptionsType, DownloadOptionsIid); } @@ -133,7 +151,7 @@ public virtual DownloadOptions CreateDownloadOptions() /// Creates an instance of the class. /// /// A instance. - public virtual PackageMatchFilter CreatePackageMatchFilter() + public PackageMatchFilter CreatePackageMatchFilter() { return Create(PackageMatchFilterType, PackageMatchFilterIid); } @@ -144,8 +162,27 @@ private static T Create(Type type, in Guid iid) { if (Utilities.UsesInProcWinget) { + var validArchs = new string[] { "x86", "x64" }; + 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"; + } + + if (!validArchs.Contains(arch)) + { + throw new NotSupportedException(arch); + } + string executingAssemblyLocation = Assembly.GetExecutingAssembly().Location; - string executingAssemblyDirectory = Path.GetDirectoryName(executingAssemblyLocation); + string executingAssemblyDirectory = Path.Combine(Path.GetDirectoryName(executingAssemblyLocation), arch); + SetDllDirectoryW(executingAssemblyDirectory); try 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 index 7a69302c6d..1e3ef3f41c 100644 --- 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 @@ 10 $(SolutionDir)$(Platform)\$(Configuration)\ $(BuildOutputDirectory)$(MSBuildProjectName) - x64;x86;ARM64 $(CoreFramework);$(DesktopFramework) $(OutputPath)\Microsoft.WinGet.Client.Engine.xml 10.0.18362.0 @@ -39,6 +38,8 @@ + + @@ -76,33 +77,9 @@ - win10-x64;win10-x86;win10-arm;win10-arm64 + win10 - - win10-x64 - - - - win10-x86 - - - - win10-arm - - - - win10-arm64 - - - - - - - - - - True @@ -144,44 +121,4 @@ 10.0.17763.0 - - - - $(OutputPath)..\..\..\UndockedRegFreeWinRT\ - - $(OutputPath)..\..\UndockedRegFreeWinRT\ - - - - - - - - - - - $(OutputPath)..\..\..\Microsoft.Management.Deployment.InProc\ - - $(OutputPath)..\..\Microsoft.Management.Deployment.InProc\ - - - - - - - - - - - $(OutputPath)..\..\..\WindowsPackageManager\ - - $(OutputPath)..\..\WindowsPackageManager\ - - - - - - - - diff --git a/src/PowerShell/Microsoft.WinGet.Client/ModuleFiles/Microsoft.WinGet.Client.psd1 b/src/PowerShell/Microsoft.WinGet.Client/ModuleFiles/Microsoft.WinGet.Client.psd1 index eb7400753f..23cee53225 100644 --- 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. From b5a4900b46879f9e08ad98fe680cd6b6b6ca2e0b Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Thu, 14 Sep 2023 11:39:49 -0700 Subject: [PATCH 02/13] more cleanup --- azure-pipelines.yml | 6 +++-- src/AppInstallerCLI.sln | 24 ------------------- .../Microsoft.WinGet.Client.Engine.csproj | 4 ++++ 3 files changed, 8 insertions(+), 26 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9d0ec15e58..d0191326d9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -349,8 +349,10 @@ jobs: SourceFolder: $(buildOutDir) Contents: | Microsoft.Management.Deployment.InProc\Microsoft.Management.Deployment.dll - Microsoft.Management.Configuration.Projection\Microsoft.Management.Configuration.Projection.dll - TargetFolder: $(Build.ArtifactStagingDirectory)\WinGetPowerShell\Microsoft.WinGet.Configuration\SharedDependencies\$(BuildPlatform) + 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 diff --git a/src/AppInstallerCLI.sln b/src/AppInstallerCLI.sln index 1a56965d99..138174f68e 100644 --- a/src/AppInstallerCLI.sln +++ b/src/AppInstallerCLI.sln @@ -765,11 +765,8 @@ Global {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|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|ARM64.ActiveCfg = Debug|Any CPU {68808357-902B-406C-8C19-E8E26A69DE8A}.Debug|ARM64.Build.0 = Debug|Any CPU @@ -797,11 +794,8 @@ Global {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|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|ARM64.ActiveCfg = Debug|ARM64 {2046B5AF-666D-4CE8-8D3E-C32C57908A56}.Debug|ARM64.Build.0 = Debug|ARM64 @@ -865,11 +859,8 @@ Global {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|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|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 @@ -898,11 +889,8 @@ Global {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|ARM64.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x64.ActiveCfg = Release|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x64.Build.0 = Release|Any CPU {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x86.ActiveCfg = Release|Any CPU - {463C0EF3-DF38-4C3D-8E7E-D4901E0CDC6C}.TestRelease|x86.Build.0 = Release|Any CPU {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|Any CPU.ActiveCfg = Debug|x64 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|ARM64.ActiveCfg = Debug|x86 {0B104762-5CD8-47EE-A904-71C1C3F84DCD}.Debug|x64.ActiveCfg = Debug|x64 @@ -1156,11 +1144,8 @@ Global {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|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|ARM64.ActiveCfg = Debug|Any CPU {71FA29AA-9035-468B-A11D-0F0B0F5D5AF4}.Debug|ARM64.Build.0 = Debug|Any CPU @@ -1257,11 +1242,8 @@ Global {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|ARM64.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x64.ActiveCfg = Release|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x64.Build.0 = Release|Any CPU {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x86.ActiveCfg = Release|Any CPU - {1F56BECB-D65D-4BBA-8788-6671B251392A}.TestRelease|x86.Build.0 = Release|Any CPU {167F634B-A3AD-494E-8E67-B888103E35FF}.Debug|Any CPU.ActiveCfg = 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 @@ -1291,11 +1273,8 @@ Global {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|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|ARM64.ActiveCfg = Debug|Any CPU {C54F80ED-B736-49B0-9BD3-662F57024D01}.Debug|ARM64.Build.0 = Debug|Any CPU @@ -1325,11 +1304,8 @@ Global {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|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|ARM64.ActiveCfg = Debug|ARM64 {2268D5AD-7F2A-485A-8C4B-C574497514C9}.Debug|ARM64.Build.0 = Debug|ARM64 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 index 1e3ef3f41c..d813887740 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Microsoft.WinGet.Client.Engine.csproj +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Microsoft.WinGet.Client.Engine.csproj @@ -28,6 +28,10 @@ + + None + + From fb140aaa38c895b1e8bfbcaa7f596732b32703d4 Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Thu, 14 Sep 2023 15:32:54 -0700 Subject: [PATCH 03/13] Tests for server termination --- .../Commands/Common/ClientCommand.cs | 4 +- .../Commands/Common/FinderCommand.cs | 2 +- .../Commands/InstallerPackageCommand.cs | 4 +- .../Commands/UninstallPackageCommand.cs | 2 +- .../Common/ErrorCode.cs | 12 +- .../Helpers/ManagementDeploymentFactory.cs | 15 +- .../Helpers/PackageManagerWrapper.cs | 134 ++++++++++++++++++ .../tests/Microsoft.WinGet.Client.Tests.ps1 | 61 ++++++++ 8 files changed, 218 insertions(+), 16 deletions(-) create mode 100644 src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs index 2061f24928..b83412e17e 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs @@ -47,13 +47,13 @@ protected static IReadOnlyList GetPackageCatalogReferen { if (string.IsNullOrEmpty(source)) { - return ManagementDeploymentFactory.Instance.GetPackageManager().GetPackageCatalogs(); + return PackageManagerWrapper.Instance.GetPackageCatalogs(); } else { return new List() { - ManagementDeploymentFactory.Instance.GetPackageManager().GetPackageCatalogByName(source) + PackageManagerWrapper.Instance.GetPackageCatalogByName(source) ?? throw new InvalidSourceException(source), }; } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs index aed5e93814..ac2cf5ea96 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs @@ -162,7 +162,7 @@ private PackageCatalogReference GetPackageCatalogReference(CompositeSearchBehavi } options.CompositeSearchBehavior = behavior; - return ManagementDeploymentFactory.Instance.GetPackageManager().CreateCompositePackageCatalog(options); + return PackageManagerWrapper.Instance.CreateCompositePackageCatalog(options); } private FindPackagesOptions GetFindPackagesOptions(uint limit) diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs index 6d0823eeec..7a64e6f8cd 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs @@ -131,7 +131,7 @@ private InstallResult InstallPackage( CatalogPackage package, InstallOptions options) { - var operation = ManagementDeploymentFactory.Instance.GetPackageManager().InstallPackageAsync(package, options); + var operation = PackageManagerWrapper.Instance.InstallPackageAsync(package, options); return this.RegisterCallbacksAndWait(operation, string.Format( Resources.ProgressRecordActivityInstalling, package.Name)); @@ -141,7 +141,7 @@ private InstallResult UpgradePackage( CatalogPackage package, InstallOptions options) { - var operation = ManagementDeploymentFactory.Instance.GetPackageManager().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/UninstallPackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs index f15c317027..f8ec6d479a 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs @@ -110,7 +110,7 @@ private UninstallResult UninstallPackage( Resources.ProgressRecordActivityUninstalling, package.Name); - var operation = ManagementDeploymentFactory.Instance.GetPackageManager().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 index fa5579ffb3..0533b6dbea 100644 --- 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 /// /// Error code constants. /// - public static class ErrorCode + internal static class ErrorCode { /// /// Error code for ERROR_FILE_NOT_FOUND. /// public const int FileNotFound = unchecked((int)0x80070002); + + /// + /// Error code for RPC_S_SERVER_UNAVAILABLE. + /// + public const int RpcServerUnavailable = unchecked((int)0x800706BA); + + /// + /// Error code for RPC_S_CALL_FAILED. + /// + public const int RpcCallFailed = unchecked((int)0x800706BE); } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs index 998c6ebf88..bab7f36199 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs @@ -64,8 +64,7 @@ internal sealed class ManagementDeploymentFactory 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 Lazy Lazy = new (); - private PackageManager packageManager = null; + private static readonly Lazy Lazy = new (() => new ManagementDeploymentFactory()); /// /// Initializes static members of the class. @@ -79,6 +78,10 @@ static ManagementDeploymentFactory() } } + private ManagementDeploymentFactory() + { + } + /// /// Gets the instance object. /// @@ -91,14 +94,8 @@ public static ManagementDeploymentFactory Instance /// Creates an instance of the class. /// /// A instance. - public PackageManager GetPackageManager() + public PackageManager CreatePackageManager() { - // TODO: add try catch. - if (this.packageManager != null) - { - return this.packageManager; - } - return Create(PackageManagerType, PackageManagerIid); } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs new file mode 100644 index 0000000000..e7e72aa204 --- /dev/null +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs @@ -0,0 +1,134 @@ +// ----------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. Licensed under the MIT License. +// +// ----------------------------------------------------------------------------- + +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; + + /// + /// Wrapper for PackageManager that handles rpc disconnections. + /// The object is disconnected when the server is killed or on an update. + /// + internal sealed class PackageManagerWrapper + { + private static readonly Lazy Lazy = new (() => new PackageManagerWrapper()); + + private PackageManager packageManager = null; + + private PackageManagerWrapper() + { + } + + /// + /// Gets the instance object. + /// + public static PackageManagerWrapper Instance + { + get { return Lazy.Value; } + } + + /// + /// Wrapper for InstalllPackageAsync. + /// + /// The package to install. + /// The install options. + /// An async operation with progress. + public IAsyncOperationWithProgress InstallPackageAsync(CatalogPackage package, InstallOptions options) + { + return this.ExecuteWithRetry( + () => this.packageManager.InstallPackageAsync(package, options)); + } + + /// + /// Wrapper for UpgradePackageAsync. + /// + /// The package to upgrade. + /// The install options. + /// An async operation with progress. + public IAsyncOperationWithProgress UpgradePackageAsync(CatalogPackage package, InstallOptions options) + { + return this.ExecuteWithRetry( + () => this.packageManager.UpgradePackageAsync(package, options)); + } + + /// + /// Wrapper for UninstallPackageAsync. + /// + /// The package to uninstall. + /// The uninstall options. + /// An async operation with progress. + public IAsyncOperationWithProgress UninstallPackageAsync(CatalogPackage package, UninstallOptions options) + { + return this.ExecuteWithRetry( + () => this.packageManager.UninstallPackageAsync(package, options)); + } + + /// + /// Wrapper for GetPackageCatalogs. + /// + /// A list of PackageCatalogReferences. + public IReadOnlyList GetPackageCatalogs() + { + return this.ExecuteWithRetry( + () => this.packageManager.GetPackageCatalogs()); + } + + /// + /// Wrapper for GetPackageCatalogByName. + /// + /// The name of the source. + /// A PackageCatalogReference. + public PackageCatalogReference GetPackageCatalogByName(string source) + { + return this.ExecuteWithRetry( + () => this.packageManager.GetPackageCatalogByName(source)); + } + + /// + /// Wrapper for CreateCompositePackageCatalog. + /// + /// CreateCompositePackageCatalogOptions. + /// A PackageCatalogReference. + public PackageCatalogReference CreateCompositePackageCatalog(CreateCompositePackageCatalogOptions options) + { + return this.ExecuteWithRetry( + () => this.packageManager.CreateCompositePackageCatalog(options)); + } + + private TReturn ExecuteWithRetry(Func func) + { + 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) + { + throw; + } + + stopRetry = true; + } + } + } + } +} diff --git a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 index d0ac32affd..78fc3534ba 100644 --- a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 +++ b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 @@ -553,6 +553,67 @@ Describe 'Test-GroupPolicies' { } } +Describe 'WindowsPackageManagerServer' { + + BeforeEach { + $processes = Get-Process | Where-Object { $_.Name -eq "WindowsPackageManagerServer" } + foreach ($p in $processes) + { + Stop-Process $p + } + } + + # When WindowsPackageManagerServer dies, we should not fail. + It 'Forced termination' { + $source = Get-WinGetSource -Name 'winget' + $source | Should -Not -BeNullOrEmpty + $source.Name | Should -Be 'winget' + + $process = Get-Process -Name "WindowsPackageManagerServer" + $process | Should -Not -BeNullOrEmpty + $process.HasExited | Should -Be $false + + Stop-Process $process + + $process.HasExited | Should -Be $true + + $source2 = Get-WinGetSource -Name 'winget' + $source2 | Should -Not -BeNullOrEmpty + $source2.Name | Should -Be 'winget' + + $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 winget").Invoke() + $source | Should -Not -BeNullOrEmpty + $source.Name | Should -Be 'winget' + + $wingetProcess = Get-Process -Name "WindowsPackageManagerServer" + $wingetProcess | Should -Not -BeNullOrEmpty + $wingetProcess.HasExited | Should -Be $false + + $oopRunspace.Close() + + Start-Sleep -Seconds 30 + $oopPwshProcess.HasExited | Should -Be $true + $wingetProcess.HasExited | Should -Be $true + } +} + AfterAll { RemoveTestSource } \ No newline at end of file From 6310e285ddbd7346a8f636684677a594af329ca4 Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Thu, 14 Sep 2023 18:21:40 -0700 Subject: [PATCH 04/13] tests --- azure-pipelines.yml | 18 ++ ...rosoft.WinGet.Configuration.Cmdlets.csproj | 36 ---- .../scripts/Initialize-LocalWinGetModules.ps1 | 185 ++++++++++++++---- .../tests/Microsoft.WinGet.Client.Tests.ps1 | 2 + 4 files changed, 163 insertions(+), 78 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d0191326d9..d14d3dbda0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -355,6 +355,24 @@ jobs: 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' inputs: 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 index 14c8cc4a10..421ff2e48f 100644 --- 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 @@ - - - - $(OutputPath)..\..\..\x64\$(Configuration)\Microsoft.Management.Configuration\ - $(OutputPath)..\..\..\x86\$(Configuration)\Microsoft.Management.Configuration\ - $(OutputPath)..\..\..\ARM64\$(Configuration)\Microsoft.Management.Configuration\ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 b/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 index 77b00047c4..19db9b855b 100644 --- a/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 +++ b/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 @@ -19,16 +19,15 @@ [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,118 @@ 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) + { + #xcopy "$buildRoot\AnyCpu\$config\PowerShell\$($this.Name)\" $this.Output /d /s /f /y + $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 @@ -59,43 +162,41 @@ if ($BuildRoot -eq "") $BuildRoot = "$PSScriptRoot\..\.."; } -# Add here new modules -[WinGetModule[]]$local:modules = - [WinGetModule]::new( - "Microsoft.WinGet.DSC", - "$PSScriptRoot\..\Microsoft.WinGet.DSC\", - $false), - [WinGetModule]::new( - "Microsoft.WinGet.Client", - "$PSScriptRoot\..\Microsoft.WinGet.Client\ModuleFiles\", - $true), - [WinGetModule]::new( - "Microsoft.WinGet.Configuration", - "$PSScriptRoot\..\Microsoft.WinGet.Configuration\ModuleFiles\", - $true) - -foreach($module in $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 - } + $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) +} - # 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 "DSC" + $module = [WinGetModule]::new("Microsoft.WinGet.DSC", "$PSScriptRoot\..\Microsoft.WinGet.DSC\", $moduleRootOutput) + $module.PrepareScriptFiles() +} - # 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 "Config" + $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) } # 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 index 78fc3534ba..bc656ce5c8 100644 --- a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 +++ b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 @@ -560,6 +560,7 @@ Describe 'WindowsPackageManagerServer' { foreach ($p in $processes) { Stop-Process $p + Wait-Process $p } } @@ -574,6 +575,7 @@ Describe 'WindowsPackageManagerServer' { $process.HasExited | Should -Be $false Stop-Process $process + Wait-Process $process $process.HasExited | Should -Be $true From aab2d05de903052b2b5f4c4f0c59747702ba0eb2 Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Fri, 15 Sep 2023 12:48:07 -0700 Subject: [PATCH 05/13] timeout --- .../tests/Microsoft.WinGet.Client.Tests.ps1 | 514 +----------------- 1 file changed, 26 insertions(+), 488 deletions(-) diff --git a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 index bc656ce5c8..1d3c844ac7 100644 --- a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 +++ b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 @@ -73,515 +73,53 @@ BeforeAll { Remove-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name * } } -} - -Describe 'Get-WinGetVersion' { - - It 'Get-WinGetVersion' { - $version = Get-WinGetVersion - $version | Should -Not -BeNullOrEmpty -ErrorAction Stop - } -} - -Describe 'Get|Add|Reset-WinGetSource' { - - BeforeAll { - AddTestSource - } - - It 'Get Test source' { - $source = Get-WinGetSource -Name 'TestSource' - - $source | Should -Not -BeNullOrEmpty -ErrorAction Stop - $source.Name | Should -Be 'TestSource' - $source.Argument | Should -Be 'https://localhost:5001/TestKit/' - $source.Type | Should -Be 'Microsoft.PreIndexed.Package' - } - - It 'Get fake source' { - { Get-WinGetSource -Name 'Fake' } | Should -Throw - } - - # This tests require admin - It 'Reset Test source' { - Reset-WinGetSource -Name TestSource - } -} - -Describe 'Find-WinGetPackage' { - - BeforeAll { - AddTestSource - } - - It 'Given no parameters, lists all available packages' { - $allPackages = Find-WinGetPackage -Source TestSource - $allPackages.Count | Should -BeGreaterThan 0 - } - - It 'Find by Id' { - $package = Find-WinGetPackage -Source 'TestSource' -Id 'AppInstallerTest.TestExampleInstaller' - - $package | Should -Not -BeNullOrEmpty -ErrorAction Stop - $package.Name | Should -Be 'TestExampleInstaller' - $package.Id | Should -Be 'AppInstallerTest.TestExampleInstaller' - $package.Version | Should -Be '1.2.3.4' - $package.Source | Should -Be 'TestSource' - } - - It 'Find by Name' { - $package = Find-WinGetPackage -Source 'TestSource' -Name 'TestPortableExe' - - $package | Should -Not -BeNullOrEmpty -ErrorAction Stop - $package[0].Name | Should -Be 'TestPortableExe' - $package[1].Name | Should -Be 'TestPortableExeWithCommand' - } - - It 'Find by Name sort by Version' { - $package = Find-WinGetPackage -Source 'TestSource' -Name 'TestPortableExe' | Sort-Object 'Version' - - $package | Should -Not -BeNullOrEmpty -ErrorAction Stop - $package[0].Name | Should -Be 'TestPortableExeWithCommand' - $package[1].Name | Should -Be 'TestPortableExe' - } - - It 'Find package and verify PackageVersionInfo' { - $package = Find-WinGetPackage -Source 'TestSource' -Id 'AppInstallerTest.TestPortableExe' -MatchOption Equals - - $package | Should -Not -BeNullOrEmpty -ErrorAction Stop - $package.AvailableVersions[0] | Should -Be '3.0.0.0' - $package.AvailableVersions[1] | Should -Be '2.0.0.0' - $package.AvailableVersions.Count | Should -Be 4 - - $packageVersionInfo = $package.GetPackageVersionInfo("3.0.0.0") - $packageVersionInfo.DisplayName | Should -Be 'TestPortableExe' - $packageVersionInfo.Id | Should -Be 'AppInstallerTest.TestPortableExe' - $packageVersionInfo.CompareToVersion("2.0.0.0") | Should -Be 'Greater' - $packageVersionInfo.CompareToVersion("4.0.0.0") | Should -Be 'Lesser' - } -} - -Describe 'Install|Update|Uninstall-WinGetPackage' { - - BeforeAll { - AddTestSource - } - - It 'Install by Id' { - $result = Install-WinGetPackage -Id AppInstallerTest.TestExeInstaller -Version '1.0.0.0' - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.InstallerErrorCode | Should -Be 0 - $result.Status | Should -Be 'Ok' - $result.RebootRequired | Should -Be 'False' - } - - It 'Install by exact Name and Version' { - $result = Install-WinGetPackage -Name TestPortableExe -Version '2.0.0.0' -MatchOption Equals - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.InstallerErrorCode | Should -Be 0 - $result.Status | Should -Be 'Ok' - $result.RebootRequired | Should -Be 'False' - } - It 'Update by Id' { - $result = Update-WinGetPackage -Id AppInstallerTest.TestExeInstaller - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.InstallerErrorCode | Should -Be 0 - $result.Status | Should -Be 'Ok' - $result.RebootRequired | Should -Be 'False' - } - - It 'Update by Name' { - $result = Update-WinGetPackage -Name TestPortableExe - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.InstallerErrorCode | Should -Be 0 - $result.Status | Should -Be 'Ok' - $result.RebootRequired | Should -Be 'False' - } - - It 'Uninstall by Id' { - $result = Uninstall-WinGetPackage -Id AppInstallerTest.TestExeInstaller - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.UninstallerErrorCode | Should -Be 0 - $result.Status | Should -Be 'Ok' - $result.RebootRequired | Should -Be 'False' - } - - It 'Uninstall by Name' { - $result = Uninstall-WinGetPackage -Name TestPortableExe - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.UninstallerErrorCode | Should -Be 0 - $result.Status | Should -Be 'Ok' - $result.RebootRequired | Should -Be 'False' - } - - AfterAll { - # Uninstall all test packages after each for proper cleanup. - $testExe = Get-WinGetPackage -Id AppInstallerTest.TestExeInstaller -MatchOption Equals - if ($testExe.Count -gt 0) + function KillWindowsPackageManagerServer() + { + $processes = Get-Process | Where-Object { $_.Name -eq "WindowsPackageManagerServer" } + foreach ($p in $processes) { - Uninstall-WinGetPackage -Id AppInstallerTest.TestExeInstaller - } + Stop-Process $p - $testPortable = Get-WinGetPackage -Id AppInstallerTest.TestPortableExe -MatchOption Equals - if ($testPortable.Count -gt 0) - { - Uninstall-WinGetPackage -Id AppInstallerTest.TestPortableExe + $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-WinGetPackage' { - - BeforeAll { - AddTestSource - } - - It 'Install by Id' { - $result = Install-WinGetPackage -Id AppInstallerTest.TestExeInstaller -Version '1.0.0.0' - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.InstallerErrorCode | Should -Be 0 - $result.Status | Should -Be 'Ok' - $result.RebootRequired | Should -Be 'False' - } - - It 'Get package by Id' { - $result = Get-WinGetPackage -Id AppInstallerTest.TestExeInstaller - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.Name | Should -Be 'TestExeInstaller' - $result.Id | Should -Be 'AppInstallerTest.TestExeInstaller' - $result.InstalledVersion | Should -Be '1.0.0.0' - $result.Source | Should -Be 'TestSource' - $result.AvailableVersions[0] | Should -Be '2.0.0.0' - } - - It 'Get package by Name' { - $result = Get-WinGetPackage -Name TestExeInstaller - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.Name | Should -Be 'TestExeInstaller' - $result.Id | Should -Be 'AppInstallerTest.TestExeInstaller' - $result.InstalledVersion | Should -Be '1.0.0.0' - $result.Source | Should -Be 'TestSource' - $result.AvailableVersions[0] | Should -Be '2.0.0.0' - } - - AfterAll { - # Uninstall all test packages after each for proper cleanup. - $testExe = Get-WinGetPackage -Id AppInstallerTest.TestExeInstaller - if ($testExe.Count -gt 0) - { - Uninstall-WinGetPackage -Id AppInstallerTest.TestExeInstaller - } - } -} - -Describe 'Get-WinGetUserSettings' { - - It 'Get settings' { - $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} - SetWinGetSettingsHelper $ogSettings - - $userSettings = Get-WinGetUserSettings - $userSettings | Should -Not -BeNullOrEmpty -ErrorAction Stop - $userSettings.Count | Should -Be 2 - $userSettings.visual.progressBar | Should -Be 'rainbow' - $userSettings.experimentalFeatures.experimentalArg | Should -Be $false - $userSettings.experimentalFeatures.experimentalCmd | Should -Be $true - } - - It 'Get settings. Bad json file' { - Set-Content -Path $settingsFilePath -Value "Hi, im not a json. Thank you, Test." - { Get-WinGetUserSettings } | Should -Throw - } -} - -Describe 'Test-WinGetUserSettings' { - - It 'Bad json file' { - Set-Content -Path $settingsFilePath -Value "Hi, im not a json. Thank you, Test." - - $inputSettings = @{ visual= @{ progressBar="retro"} } - Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false - } - - It 'Equal' { - $ogSettings = @{ visual= @{ progressBar="retro"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} - SetWinGetSettingsHelper $ogSettings - - Test-WinGetUserSettings -UserSettings $ogSettings | Should -Be $true - } - - It 'Equal. Ignore schema' { - Set-Content -Path $settingsFilePath -Value '{ "$schema": "https://aka.ms/winget-settings.schema.json", "visual": { "progressBar": "retro" } }' - - $inputSettings = @{ visual= @{ progressBar="retro"} } - Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $true - } - - It 'Not Equal string' { - $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="retro"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} - Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false - } - - It 'Not Equal bool' { - $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$true}} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} - Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false - } - - It 'Not Equal. More settings' { - $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true }} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false }} - Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false - } - - It 'Not Equal. More settings input' { - $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; }} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} - Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false - } - - It 'Equal IgnoreNotSet' { - $ogSettings = @{ visual= @{ progressBar="retro"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} - SetWinGetSettingsHelper $ogSettings - - Test-WinGetUserSettings -UserSettings $ogSettings -IgnoreNotSet | Should -Be $true - } - - It 'Equal IgnoreNotSet. More settings' { - $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true }} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false }} - Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $true - } - - It 'Not Equal IgnoreNotSet. More settings input' { - $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; }} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} - Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $false - } - - It 'Not Equal bool IgnoreNotSet' { - $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$true}} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} - Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $false - } - - It 'Not Equal array IgnoreNotSet' { - $ogSettings = @{ installBehavior= @{ preferences= @{ architectures = @("x86", "x64")} }} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ installBehavior= @{ preferences= @{ architectures = @("x86", "arm64")} }} - Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $false - } - - It 'Not Equal wrong type IgnoreNotSet' { - $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$true}} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=4 ; experimentalCmd=$true}} - Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $false - } - - AfterAll { - SetWinGetSettingsHelper @{ debugging= @{ enableSelfInitiatedMinidump=$true ; keepAllLogFiles=$true } } - } -} - -Describe 'Set-WinGetUserSettings' { - - It 'Overwrites' { - $ogSettings = @{ source= @{ autoUpdateIntervalInMinutes=3}} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$false}} - $result = Set-WinGetUserSettings -UserSettings $inputSettings - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.'$schema' | Should -Not -BeNullOrEmpty - $result.visual | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.visual.progressBar | Should -Be "rainbow" - $result.experimentalFeatures | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.experimentalFeatures.experimentalArg | Should -Be $true - $result.experimentalFeatures.experimentalCmd | Should -Be $false - $result.source | Should -BeNullOrEmpty - } - - It 'Merge' { - $ogSettings = @{ source= @{ autoUpdateIntervalInMinutes=3}} - SetWinGetSettingsHelper $ogSettings - - $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$false}} - $result = Set-WinGetUserSettings -UserSettings $inputSettings -Merge - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.'$schema' | Should -Not -BeNullOrEmpty - $result.visual | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.visual.progressBar | Should -Be "rainbow" - $result.experimentalFeatures | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.experimentalFeatures.experimentalArg | Should -Be $true - $result.experimentalFeatures.experimentalCmd | Should -Be $false - $result.source | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.source.autoUpdateIntervalInMinutes | Should -Be 3 - } - - It 'Schema.' { - Set-Content -Path $settingsFilePath -Value '{ "$schema": "https://aka.ms/winget-settings.schema.json", "visual": { "progressBar": "retro" } }' - - $inputSettings = @{ visual= @{ progressBar="retro"} } - $result = Set-WinGetUserSettings -UserSettings $inputSettings - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.'$schema' | Should -Not -BeNullOrEmpty - $result.visual.progressBar | Should -Be "retro" - } - - It 'Overwrites Bad json file' { - Set-Content -Path $settingsFilePath -Value "Hi, im not a json. Thank you, Test." - - $inputSettings = @{ visual= @{ progressBar="retro"} } - $result = Set-WinGetUserSettings -UserSettings $inputSettings - - $result | Should -Not -BeNullOrEmpty -ErrorAction Stop - $result.'$schema' | Should -Not -BeNullOrEmpty - $result.visual.progressBar | Should -Be "retro" - } - - It 'Overwrites Bad json file' { - Set-Content -Path $settingsFilePath -Value "Hi, im not a json. Thank you, Test." - - $inputSettings = @{ visual= @{ progressBar="retro"} } - { Set-WinGetUserSettings -UserSettings $inputSettings -Merge } | Should -Throw - } - - AfterAll { - SetWinGetSettingsHelper @{ debugging= @{ enableSelfInitiatedMinidump=$true ; keepAllLogFiles=$true } } - } -} - -Describe 'Get|Enable|Disable-WinGetSetting' { - - It 'Get-WinGetSetting' { - $settings = Get-WinGetSettings - $settings | Should -Not -BeNullOrEmpty -ErrorAction Stop - $settings.'$schema' | Should -Not -BeNullOrEmpty - $settings.adminSettings | Should -Not -BeNullOrEmpty - $settings.userSettingsFile | Should -Be $settingsFilePath - } - - # This tests require admin - It 'Enable|Disable' { - $settings = Get-WinGetSettings - $settings | Should -Not -BeNullOrEmpty -ErrorAction Stop - $settings.adminSettings | Should -Not -BeNullOrEmpty - $settings.adminSettings.LocalManifestFiles | Should -Be $false - - Enable-WinGetSetting -Name LocalManifestFiles - - $afterEnable = Get-WinGetSettings - $afterEnable | Should -Not -BeNullOrEmpty -ErrorAction Stop - $afterEnable.adminSettings | Should -Not -BeNullOrEmpty - $afterEnable.adminSettings.LocalManifestFiles | Should -Be $true - - Disable-WingetSetting -Name LocalManifestFiles - - $afterDisable = Get-WinGetSettings - $afterDisable | Should -Not -BeNullOrEmpty -ErrorAction Stop - $afterDisable.adminSettings | Should -Not -BeNullOrEmpty - $afterDisable.adminSettings.LocalManifestFiles | Should -Be $false - } -} - -Describe 'Test-GroupPolicies' { - BeforeAll { - CleanupGroupPolicies - CreatePolicyKeyIfNotExists - } - - It "Disable WinGetPolicy and run Get-WinGetSources" { - $policyKeyValueName = "EnableAppInstaller" - - Set-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName -Value 0 - $registryKey = Get-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName - $registryKey | Should -Not -BeNullOrEmpty - $registryKey.EnableAppInstaller | Should -Be 0 - - { Get-WinGetSource } | Should -Throw "This operation is disabled by Group Policy : Enable Windows Package Manager" - - CleanupGroupPolicies - } - - It "Disable EnableWindowsPackageManagerCommandLineInterfaces Policy and run Get-WinGetSources" { - $policyKeyValueName = "EnableWindowsPackageManagerCommandLineInterfaces" - - Set-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName -Value 0 - $registryKey = Get-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName - $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" - - CleanupGroupPolicies - } - - AfterAll { - CleanupGroupPolicies - CleanupGroupPolicyKeyIfExists } } Describe 'WindowsPackageManagerServer' { BeforeEach { - $processes = Get-Process | Where-Object { $_.Name -eq "WindowsPackageManagerServer" } - foreach ($p in $processes) - { - Stop-Process $p - Wait-Process $p - } + KillWindowsPackageManagerServer } # When WindowsPackageManagerServer dies, we should not fail. It 'Forced termination' { - $source = Get-WinGetSource -Name 'winget' + $source = Get-WinGetSource -Name 'TestSource' $source | Should -Not -BeNullOrEmpty - $source.Name | Should -Be 'winget' + $source.Name | Should -Be 'TestSource' $process = Get-Process -Name "WindowsPackageManagerServer" $process | Should -Not -BeNullOrEmpty $process.HasExited | Should -Be $false - Stop-Process $process - Wait-Process $process + KillWindowsPackageManagerServer $process.HasExited | Should -Be $true - $source2 = Get-WinGetSource -Name 'winget' + $source2 = Get-WinGetSource -Name 'TestSource' $source2 | Should -Not -BeNullOrEmpty - $source2.Name | Should -Be 'winget' + $source2.Name | Should -Be 'TestSource' $process2 = Get-Process -Name "WindowsPackageManagerServer" $process2 | Should -Not -BeNullOrEmpty @@ -600,9 +138,9 @@ Describe 'WindowsPackageManagerServer' { $oopPwshProcess = Get-Process -Id $oopPwshPid $oopPwshProcess.HasExited | Should -Be $false - $source = $oopPwsh.AddScript("Get-WinGetSource -Name winget").Invoke() + $source = $oopPwsh.AddScript("Get-WinGetSource -Name TestSource").Invoke() $source | Should -Not -BeNullOrEmpty - $source.Name | Should -Be 'winget' + $source.Name | Should -Be 'TestSource' $wingetProcess = Get-Process -Name "WindowsPackageManagerServer" $wingetProcess | Should -Not -BeNullOrEmpty @@ -617,5 +155,5 @@ Describe 'WindowsPackageManagerServer' { } AfterAll { - RemoveTestSource + #RemoveTestSource } \ No newline at end of file From 96025e54df029b3b83d49afb6213ee5cb85a8e90 Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Fri, 15 Sep 2023 14:12:28 -0700 Subject: [PATCH 06/13] test source --- .../tests/Microsoft.WinGet.Client.Tests.ps1 | 481 +++++++++++++++++- 1 file changed, 480 insertions(+), 1 deletion(-) diff --git a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 index 1d3c844ac7..40bdf5fa04 100644 --- a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 +++ b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 @@ -97,9 +97,488 @@ BeforeAll { } } +Describe 'Get-WinGetVersion' { + + It 'Get-WinGetVersion' { + $version = Get-WinGetVersion + $version | Should -Not -BeNullOrEmpty -ErrorAction Stop + } +} + +Describe 'Get|Add|Reset-WinGetSource' { + + BeforeAll { + AddTestSource + } + + It 'Get Test source' { + $source = Get-WinGetSource -Name 'TestSource' + + $source | Should -Not -BeNullOrEmpty -ErrorAction Stop + $source.Name | Should -Be 'TestSource' + $source.Argument | Should -Be 'https://localhost:5001/TestKit/' + $source.Type | Should -Be 'Microsoft.PreIndexed.Package' + } + + It 'Get fake source' { + { Get-WinGetSource -Name 'Fake' } | Should -Throw + } + + # This tests require admin + It 'Reset Test source' { + Reset-WinGetSource -Name TestSource + } +} + +Describe 'Find-WinGetPackage' { + + BeforeAll { + AddTestSource + } + + It 'Given no parameters, lists all available packages' { + $allPackages = Find-WinGetPackage -Source TestSource + $allPackages.Count | Should -BeGreaterThan 0 + } + + It 'Find by Id' { + $package = Find-WinGetPackage -Source 'TestSource' -Id 'AppInstallerTest.TestExampleInstaller' + + $package | Should -Not -BeNullOrEmpty -ErrorAction Stop + $package.Name | Should -Be 'TestExampleInstaller' + $package.Id | Should -Be 'AppInstallerTest.TestExampleInstaller' + $package.Version | Should -Be '1.2.3.4' + $package.Source | Should -Be 'TestSource' + } + + It 'Find by Name' { + $package = Find-WinGetPackage -Source 'TestSource' -Name 'TestPortableExe' + + $package | Should -Not -BeNullOrEmpty -ErrorAction Stop + $package[0].Name | Should -Be 'TestPortableExe' + $package[1].Name | Should -Be 'TestPortableExeWithCommand' + } + + It 'Find by Name sort by Version' { + $package = Find-WinGetPackage -Source 'TestSource' -Name 'TestPortableExe' | Sort-Object 'Version' + + $package | Should -Not -BeNullOrEmpty -ErrorAction Stop + $package[0].Name | Should -Be 'TestPortableExeWithCommand' + $package[1].Name | Should -Be 'TestPortableExe' + } + + It 'Find package and verify PackageVersionInfo' { + $package = Find-WinGetPackage -Source 'TestSource' -Id 'AppInstallerTest.TestPortableExe' -MatchOption Equals + + $package | Should -Not -BeNullOrEmpty -ErrorAction Stop + $package.AvailableVersions[0] | Should -Be '3.0.0.0' + $package.AvailableVersions[1] | Should -Be '2.0.0.0' + $package.AvailableVersions.Count | Should -Be 4 + + $packageVersionInfo = $package.GetPackageVersionInfo("3.0.0.0") + $packageVersionInfo.DisplayName | Should -Be 'TestPortableExe' + $packageVersionInfo.Id | Should -Be 'AppInstallerTest.TestPortableExe' + $packageVersionInfo.CompareToVersion("2.0.0.0") | Should -Be 'Greater' + $packageVersionInfo.CompareToVersion("4.0.0.0") | Should -Be 'Lesser' + } +} + +Describe 'Install|Update|Uninstall-WinGetPackage' { + + BeforeAll { + AddTestSource + } + + It 'Install by Id' { + $result = Install-WinGetPackage -Id AppInstallerTest.TestExeInstaller -Version '1.0.0.0' + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.InstallerErrorCode | Should -Be 0 + $result.Status | Should -Be 'Ok' + $result.RebootRequired | Should -Be 'False' + } + + It 'Install by exact Name and Version' { + $result = Install-WinGetPackage -Name TestPortableExe -Version '2.0.0.0' -MatchOption Equals + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.InstallerErrorCode | Should -Be 0 + $result.Status | Should -Be 'Ok' + $result.RebootRequired | Should -Be 'False' + } + + It 'Update by Id' { + $result = Update-WinGetPackage -Id AppInstallerTest.TestExeInstaller + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.InstallerErrorCode | Should -Be 0 + $result.Status | Should -Be 'Ok' + $result.RebootRequired | Should -Be 'False' + } + + It 'Update by Name' { + $result = Update-WinGetPackage -Name TestPortableExe + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.InstallerErrorCode | Should -Be 0 + $result.Status | Should -Be 'Ok' + $result.RebootRequired | Should -Be 'False' + } + + It 'Uninstall by Id' { + $result = Uninstall-WinGetPackage -Id AppInstallerTest.TestExeInstaller + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.UninstallerErrorCode | Should -Be 0 + $result.Status | Should -Be 'Ok' + $result.RebootRequired | Should -Be 'False' + } + + It 'Uninstall by Name' { + $result = Uninstall-WinGetPackage -Name TestPortableExe + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.UninstallerErrorCode | Should -Be 0 + $result.Status | Should -Be 'Ok' + $result.RebootRequired | Should -Be 'False' + } + + AfterAll { + # Uninstall all test packages after each for proper cleanup. + $testExe = Get-WinGetPackage -Id AppInstallerTest.TestExeInstaller -MatchOption Equals + if ($testExe.Count -gt 0) + { + Uninstall-WinGetPackage -Id AppInstallerTest.TestExeInstaller + } + + $testPortable = Get-WinGetPackage -Id AppInstallerTest.TestPortableExe -MatchOption Equals + if ($testPortable.Count -gt 0) + { + Uninstall-WinGetPackage -Id AppInstallerTest.TestPortableExe + } + } +} + +Describe 'Get-WinGetPackage' { + + BeforeAll { + AddTestSource + } + + It 'Install by Id' { + $result = Install-WinGetPackage -Id AppInstallerTest.TestExeInstaller -Version '1.0.0.0' + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.InstallerErrorCode | Should -Be 0 + $result.Status | Should -Be 'Ok' + $result.RebootRequired | Should -Be 'False' + } + + It 'Get package by Id' { + $result = Get-WinGetPackage -Id AppInstallerTest.TestExeInstaller + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.Name | Should -Be 'TestExeInstaller' + $result.Id | Should -Be 'AppInstallerTest.TestExeInstaller' + $result.InstalledVersion | Should -Be '1.0.0.0' + $result.Source | Should -Be 'TestSource' + $result.AvailableVersions[0] | Should -Be '2.0.0.0' + } + + It 'Get package by Name' { + $result = Get-WinGetPackage -Name TestExeInstaller + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.Name | Should -Be 'TestExeInstaller' + $result.Id | Should -Be 'AppInstallerTest.TestExeInstaller' + $result.InstalledVersion | Should -Be '1.0.0.0' + $result.Source | Should -Be 'TestSource' + $result.AvailableVersions[0] | Should -Be '2.0.0.0' + } + + AfterAll { + # Uninstall all test packages after each for proper cleanup. + $testExe = Get-WinGetPackage -Id AppInstallerTest.TestExeInstaller + if ($testExe.Count -gt 0) + { + Uninstall-WinGetPackage -Id AppInstallerTest.TestExeInstaller + } + } +} + +Describe 'Get-WinGetUserSettings' { + + It 'Get settings' { + $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} + SetWinGetSettingsHelper $ogSettings + + $userSettings = Get-WinGetUserSettings + $userSettings | Should -Not -BeNullOrEmpty -ErrorAction Stop + $userSettings.Count | Should -Be 2 + $userSettings.visual.progressBar | Should -Be 'rainbow' + $userSettings.experimentalFeatures.experimentalArg | Should -Be $false + $userSettings.experimentalFeatures.experimentalCmd | Should -Be $true + } + + It 'Get settings. Bad json file' { + Set-Content -Path $settingsFilePath -Value "Hi, im not a json. Thank you, Test." + { Get-WinGetUserSettings } | Should -Throw + } +} + +Describe 'Test-WinGetUserSettings' { + + It 'Bad json file' { + Set-Content -Path $settingsFilePath -Value "Hi, im not a json. Thank you, Test." + + $inputSettings = @{ visual= @{ progressBar="retro"} } + Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false + } + + It 'Equal' { + $ogSettings = @{ visual= @{ progressBar="retro"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} + SetWinGetSettingsHelper $ogSettings + + Test-WinGetUserSettings -UserSettings $ogSettings | Should -Be $true + } + + It 'Equal. Ignore schema' { + Set-Content -Path $settingsFilePath -Value '{ "$schema": "https://aka.ms/winget-settings.schema.json", "visual": { "progressBar": "retro" } }' + + $inputSettings = @{ visual= @{ progressBar="retro"} } + Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $true + } + + It 'Not Equal string' { + $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="retro"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} + Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false + } + + It 'Not Equal bool' { + $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$true}} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} + Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false + } + + It 'Not Equal. More settings' { + $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true }} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false }} + Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false + } + + It 'Not Equal. More settings input' { + $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; }} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} + Test-WinGetUserSettings -UserSettings $inputSettings | Should -Be $false + } + + It 'Equal IgnoreNotSet' { + $ogSettings = @{ visual= @{ progressBar="retro"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} + SetWinGetSettingsHelper $ogSettings + + Test-WinGetUserSettings -UserSettings $ogSettings -IgnoreNotSet | Should -Be $true + } + + It 'Equal IgnoreNotSet. More settings' { + $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true }} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false }} + Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $true + } + + It 'Not Equal IgnoreNotSet. More settings input' { + $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; }} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} + Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $false + } + + It 'Not Equal bool IgnoreNotSet' { + $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$true}} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$false ; experimentalCmd=$true}} + Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $false + } + + It 'Not Equal array IgnoreNotSet' { + $ogSettings = @{ installBehavior= @{ preferences= @{ architectures = @("x86", "x64")} }} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ installBehavior= @{ preferences= @{ architectures = @("x86", "arm64")} }} + Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $false + } + + It 'Not Equal wrong type IgnoreNotSet' { + $ogSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$true}} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=4 ; experimentalCmd=$true}} + Test-WinGetUserSettings -UserSettings $inputSettings -IgnoreNotSet | Should -Be $false + } + + AfterAll { + SetWinGetSettingsHelper @{ debugging= @{ enableSelfInitiatedMinidump=$true ; keepAllLogFiles=$true } } + } +} + +Describe 'Set-WinGetUserSettings' { + + It 'Overwrites' { + $ogSettings = @{ source= @{ autoUpdateIntervalInMinutes=3}} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$false}} + $result = Set-WinGetUserSettings -UserSettings $inputSettings + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.'$schema' | Should -Not -BeNullOrEmpty + $result.visual | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.visual.progressBar | Should -Be "rainbow" + $result.experimentalFeatures | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.experimentalFeatures.experimentalArg | Should -Be $true + $result.experimentalFeatures.experimentalCmd | Should -Be $false + $result.source | Should -BeNullOrEmpty + } + + It 'Merge' { + $ogSettings = @{ source= @{ autoUpdateIntervalInMinutes=3}} + SetWinGetSettingsHelper $ogSettings + + $inputSettings = @{ visual= @{ progressBar="rainbow"} ; experimentalFeatures= @{experimentalArg=$true ; experimentalCmd=$false}} + $result = Set-WinGetUserSettings -UserSettings $inputSettings -Merge + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.'$schema' | Should -Not -BeNullOrEmpty + $result.visual | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.visual.progressBar | Should -Be "rainbow" + $result.experimentalFeatures | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.experimentalFeatures.experimentalArg | Should -Be $true + $result.experimentalFeatures.experimentalCmd | Should -Be $false + $result.source | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.source.autoUpdateIntervalInMinutes | Should -Be 3 + } + + It 'Schema.' { + Set-Content -Path $settingsFilePath -Value '{ "$schema": "https://aka.ms/winget-settings.schema.json", "visual": { "progressBar": "retro" } }' + + $inputSettings = @{ visual= @{ progressBar="retro"} } + $result = Set-WinGetUserSettings -UserSettings $inputSettings + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.'$schema' | Should -Not -BeNullOrEmpty + $result.visual.progressBar | Should -Be "retro" + } + + It 'Overwrites Bad json file' { + Set-Content -Path $settingsFilePath -Value "Hi, im not a json. Thank you, Test." + + $inputSettings = @{ visual= @{ progressBar="retro"} } + $result = Set-WinGetUserSettings -UserSettings $inputSettings + + $result | Should -Not -BeNullOrEmpty -ErrorAction Stop + $result.'$schema' | Should -Not -BeNullOrEmpty + $result.visual.progressBar | Should -Be "retro" + } + + It 'Overwrites Bad json file' { + Set-Content -Path $settingsFilePath -Value "Hi, im not a json. Thank you, Test." + + $inputSettings = @{ visual= @{ progressBar="retro"} } + { Set-WinGetUserSettings -UserSettings $inputSettings -Merge } | Should -Throw + } + + AfterAll { + SetWinGetSettingsHelper @{ debugging= @{ enableSelfInitiatedMinidump=$true ; keepAllLogFiles=$true } } + } +} + +Describe 'Get|Enable|Disable-WinGetSetting' { + + It 'Get-WinGetSetting' { + $settings = Get-WinGetSettings + $settings | Should -Not -BeNullOrEmpty -ErrorAction Stop + $settings.'$schema' | Should -Not -BeNullOrEmpty + $settings.adminSettings | Should -Not -BeNullOrEmpty + $settings.userSettingsFile | Should -Be $settingsFilePath + } + + # This tests require admin + It 'Enable|Disable' { + $settings = Get-WinGetSettings + $settings | Should -Not -BeNullOrEmpty -ErrorAction Stop + $settings.adminSettings | Should -Not -BeNullOrEmpty + $settings.adminSettings.LocalManifestFiles | Should -Be $false + + Enable-WinGetSetting -Name LocalManifestFiles + + $afterEnable = Get-WinGetSettings + $afterEnable | Should -Not -BeNullOrEmpty -ErrorAction Stop + $afterEnable.adminSettings | Should -Not -BeNullOrEmpty + $afterEnable.adminSettings.LocalManifestFiles | Should -Be $true + + Disable-WingetSetting -Name LocalManifestFiles + + $afterDisable = Get-WinGetSettings + $afterDisable | Should -Not -BeNullOrEmpty -ErrorAction Stop + $afterDisable.adminSettings | Should -Not -BeNullOrEmpty + $afterDisable.adminSettings.LocalManifestFiles | Should -Be $false + } +} + +Describe 'Test-GroupPolicies' { + BeforeAll { + CleanupGroupPolicies + CreatePolicyKeyIfNotExists + } + + It "Disable WinGetPolicy and run Get-WinGetSources" { + $policyKeyValueName = "EnableAppInstaller" + + Set-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName -Value 0 + $registryKey = Get-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName + $registryKey | Should -Not -BeNullOrEmpty + $registryKey.EnableAppInstaller | Should -Be 0 + + { Get-WinGetSource } | Should -Throw "This operation is disabled by Group Policy : Enable Windows Package Manager" + + CleanupGroupPolicies + } + + It "Disable EnableWindowsPackageManagerCommandLineInterfaces Policy and run Get-WinGetSources" { + $policyKeyValueName = "EnableWindowsPackageManagerCommandLineInterfaces" + + Set-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName -Value 0 + $registryKey = Get-ItemProperty -Path $wingetGroupPolicyRegistryRoot -Name $policyKeyValueName + $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" + + CleanupGroupPolicies + } + + AfterAll { + CleanupGroupPolicies + CleanupGroupPolicyKeyIfExists + } +} + Describe 'WindowsPackageManagerServer' { BeforeEach { + AddTestSource KillWindowsPackageManagerServer } @@ -155,5 +634,5 @@ Describe 'WindowsPackageManagerServer' { } AfterAll { - #RemoveTestSource + RemoveTestSource } \ No newline at end of file From 70c59fefc437c57f7c6a74e12b89f844853bdac1 Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Fri, 15 Sep 2023 15:58:36 -0700 Subject: [PATCH 07/13] ill blame window server --- src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 index 40bdf5fa04..019e96b4d5 100644 --- a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 +++ b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 @@ -590,11 +590,11 @@ Describe 'WindowsPackageManagerServer' { $process = Get-Process -Name "WindowsPackageManagerServer" $process | Should -Not -BeNullOrEmpty - $process.HasExited | Should -Be $false + $process | Where-Object { $_.HasExited -eq $false } | Should -BeGreaterOrEqual 1 KillWindowsPackageManagerServer - $process.HasExited | Should -Be $true + $process | Where-Object { $_.HasExited -eq $true } | Should -BeGreaterOrEqual 1 $source2 = Get-WinGetSource -Name 'TestSource' $source2 | Should -Not -BeNullOrEmpty @@ -623,13 +623,13 @@ Describe 'WindowsPackageManagerServer' { $wingetProcess = Get-Process -Name "WindowsPackageManagerServer" $wingetProcess | Should -Not -BeNullOrEmpty - $wingetProcess.HasExited | Should -Be $false + $wingetProcess | Where-Object { $_.HasExited -eq $false } | Should -BeGreaterOrEqual 1 $oopRunspace.Close() Start-Sleep -Seconds 30 $oopPwshProcess.HasExited | Should -Be $true - $wingetProcess.HasExited | Should -Be $true + $process | Where-Object { $_.HasExited -eq $true } | Should -BeGreaterOrEqual 1 } } From 6635b4cc98ec448821dc1a4613f7b200d1f0042d Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Fri, 15 Sep 2023 17:53:36 -0700 Subject: [PATCH 08/13] Not null --- .../tests/Microsoft.WinGet.Client.Tests.ps1 | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 index 019e96b4d5..4bc9a82e64 100644 --- a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 +++ b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 @@ -590,11 +590,14 @@ Describe 'WindowsPackageManagerServer' { $process = Get-Process -Name "WindowsPackageManagerServer" $process | Should -Not -BeNullOrEmpty - $process | Where-Object { $_.HasExited -eq $false } | Should -BeGreaterOrEqual 1 + + # At least one is running. + $process | Where-Object { $_.HasExited -eq $false } | Should -Not -BeNullOrEmpty KillWindowsPackageManagerServer - $process | Where-Object { $_.HasExited -eq $true } | Should -BeGreaterOrEqual 1 + # 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 @@ -623,13 +626,17 @@ Describe 'WindowsPackageManagerServer' { $wingetProcess = Get-Process -Name "WindowsPackageManagerServer" $wingetProcess | Should -Not -BeNullOrEmpty - $wingetProcess | Where-Object { $_.HasExited -eq $false } | Should -BeGreaterOrEqual 1 + + # 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 - $process | Where-Object { $_.HasExited -eq $true } | Should -BeGreaterOrEqual 1 + + # From the ones we got, at least one exited + $process | Where-Object { $_.HasExited -eq $true } | Should -Not -BeNullOrEmpty } } From 2c2c5e4fee4af90ffa47c66fd54bb8dfcbfdb025 Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Mon, 18 Sep 2023 10:41:21 -0700 Subject: [PATCH 09/13] Wait for exit --- .../tests/Microsoft.WinGet.Client.Tests.ps1 | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 index 4bc9a82e64..cad7598857 100644 --- a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 +++ b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 @@ -74,12 +74,15 @@ BeforeAll { } } - function KillWindowsPackageManagerServer() + function WaitForWindowsPackageManagerServer([bool]$force = $false) { $processes = Get-Process | Where-Object { $_.Name -eq "WindowsPackageManagerServer" } foreach ($p in $processes) { - Stop-Process $p + if ($force) + { + Stop-Process $p + } $timeout = 300 $secondsToWait = 5 @@ -579,7 +582,7 @@ Describe 'WindowsPackageManagerServer' { BeforeEach { AddTestSource - KillWindowsPackageManagerServer + WaitForWindowsPackageManagerServer $true } # When WindowsPackageManagerServer dies, we should not fail. @@ -594,7 +597,7 @@ Describe 'WindowsPackageManagerServer' { # At least one is running. $process | Where-Object { $_.HasExited -eq $false } | Should -Not -BeNullOrEmpty - KillWindowsPackageManagerServer + WaitForWindowsPackageManagerServer $true # From the ones we got, at least one exited $process | Where-Object { $_.HasExited -eq $true } | Should -Not -BeNullOrEmpty @@ -636,7 +639,8 @@ Describe 'WindowsPackageManagerServer' { $oopPwshProcess.HasExited | Should -Be $true # From the ones we got, at least one exited - $process | Where-Object { $_.HasExited -eq $true } | Should -Not -BeNullOrEmpty + WaitForWindowsPackageManagerServer + $wingetProcess | Where-Object { $_.HasExited -eq $true } | Should -Not -BeNullOrEmpty } } From 8789d824d806fd1de9aa1b646644f2626bc6bc50 Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Mon, 18 Sep 2023 18:07:41 -0700 Subject: [PATCH 10/13] Windows powershell --- azure-pipelines.yml | 15 ++++- .../Cmdlets/FindPackageCmdlet.cs | 29 ++++----- .../Cmdlets/GetPackageCmdlet.cs | 27 ++++---- .../Cmdlets/InstallPackageCmdlet.cs | 41 ++++++------ .../Cmdlets/UninstallPackageCmdlet.cs | 27 ++++---- .../Cmdlets/UpdatePackageCmdlet.cs | 35 +++++----- .../Commands/Common/FinderCommand.cs | 35 +++++----- .../Commands/Common/FinderExtendedCommand.cs | 5 +- .../Commands/Common/InstallCommand.cs | 10 +-- ...mand.cs => ManagementDeploymentCommand.cs} | 16 +++-- .../Commands/Common/PackageCommand.cs | 18 ++++-- .../Commands/FinderPackageCommand.cs | 16 ++--- .../Commands/InstallerPackageCommand.cs | 64 +++++++++++-------- .../Commands/SourceCommand.cs | 5 +- .../Commands/UninstallPackageCommand.cs | 24 +++---- .../WindowsPowerShellNotSupported.cs | 27 ++++++++ .../tests/Microsoft.WinGet.Client.Tests.ps1 | 49 +++++++++----- src/PowerShell/tests/RunTests.ps1 | 7 +- 18 files changed, 256 insertions(+), 194 deletions(-) rename src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/{ClientCommand.cs => ManagementDeploymentCommand.cs} (77%) create mode 100644 src/PowerShell/Microsoft.WinGet.Client.Engine/Exceptions/WindowsPowerShellNotSupported.cs diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d14d3dbda0..a7aa17713c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -467,15 +467,26 @@ 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 - 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 + - task: PublishTestResults@2 + displayName: Publish Pester Test Results Windows PowerShell + inputs: + testResultsFormat: 'NUnit' + testResultsFiles: '$(Pipeline.Workspace)\WPPesterTest\Test*.xml' + failTaskOnFailedTests: true + - task: PublishPipelineArtifact@1 displayName: Publish PowerShell Module Artifacts inputs: diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/FindPackageCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/FindPackageCmdlet.cs index 6c1c16aada..a16ac326a6 100644 --- 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 @@ public sealed class FindPackageCmdlet : FinderExtendedCmdlet /// Searches for configured sources for packages. /// 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 index 8502318a37..01fab7ccdd 100644 --- 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; /// @@ -23,20 +23,19 @@ public sealed class GetPackageCmdlet : FinderExtendedCmdlet /// Searches for configured sources for packages. /// 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 index 11817b6c09..a42a2661ae 100644 --- 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 @@ public sealed class InstallPackageCmdlet : InstallCmdlet /// Installs a package from the pipeline or from a configured source. /// 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 index 4eb932654d..a705cd6d4b 100644 --- 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 @@ public sealed class UninstallPackageCmdlet : PackageCmdlet /// Uninstalls a package from the local system. /// 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 index c22c23a253..161b12956d 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/UpdatePackageCmdlet.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/UpdatePackageCmdlet.cs @@ -35,24 +35,23 @@ public sealed class UpdatePackageCmdlet : InstallCmdlet 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.Engine/Commands/Common/FinderCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs index ac2cf5ea96..32ca51cbc0 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs @@ -20,7 +20,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common /// 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. /// - public abstract class FinderCommand : ClientCommand + public abstract class FinderCommand : ManagementDeploymentCommand { /// /// Initializes a new instance of the class. @@ -59,11 +59,6 @@ internal FinderCommand(PSCmdlet psCmdlet) /// protected string[] Query { get; set; } - /// - /// Gets or sets a value indicating whether to match exactly against package fields. - /// - protected PackageFieldMatchOption MatchOption { get; set; } - private string QueryAsJoinedString { get @@ -79,35 +74,37 @@ private string QueryAsJoinedString /// /// The value. /// The limit on the number of matches returned. + /// The match option. /// A list of objects. protected IReadOnlyList 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); } /// /// Sets the find package options for a query input. /// /// The options object. - /// The match type. + /// The match type as string. /// The query value. protected virtual void SetQueryInFindPackagesOptions( ref FindPackagesOptions options, - PackageFieldMatchOption match, + string match, string value) { 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, @@ -123,7 +120,7 @@ private static void AddFilterToFindPackagesOptionsIfNotNull( } } - private static IReadOnlyList GetMatchResults( + private IReadOnlyList GetMatchResults( PackageCatalog catalog, FindPackagesOptions options) { @@ -155,7 +152,7 @@ private PackageCatalog GetPackageCatalog(CompositeSearchBehavior behavior) private PackageCatalogReference GetPackageCatalogReference(CompositeSearchBehavior behavior) { CreateCompositePackageCatalogOptions options = ManagementDeploymentFactory.Instance.CreateCreateCompositePackageCatalogOptions(); - IReadOnlyList references = GetPackageCatalogReferences(this.Source); + IReadOnlyList references = this.GetPackageCatalogReferences(this.Source); for (var i = 0; i < references.Count; i++) { options.Catalogs.Add(references[i]); @@ -165,11 +162,11 @@ private PackageCatalogReference GetPackageCatalogReference(CompositeSearchBehavi return PackageManagerWrapper.Instance.CreateCompositePackageCatalog(options); } - private FindPackagesOptions GetFindPackagesOptions(uint limit) + private FindPackagesOptions GetFindPackagesOptions(uint limit, PackageFieldMatchOption match) { var options = ManagementDeploymentFactory.Instance.CreateFindPackagesOptions(); - this.SetQueryInFindPackagesOptions(ref options, this.MatchOption, this.QueryAsJoinedString); - this.AddAttributedFiltersToFindPackagesOptions(ref options, this.MatchOption); + this.SetQueryInFindPackagesOptions(ref options, match.ToString(), this.QueryAsJoinedString); + this.AddAttributedFiltersToFindPackagesOptions(ref options, match); options.ResultLimit = limit; return options; } @@ -188,7 +185,7 @@ private void AddAttributedFiltersToFindPackagesOptions( { 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 index ed1e8707d4..4b7ee5827d 100644 --- 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 @@ internal FinderExtendedCommand(PSCmdlet psCmdlet) /// Searches for packages from configured sources. /// /// A value. + /// The match option. /// A list of objects. - protected IReadOnlyList FindPackages(CompositeSearchBehavior behavior) + protected IReadOnlyList 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 index fc1f4ea79d..ecefb2fcd7 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs @@ -26,11 +26,6 @@ internal InstallCommand(PSCmdlet psCmdlet) { } - /// - /// Gets or sets the mode to manipulate the package with. - /// - protected PackageInstallMode Mode { get; set; } = PackageInstallMode.Default; - /// /// Gets or sets the override arguments to be passed on to the installer. /// @@ -65,13 +60,14 @@ internal InstallCommand(PSCmdlet psCmdlet) /// Gets the install options from the configured parameters. /// /// The to install. + /// Pacakge install mode as string. /// An instance. - protected virtual InstallOptions GetInstallOptions(PackageVersionId version) + protected virtual InstallOptions GetInstallOptions(PackageVersionId version, string mode) { 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/ClientCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ManagementDeploymentCommand.cs similarity index 77% rename from src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs rename to src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ManagementDeploymentCommand.cs index b83412e17e..fffda73d64 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ClientCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/ManagementDeploymentCommand.cs @@ -1,5 +1,5 @@ // ----------------------------------------------------------------------------- -// +// // Copyright (c) Microsoft Corporation. Licensed under the MIT License. // // ----------------------------------------------------------------------------- @@ -18,22 +18,24 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common /// /// This is the base class for all of the commands in this module that use the COM APIs. /// - public abstract class ClientCommand : BaseCommand + public abstract class ManagementDeploymentCommand : BaseCommand { - static ClientCommand() + static ManagementDeploymentCommand() { +#if !POWERSHELL_WINDOWS InitializeUndockedRegFreeWinRT(); +#endif } /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// psCmdlet. - internal ClientCommand(PSCmdlet psCmdlet) + internal ManagementDeploymentCommand(PSCmdlet psCmdlet) : base(psCmdlet) { #if POWERSHELL_WINDOWS - throw new NotSupportedException(Resources.WindowsPowerShellNotSupported); + throw new WindowsPowerShellNotSupported(); #endif } @@ -43,7 +45,7 @@ internal ClientCommand(PSCmdlet psCmdlet) /// A list of instances. /// The name of the source to retrieve. If null, then all sources are returned. /// The source does not exist. - protected static IReadOnlyList GetPackageCatalogReferences(string source) + protected IReadOnlyList GetPackageCatalogReferences(string source) { if (string.IsNullOrEmpty(source)) { diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs index ef7be8d58d..862264e6b5 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs @@ -13,6 +13,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands.Common using Microsoft.WinGet.Client.Engine.Exceptions; using Microsoft.WinGet.Client.Engine.Extensions; using Microsoft.WinGet.Client.Engine.Helpers; + using Microsoft.WinGet.Client.Engine.PSObjects; /// /// This is the base class for commands which operate on a specific package and version i.e., @@ -35,7 +36,7 @@ internal PackageCommand(PSCmdlet psCmdlet) /// /// Must match the name of the field on the class. /// - protected CatalogPackage CatalogPackage { get; set; } = null; + protected PSCatalogPackage CatalogPackage { get; set; } = null; /// /// Gets or sets the version to install. @@ -51,12 +52,14 @@ internal PackageCommand(PSCmdlet psCmdlet) /// Executes a command targeting a specific package version. /// /// The value. + /// The match option. /// The method to call after retrieving the package and version to operate upon. protected void GetPackageAndExecute( CompositeSearchBehavior behavior, + PackageFieldMatchOption match, Action callback) { - CatalogPackage package = this.GetCatalogPackage(behavior); + CatalogPackage package = this.GetCatalogPackage(behavior, match); PackageVersionId version = this.GetPackageVersionId(package); if (this.PsCmdlet.ShouldProcess(package.ToString(version))) { @@ -72,29 +75,30 @@ protected void GetPackageAndExecute( /// The query value. 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 = 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 results = this.FindPackages(behavior, 0); + IReadOnlyList 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 index 67c8fbc624..ef94f5b6b1 100644 --- 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; /// @@ -29,7 +26,6 @@ public sealed class FinderPackageCommand : FinderExtendedCommand /// Moniker of package. /// Source to search. If null, all are searched. /// Match against any field of a package. - /// Match option. /// Tag of the package. /// Command of the package. /// Max results to return. @@ -40,7 +36,6 @@ public FinderPackageCommand( string moniker, string source, string[] query, - string matchOption, string tag, string command, uint count) @@ -52,7 +47,6 @@ public FinderPackageCommand( this.Moniker = moniker; this.Source = source; this.Query = query; - this.MatchOption = PSEnumHelpers.ToPackageFieldMatchOption(matchOption); // FinderExtendedCommand this.Tag = tag; @@ -63,9 +57,10 @@ public FinderPackageCommand( /// /// Process find package command. /// - public void Find() + /// PSPackageFieldMatchOption. + 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)); @@ -75,9 +70,10 @@ public void Find() /// /// Process get package command. /// - public void Get() + /// PSPackageFieldMatchOption. + 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 index 7a64e6f8cd..1867815099 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs @@ -8,6 +8,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands { using System; using System.Management.Automation; + using System.Text.RegularExpressions; using Microsoft.Management.Deployment; using Microsoft.WinGet.Client.Engine.Commands.Common; using Microsoft.WinGet.Client.Engine.Helpers; @@ -38,7 +39,6 @@ public sealed class InstallerPackageCommand : InstallCommand /// Moniker of package. /// Source to search. If null, all are searched. /// Match against any field of a package. - /// Match option. public InstallerPackageCommand( PSCmdlet psCmdlet, string psInstallMode, @@ -55,12 +55,10 @@ public InstallerPackageCommand( string name, string moniker, string source, - string[] query, - string matchOption) + string[] query) : base(psCmdlet) { // InstallCommand. - this.Mode = PSEnumHelpers.ToPackageInstallMode(psInstallMode); this.Override = @override; this.Custom = custom; this.Location = location; @@ -71,7 +69,7 @@ public InstallerPackageCommand( // PackageCommand. if (psCatalogPackage != null) { - this.CatalogPackage = psCatalogPackage.CatalogPackageCOM; + this.CatalogPackage = psCatalogPackage; } this.Version = version; @@ -83,7 +81,6 @@ public InstallerPackageCommand( this.Moniker = moniker; this.Source = source; this.Query = query; - this.MatchOption = PSEnumHelpers.ToPackageFieldMatchOption(matchOption); } /// @@ -91,40 +88,55 @@ public InstallerPackageCommand( /// /// PSPackageInstallScope. /// PSProcessorArchitecture. + /// PSPackageFieldMatchOption. + /// PSPackageInstallMode. 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)); + }); } /// /// Process update package command. /// /// If updating to an unknown version is allowed. - public void Update(bool includeUnknown) + /// PSPackageFieldMatchOption. + /// PSPackageInstallMode. + 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( diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/SourceCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/SourceCommand.cs index 3570002e95..0b6e10947d 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/SourceCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/SourceCommand.cs @@ -6,7 +6,6 @@ namespace Microsoft.WinGet.Client.Engine.Commands { - using System; using System.Management.Automation; using Microsoft.WinGet.Client.Engine.Commands.Common; using Microsoft.WinGet.Client.Engine.PSObjects; @@ -14,7 +13,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands /// /// Wrapper for source cmdlets. /// - public sealed class SourceCommand : ClientCommand + public sealed class SourceCommand : ManagementDeploymentCommand { /// /// Initializes a new instance of the class. @@ -32,7 +31,7 @@ public SourceCommand(PSCmdlet psCmdlet) /// Optional name. 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 index f8ec6d479a..5cd291231e 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/UninstallPackageCommand.cs @@ -31,7 +31,6 @@ public sealed class UninstallPackageCommand : PackageCommand /// Moniker of package. /// Source to search. If null, all are searched. /// Match against any field of a package. - /// Match option. public UninstallPackageCommand( PSCmdlet psCmdlet, PSCatalogPackage psCatalogPackage, @@ -41,14 +40,13 @@ public UninstallPackageCommand( string name, string moniker, string source, - string[] query, - string matchOption) + string[] query) : base(psCmdlet) { // PackageCommand. if (psCatalogPackage != null) { - this.CatalogPackage = psCatalogPackage.CatalogPackageCOM; + this.CatalogPackage = psCatalogPackage; } this.Version = version; @@ -60,24 +58,28 @@ public UninstallPackageCommand( this.Moniker = moniker; this.Source = source; this.Query = query; - this.MatchOption = PSEnumHelpers.ToPackageFieldMatchOption(matchOption); } /// /// Process uninstall package. /// /// PSPackageUninstallMode. + /// PSPackageFieldMatchOption. /// Force. 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( diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Exceptions/WindowsPowerShellNotSupported.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Exceptions/WindowsPowerShellNotSupported.cs new file mode 100644 index 0000000000..5c4f8a6c84 --- /dev/null +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Exceptions/WindowsPowerShellNotSupported.cs @@ -0,0 +1,27 @@ +// ----------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. Licensed under the MIT License. +// +// ----------------------------------------------------------------------------- + +namespace Microsoft.WinGet.Client.Engine.Exceptions +{ + using System; + using System.Management.Automation; + using Microsoft.WinGet.Client.Engine.Properties; + + /// + /// Windows PowerShell is not supported. + /// + [Serializable] + public class WindowsPowerShellNotSupported : RuntimeException + { + /// + /// Initializes a new instance of the class. + /// + public WindowsPowerShellNotSupported() + : base(Resources.WindowsPowerShellNotSupported) + { + } + } +} diff --git a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 index cad7598857..40923c5917 100644 --- 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" + } } } @@ -108,7 +111,7 @@ Describe 'Get-WinGetVersion' { } } -Describe 'Get|Add|Reset-WinGetSource' { +Describe 'Get|Add|Reset-WinGetSource' -Skip:($PSEdition -eq "Desktop") { BeforeAll { AddTestSource @@ -133,7 +136,7 @@ Describe 'Get|Add|Reset-WinGetSource' { } } -Describe 'Find-WinGetPackage' { +Describe 'Find-WinGetPackage' -Skip:($PSEdition -eq "Desktop") { BeforeAll { AddTestSource @@ -186,7 +189,7 @@ Describe 'Find-WinGetPackage' { } } -Describe 'Install|Update|Uninstall-WinGetPackage' { +Describe 'Install|Update|Uninstall-WinGetPackage' -Skip:($PSEdition -eq "Desktop") { BeforeAll { AddTestSource @@ -262,7 +265,7 @@ Describe 'Install|Update|Uninstall-WinGetPackage' { } } -Describe 'Get-WinGetPackage' { +Describe 'Get-WinGetPackage' -Skip:($PSEdition -eq "Desktop") { BeforeAll { AddTestSource @@ -546,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 @@ -554,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 @@ -567,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 } @@ -578,7 +581,7 @@ Describe 'Test-GroupPolicies' { } } -Describe 'WindowsPackageManagerServer' { +Describe 'WindowsPackageManagerServer' -Skip:($PSEdition -eq "Desktop") { BeforeEach { AddTestSource @@ -644,6 +647,18 @@ Describe 'WindowsPackageManagerServer' { } } +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 index 63ad375dc0..ae283cbe0b 100644 --- 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 +} + From 034c019f64658ea0190549a27a3427c384e9fe0f Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Tue, 19 Sep 2023 14:43:02 -0700 Subject: [PATCH 11/13] Spelling and remove unused code --- .github/actions/spelling/expect.txt | 2 ++ .../Commands/Common/InstallCommand.cs | 2 +- .../Commands/InstallerPackageCommand.cs | 2 -- .../Helpers/PackageManagerWrapper.cs | 2 +- src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 | 1 - src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt index 7017582937..334e4be592 100644 --- a/.github/actions/spelling/expect.txt +++ b/.github/actions/spelling/expect.txt @@ -325,6 +325,7 @@ objbase objidl ofile ools +oop OPTOUT osfhandle Outptr @@ -464,6 +465,7 @@ TOptions TProgress transitioning TResult +TReturn trimstart TState TStatus diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs index ecefb2fcd7..4d662149bd 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs @@ -60,7 +60,7 @@ internal InstallCommand(PSCmdlet psCmdlet) /// Gets the install options from the configured parameters. /// /// The to install. - /// Pacakge install mode as string. + /// Package install mode as string. /// An instance. protected virtual InstallOptions GetInstallOptions(PackageVersionId version, string mode) { diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs index 1867815099..ef2bf88561 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/InstallerPackageCommand.cs @@ -6,9 +6,7 @@ namespace Microsoft.WinGet.Client.Engine.Commands { - using System; using System.Management.Automation; - using System.Text.RegularExpressions; using Microsoft.Management.Deployment; using Microsoft.WinGet.Client.Engine.Commands.Common; using Microsoft.WinGet.Client.Engine.Helpers; diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs index e7e72aa204..76a1477a6d 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs @@ -36,7 +36,7 @@ public static PackageManagerWrapper Instance } /// - /// Wrapper for InstalllPackageAsync. + /// Wrapper for InstallPackageAsync. /// /// The package to install. /// The install options. diff --git a/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 b/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 index 19db9b855b..390ccb7cb4 100644 --- a/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 +++ b/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 @@ -61,7 +61,6 @@ class WinGetModule [void]PrepareBinaryFiles([string] $buildRoot, [string] $config) { - #xcopy "$buildRoot\AnyCpu\$config\PowerShell\$($this.Name)\" $this.Output /d /s /f /y $copyErrors = $null Copy-Item "$buildRoot\AnyCpu\$config\PowerShell\$($this.Name)\*" $this.Output -Force -Recurse -ErrorVariable copyErrors -ErrorAction SilentlyContinue $copyErrors | ForEach-Object { Write-Warning $_ } diff --git a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 index 40923c5917..d374287c35 100644 --- a/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 +++ b/src/PowerShell/tests/Microsoft.WinGet.Client.Tests.ps1 @@ -618,7 +618,7 @@ Describe 'WindowsPackageManagerServer' -Skip:($PSEdition -eq "Desktop") { # 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 = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateOutOfProcessRunspace($typeTable) $oopRunspace.Open() $oopPwsh = [PowerShell]::Create() $oopPwsh.Runspace = $oopRunspace From 29b2ce9a88e0f84eecc5736d9c4a610eed0a4dd1 Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Tue, 19 Sep 2023 18:29:52 -0700 Subject: [PATCH 12/13] add comments --- .../Commands/Common/FinderCommand.cs | 3 +++ .../Commands/Common/InstallCommand.cs | 3 +++ .../Commands/Common/PackageCommand.cs | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs index 32ca51cbc0..1a82fe6553 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/FinderCommand.cs @@ -88,6 +88,9 @@ protected IReadOnlyList FindPackages( /// /// 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. /// /// The options object. /// The match type as string. diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs index 4d662149bd..028aba9766 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/InstallCommand.cs @@ -58,6 +58,9 @@ internal InstallCommand(PSCmdlet psCmdlet) /// /// 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. /// /// The to install. /// Package install mode as string. diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs index 862264e6b5..31d522835c 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/Common/PackageCommand.cs @@ -69,6 +69,9 @@ protected void GetPackageAndExecute( /// /// 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. /// /// The options object. /// The match type. From bacc677ac0735a599fe31a87d5e3289b17a95f5d Mon Sep 17 00:00:00 2001 From: Ruben Guerrero Samaniego Date: Mon, 23 Oct 2023 13:57:20 -0700 Subject: [PATCH 13/13] PR feedback --- azure-pipelines.yml | 3 ++ .../Acl/WinGetAssemblyLoadContext.cs | 20 +++-------- .../Helpers/ManagementDeploymentFactory.cs | 23 ++++--------- .../Helpers/PackageManagerWrapper.cs | 34 +++++++++++-------- .../Acl/CustomAssemblyLoadContext.cs | 19 +++-------- .../scripts/Initialize-LocalWinGetModules.ps1 | 9 +++-- 6 files changed, 47 insertions(+), 61 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a7aa17713c..38908034b7 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -472,6 +472,7 @@ jobs: - 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 PowerShell 7 @@ -479,6 +480,7 @@ jobs: testResultsFormat: 'NUnit' testResultsFiles: '$(Pipeline.Workspace)\PesterTest\Test*.xml' failTaskOnFailedTests: true + condition: succeededOrFailed() - task: PublishTestResults@2 displayName: Publish Pester Test Results Windows PowerShell @@ -486,6 +488,7 @@ jobs: testResultsFormat: 'NUnit' testResultsFiles: '$(Pipeline.Workspace)\WPPesterTest\Test*.xml' failTaskOnFailedTests: true + condition: succeededOrFailed() - task: PublishPipelineArtifact@1 displayName: Publish PowerShell Module Artifacts diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Acl/WinGetAssemblyLoadContext.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Acl/WinGetAssemblyLoadContext.cs index 300f275a3f..cc4edc4a24 100644 --- 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; /// @@ -36,7 +37,7 @@ internal class WinGetAssemblyLoadContext : AssemblyLoadContext Path.GetDirectoryName(typeof(WinGetAssemblyLoadContext).Assembly.Location), "DirectDependencies"); - private static readonly IEnumerable ValidArchs = new string[] { "x86", "x64" }; + private static readonly IEnumerable ValidArchs = new Architecture[] { Architecture.X86, Architecture.X64 }; private static readonly WinGetAssemblyLoadContext WinGetAcl = new (); @@ -45,24 +46,13 @@ internal class WinGetAssemblyLoadContext : AssemblyLoadContext private WinGetAssemblyLoadContext() : 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()); } /// diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs index bab7f36199..4849654402 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/ManagementDeploymentFactory.cs @@ -7,6 +7,7 @@ namespace Microsoft.WinGet.Client.Engine.Helpers { using System; + using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; @@ -64,6 +65,8 @@ internal sealed class ManagementDeploymentFactory 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 ValidArchs = new Architecture[] { Architecture.X86, Architecture.X64 }; + private static readonly Lazy Lazy = new (() => new ManagementDeploymentFactory()); /// @@ -159,26 +162,14 @@ private static T Create(Type type, in Guid iid) { if (Utilities.UsesInProcWinget) { - var validArchs = new string[] { "x86", "x64" }; - 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"; - } - - if (!validArchs.Contains(arch)) + var arch = RuntimeInformation.ProcessArchitecture; + if (!ValidArchs.Contains(arch)) { - throw new NotSupportedException(arch); + throw new NotSupportedException(arch.ToString()); } string executingAssemblyLocation = Assembly.GetExecutingAssembly().Location; - string executingAssemblyDirectory = Path.Combine(Path.GetDirectoryName(executingAssemblyLocation), arch); + string executingAssemblyDirectory = Path.Combine(Path.GetDirectoryName(executingAssemblyLocation), arch.ToString().ToLower()); SetDllDirectoryW(executingAssemblyDirectory); diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs index 76a1477a6d..29f3c1ab72 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Helpers/PackageManagerWrapper.cs @@ -43,8 +43,9 @@ public static PackageManagerWrapper Instance /// An async operation with progress. public IAsyncOperationWithProgress InstallPackageAsync(CatalogPackage package, InstallOptions options) { - return this.ExecuteWithRetry( - () => this.packageManager.InstallPackageAsync(package, options)); + return this.Execute( + () => this.packageManager.InstallPackageAsync(package, options), + false); } /// @@ -55,8 +56,9 @@ public IAsyncOperationWithProgress InstallPackag /// An async operation with progress. public IAsyncOperationWithProgress UpgradePackageAsync(CatalogPackage package, InstallOptions options) { - return this.ExecuteWithRetry( - () => this.packageManager.UpgradePackageAsync(package, options)); + return this.Execute( + () => this.packageManager.UpgradePackageAsync(package, options), + false); } /// @@ -67,8 +69,9 @@ public IAsyncOperationWithProgress UpgradePackag /// An async operation with progress. public IAsyncOperationWithProgress UninstallPackageAsync(CatalogPackage package, UninstallOptions options) { - return this.ExecuteWithRetry( - () => this.packageManager.UninstallPackageAsync(package, options)); + return this.Execute( + () => this.packageManager.UninstallPackageAsync(package, options), + false); } /// @@ -77,8 +80,9 @@ public IAsyncOperationWithProgress Uninstall /// A list of PackageCatalogReferences. public IReadOnlyList GetPackageCatalogs() { - return this.ExecuteWithRetry( - () => this.packageManager.GetPackageCatalogs()); + return this.Execute( + () => this.packageManager.GetPackageCatalogs(), + true); } /// @@ -88,8 +92,9 @@ public IReadOnlyList GetPackageCatalogs() /// A PackageCatalogReference. public PackageCatalogReference GetPackageCatalogByName(string source) { - return this.ExecuteWithRetry( - () => this.packageManager.GetPackageCatalogByName(source)); + return this.Execute( + () => this.packageManager.GetPackageCatalogByName(source), + true); } /// @@ -99,11 +104,12 @@ public PackageCatalogReference GetPackageCatalogByName(string source) /// A PackageCatalogReference. public PackageCatalogReference CreateCompositePackageCatalog(CreateCompositePackageCatalogOptions options) { - return this.ExecuteWithRetry( - () => this.packageManager.CreateCompositePackageCatalog(options)); + return this.Execute( + () => this.packageManager.CreateCompositePackageCatalog(options), + false); } - private TReturn ExecuteWithRetry(Func func) + private TReturn Execute(Func func, bool canRetry) { bool stopRetry = false; while (true) @@ -121,7 +127,7 @@ private TReturn ExecuteWithRetry(Func func) { this.packageManager = null; - if (stopRetry) + if (stopRetry || !canRetry) { throw; } diff --git a/src/PowerShell/Microsoft.WinGet.Configuration.Cmdlets/Acl/CustomAssemblyLoadContext.cs b/src/PowerShell/Microsoft.WinGet.Configuration.Cmdlets/Acl/CustomAssemblyLoadContext.cs index 02d857ec4f..8f242517ef 100644 --- 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; /// @@ -35,7 +36,7 @@ internal class CustomAssemblyLoadContext : AssemblyLoadContext Path.GetDirectoryName(typeof(CustomAssemblyLoadContext).Assembly.Location), "DirectDependencies"); - private static readonly IEnumerable ValidArchs = new string[] { "x86", "x64", "arm64" }; + private static readonly IEnumerable ValidArchs = new Architecture[] { Architecture.X86, Architecture.X64, Architecture.Arm64 }; private static readonly CustomAssemblyLoadContext WinGetAcl = new (); @@ -44,24 +45,14 @@ internal class CustomAssemblyLoadContext : AssemblyLoadContext 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()); } /// diff --git a/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 b/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 index 929e3376c8..55613b336f 100644 --- a/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 +++ b/src/PowerShell/scripts/Initialize-LocalWinGetModules.ps1 @@ -162,8 +162,10 @@ if ($BuildRoot -eq "") } # Modules, they should be in dependency order so that when importing we don't pick up the release modules. +$local:modules = @() if ($moduleToConfigure.HasFlag([ModuleType]::Client)) { + 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) @@ -174,18 +176,20 @@ if ($moduleToConfigure.HasFlag([ModuleType]::Client)) "UndockedRegFreeWinRT\winrtact.dll" ) $module.AddArchSpecificFiles($additionalFiles, "net6.0-windows10.0.22000.0\SharedDependencies", $BuildRoot, $Configuration) + $modules += $module } if ($moduleToConfigure.HasFlag([ModuleType]::DSC)) { - Write-Host "DSC" + Write-Host "Setting up Microsoft.WinGet.DSC" $module = [WinGetModule]::new("Microsoft.WinGet.DSC", "$PSScriptRoot\..\Microsoft.WinGet.DSC\", $moduleRootOutput) $module.PrepareScriptFiles() + $modules += $module } if ($moduleToConfigure.HasFlag([ModuleType]::Configuration)) { - Write-Host "Config" + 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) @@ -197,6 +201,7 @@ if ($moduleToConfigure.HasFlag([ModuleType]::Configuration)) "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.