diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets index a90c77dda8..5e43e3ee7f 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets @@ -441,6 +441,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 ab19ba3d26..87d3772eb6 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/UnpackLibraryResourcesTaskBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/UnpackLibraryResourcesTaskBase.cs @@ -26,6 +26,9 @@ namespace Xamarin.MacDev.Tasks [Required] public ITaskItem[] ReferencedLibraries { get; set; } + [Required] + public ITaskItem[] TargetFrameworkDirectory { get; set; } + #endregion #region Outputs @@ -42,6 +45,7 @@ namespace Xamarin.MacDev.Tasks 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 @@ namespace Xamarin.MacDev.Tasks 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 @@ namespace Xamarin.MacDev.Tasks 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 612c849076..10cc461148 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets @@ -543,6 +543,7 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. Prefix="monotouch" NoOverwrite="@(_BundleResourceWithLogicalName)" IntermediateOutputPath="$(DeviceSpecificIntermediateOutputPath)" + TargetFrameworkDirectory="$(TargetFrameworkDirectory)" ReferencedLibraries="@(ReferencePath);@(ReferenceDependencyPaths)">