using System.Collections;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using Mono.XBuild.Utilities;
internal void RemoveLoadedProject (Project p)
{
- if (p.FullFileName != String.Empty)
+ if (!String.IsNullOrEmpty (p.FullFileName)) {
+ ClearBuiltTargetsForProject (p);
projects.Remove (p.FullFileName);
+ }
}
internal void AddLoadedProject (Project p)
project.CheckUnloaded ();
- if (project.FullFileName != String.Empty)
- projects.Remove (project.FullFileName);
+ RemoveLoadedProject (project);
project.Unload ();
}
}
}
+ internal void ClearBuiltTargetsForProject (Project project)
+ {
+ string project_key = project.GetKeyForTarget (String.Empty, false);
+ var to_remove_keys = BuiltTargetsOutputByName.Keys.Where (key => key.StartsWith (project_key)).ToList ();
+ foreach (string to_remove_key in to_remove_keys)
+ BuiltTargetsOutputByName.Remove (to_remove_key);
+ }
+
void LogProjectStarted (Project project, string [] target_names)
{
string targets;
XmlDocument xmlDocument;
bool unloaded;
bool initialTargetsBuilt;
- List<string> builtTargetKeys;
bool building;
BuildSettings current_settings;
Stack<Batch> batches;
encoding = null;
- builtTargetKeys = new List<string> ();
initialTargets = new List<string> ();
defaultTargets = new string [0];
batches = new Stack<Batch> ();
}
internal string GetKeyForTarget (string target_name)
+ {
+ return GetKeyForTarget (target_name, true);
+ }
+
+ internal string GetKeyForTarget (string target_name, bool include_global_properties)
{
// target name is case insensitive
- return fullFileName + ":" + target_name.ToLower () + ":" + GlobalPropertiesToString (GlobalProperties);
+ return fullFileName + ":" + target_name.ToLower () +
+ (include_global_properties ? (":" + GlobalPropertiesToString (GlobalProperties))
+ : String.Empty);
}
string GlobalPropertiesToString (BuildPropertyGroup bgp)
// Removes entries of all earlier built targets for this project
void RemoveBuiltTargets ()
{
- foreach (string key in builtTargetKeys)
- ParentEngine.BuiltTargetsOutputByName.Remove (key);
+ ParentEngine.ClearBuiltTargetsForProject (this);
}
void InitializeProperties (string effective_tools_version)
get; internal set;
}
- internal List<string> BuiltTargetKeys {
- get { return builtTargetKeys; }
- }
-
internal Dictionary <string, BuildItemGroup> LastItemGroupContaining {
get { return last_item_group_containing; }
}