[xbuild] Reset cache of built targets, on a new project build.
authorAnkit Jain <radical@corewars.org>
Tue, 12 Oct 2010 23:24:00 +0000 (04:54 +0530)
committerAnkit Jain <radical@corewars.org>
Tue, 12 Oct 2010 23:27:57 +0000 (04:57 +0530)
All targets that get built are tracked by the engine, to avoid
unnecessary builds of targets. This should be reset on engine.Build,
unless it is explicitly requested *not to* reset it, via BuildFlags.

mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Engine.cs

index fd675a7d752d458c50f863623c82bd77ec00af54..3a41134c81d82cd0f20e577d430bb799146ec0be 100644 (file)
@@ -126,6 +126,7 @@ namespace Microsoft.Build.BuildEngine {
                {
                        if (project == null)
                                throw new ArgumentException ("project");
+                       builtTargetsOutputByName.Clear ();
                        return project.Build ();
                }
                
@@ -164,6 +165,9 @@ namespace Microsoft.Build.BuildEngine {
                        if (targetNames == null)
                                return false;
 
+                       if ((buildFlags & BuildSettings.DoNotResetPreviouslyBuiltTargets) != BuildSettings.DoNotResetPreviouslyBuiltTargets)
+                               builtTargetsOutputByName.Clear ();
+
                        if (defaultToolsVersion != null)
                                // it has been explicitly set, xbuild does this..
                                project.ToolsVersion = defaultToolsVersion;
@@ -224,6 +228,9 @@ namespace Microsoft.Build.BuildEngine {
                                              IDictionary targetOutputs,
                                              BuildSettings buildFlags, string toolsVersion)
                {
+                       if ((buildFlags & BuildSettings.DoNotResetPreviouslyBuiltTargets) != BuildSettings.DoNotResetPreviouslyBuiltTargets)
+                               builtTargetsOutputByName.Clear ();
+
                        Project project;
 
                        bool newProject = false;