[xbuild] Set ProjectFile and TargetName metadata on target outputs.
[mono.git] / mcs / class / Microsoft.Build.Engine / Microsoft.Build.BuildEngine / Target.cs
index b201619615d2ebcebd6114e768b7f41dfba44950..92e369b888b5ba56542aaa6c14f89511f044f252 100644 (file)
@@ -30,6 +30,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using System.Xml;
 using Microsoft.Build.Framework;
 using Microsoft.Build.Utilities;
@@ -175,7 +176,12 @@ namespace Microsoft.Build.BuildEngine {
                                project.PopBatch ();
                        }
 
-                       project.ParentEngine.BuiltTargetsOutputByName [built_targets_key] = (ITaskItem[]) Outputs.Clone ();
+                       ITaskItem[] outputs = (ITaskItem[]) OutputsAsITaskItems.Clone ();
+                       foreach (ITaskItem item in outputs) {
+                               item.SetMetadata ("MSBuildProjectFile", TargetFile);
+                               item.SetMetadata ("MSBuildTargetName", Name);
+                       }
+                       project.ParentEngine.BuiltTargetsOutputByName [built_targets_key] = outputs;
 
                        return result;
                }
@@ -381,7 +387,12 @@ namespace Microsoft.Build.BuildEngine {
                        get { return buildState; }
                }
 
-               internal ITaskItem [] Outputs {
+               public string Outputs {
+                       get { return targetElement.GetAttribute ("Outputs"); }
+                       set { targetElement.SetAttribute ("Outputs", value); }
+               }
+
+               ITaskItem [] OutputsAsITaskItems {
                        get {
                                string outputs = targetElement.GetAttribute ("Outputs");
                                if (outputs == String.Empty)