2009-03-26 Jonathan Chambers <joncham@gmail.com>
authorJonathan Chambers <joncham@gmail.com>
Thu, 26 Mar 2009 15:47:25 +0000 (15:47 -0000)
committerJonathan Chambers <joncham@gmail.com>
Thu, 26 Mar 2009 15:47:25 +0000 (15:47 -0000)
        * TaskDatabase.cs (RegisterTask): Search for class by name
        if task was not found using GetType (which uses namespace).

svn path=/trunk/mcs/; revision=130305

mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/TaskDatabase.cs
mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/BuildTaskTest.cs
mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/ChangeLog
mcs/class/Microsoft.Build.Engine/Test/resources/ChangeLog
mcs/class/Microsoft.Build.Engine/Test/resources/TestTasks.cs

index 5ae9cfb713eafc1dc76d29713018226169251795..cb55d5d917c8a47e8a0b7369e937d651f6c3379b 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-26  Jonathan Chambers  <joncham@gmail.com>
+
+       * TaskDatabase.cs (RegisterTask): Search for class by name
+       if task was not found using GetType (which uses namespace). 
+
 2009-02-26  Ankit Jain  <jankit@novell.com>
 
        * Target.cs: Handle target with no tasks. Log errors.
index e5d974758c9eb67444cdb1977d6dc28238e820e2..33c2add942390a3339910bf97cd37328b3f98f57 100644 (file)
@@ -65,6 +65,15 @@ namespace Microsoft.Build.BuildEngine {
                                assembly = Assembly.Load (assemblyLoadInfo.AssemblyNameString);
                        
                        Type type = assembly.GetType (classname);
+                       if (type == null) {
+                               // search for matching class in case namespace was not used
+                               foreach (Type exportedType in assembly.GetExportedTypes()) {
+                                       if (exportedType.Name == classname) {
+                                               type = exportedType;
+                                               break;
+                                       }
+                               }
+                       }
                        typesByFullName.Add (classname, type);
                        typesByShortName [GetShortName (classname)] = type;
                }
index 5a28d6798f1f60fb8a179a92090a17cca79af1c3..f9880b01cc7a07ba90c886da89b77daef62a36b6 100644 (file)
@@ -344,7 +344,41 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
 
                        Assert.AreEqual ("ItemName", project.EvaluatedItems [0].Name, "A1");
                        Assert.AreEqual ("some_text", project.EvaluatedItems [0].FinalItemSpec, "A2");
-               }
+        }
+
+        [Test]
+        public void TestTaskInNamespace()
+        {
+            Engine engine;
+            Project project;
+
+            string documentString = @"
+                               <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+                                       <UsingTask
+                                               AssemblyFile='Test\resources\TestTasks.dll'
+                                               TaskName='NamespacedOutputTestTask'
+                                       />
+                                       <Target Name='T'>
+                                               <NamespacedOutputTestTask />
+                                       </Target>
+                               </Project>
+                       ";
+
+            engine = new Engine(Consts.BinPath);
+            project = engine.CreateNewProject();
+            project.LoadXml(documentString);
+
+            Target[] t = new Target[1];
+            BuildTask[] bt;
+            project.Targets.CopyTo(t, 0);
+            bt = GetTasks(t[0]);
+
+            bt[0].AddOutputItem("Property", "ItemName");
+            project.Build("T");
+
+            Assert.AreEqual("ItemName", project.EvaluatedItems[0].Name, "A1");
+            Assert.AreEqual("some_text", project.EvaluatedItems[0].FinalItemSpec, "A2");
+        }
 
                [Test]
                public void TestAddOutputProperty1 ()
index 38ef8ffcb4380f375b52a08c6c82e8d77c63998b..41a0608672ac54cc842c19303f5391a5b29101a2 100644 (file)
@@ -1,3 +1,7 @@
+2009-03-26  Jonathan Chambers  <joncham@gmail.com>
+
+       * BuildTaskTest.cs (TestTaskInNamespace): Add test for Task in namespace.
+
 2009-02-24  Ankit Jain  <jankit@novell.com>
 
        * UsingTaskTest.cs (TestLazyLoad{1,2,3}): New.
index 275df51b57802cdb603e5857d50f76188a525286..b7f6cde0cdaf4ff26ba0788175bd04d860fa3624 100644 (file)
@@ -1,3 +1,7 @@
+2009-03-26  Jonathan Chambers  <joncham@gmail.com>
+
+       * TestTasks.cs (NamespacedOutputTestTask): New.
+
 2009-02-24  Ankit Jain  <jankit@novell.com>
 
        * TestTasks.cs (Another.SameTask): New.
index 84e34ef1c8fe779bc92fbe2fd0bdd3c3075d70f1..46b032fe559e64176d88d870744a9bd2adcc730c 100644 (file)
@@ -29,6 +29,23 @@ using System;
 using Microsoft.Build.Framework;
 using Microsoft.Build.Utilities;
 
+namespace Foo
+{
+    public class NamespacedOutputTestTask : Task
+    {
+        public override bool Execute()
+        {
+            return true;
+        }
+
+        [Output]
+        public string Property
+        {
+            get { return "some_text"; }
+        }
+    }
+}
+
 public class OutputTestTask : Task {
        public override bool Execute ()
        {