diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets index 4e2d278372f7..cbafbb1d4063 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets @@ -432,6 +432,7 @@ Copyright (C) 2014 Xamarin. All rights reserved. Prefix="xammac" NoOverwrite="@(_BundleResourceWithLogicalName)" IntermediateOutputPath="$(IntermediateOutputPath)" + TargetFrameworkDirectory="$(TargetFrameworkDirectory)" ReferencedLibraries="@(ResolvedFiles)"> diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/UnpackLibraryResourcesTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/UnpackLibraryResourcesTaskBase.cs index ab19ba3d2601..87d3772eb617 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/UnpackLibraryResourcesTaskBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/UnpackLibraryResourcesTaskBase.cs @@ -26,6 +26,9 @@ public abstract class UnpackLibraryResourcesTaskBase : Task [Required] public ITaskItem[] ReferencedLibraries { get; set; } + [Required] + public ITaskItem[] TargetFrameworkDirectory { get; set; } + #endregion #region Outputs @@ -42,6 +45,7 @@ public override bool Execute () Log.LogTaskProperty ("IntermediateOutputPath", IntermediateOutputPath); Log.LogTaskProperty ("NoOverwrite", NoOverwrite); Log.LogTaskProperty ("ReferencedLibraries", ReferencedLibraries); + Log.LogTaskProperty ("TargetFrameworkDirectory", TargetFrameworkDirectory); // TODO: give each assembly its own intermediate output directory // TODO: use list file to avoid re-extracting assemblies but allow FileWrites to work @@ -49,7 +53,9 @@ public override bool Execute () HashSet ignore = null; foreach (var asm in ReferencedLibraries) { - if (asm.GetMetadata ("ResolvedFrom") == "{TargetFrameworkDirectory}") { + // mscorlib.dll was not coming out with ResolvedFrom == {TargetFrameworkDirectory} + // and what we really care is where it comes from, not how it was resolved + if (IsFrameworkAssembly (asm)) { Log.LogMessage (MessageImportance.Low, " Skipping framework assembly: {0}", asm.ItemSpec); } else { var extracted = ExtractContentAssembly (asm.ItemSpec, IntermediateOutputPath); @@ -83,6 +89,16 @@ public override bool Execute () return !Log.HasLoggedErrors; } + bool IsFrameworkAssembly (ITaskItem asm) + { + var asm_path = asm.GetMetadata ("FullPath"); + foreach (var dir in TargetFrameworkDirectory) { + if (asm_path.StartsWith (dir.GetMetadata ("FullPath"), StringComparison.OrdinalIgnoreCase)) + return true; + } + return false; + } + IEnumerable ExtractContentAssembly (string assembly, string intermediatePath) { Log.LogMessage (MessageImportance.Low, " Inspecting assembly: {0}", assembly); diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets index 021308248d3b..986f4f56a1af 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets @@ -531,6 +531,7 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. Prefix="monotouch" NoOverwrite="@(_BundleResourceWithLogicalName)" IntermediateOutputPath="$(DeviceSpecificIntermediateOutputPath)" + TargetFrameworkDirectory="$(TargetFrameworkDirectory)" ReferencedLibraries="@(ReferencePath);@(ReferenceDependencyPaths)">