diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveAssemblies.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveAssemblies.cs index cf9c352fa2a..1856b6e0d61 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveAssemblies.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveAssemblies.cs @@ -108,7 +108,7 @@ bool Execute (DirectoryAssemblyResolver resolver) if (MonoAndroidHelper.IsReferenceAssembly (assemblyDef)) { // Resolve "runtime" library if (lockFile != null) - assemblyDef = ResolveRuntimeAssemblyForReferenceAssembly (lockFile, resolver, assemblyDef.Name); + assemblyDef = ResolveRuntimeAssemblyForReferenceAssembly (lockFile, resolver, assembly_path); if (lockFile == null || assemblyDef == null) { LogWarning ($"Ignoring {assembly_path} as it is a Reference Assembly"); continue; @@ -154,7 +154,7 @@ bool Execute (DirectoryAssemblyResolver resolver) readonly List do_not_package_atts = new List (); int indent = 2; - AssemblyDefinition ResolveRuntimeAssemblyForReferenceAssembly (LockFile lockFile, DirectoryAssemblyResolver resolver, AssemblyNameDefinition assemblyNameDefinition) + AssemblyDefinition ResolveRuntimeAssemblyForReferenceAssembly (LockFile lockFile, DirectoryAssemblyResolver resolver, string assemblyPath) { if (string.IsNullOrEmpty(TargetMoniker) || string.IsNullOrEmpty (NuGetPackageRoot) || !Directory.Exists (NuGetPackageRoot)) return null; @@ -169,18 +169,24 @@ AssemblyDefinition ResolveRuntimeAssemblyForReferenceAssembly (LockFile lockFile LogWarning ($"Could not resolve target for '{TargetMoniker}'"); return null; } - var libraryPath = lockFile.Libraries.FirstOrDefault (x => x.Name == assemblyNameDefinition.Name); - if (libraryPath == null) - return null; - var library = target.Libraries.FirstOrDefault (x => x.Name == assemblyNameDefinition.Name); - if (library == null) - return null; - var runtime = library.RuntimeAssemblies.FirstOrDefault (); - if (runtime == null) - return null; - var path = Path.Combine (NuGetPackageRoot, libraryPath.Path, runtime.Path); - LogDebugMessage ($"Attempting to load {path}"); - return resolver.Load (path, forceLoad: true); + foreach (var folder in lockFile.PackageFolders) { + var path = assemblyPath.Replace (folder.Path, string.Empty); + var libraryPath = lockFile.Libraries.FirstOrDefault (x => path.StartsWith (x.Path, StringComparison.OrdinalIgnoreCase)); + if (libraryPath == null) + continue; + var library = target.Libraries.FirstOrDefault (x => String.Compare (x.Name, libraryPath.Name, StringComparison.OrdinalIgnoreCase) == 0); + if (libraryPath == null) + continue; + var runtime = library.RuntimeAssemblies.FirstOrDefault (); + if (runtime == null) + continue; + path = Path.Combine (NuGetPackageRoot, libraryPath.Path, runtime.Path); + if (!File.Exists (path)) + continue; + LogDebugMessage ($"Attempting to load {path}"); + return resolver.Load (path, forceLoad: true); + } + return null; } void AddAssemblyReferences (DirectoryAssemblyResolver resolver, ICollection assemblies, AssemblyDefinition assembly, bool topLevel)