diff --git a/src/package/nuspec/Microsoft.TestPlatform.TestHost.NetCore.props b/src/package/nuspec/Microsoft.TestPlatform.TestHost.NetCore.props
index fd9adc4d16..a33990d7a3 100644
--- a/src/package/nuspec/Microsoft.TestPlatform.TestHost.NetCore.props
+++ b/src/package/nuspec/Microsoft.TestPlatform.TestHost.NetCore.props
@@ -12,7 +12,7 @@
False
-
+
testhost.exe
PreserveNewest
diff --git a/src/vstest.console/CommandLine/InferHelper.cs b/src/vstest.console/CommandLine/InferHelper.cs
index f9dda8b734..1168cec2fb 100644
--- a/src/vstest.console/CommandLine/InferHelper.cs
+++ b/src/vstest.console/CommandLine/InferHelper.cs
@@ -27,9 +27,9 @@ internal InferHelper(IAssemblyMetadataProvider assemblyMetadataProvider)
///
/// Determines Architecture from sources.
///
- public Architecture AutoDetectArchitecture(List sources, IDictionary sourcePlatforms)
+ public Architecture AutoDetectArchitecture(List sources, IDictionary sourcePlatforms, Architecture defaultArchitecture)
{
- Architecture architecture = Constants.DefaultPlatform;
+ var architecture = defaultArchitecture;
try
{
if (sources != null && sources.Count > 0)
@@ -64,7 +64,7 @@ public Architecture AutoDetectArchitecture(List sources, IDictionary sou
var loggerRunSettings = XmlRunSettingsUtilities.GetLoggerRunSettings(runsettingsXml) ?? new LoggerRunSettings();
settingsUpdated |= this.UpdateFramework(document, navigator, sources, sourceFrameworks, registrar, out Framework chosenFramework);
- settingsUpdated |= this.UpdatePlatform(document, navigator, sources, sourcePlatforms, out Architecture chosenPlatform);
+
+ // Choose default architecture based on the framework
+ // For .NET core, the default platform architecture should be x64.
+ var defaultArchitecture = chosenFramework.Name.IndexOf("netstandard", StringComparison.OrdinalIgnoreCase) >= 0
+ || chosenFramework.Name.IndexOf("netcoreapp", StringComparison.OrdinalIgnoreCase) >= 0 ? Architecture.X64 : Architecture.X86;
+
+ settingsUpdated |= this.UpdatePlatform(document, navigator, sources, sourcePlatforms, defaultArchitecture, out Architecture chosenPlatform);
this.CheckSourcesForCompatibility(chosenFramework, chosenPlatform, sourcePlatforms, sourceFrameworks, registrar);
settingsUpdated |= this.UpdateDesignMode(document, runConfiguration);
settingsUpdated |= this.UpdateCollectSourceInformation(document, runConfiguration);
@@ -460,10 +466,10 @@ private void CheckSourcesForCompatibility(Framework chosenFramework, Architectur
}
}
- private bool UpdatePlatform(XmlDocument document, XPathNavigator navigator, List sources, IDictionary sourcePlatforms, out Architecture chosenPlatform)
+ private bool UpdatePlatform(XmlDocument document, XPathNavigator navigator, List sources, IDictionary sourcePlatforms, Architecture defaultArchitecture, out Architecture chosenPlatform)
{
// Get platform from sources
- var inferedPlatform = inferHelper.AutoDetectArchitecture(sources, sourcePlatforms);
+ var inferedPlatform = inferHelper.AutoDetectArchitecture(sources, sourcePlatforms, defaultArchitecture);
// Get platform from runsettings
bool updatePlatform = IsAutoPlatformDetectRequired(navigator, out chosenPlatform);
diff --git a/test/vstest.console.UnitTests/CommandLine/InferHelperTests.cs b/test/vstest.console.UnitTests/CommandLine/InferHelperTests.cs
index 4c35efddd4..900a5e2593 100644
--- a/test/vstest.console.UnitTests/CommandLine/InferHelperTests.cs
+++ b/test/vstest.console.UnitTests/CommandLine/InferHelperTests.cs
@@ -19,6 +19,7 @@ public class InferHelperTests
private readonly Mock mockAssemblyHelper;
private InferHelper inferHelper;
private readonly Framework defaultFramework = Framework.DefaultFramework;
+ private readonly Architecture DefaultArchitecture = Architecture.X64;
private readonly Framework frameworkNet45 = Framework.FromString(".NETFramework,Version=4.5");
private readonly Framework frameworkNet46 = Framework.FromString(".NETFramework,Version=4.6");
private readonly Framework frameworkNet47 = Framework.FromString(".NETFramework,Version=4.7");
@@ -38,46 +39,46 @@ public InferHelperTests()
[TestMethod]
public void AutoDetectArchitectureShouldReturnDefaultArchitectureOnNullSources()
{
- Assert.AreEqual(Constants.DefaultPlatform, inferHelper.AutoDetectArchitecture(null, sourceArchitectures));
+ Assert.AreEqual(DefaultArchitecture, inferHelper.AutoDetectArchitecture(null, sourceArchitectures, DefaultArchitecture));
}
[TestMethod]
public void AutoDetectArchitectureShouldReturnDefaultArchitectureOnEmptySources()
{
- Assert.AreEqual(Constants.DefaultPlatform, inferHelper.AutoDetectArchitecture(new List(0), sourceArchitectures));
+ Assert.AreEqual(DefaultArchitecture, inferHelper.AutoDetectArchitecture(new List(0), sourceArchitectures, DefaultArchitecture));
}
[TestMethod]
public void AutoDetectArchitectureShouldReturnDefaultArchitectureOnNullItemInSources()
{
- Assert.AreEqual(Constants.DefaultPlatform, inferHelper.AutoDetectArchitecture(new List(){null}, sourceArchitectures));
+ Assert.AreEqual(DefaultArchitecture, inferHelper.AutoDetectArchitecture(new List(){null}, sourceArchitectures, DefaultArchitecture));
}
[TestMethod]
public void AutoDetectArchitectureShouldReturnDefaultArchitectureOnWhiteSpaceItemInSources()
{
- Assert.AreEqual(Constants.DefaultPlatform, inferHelper.AutoDetectArchitecture(new List() { " "}, sourceArchitectures));
+ Assert.AreEqual(DefaultArchitecture, inferHelper.AutoDetectArchitecture(new List() { " "}, sourceArchitectures, DefaultArchitecture));
}
[TestMethod]
public void AutoDetectArchitectureShouldReturnCorrectArchForOneSource()
{
this.mockAssemblyHelper.Setup(ah => ah.GetArchitecture(It.IsAny())).Returns(Architecture.X86);
- Assert.AreEqual(Architecture.X86, inferHelper.AutoDetectArchitecture(new List(){"1.dll"}, sourceArchitectures));
+ Assert.AreEqual(Architecture.X86, inferHelper.AutoDetectArchitecture(new List(){"1.dll"}, sourceArchitectures, DefaultArchitecture));
this.mockAssemblyHelper.Verify(ah => ah.GetArchitecture(It.IsAny()));
}
[TestMethod]
public void AutoDetectArchitectureShouldReturnCorrectDefaultArchForNotDotNetAssembly()
{
- Assert.AreEqual(Constants.DefaultPlatform, inferHelper.AutoDetectArchitecture(new List() { "NotDotNetAssebly.appx" }, sourceArchitectures));
+ Assert.AreEqual(DefaultArchitecture, inferHelper.AutoDetectArchitecture(new List() { "NotDotNetAssebly.appx" }, sourceArchitectures, DefaultArchitecture));
this.mockAssemblyHelper.Verify(ah => ah.GetArchitecture(It.IsAny()), Times.Never);
}
[TestMethod]
public void AutoDetectArchitectureShouldSetAnyCpuArchForNotDotNetAssembly()
{
- inferHelper.AutoDetectArchitecture(new List() { "NotDotNetAssebly.appx" }, sourceArchitectures);
+ inferHelper.AutoDetectArchitecture(new List() { "NotDotNetAssebly.appx" }, sourceArchitectures, DefaultArchitecture);
Assert.AreEqual(Architecture.AnyCPU, sourceArchitectures["NotDotNetAssebly.appx"]);
}
@@ -86,7 +87,7 @@ public void AutoDetectArchitectureShouldReturnDefaultArchForAllAnyCpuAssemblies(
{
this.mockAssemblyHelper.SetupSequence(ah => ah.GetArchitecture(It.IsAny()))
.Returns(Architecture.AnyCPU).Returns(Architecture.AnyCPU).Returns(Architecture.AnyCPU);
- Assert.AreEqual(Constants.DefaultPlatform, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "AnyCPU2.exe", "AnyCPU3.dll" }, sourceArchitectures));
+ Assert.AreEqual(DefaultArchitecture, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "AnyCPU2.exe", "AnyCPU3.dll" }, sourceArchitectures, DefaultArchitecture));
this.mockAssemblyHelper.Verify(ah => ah.GetArchitecture(It.IsAny()), Times.Exactly(3));
}
@@ -95,7 +96,7 @@ public void AutoDetectArchitectureShouldReturnX86ArchIfOneX86AssemblyAndRestAnyC
{
this.mockAssemblyHelper.SetupSequence(ah => ah.GetArchitecture(It.IsAny()))
.Returns(Architecture.AnyCPU).Returns(Architecture.AnyCPU).Returns(Architecture.X86);
- Assert.AreEqual(Architecture.X86, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "AnyCPU2.exe", "x86.dll" }, sourceArchitectures));
+ Assert.AreEqual(Architecture.X86, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "AnyCPU2.exe", "x86.dll" }, sourceArchitectures, DefaultArchitecture));
this.mockAssemblyHelper.Verify(ah => ah.GetArchitecture(It.IsAny()), Times.Exactly(3));
}
@@ -104,7 +105,7 @@ public void AutoDetectArchitectureShouldReturnARMArchIfOneARMAssemblyAndRestAnyC
{
this.mockAssemblyHelper.SetupSequence(ah => ah.GetArchitecture(It.IsAny()))
.Returns(Architecture.ARM).Returns(Architecture.ARM).Returns(Architecture.ARM);
- Assert.AreEqual(Architecture.ARM, inferHelper.AutoDetectArchitecture(new List() { "ARM1.dll", "ARM2.dll", "ARM3.dll" }, sourceArchitectures));
+ Assert.AreEqual(Architecture.ARM, inferHelper.AutoDetectArchitecture(new List() { "ARM1.dll", "ARM2.dll", "ARM3.dll" }, sourceArchitectures, DefaultArchitecture));
this.mockAssemblyHelper.Verify(ah => ah.GetArchitecture(It.IsAny()), Times.Exactly(3));
}
@@ -113,7 +114,7 @@ public void AutoDetectArchitectureShouldReturnX64ArchIfOneX64AssemblyAndRestAnyC
{
this.mockAssemblyHelper.SetupSequence(ah => ah.GetArchitecture(It.IsAny()))
.Returns(Architecture.AnyCPU).Returns(Architecture.AnyCPU).Returns(Architecture.X64);
- Assert.AreEqual(Architecture.X64, inferHelper.AutoDetectArchitecture(new List() { "x64.dll", "AnyCPU2.exe", "x64.dll" }, sourceArchitectures));
+ Assert.AreEqual(Architecture.X64, inferHelper.AutoDetectArchitecture(new List() { "x64.dll", "AnyCPU2.exe", "x64.dll" }, sourceArchitectures, DefaultArchitecture));
this.mockAssemblyHelper.Verify(ah => ah.GetArchitecture(It.IsAny()), Times.Exactly(3));
}
@@ -122,7 +123,7 @@ public void AutoDetectArchitectureShouldReturnDefaultArchOnConflictArches()
{
this.mockAssemblyHelper.SetupSequence(ah => ah.GetArchitecture(It.IsAny()))
.Returns(Architecture.AnyCPU).Returns(Architecture.X64).Returns(Architecture.X86);
- Assert.AreEqual(Constants.DefaultPlatform, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "x64.exe", "x86.dll" }, sourceArchitectures));
+ Assert.AreEqual(DefaultArchitecture, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "x64.exe", "x86.dll" }, sourceArchitectures, DefaultArchitecture));
this.mockAssemblyHelper.Verify(ah => ah.GetArchitecture(It.IsAny()), Times.Exactly(3));
}
@@ -132,7 +133,7 @@ public void AutoDetectArchitectureShouldPoulateSourceArchitectureDictionary()
this.mockAssemblyHelper.SetupSequence(ah => ah.GetArchitecture(It.IsAny()))
.Returns(Architecture.AnyCPU).Returns(Architecture.X64).Returns(Architecture.X86);
- Assert.AreEqual(Constants.DefaultPlatform, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "x64.exe", "x86.dll" }, sourceArchitectures));
+ Assert.AreEqual(DefaultArchitecture, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "x64.exe", "x86.dll" }, sourceArchitectures, DefaultArchitecture));
Assert.AreEqual(3, sourceArchitectures.Count);
Assert.AreEqual(Architecture.AnyCPU, sourceArchitectures["AnyCPU1.dll"]);
Assert.AreEqual(Architecture.X64, sourceArchitectures["x64.exe"]);
@@ -146,7 +147,7 @@ public void AutoDetectArchitectureShouldReturnDefaultArchIfthereIsNotDotNetAssem
{
this.mockAssemblyHelper.SetupSequence(ah => ah.GetArchitecture(It.IsAny()))
.Returns(Architecture.AnyCPU);
- Assert.AreEqual(Constants.DefaultPlatform, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "NotDotNetAssebly.appx" }, sourceArchitectures));
+ Assert.AreEqual(DefaultArchitecture, inferHelper.AutoDetectArchitecture(new List() { "AnyCPU1.dll", "NotDotNetAssebly.appx" }, sourceArchitectures, DefaultArchitecture));
this.mockAssemblyHelper.Verify(ah => ah.GetArchitecture(It.IsAny()), Times.Exactly(1));
}
diff --git a/test/vstest.console.UnitTests/TestPlatformHelpers/TestRequestManagerTests.cs b/test/vstest.console.UnitTests/TestPlatformHelpers/TestRequestManagerTests.cs
index 977a9a2c7c..968d0516da 100644
--- a/test/vstest.console.UnitTests/TestPlatformHelpers/TestRequestManagerTests.cs
+++ b/test/vstest.console.UnitTests/TestPlatformHelpers/TestRequestManagerTests.cs
@@ -262,7 +262,7 @@ public void DiscoverTestsShouldCollectMetrics()
var payload = new DiscoveryRequestPayload()
{
- Sources = new List() { "a", "b" },
+ Sources = new List() { "a.dll", "b.dll" },
RunSettings = @"
2
@@ -1063,7 +1063,7 @@ public void RunTestsShouldCollectMetrics()
var payload = new TestRunRequestPayload()
{
- Sources = new List() { "a" },
+ Sources = new List() { "a.dll" },
RunSettings = @"
2