diff --git a/TestPlatform.sln b/TestPlatform.sln index 3701df2db4..b4b03614bd 100644 --- a/TestPlatform.sln +++ b/TestPlatform.sln @@ -179,9 +179,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest1", "playground\MSTes EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AttachmentProcessorDataCollector", "test\TestAssets\AttachmentProcessorDataCollector\AttachmentProcessorDataCollector.csproj", "{B6AF6BCD-64C6-4F4E-ABCA-C8AA2AA66B7B}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "testhost.arm64", "src\testhost.arm64\testhost.arm64.csproj", "{186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}" +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution src\Microsoft.TestPlatform.Execution.Shared\Microsoft.TestPlatform.Execution.Shared.projitems*{10b6ade1-f808-4612-801d-4452f5b52242}*SharedItemsImports = 5 + src\Microsoft.TestPlatform.Execution.Shared\Microsoft.TestPlatform.Execution.Shared.projitems*{186069fe-e1e8-4de1-bea4-0ff1484d22d1}*SharedItemsImports = 5 src\Microsoft.TestPlatform.Execution.Shared\Microsoft.TestPlatform.Execution.Shared.projitems*{27dfbd04-64b2-4f1b-82b2-006620cca6f8}*SharedItemsImports = 5 src\Microsoft.TestPlatform.Execution.Shared\Microsoft.TestPlatform.Execution.Shared.projitems*{2c7ce1f8-e73e-4987-8023-b5a0ebac86e8}*SharedItemsImports = 5 src\Microsoft.TestPlatform.Execution.Shared\Microsoft.TestPlatform.Execution.Shared.projitems*{71cb42ff-e750-4a3b-9c3a-ac938853cc89}*SharedItemsImports = 5 @@ -880,6 +883,18 @@ Global {B6AF6BCD-64C6-4F4E-ABCA-C8AA2AA66B7B}.Release|x64.Build.0 = Release|Any CPU {B6AF6BCD-64C6-4F4E-ABCA-C8AA2AA66B7B}.Release|x86.ActiveCfg = Release|Any CPU {B6AF6BCD-64C6-4F4E-ABCA-C8AA2AA66B7B}.Release|x86.Build.0 = Release|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Debug|x64.ActiveCfg = Debug|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Debug|x64.Build.0 = Debug|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Debug|x86.ActiveCfg = Debug|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Debug|x86.Build.0 = Debug|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Release|Any CPU.Build.0 = Release|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Release|x64.ActiveCfg = Release|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Release|x64.Build.0 = Release|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Release|x86.ActiveCfg = Release|Any CPU + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -955,6 +970,7 @@ Global {545A88D3-1AE2-4D39-9B7C-C691768AD17F} = {6CE2F530-582B-4695-A209-41065E103426} {57A61A09-10AD-44BE-8DF4-A6FD108F7DF7} = {6CE2F530-582B-4695-A209-41065E103426} {B6AF6BCD-64C6-4F4E-ABCA-C8AA2AA66B7B} = {D9A30E32-D466-4EC5-B4F2-62E17562279B} + {186069FE-E1E8-4DE1-BEA4-0FF1484D22D1} = {ED0C35EB-7F31-4841-A24F-8EB708FFA959} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0541B30C-FF51-4E28-B172-83F5F3934BCD} diff --git a/scripts/build.ps1 b/scripts/build.ps1 index 869fc17001..341d640b26 100644 --- a/scripts/build.ps1 +++ b/scripts/build.ps1 @@ -92,6 +92,7 @@ $TPB_Configuration = $Configuration $TPB_TargetRuntime = $TargetRuntime $TPB_X64_Runtime = "win7-x64" $TPB_X86_Runtime = "win7-x86" +$TPB_ARM64_Runtime = "win10-arm64" # Version suffix is empty for RTM release $TPB_Version = if ($VersionSuffix -ne '') { $Version + "-" + $VersionSuffix } else { $Version } @@ -206,19 +207,24 @@ function Publish-Package $packageProject = Join-Path $env:TP_PACKAGE_PROJ_DIR "package\package.csproj" $testHostProject = Join-Path $env:TP_ROOT_DIR "src\testhost\testhost.csproj" $testHostx86Project = Join-Path $env:TP_ROOT_DIR "src\testhost.x86\testhost.x86.csproj" + $testHostarm64Project = Join-Path $env:TP_ROOT_DIR "src\testhost.arm64\testhost.arm64.csproj" $testhostFullPackageDir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFramework451\$TPB_TargetRuntime") $testhostCore20PackageDir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore20") $testhostCore20PackageX64Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore20\$TPB_X64_Runtime") $testhostCore20PackageX86Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore20\$TPB_X86_Runtime") + $testhostCore20PackageARM64Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore20\$TPB_ARM64_Runtime") $testhostCore20PackageTempX64Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\publishTemp\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore20\$TPB_X64_Runtime") $testhostCore20PackageTempX86Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\publishTemp\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore20\$TPB_X86_Runtime") + $testhostCore20PackageTempARM64Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\publishTemp\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore20\$TPB_ARM64_Runtime") $testhostCore10PackageDir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore10") $testhostCore10PackageX64Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore10\$TPB_X64_Runtime") $testhostCore10PackageX86Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore10\$TPB_X86_Runtime") + $testhostCore10PackageARM64Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore10\$TPB_ARM64_Runtime") $testhostCore10PackageTempX64Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\publishTemp\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore10\$TPB_X64_Runtime") $testhostCore10PackageTempX86Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\publishTemp\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore10\$TPB_X86_Runtime") + $testhostCore10PackageTempARM64Dir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\publishTemp\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkCore10\$TPB_ARM64_Runtime") $testhostUapPackageDir = $(Join-Path $env:TP_OUT_DIR "$TPB_Configuration\Microsoft.TestPlatform.TestHost\$TPB_TargetFrameworkUap100") $vstestConsoleProject = Join-Path $env:TP_ROOT_DIR "src\vstest.console\vstest.console.csproj" @@ -258,6 +264,11 @@ function Publish-Package Publish-PackageWithRuntimeInternal $testHostx86Project $TPB_TargetFrameworkCore20 $TPB_X86_Runtime false $testhostCore20PackageTempX86Dir Publish-PackageWithRuntimeInternal $testHostx86Project $TPB_TargetFrameworkCore10 $TPB_X86_Runtime true $testhostCore10PackageTempX86Dir + Write-Log "Package: Publish testhost.arm64\testhost.arm64.csproj" + Publish-PackageInternal $testHostarm64Project $TPB_TargetFramework451 $testhostFullPackageDir + Publish-PackageWithRuntimeInternal $testHostarm64Project $TPB_TargetFrameworkCore20 $TPB_ARM64_Runtime false $testhostCore20PackageTempARM64Dir + Publish-PackageWithRuntimeInternal $testHostarm64Project $TPB_TargetFrameworkCore10 $TPB_ARM64_Runtime true $testhostCore10PackageTempARM64Dir + # Copy the .NET multitarget testhost exes to destination folder (except for net451 which is the default) foreach ($tfm in "net452;net46;net461;net462;net47;net471;net472;net48" -split ";") { Copy-Item "$(Split-Path $testHostProject)\bin\$TPB_Configuration\$tfm\$TPB_X64_Runtime\testhost.$tfm.exe" $testhostFullPackageDir\testhost.$tfm.exe -Force @@ -272,7 +283,14 @@ function Publish-Package Copy-Item "$(Split-Path $testHostx86Project)\bin\$TPB_Configuration\$tfm\$TPB_X86_Runtime\testhost.$tfm.x86.exe.config" $testhostFullPackageDir\testhost.$tfm.x86.exe.config -Force } - # Copy the .NET core x86 and x64 testhost exes from tempPublish to required folder + # Copy the .NET multitarget testhost.arm64 exes to destination folder (except for net451 which is the default) + foreach ($tfm in "net452;net46;net461;net462;net47;net471;net472;net48" -split ";") { + Copy-Item "$(Split-Path $testHostarm64Project)\bin\$TPB_Configuration\$tfm\$TPB_ARM64_Runtime\testhost.$tfm.arm64.exe" $testhostFullPackageDir\testhost.$tfm.arm64.exe -Force + Copy-Item "$(Split-Path $testHostarm64Project)\bin\$TPB_Configuration\$tfm\$TPB_ARM64_Runtime\testhost.$tfm.arm64.pdb" $testhostFullPackageDir\testhost.$tfm.arm64.pdb -Force + Copy-Item "$(Split-Path $testHostarm64Project)\bin\$TPB_Configuration\$tfm\$TPB_ARM64_Runtime\testhost.$tfm.arm64.exe.config" $testhostFullPackageDir\testhost.$tfm.arm64.exe.config -Force + } + + # Copy the .NET core x86, x64 and arm64 testhost exes from tempPublish to required folder New-Item -ItemType directory -Path $testhostCore20PackageX64Dir -Force | Out-Null Copy-Item $testhostCore20PackageTempX64Dir\testhost* $testhostCore20PackageX64Dir -Force -Recurse Copy-Item $testhostCore20PackageTempX64Dir\Microsoft.TestPlatform.PlatformAbstractions.dll $testhostCore20PackageX64Dir -Force @@ -281,6 +299,10 @@ function Publish-Package Copy-Item $testhostCore20PackageTempX86Dir\testhost.x86* $testhostCore20PackageX86Dir -Force -Recurse Copy-Item $testhostCore20PackageTempX86Dir\Microsoft.TestPlatform.PlatformAbstractions.dll $testhostCore20PackageX86Dir -Force + New-Item -ItemType directory -Path $testhostCore20PackageARM64Dir -Force | Out-Null + Copy-Item $testhostCore20PackageTempARM64Dir\testhost.arm64* $testhostCore20PackageARM64Dir -Force -Recurse + Copy-Item $testhostCore20PackageTempARM64Dir\Microsoft.TestPlatform.PlatformAbstractions.dll $testhostCore20PackageARM64Dir -Force + New-Item -ItemType directory -Path $testhostCore10PackageX64Dir -Force | Out-Null Copy-Item $testhostCore10PackageTempX64Dir\testhost* $testhostCore10PackageX64Dir -Force -Recurse Copy-Item $testhostCore20PackageTempX64Dir\Microsoft.TestPlatform.PlatformAbstractions.dll $testhostCore10PackageX64Dir -Force @@ -289,6 +311,10 @@ function Publish-Package Copy-Item $testhostCore10PackageTempX86Dir\testhost.x86* $testhostCore10PackageX86Dir -Force -Recurse Copy-Item $testhostCore10PackageTempX86Dir\Microsoft.TestPlatform.PlatformAbstractions.dll $testhostCore10PackageX86Dir -Force + New-Item -ItemType directory -Path $testhostCore10PackageARM64Dir -Force | Out-Null + Copy-Item $testhostCore10PackageTempARM64Dir\testhost.arm64* $testhostCore10PackageARM64Dir -Force -Recurse + Copy-Item $testhostCore10PackageTempARM64Dir\Microsoft.TestPlatform.PlatformAbstractions.dll $testhostCore10PackageARM64Dir -Force + # Copy over the Full CLR built testhost package assemblies to the Core CLR and Full CLR package folder. $coreCLRFull_Dir = "TestHost" $fullDestDir = Join-Path $coreCLR20PackageDir $coreCLRFull_Dir diff --git a/scripts/verify-nupkgs.ps1 b/scripts/verify-nupkgs.ps1 index 3c5c0eeb65..86f09edb87 100644 --- a/scripts/verify-nupkgs.ps1 +++ b/scripts/verify-nupkgs.ps1 @@ -14,13 +14,13 @@ function Verify-Nuget-Packages($packageDirectory, $version) $expectedNumOfFiles = @{ "Microsoft.CodeCoverage" = 53; "Microsoft.NET.Test.Sdk" = 27; - "Microsoft.TestPlatform" = 590; + "Microsoft.TestPlatform" = 608; "Microsoft.TestPlatform.Build" = 21; - "Microsoft.TestPlatform.CLI" = 405; + "Microsoft.TestPlatform.CLI" = 423; "Microsoft.TestPlatform.Extensions.TrxLogger" = 35; "Microsoft.TestPlatform.ObjectModel" = 238; "Microsoft.TestPlatform.AdapterUtilities" = 62; - "Microsoft.TestPlatform.Portable" = 604; + "Microsoft.TestPlatform.Portable" = 640; "Microsoft.TestPlatform.TestHost" = 214; "Microsoft.TestPlatform.TranslationLayer" = 123; "Microsoft.TestPlatform.Internal.Uwp" = 86; diff --git a/src/Microsoft.TestPlatform.TestHostProvider/Hosting/DefaultTestHostManager.cs b/src/Microsoft.TestPlatform.TestHostProvider/Hosting/DefaultTestHostManager.cs index 2cab5013c1..58cde217b3 100644 --- a/src/Microsoft.TestPlatform.TestHostProvider/Hosting/DefaultTestHostManager.cs +++ b/src/Microsoft.TestPlatform.TestHostProvider/Hosting/DefaultTestHostManager.cs @@ -33,6 +33,7 @@ namespace Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Hosting; using Utilities; using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers; using Microsoft.VisualStudio.TestPlatform.Utilities.Helpers.Interfaces; +using System.Collections.Immutable; /// /// The default test host launcher for the engine. @@ -42,13 +43,14 @@ namespace Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Hosting; [FriendlyName(DefaultTestHostFriendlyName)] public class DefaultTestHostManager : ITestRuntimeProvider2 { - private const string X64TestHostProcessName = "testhost{0}.exe"; - private const string X86TestHostProcessName = "testhost{0}.x86.exe"; - private const string DefaultTestHostUri = "HostProvider://DefaultTestHost"; private const string DefaultTestHostFriendlyName = "DefaultTestHost"; private const string TestAdapterEndsWithPattern = @"TestAdapter.dll"; + // Any version (older or newer) that is not in this list will use the default testhost.exe that is built using net451. + // TODO: Add net481 when it is published, if it uses a new moniker. + private static readonly ImmutableArray SupportedTargetFrameworks = ImmutableArray.Create("net452", "net46", "net461", "net462", "net47", "net471", "net472", "net48"); + private Architecture _architecture; private Framework _targetFramework; private readonly IProcessHelper _processHelper; @@ -133,24 +135,7 @@ public virtual TestProcessStartInfo GetTestHostProcessStartInfo( IDictionary environmentVariables, TestRunnerConnectionInfo connectionInfo) { - string testHostProcessName; - if (_targetFramework.Name.StartsWith(".NETFramework,Version=v")) - { - var targetFrameworkMoniker = "net" + _targetFramework.Name.Replace(".NETFramework,Version=v", string.Empty).Replace(".", string.Empty); - - // Net451 or older will use the default testhost.exe that is compiled against net451. - var isSupportedNetTarget = new[] { "net452", "net46", "net461", "net462", "net47", "net471", "net472", "net48" }.Contains(targetFrameworkMoniker); - var targetFrameworkSuffix = isSupportedNetTarget ? $".{targetFrameworkMoniker}" : string.Empty; - - // Default test host manager supports shared test sources - testHostProcessName = string.Format(_architecture == Architecture.X86 ? X86TestHostProcessName : X64TestHostProcessName, targetFrameworkSuffix); - } - else - { - // This path is probably happening only in our tests, because otherwise we are first running CanExecuteCurrentRunConfiguration - // which would disqualify anything that is not netframework. - testHostProcessName = string.Format(_architecture == Architecture.X86 ? X86TestHostProcessName : X64TestHostProcessName, string.Empty); - } + string testHostProcessName = GetTestHostName(_architecture, _targetFramework, _processHelper.GetCurrentProcessArchitecture()); var currentWorkingDirectory = Path.Combine(Path.GetDirectoryName(typeof(DefaultTestHostManager).GetTypeInfo().Assembly.Location), "..//"); var argumentsString = " " + connectionInfo.ToCommandLineOptions(); @@ -160,7 +145,7 @@ public virtual TestProcessStartInfo GetTestHostProcessStartInfo( if (!File.Exists(testhostProcessPath)) { - // "TestHost" is the name of the folder which contain Full CLR built testhost package assemblies. + // "TestHost" is the name of the folder which contain Full CLR built testhost package assemblies, in dotnet SDK. testHostProcessName = Path.Combine("TestHost", testHostProcessName); testhostProcessPath = Path.Combine(currentWorkingDirectory, testHostProcessName); } @@ -197,6 +182,75 @@ public virtual TestProcessStartInfo GetTestHostProcessStartInfo( }; } + private string GetTestHostName(Architecture architecture, Framework targetFramework, PlatformArchitecture processArchitecture) + { + // We ship multiple executables for testhost that follow this naming schema: + // testhost<.tfm><.architecture>.exe + // e.g.: testhost.net472.x86.exe -> 32-bit testhost for .NET Framework 4.7.2 + // + // The tfm is omitted for .NET Framework 4.5.1 testhost. + // testhost.x86.exe -> 32-bit testhost for .NET Framework 4.5.1 + // + // The architecture is omitted for 64-bit (x64) testhost. + // testhost.net472.exe -> 64-bit testhost for .NET Framework 4.7.2 + // testhost.exe -> 64-bit testhost for .NET Framework 4.5.1 + // + // These omissions are done for backwards compatibility because originally there were + // only testhost.exe and testhost.x86.exe, both built against .NET Framework 4.5.1. + + StringBuilder testHostProcessName = new("testhost"); + + if (targetFramework.Name.StartsWith(".NETFramework,Version=v")) + { + // Transform target framework name into moniker. + // e.g. ".NETFramework,Version=v4.7.2" -> "net472". + var targetFrameworkMoniker = "net" + targetFramework.Name.Replace(".NETFramework,Version=v", string.Empty).Replace(".", string.Empty); + + var isSupportedTargetFramework = SupportedTargetFrameworks.Contains(targetFrameworkMoniker); + if (isSupportedTargetFramework) + { + testHostProcessName.Append('.').Append(targetFrameworkMoniker); + } + else + { + // The .NET Framework 4.5.1 testhost that does not have moniker in the name is used as fallback. + } + } + + var processArchitectureAsArchitecture = processArchitecture switch + { + PlatformArchitecture.X86 => Architecture.X86, + PlatformArchitecture.X64 => Architecture.X64, + PlatformArchitecture.ARM => Architecture.ARM, + PlatformArchitecture.ARM64 => Architecture.ARM64, + PlatformArchitecture.S390x => Architecture.S390x, + _ => throw new NotSupportedException(), + }; + + // Default architecture, or AnyCPU architecture will use the architecture of the current process, + // so when you run from 32-bit vstest.console, or from 32-bit dotnet test, you will get 32-bit testhost + // as the preferred testhost. + var actualArchitecture = architecture is Architecture.Default or Architecture.AnyCPU + ? processArchitectureAsArchitecture + : architecture; + + if (actualArchitecture != Architecture.X64) + { + // Append . to the name, such as .x86. It is possible that we are not shipping the + // executable for the architecture with VS, and that will fail later with file not found exception, + // which is okay. + testHostProcessName.Append('.').Append(architecture.ToString().ToLowerInvariant()); + } + else + { + // 64-bit (x64) executable, uses no architecture suffix in the name. + // E.g.: testhost.exe or testhost.net472.exe + } + + testHostProcessName.Append(".exe"); + return testHostProcessName.ToString(); + } + /// public IEnumerable GetTestPlatformExtensions(IEnumerable sources, IEnumerable extensions) { diff --git a/src/package/VSIXProject/TestPlatform.csproj b/src/package/VSIXProject/TestPlatform.csproj index ca48090d5c..ef0ee9ae5f 100644 --- a/src/package/VSIXProject/TestPlatform.csproj +++ b/src/package/VSIXProject/TestPlatform.csproj @@ -236,24 +236,36 @@ + - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec b/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec index c9db7ca2b4..5cebcc6bef 100644 --- a/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec +++ b/src/package/nuspec/Microsoft.TestPlatform.Portable.nuspec @@ -15,9 +15,9 @@ https://github.com/microsoft/vstest/ © Microsoft Corporation. All rights reserved. vstest visual-studio unittest testplatform mstest microsoft test testing - @@ -25,7 +25,7 @@ - + @@ -78,6 +78,7 @@ + @@ -96,6 +97,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -475,6 +496,7 @@ + @@ -493,6 +515,7 @@ + @@ -511,6 +534,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/package/nuspec/Microsoft.TestPlatform.nuspec b/src/package/nuspec/Microsoft.TestPlatform.nuspec index 0cd02ad298..916e973267 100644 --- a/src/package/nuspec/Microsoft.TestPlatform.nuspec +++ b/src/package/nuspec/Microsoft.TestPlatform.nuspec @@ -15,483 +15,501 @@ https://github.com/microsoft/vstest/ © Microsoft Corporation. All rights reserved. vstest visual-studio unittest testplatform mstest microsoft test testing - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + @@ -618,17 +636,17 @@ - + - - + + - - - - + + + + - - + + diff --git a/src/package/sign/sign.proj b/src/package/sign/sign.proj index c70207f8ee..39222c7b8e 100644 --- a/src/package/sign/sign.proj +++ b/src/package/sign/sign.proj @@ -96,24 +96,37 @@ + - - - - - - - - + + + + x + + + + + + + + + x + + + + + + + @@ -177,24 +190,37 @@ + - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -298,25 +324,37 @@ + - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/src/testhost.arm64/Properties/AssemblyInfo.cs b/src/testhost.arm64/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..54aecbfac4 --- /dev/null +++ b/src/testhost.arm64/Properties/AssemblyInfo.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Reflection; +using System.Resources; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft Corporation")] +[assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")] +[assembly: AssemblyProduct("Microsoft.TestHost")] +[assembly: AssemblyTrademark("")] +[assembly: NeutralResourcesLanguage("en-US")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("99d82e36-6b51-4db9-bd37-adbf373125ed")] diff --git a/src/testhost.arm64/app.config b/src/testhost.arm64/app.config new file mode 100644 index 0000000000..2a67681b5e --- /dev/null +++ b/src/testhost.arm64/app.config @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/testhost.arm64/app.manifest b/src/testhost.arm64/app.manifest new file mode 100644 index 0000000000..161dc3ad9e --- /dev/null +++ b/src/testhost.arm64/app.manifest @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/testhost.arm64/testhost.arm64.csproj b/src/testhost.arm64/testhost.arm64.csproj new file mode 100644 index 0000000000..5d695e3144 --- /dev/null +++ b/src/testhost.arm64/testhost.arm64.csproj @@ -0,0 +1,65 @@ + + + + ..\..\ + true + + + $(MSBuildWarningsAsMessages);MSB3270;MSB3276 + + + + + testhost.arm64 + netcoreapp2.1;netcoreapp1.0;net451;net452;net46;net461;net462;net47;net471;net472;net48 + net6.0 + Exe + false + app.manifest + + + win10-arm64 + false + $(AssemblyName.Replace('.arm64', '')).$(TargetFramework).arm64 + + + + + + + + + + + + + + + + + + true + + + true + + + + + + + + + + + + + + + + + + + + +