diff --git a/build-tools/mono-runtimes/mono-runtimes.targets b/build-tools/mono-runtimes/mono-runtimes.targets index 86d1c63e428..c563803b570 100644 --- a/build-tools/mono-runtimes/mono-runtimes.targets +++ b/build-tools/mono-runtimes/mono-runtimes.targets @@ -1,11 +1,14 @@ - - - - <_MonoPath>..\..\external\mono + <_SourceTopDir>..\.. + <_BclFrameworkDir>$(OutputPath)\lib\xbuild-frameworks\MonoAndroid\v1.0 + <_MonoPath>$(_SourceTopDir)\external\mono + + + + @@ -74,23 +77,34 @@ - - - + + + + <_PackageConfigFiles Include="$(_SourceTopDir)\src\Xamarin.Android.Build.Tasks\packages.config" /> + + + + + + <_FSharp Include="$(_SourceTopDir)\$(_FSharpCorePackagePath)\lib\portable-net45+monoandroid10+monotouch10+xamarinios10\FSharp.Core*" /> <_Assemblies Include="$(_MonoPath)\mcs\class\lib\monodroid\*.dll" /> <_Facades Include="$(_MonoPath)\mcs\class\lib\monodroid\Facades\*.dll" /> + diff --git a/src/Xamarin.Android.Build.Tasks/packages.config b/src/Xamarin.Android.Build.Tasks/packages.config index 9dbe9b01044..4972f2034d8 100644 --- a/src/Xamarin.Android.Build.Tasks/packages.config +++ b/src/Xamarin.Android.Build.Tasks/packages.config @@ -5,4 +5,5 @@ - \ No newline at end of file + + diff --git a/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj b/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj index f667bb116f8..c094a41a32a 100644 --- a/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj +++ b/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj @@ -30,12 +30,14 @@ + + @@ -43,4 +45,4 @@ - \ No newline at end of file + diff --git a/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GetNugetPackageBasePath.cs b/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GetNugetPackageBasePath.cs new file mode 100644 index 00000000000..0772acd20db --- /dev/null +++ b/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/GetNugetPackageBasePath.cs @@ -0,0 +1,76 @@ +using System; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; + +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; + +namespace Xamarin.Android.Tools.BootstrapTasks +{ + public class GetNugetPackageBasePath : Task + { + [Required] + public ITaskItem [] PackageConfigFiles { get; set; } + + [Required] + public string PackageName { get; set; } + + [Output] + public ITaskItem BasePath { get; set; } + + public override bool Execute () + { + Log.LogMessage (MessageImportance.Low, "Task GetNugetPackageBasePath"); + Log.LogMessage (MessageImportance.Low, "\tPackageName : {0}", PackageName); + Log.LogMessage (MessageImportance.Low, "\tPackageConfigFiles : "); + foreach (ITaskItem file in PackageConfigFiles) { + Log.LogMessage (MessageImportance.Low, "\t\t{0}", file.ItemSpec); + } + + Version latest = null; + foreach (string file in PackageConfigFiles.Select (x => Path.GetFullPath (x.ItemSpec)).Distinct ().OrderBy (x => x)) { + if (!File.Exists (file)) { + Log.LogWarning ("\tPackages config file {0} not found", file); + continue; + } + + Version tmp = GetPackageVersion (file); + if (latest != null && latest >= tmp) + continue; + latest = tmp; + } + + if (latest == null) + Log.LogError ("NuGet Package '{0}' not found", PackageName); + else + BasePath = new TaskItem (Path.Combine ("packages", $"{PackageName}.{latest}")); + Log.LogMessage (MessageImportance.Low, $"BasePath == {BasePath}"); + return !Log.HasLoggedErrors; + } + + Version GetPackageVersion (string packageConfigFile) + { + Version ret = null; + var doc = new XmlDocument (); + doc.Load (packageConfigFile); + + XmlNodeList nodes = doc.DocumentElement.SelectNodes ($"./package[@id='{PackageName}']"); + foreach (XmlNode n in nodes) { + var e = n as XmlElement; + if (e == null) + continue; + + Version tmp; + if (!Version.TryParse (e.GetAttribute ("version"), out tmp)) + continue; + if (ret != null && ret >= tmp) + continue; + ret = tmp; + } + + return ret; + } + } +}