diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ReadLibraryProjectImportsCache.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ReadLibraryProjectImportsCache.cs
index ebfb1f75f35..d5de08609ff 100644
--- a/src/Xamarin.Android.Build.Tasks/Tasks/ReadLibraryProjectImportsCache.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tasks/ReadLibraryProjectImportsCache.cs
@@ -24,17 +24,15 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#nullable enable
-using System;
using System.IO;
-using System.Linq;
using System.Xml.Linq;
-using Microsoft.Build.Utilities;
using Microsoft.Build.Framework;
using Microsoft.Android.Build.Tasks;
namespace Xamarin.Android.Tasks
{
- public class ReadLibraryProjectImportsCache : AndroidTask
+ [MSBuildMultiThreadableTask]
+ public class ReadLibraryProjectImportsCache : MultithreadedAndroidTask
{
public override string TaskPrefix => "RLC";
@@ -66,11 +64,11 @@ public override bool RunTask ()
{
Log.LogDebugMessage ("Task ReadLibraryProjectImportsCache");
Log.LogDebugMessage (" CacheFile: {0}", CacheFile);
- if (!File.Exists (CacheFile)) {
+ if (CacheFile.IsNullOrEmpty () || !File.Exists (TaskEnvironment.GetAbsolutePath (CacheFile))) {
Log.LogDebugMessage ("{0} does not exist. No Project Library Imports found", CacheFile);
return !Log.HasLoggedErrors;
}
- var doc = XDocument.Load (CacheFile);
+ var doc = XDocument.Load (TaskEnvironment.GetAbsolutePath (CacheFile));
Jars = doc.GetPathsAsTaskItems ("Jars", "Jar");
ResolvedAssetDirectories = doc.GetPathsAsTaskItems ("ResolvedAssetDirectories", "ResolvedAssetDirectory");
ResolvedResourceDirectories = doc.GetPathsAsTaskItems ("ResolvedResourceDirectories", "ResolvedResourceDirectory");
@@ -84,4 +82,3 @@ public override bool RunTask ()
}
}
}
-
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/MultiThreadedMigrationTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/MultiThreadedMigrationTests.cs
index ba7ae2c2763..dbc65453b7a 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/MultiThreadedMigrationTests.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/MultiThreadedMigrationTests.cs
@@ -8,6 +8,7 @@
using Microsoft.Build.Framework;
using Mono.Cecil;
using NUnit.Framework;
+using Xamarin.Android.Tasks;
using Xamarin.ProjectTools;
namespace Xamarin.Android.Build.Tests
@@ -15,6 +16,40 @@ namespace Xamarin.Android.Build.Tests
[TestFixture]
public class MultiThreadedMigrationTests
{
+ [Test]
+ public void ReadLibraryProjectImportsCacheUsesProjectDirectory ()
+ {
+ var directory = Path.Combine (Path.GetTempPath (), Path.GetRandomFileName ());
+ Directory.CreateDirectory (directory);
+ try {
+ var cacheFile = Path.GetRandomFileName ();
+ File.WriteAllText (Path.Combine (directory, cacheFile), "a.jar");
+ var task = new ReadLibraryProjectImportsCache {
+ BuildEngine = new MockBuildEngine (TextWriter.Null),
+ TaskEnvironment = TaskEnvironment.CreateWithProjectDirectoryAndEnvironment (directory, new Dictionary ()),
+ CacheFile = cacheFile,
+ };
+ Assert.IsTrue (task.Execute ());
+ Assert.AreEqual ("a.jar", task.Jars?.Single ().ItemSpec);
+ } finally {
+ Directory.Delete (directory, recursive: true);
+ }
+ }
+
+ [TestCase ("")]
+ [TestCase ("missing.xml")]
+ public void ReadLibraryProjectImportsCacheMissingFile (string cacheFile)
+ {
+ var task = new ReadLibraryProjectImportsCache {
+ BuildEngine = new MockBuildEngine (TextWriter.Null),
+ TaskEnvironment = TaskEnvironment.CreateWithProjectDirectoryAndEnvironment (
+ Path.Combine (Path.GetTempPath (), Path.GetRandomFileName ()), new Dictionary ()),
+ CacheFile = cacheFile,
+ };
+ Assert.IsTrue (task.Execute ());
+ Assert.IsNull (task.Jars);
+ }
+
[Test]
public void MigratedTasksHaveDirectAttribute ()
{