diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs
index e3050b3fb88..96b59eec7eb 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs
@@ -96,6 +96,21 @@ public void BuildBasicApplication ([Values (true, false)] bool isRelease, [Value
}
}
+ [Test]
+ public void BuildWithMSBuildExe ([Values (true, false)] bool isRelease)
+ {
+ if (!IsWindows)
+ Assert.Ignore ("Test is only valid on Windows");
+
+ var proj = new XamarinAndroidApplicationProject {
+ IsRelease = isRelease,
+ };
+
+ using var b = CreateApkBuilder ();
+ b.UseMSBuildExe = true;
+ Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
+ }
+
[Test]
public void BuildBasicApplicationThenMoveIt ([Values (true, false)] bool isRelease)
{
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs
index c583e2b6192..02952895b87 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs
@@ -9,6 +9,7 @@
using System.Threading;
using System.Xml.XPath;
using System.Xml.Linq;
+using Xamarin.Android.Tools.VSWhere;
namespace Xamarin.ProjectTools
{
@@ -142,6 +143,22 @@ public Builder ()
BuildLogFile = "build.log";
}
+ ///
+ /// Build with MSBuild.exe from Visual Studio, only works on Windows
+ ///
+ public bool UseMSBuildExe { get; set; }
+
+ ///
+ /// Value for %MSBuildSdksPath%, points to bin\Release\dotnet\sdk\*\Sdks
+ ///
+ public string MSBuildSdksPath {
+ get {
+ var sdk = Path.Combine (TestEnvironment.DotNetPreviewDirectory, "sdk");
+ var sdk_version = Directory.EnumerateDirectories (sdk).OrderByDescending (x => x).First ();
+ return Path.Combine (sdk_version, "Sdks");
+ }
+ }
+
public void Dispose ()
{
Dispose (true);
@@ -173,9 +190,20 @@ protected bool BuildInternal (string projectOrSolution, string target, string []
var start = DateTime.UtcNow;
var args = new StringBuilder ();
- var psi = new ProcessStartInfo (Path.Combine (TestEnvironment.DotNetPreviewDirectory, "dotnet"));
+ var psi = new ProcessStartInfo ();
var responseFile = Path.Combine (XABuildPaths.TestOutputDirectory, Path.GetDirectoryName (projectOrSolution), "project.rsp");
- args.Append ("build ");
+ if (UseMSBuildExe) {
+ psi.FileName = MSBuildLocator.QueryLatest ().MSBuildPath;
+ args.Append ("/restore ");
+ psi.SetEnvironmentVariable ("DOTNETSDK_WORKLOAD_PACK_ROOTS", Path.Combine (TestEnvironment.DotNetPreviewDirectory, "packs"));
+ psi.SetEnvironmentVariable ("DOTNETSDK_WORKLOAD_MANIFEST_ROOTS", Path.Combine (TestEnvironment.DotNetPreviewDirectory, "sdk-manifests"));
+ psi.SetEnvironmentVariable ("MSBUILDLOGALLENVIRONMENTVARIABLES", "1");
+ psi.SetEnvironmentVariable ("MSBuildSDKsPath", MSBuildSdksPath);
+ psi.SetEnvironmentVariable ("PATH", TestEnvironment.DotNetPreviewDirectory + Path.PathSeparator + Environment.GetEnvironmentVariable ("PATH"));
+ } else {
+ psi.FileName = Path.Combine (TestEnvironment.DotNetPreviewDirectory, "dotnet");
+ args.Append ("build ");
+ }
if (TestEnvironment.UseLocalBuildOutput) {
psi.SetEnvironmentVariable ("DOTNETSDK_WORKLOAD_MANIFEST_ROOTS", TestEnvironment.WorkloadManifestOverridePath);