return false;
ITaskItem[] outputs;
- if (ParentEngine.BuiltTargetsOutputByName.TryGetValue (key, out outputs)) {
- if (targetOutputs != null)
- targetOutputs.Add (target_name, outputs);
- }
+ if (targetOutputs != null && ParentEngine.BuiltTargetsOutputByName.TryGetValue (key, out outputs))
+ targetOutputs [target_name] = outputs;
return true;
}
t [0].RemoveTask (null);
}
+ [Test]
+ public void TestRunTargetTwice ()
+ {
+ string documentString = @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+ <Target Name=""Foo"">
+ <Message Text=""Foo ran""/>
+ </Target>
+ <Target Name=""Main"">
+ <MSBuild Projects=""$(MSBuildProjectFile)"" Targets=""Foo;Foo"" />
+ </Target>
+
+ </Project>";
+
+ var filepath = Path.GetTempFileName ();
+ try {
+ File.WriteAllText (filepath, documentString);
+
+ var engine = new Engine (Consts.BinPath);
+ var project = engine.CreateNewProject ();
+ project.Load (filepath);
+
+ var logger = new TestMessageLogger ();
+ engine.RegisterLogger (logger);
+
+ var result = project.Build ("Main");
+ if (!result) {
+ logger.DumpMessages ();
+ Assert.Fail ("Build failed, see the logs");
+ }
+
+ Assert.AreEqual(1, logger.NormalMessageCount, "Expected number of messages");
+ logger.CheckLoggedMessageHead ("Foo ran", "A1");
+
+ Assert.AreEqual(0, logger.NormalMessageCount, "Extra messages found");
+ Assert.AreEqual(0, logger.WarningMessageCount, "Extra warning messages found");
+
+ Assert.AreEqual(2, logger.TargetStarted, "TargetStarted count");
+ Assert.AreEqual(2, logger.TargetFinished, "TargetFinished count");
+
+ Assert.IsTrue (result);
+ } finally {
+ File.Delete (filepath);
+ }
+ }
+
[Test]
public void TestTargetOutputs1 ()
{