diff --git a/build-tools/installers/create-installers.targets b/build-tools/installers/create-installers.targets
index 7080dc29fde..4cd80baa804 100644
--- a/build-tools/installers/create-installers.targets
+++ b/build-tools/installers/create-installers.targets
@@ -29,29 +29,11 @@
<_EarlierFrameworkDir Include="@(_FrameworkDirsThatExist)" Exclude="$(_LatestStableFrameworkDir)" />
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
<_DesignerFilesUnix Include="$(LegacyMSBuildSrcDir)$(HostOS)\bcl\**\*" />
<_DesignerFilesWin Include="$(LegacyMSBuildSrcDir)bcl\**\* "/>
@@ -365,7 +347,7 @@
<_FrameworkFiles Include="@(_FrameworkDirsThatExist->'%(Identity)\AndroidApiInfo.xml')" />
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs
index 27177273816..79556883209 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs
@@ -34,7 +34,9 @@ public void TestResolveToolsExists ()
Directory.Delete (Path.Combine (Root, path), recursive: true);
var engine = new MockBuildEngine (TestContext.Out, errors: errors, messages: messages);
- var frameworksPath = Path.Combine (TestEnvironment.MonoAndroidFrameworkDirectory, "v1.0");
+ var frameworksRoot = Path.Combine (TestEnvironment.DotNetPreviewDirectory, "packs", "Microsoft.NETCore.App.Ref");
+ var mscorlibDll = Directory.GetFiles (frameworksRoot, "mscorlib.dll", SearchOption.AllDirectories).LastOrDefault ();
+ var frameworksPath = Path.GetDirectoryName (mscorlibDll);
var androidSdk = CreateFauxAndroidSdkDirectory (Path.Combine (path, "Sdk"), "24.0.1", new[]
{
new ApiInfo { Id = "23", Level = 23, Name = "Marshmallow", FrameworkVersion = "v6.0", Stable = true },
@@ -52,6 +54,7 @@ public void TestResolveToolsExists ()
MonoAndroidToolsPath = TestEnvironment.AndroidMSBuildDirectory,
ReferenceAssemblyPaths = new string[] {
frameworksPath,
+ TestEnvironment.MonoAndroidFrameworkDirectory,
},
};
Assert.True (task.Execute (), "Task should have completed successfully.");
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 341fa33daa3..fa603222054 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
@@ -105,7 +105,7 @@ public void GetTargetFrameworkVersionRange (out string firstApiLevel, out string
Version lastVersion = null;
List allTFVs = new List ();
- var searchDir = UseDotNet ? Path.Combine (TestEnvironment.DotNetPreviewAndroidSdkDirectory, "data") : TestEnvironment.MonoAndroidFrameworkDirectory;
+ var searchDir = Path.Combine (TestEnvironment.DotNetPreviewAndroidSdkDirectory, "data");
foreach (var apiInfoFile in Directory.EnumerateFiles (searchDir, "AndroidApiInfo.xml", SearchOption.AllDirectories)) {
string frameworkVersion = GetApiInfoElementValue (apiInfoFile, "/AndroidApiInfo/Version");
string apiLevel = GetApiInfoElementValue (apiInfoFile, "/AndroidApiInfo/Level");
@@ -136,16 +136,6 @@ static string GetApiInfoElementValue (string androidApiInfo, string elementPath)
return doc.XPathSelectElement (elementPath)?.Value;
}
- public bool TargetFrameworkExists (string targetFramework)
- {
- var path = Path.Combine (TestEnvironment.MonoAndroidFrameworkDirectory, targetFramework);
- if (!Directory.Exists (path)) {
- return false;
- }
- return true;
- }
-
-
public string Root {
get {
return String.IsNullOrEmpty (root) ? Path.GetDirectoryName (new Uri (typeof (XamarinProject).Assembly.CodeBase).LocalPath) : root;
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/TestEnvironment.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/TestEnvironment.cs
index 61b9784722b..52f4a8ba835 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/TestEnvironment.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/TestEnvironment.cs
@@ -3,7 +3,7 @@
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
-using Xamarin.Android.Tools.VSWhere;
+using Xamarin.Android.Tools;
namespace Xamarin.ProjectTools
{
@@ -47,69 +47,40 @@ public static bool IsLinux {
}
}
- static readonly string LocalMonoAndroidToolsDirectory = Path.Combine (XABuildPaths.PrefixDirectory, "lib", "xamarin.android", "xbuild", "Xamarin", "Android");
-
- public static readonly string MacOSInstallationRoot = "/Library/Frameworks/Xamarin.Android.framework/Versions/Current";
-
- static VisualStudioInstance visualStudioInstance;
- public static VisualStudioInstance GetVisualStudioInstance ()
- {
- //We should cache and reuse this value, so we don't run vswhere.exe so much
- if (visualStudioInstance != null && !string.IsNullOrEmpty (visualStudioInstance.VisualStudioRootPath))
- return visualStudioInstance;
-
- return visualStudioInstance = MSBuildLocator.QueryLatest ();
- }
-
///
- /// The MonoAndroid framework (and other reference assemblies) directory within a local build tree. Contains v1.0, v9.0, etc,
- /// e.g. xamarin-android/bin/Debug/lib/xamarin.android/xbuild-frameworks/MonoAndroid.
+ /// The MonoAndroid reference assemblies directory within a local build tree, e.g. bin/Debug/lib/packs/Microsoft.Android.Ref.34/34.99.0/ref/net8.0/
/// If a local build tree can not be found, or if it is empty, this will return the system installation location instead:
- /// Windows: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\MonoAndroid
- /// macOS: Library/Frameworks/Xamarin.Android.framework/Versions/Current/lib/xamarin.android/xbuild-frameworks/MonoAndroid
+ /// bin/Debug/dotnet/packs/Microsoft.Android.Ref.34/$(Latest)/ref/net$(Latest)/
///
public static string MonoAndroidFrameworkDirectory {
get {
- var frameworkLibDir = Path.Combine (XABuildPaths.PrefixDirectory, "lib", "xamarin.android", "xbuild-frameworks", "MonoAndroid");
- if (Directory.Exists (frameworkLibDir) && Directory.EnumerateDirectories (frameworkLibDir, "v*", SearchOption.TopDirectoryOnly).Any ())
- return frameworkLibDir;
-
- if (IsWindows) {
- VisualStudioInstance vs = GetVisualStudioInstance ();
- return Path.Combine (vs.VisualStudioRootPath, "Common7", "IDE", "ReferenceAssemblies", "Microsoft", "Framework", "MonoAndroid");
- } else {
- return Path.Combine (MacOSInstallationRoot, "lib", "xamarin.android", "xbuild-frameworks", "MonoAndroid");
+ var rootRefDir = Directory.GetDirectories (Path.Combine (DotNetPreviewPacksDirectory, $"Microsoft.Android.Ref.{XABuildConfig.AndroidDefaultTargetDotnetApiLevel}")).LastOrDefault ();
+ if (!Directory.Exists (rootRefDir)) {
+ throw new DirectoryNotFoundException ($"Unable to locate Microsoft.Android.Ref.");
}
+
+ var maDll = Directory.GetFiles (rootRefDir, "Mono.Android.dll", SearchOption.AllDirectories).LastOrDefault ();
+ var refDir = Path.GetDirectoryName(maDll);
+ if (!Directory.Exists (refDir)) {
+ throw new DirectoryNotFoundException ($"Unable to locate Mono.Android.dll inside Microsoft.Android.Ref.");
+ }
+
+ return refDir;
}
}
///
- /// The MonoAndroidTools directory within a local build tree, e.g. xamarin-android/bin/Debug/lib/xamarin.android/xbuild/Xamarin/Android.
- /// If a local build tree can not be found, or if it is empty, this will return the system installation or .NET sandbox location instead:
- /// Windows: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Xamarin\Android
- /// macOS: /Library/Frameworks/Xamarin.Android.framework/Versions/Current/lib/xamarin.android/xbuild/Xamarin/Android
- /// Windows (dotnet): bin\Debug\dotnet\packs\Microsoft.Android.Sdk.Windows\$(Latest)\tools
- /// macOS (dotnet): bin/Debug/dotnet/packs/Microsoft.Android.Sdk.Darwin/$(Latest)/tools
+ /// The MonoAndroidTools directory within a local build tree, e.g. bin/Debug/lib/packs/Microsoft.Android.Sdk.Darwin/34.99.0/tools/
+ /// If a local build tree can not be found, or if it is empty, this will return the .NET sandbox location instead:
+ /// Windows: bin\Debug\dotnet\packs\Microsoft.Android.Sdk.Windows\$(Latest)\tools
+ /// macOS: bin/Debug/dotnet/packs/Microsoft.Android.Sdk.Darwin/$(Latest)/tools
///
public static string AndroidMSBuildDirectory {
get {
- if (Builder.UseDotNet) {
- if (!Directory.Exists (DotNetPreviewAndroidSdkDirectory)) {
- throw new DirectoryNotFoundException ($"Unable to locate a Microsoft.Android.Sdk in either '{DefaultPacksDir}' or '{LocalPacksDir}'.");
- }
- return Path.Combine (DotNetPreviewAndroidSdkDirectory, "tools");
- }
-
- if (UseLocalBuildOutput) {
- return LocalMonoAndroidToolsDirectory;
- } else {
- if (IsWindows) {
- VisualStudioInstance vs = GetVisualStudioInstance ();
- return Path.Combine (vs.VisualStudioRootPath, "MSBuild", "Xamarin", "Android");
- } else {
- return Path.Combine (MacOSInstallationRoot, "lib", "xamarin.android", "xbuild", "Xamarin", "Android");
- }
+ if (!Directory.Exists (DotNetPreviewAndroidSdkDirectory)) {
+ throw new DirectoryNotFoundException ($"Unable to locate a Microsoft.Android.Sdk in either '{DefaultPacksDir}' or '{LocalPacksDir}'.");
}
+ return Path.Combine (DotNetPreviewAndroidSdkDirectory, "tools");
}
}
@@ -167,12 +138,12 @@ orderby version descending
///
/// Tests will attempt to run against local build output directories by default,
- /// and fall back to `dotnet/packs` or a legacy system install location if a local build does not exist.
+ /// and fall back to `dotnet/packs` if a local build does not exist.
/// This will always return false for our tests running in CI.
///
public static bool UseLocalBuildOutput {
get {
- var msbuildDir = Builder.UseDotNet ? Path.Combine (LocalDotNetAndroidSdkDirectory, "tools") : LocalMonoAndroidToolsDirectory;
+ var msbuildDir = Path.Combine (LocalDotNetAndroidSdkDirectory, "tools");
return Directory.Exists (msbuildDir) && File.Exists (Path.Combine (msbuildDir, "Xamarin.Android.Build.Tasks.dll"));
}
}
diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets
index bb45a722e04..fbd0fd842c7 100644
--- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets
+++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets
@@ -22,6 +22,7 @@
_GenerateBundledVersions;
_CopyNetSdkTargets;
_CopyVSExtensionTargets;
+ _WriteVersionFiles;
<_AndroidSdkLocation Condition="'$(_AndroidSdkLocation)'==''">$(AndroidSdkDirectory)
<_MultiDexAarInAndroidSdk>extras\android\m2repository\com\android\support\multidex\1.0.1\multidex-1.0.1.aar
@@ -381,4 +382,23 @@
SkipUnchangedFiles="True"
/>
+
+
+
+
+
+