From 76fea143ffe5e3883dcd04e0923b4b8e1e158145 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Jare=C5=A1?= Date: Mon, 14 Aug 2023 19:34:39 +0200 Subject: [PATCH] Fix executable bitness for testhost.x86 (#4652) (#4654) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Amaury Levé --- azure-pipelines.yml | 5 ++ eng/verify-nupkgs-exe-version.ps1 | 8 ++ eng/verify-nupkgs-exe.ps1 | 90 +++++++++++++++++++ .../DumpMinitool.arm64.csproj | 4 +- src/testhost.x86/testhost.x86.csproj | 9 +- .../Build.cs | 1 + 6 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 eng/verify-nupkgs-exe-version.ps1 create mode 100644 eng/verify-nupkgs-exe.ps1 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 08fa02544b..dcdbb04808 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -87,6 +87,8 @@ variables: - name: VisualStudioDropName value: Products/$(System.TeamProject)/$(Build.DefinitionName)/$(Build.SourceBranchName)/$(Build.BuildNumber) - name: _InternalBuildArgs + # IncludeSourceRevisionInInformationalVersion prevents ProductVersion (on file), and AssemblyInformationalVersion + # from appending +, which breaks DTAAgent. value: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) /p:DotNetFinalVersionKind=$(_ReleaseVersionKind) @@ -96,6 +98,7 @@ variables: /p:OfficialBuildId=$(BUILD.BUILDNUMBER) /p:VisualStudioDropName=$(VisualStudioDropName) /p:GenerateSbom=true + /p:IncludeSourceRevisionInInformationalVersion=false stages: @@ -152,9 +155,11 @@ stages: displayName: Build # -ci is allowing to import some environment variables and some required configurations + # -nobl avoid overwriting binlog of the main Build - script: Test.cmd -configuration $(_BuildConfig) -ci + -nobl -integrationTest -performanceTest name: Test diff --git a/eng/verify-nupkgs-exe-version.ps1 b/eng/verify-nupkgs-exe-version.ps1 new file mode 100644 index 0000000000..7535b9aef3 --- /dev/null +++ b/eng/verify-nupkgs-exe-version.ps1 @@ -0,0 +1,8 @@ +Get-ChildItem S:\p\vstest3\artifacts\packages\Debug\Shipping -Filter vstest.console.exe -Recurse -Force | ForEach-Object { + if ($_.VersionInfo.ProductVersion.Contains("+")) { + throw "Some files contain '+' in the ProductVersion, this breaks DTAAgent in AzDO." + } + else { + "$_ version $($_.VersionInfo.ProductVersion) is ok." + } +} \ No newline at end of file diff --git a/eng/verify-nupkgs-exe.ps1 b/eng/verify-nupkgs-exe.ps1 new file mode 100644 index 0000000000..459a4dcb43 --- /dev/null +++ b/eng/verify-nupkgs-exe.ps1 @@ -0,0 +1,90 @@ +$exclusions = @{ + "CodeCoverage\CodeCoverage.exe" = "x86" + "Dynamic Code Coverage Tools\CodeCoverage.exe" = "x86" + "amd64\CodeCoverage.exe" = "x64" + + "IntelliTrace.exe" = "x86" + "ProcessSnapshotCleanup.exe" = "x86-64" + "TDEnvCleanup.exe" = "x86" + + "TestPlatform\SettingsMigrator.exe" = "x86" + + "dump\DumpMinitool.exe" = "x86-64" + + "QTAgent32.exe" = "x86" + "QTAgent32_35.exe" = "x86" + "QTAgent32_40.exe" = "x86" + "QTDCAgent32.exe" = "x86" + + "V1\VSTestVideoRecorder.exe" = "x86" + "VideoRecorder\VSTestVideoRecorder.exe" = "x86" +} + +$errs = @() +Get-ChildItem S:\p\vstest3\artifacts\packages\Debug\Shipping -Filter *.exe -Recurse -Force | ForEach-Object { + $m = & "C:\Program Files\Microsoft Visual Studio\2022\IntPreview\VC\Tools\MSVC\14.38.32919\bin\HostX86\x86\dumpbin.exe" /headers $_.FullName | Select-String "machine \((.*)\)" + if (-not $m.Matches.Success) { + $err = "Did not find the platform of the exe $fullName)." + } + + $platform = $m.Matches.Groups[1].Value + $fullName = $_.FullName + $name = $_.Name + + if ("x86" -eq $platform) { + $corFlags = "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\CorFlags.exe" + $corFlagsOutput = & $corFlags $fullName + # this is an native x86 exe or a .net x86 that requires of prefers 32bit + $platform = if ($corFlagsOutput -like "*does not have a valid managed header*" -or $corFlagsOutput -like "*32BITREQ : 1*" -or $corFlagsOutput -like "*32BITPREF : 1*") { + # this is an native x86 exe or a .net x86 that requires of prefers 32bit + "x86" } else { + # this is a x86 executable that is built as AnyCpu and does not prefer 32-bit so it will run as x64 on 64-bit system. + "x86-64" } + } + + if (($pair = $exclusions.GetEnumerator() | Where-Object { $fullName -like "*$($_.Name)" })) { + if (1 -lt $($pair).Count) { + $err = "Too many paths matched the query, only one match is allowed. Matches: $($pair.Name)" + $errs += $err + Write-Host -ForegroundColor Red Error: $err + } + + if ($platform -ne $pair.Value) { + $err = "$fullName must have architecture $($pair.Value), but it was $platform." + $errs += $err + Write-Host -ForegroundColor Red Error: $err + } + } + elseif ("x86" -eq $platform) { + if ($name -notlike "*x86*") { + $err = "$fullName has architecture $platform, and must contain x86 in the name of the executable." + $errs += $err + Write-Host -ForegroundColor Red Error: $err + } + } + elseif ($platform -in "x64", "x86-64") { + if ($name -like "*x86*" -or $name -like "*arm64*") { + $err = "$fullName has architecture $platform, and must NOT contain x86 or arm64 in the name of the executable." + $errs += $err + Write-Host -ForegroundColor Red Error: $err + } + } + elseif ("arm64" -eq $platform) { + if ($name -notlike "*arm64*") { + $err = "$fullName has architecture $platform, and must contain arm64 in the name of the executable." + $errs += $err + Write-Host -ForegroundColor Red Error: $err + } + } + else { + $err = "$fullName has unknown architecture $platform." + $errs += $err + Write-Host -ForegroundColor Red $err + } + + "Success: $name is $platform - $fullName" +} + +if ($errs) { + throw "Fail!:`n$($errs -join "`n")" +} \ No newline at end of file diff --git a/src/DataCollectors/DumpMinitool.arm64/DumpMinitool.arm64.csproj b/src/DataCollectors/DumpMinitool.arm64/DumpMinitool.arm64.csproj index 772550f6a5..713c464a0f 100644 --- a/src/DataCollectors/DumpMinitool.arm64/DumpMinitool.arm64.csproj +++ b/src/DataCollectors/DumpMinitool.arm64/DumpMinitool.arm64.csproj @@ -3,11 +3,13 @@ net7.0;net6.0;$(NetFrameworkMinimum) - AnyCPU false Exe false win10-arm64 + + AnyCPU false true + NETSDK1201 + $(NoWarn);NETSDK1201 - win7-x86 false $(AssemblyName.Replace('.x86', '')).$(TargetFramework).x86 diff --git a/test/Microsoft.TestPlatform.Acceptance.IntegrationTests/Build.cs b/test/Microsoft.TestPlatform.Acceptance.IntegrationTests/Build.cs index b751ccfc29..2f22dffdba 100644 --- a/test/Microsoft.TestPlatform.Acceptance.IntegrationTests/Build.cs +++ b/test/Microsoft.TestPlatform.Acceptance.IntegrationTests/Build.cs @@ -42,6 +42,7 @@ private static void SetDotnetEnvironment() #pragma warning disable RS0030 // Do not used banned APIs Environment.SetEnvironmentVariable("DOTNET_MULTILEVEL_LOOKUP", "0"); Environment.SetEnvironmentVariable("DOTNET_ROOT", DotnetDir); + Environment.SetEnvironmentVariable("DOTNET_ROOT(x86)", Path.Combine(DotnetDir, "dotnet-sdk-x86")); Environment.SetEnvironmentVariable("PATH", $"{DotnetDir};{Environment.GetEnvironmentVariable("PATH")}"); #pragma warning restore RS0030 // Do not used banned APIs }