Merge pull request #3028 from lateralusX/jlorenss/threadpool_warning
[mono.git] / mcs / class / Microsoft.Build.Tasks / Microsoft.Build.Tasks / ResolveAssemblyReference.cs
index dae19bb79e7a5d101ef93749a4f57b6e7514784b..3bdf7111df8b3295f5f37cd50d92238d846128e5 100644 (file)
@@ -53,7 +53,6 @@ namespace Microsoft.Build.Tasks {
                bool            findRelatedFiles;
                bool            findSatellites;
                bool            findSerializationAssemblies;
-               string[]        installedAssemblyTables;
                ITaskItem[]     relatedFiles;
                ITaskItem[]     resolvedDependencyFiles;
                ITaskItem[]     resolvedFiles;
@@ -129,6 +128,10 @@ namespace Microsoft.Build.Tasks {
                        relatedFiles = tempRelatedFiles.Values.ToArray ();
                        resolvedDependencyFiles = tempResolvedDepFiles.Values.ToArray ();
 
+#if XBUILD_14
+                       DependsOnSystemRuntime = resolvedDependencyFiles.Any (x => Path.GetFileName (x.ItemSpec) == "System.Runtime.dll").ToString ();
+#endif
+
                        tempResolvedFiles.Clear ();
                        tempCopyLocalFiles.Clear ();
                        tempSatelliteFiles.Clear ();
@@ -209,9 +212,36 @@ namespace Microsoft.Build.Tasks {
                        if (!TryGetSpecificVersionValue (item, out specific_version))
                                return null;
 
+                       var spath_index  = 0;
                        foreach (string spath in search_paths) {
+                               if (string.IsNullOrEmpty (spath))
+                                       continue;
                                assembly_resolver.LogSearchMessage ("For searchpath {0}", spath);
 
+                               // The first value of search_paths can be the parent assembly directory.
+                               // In that case the value would be treated as a directory.
+                               // This code checks if we should treat the value as a TargetFramework assembly.
+                               // Doing so avoids CopyLocal beeing set to true.
+                               if (spath_index++ == 0 && targetFrameworkDirectories != null) {
+                                       foreach (string fpath in targetFrameworkDirectories) {
+                                               if (string.IsNullOrEmpty (fpath))
+                                                       continue;
+                                               if (String.Compare (
+                                                               Path.GetFullPath (spath).TrimEnd (Path.DirectorySeparatorChar),
+                                                               Path.GetFullPath (fpath).TrimEnd (Path.DirectorySeparatorChar),
+                                                               StringComparison.InvariantCulture) != 0)
+                                                       continue;
+
+                                               resolved = assembly_resolver.FindInTargetFramework (item,
+                                                       fpath, specific_version);
+
+                                               break;
+                                       }
+
+                                       if  (resolved != null)
+                                               break;
+                               }
+
                                if (String.Compare (spath, "{HintPathFromItem}") == 0) {
                                        resolved = assembly_resolver.ResolveHintPathReference (item, specific_version);
                                } else if (String.Compare (spath, "{TargetFrameworkDirectory}") == 0) {
@@ -600,6 +630,13 @@ namespace Microsoft.Build.Tasks {
                public ITaskItem[] CopyLocalFiles {
                        get { return copyLocalFiles; }
                }
+
+#if XBUILD_14
+               [Output]
+               public string DependsOnSystemRuntime {
+                       get; private set;
+               }
+#endif
                
                [Output]
                public ITaskItem[] FilesWritten {
@@ -626,12 +663,11 @@ namespace Microsoft.Build.Tasks {
                        get { return findSerializationAssemblies; }
                        set { findSerializationAssemblies = value; }
                }
-/*             
-               public string[] InstalledAssemblyTables {
-                       get { return installedAssemblyTables; }
-                       set { installedAssemblyTables = value; }
-               }
-*/             
+
+               public
+               ITaskItem[]
+               InstalledAssemblyTables { get; set; }
+
                [Output]
                public ITaskItem[] RelatedFiles {
                        get { return relatedFiles; }
@@ -683,11 +719,9 @@ namespace Microsoft.Build.Tasks {
                        get { return suggestedRedirects; }
                }
 
-#if NET_4_0
                public string TargetFrameworkMoniker { get; set; }
 
                public string TargetFrameworkMonikerDisplayName { get; set; }
-#endif
 
                public string TargetFrameworkVersion { get; set; }