From fbe5fdd1ea4433e6b4dceb4bd5f54e07161726e0 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Tue, 17 Oct 2023 17:33:59 +0200 Subject: [PATCH] [msbuild] Copy the entire frameworks to the Mac when building remotely in the ResolveNativeReferences task. Fixes #19173. (#19227) Fixes https://github.com/xamarin/xamarin-macios/issues/19173. --- .../Tasks/ResolveNativeReferencesBase.cs | 5 ++++- .../Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveNativeReferencesBase.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveNativeReferencesBase.cs index a66ce9a297..958d795be6 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveNativeReferencesBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveNativeReferencesBase.cs @@ -524,6 +524,9 @@ namespace Xamarin.MacDev.Tasks { return false; } - public IEnumerable GetAdditionalItemsToBeCopied () => Enumerable.Empty (); + public IEnumerable GetAdditionalItemsToBeCopied () + { + return CreateItemsForAllFilesRecursively (NativeReferences); + } } } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs index d9e018163b..92da581142 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.IO; +using System.Linq; using Microsoft.Build.Framework; using Microsoft.Build.Tasks; @@ -217,5 +219,25 @@ namespace Xamarin.MacDev.Tasks { foundInMetadata = false; return fallbackValue; } + + protected IEnumerable CreateItemsForAllFilesRecursively (IEnumerable? directories) + { + if (directories is null) + yield break; + + foreach (var dir in directories) { + // Don't try to find files if we don't have a directory in the first place (or it doesn't exist). + if (!Directory.Exists (dir)) + continue; + + foreach (var file in Directory.EnumerateFiles (dir, "*", SearchOption.AllDirectories)) + yield return new TaskItem (file); + } + } + + protected IEnumerable CreateItemsForAllFilesRecursively (IEnumerable? directories) + { + return CreateItemsForAllFilesRecursively (directories?.Select (v => v.ItemSpec)); + } } }