MSBuild Task Generator: Part 3. Implementing ITask


Yesterday we introduced the ITask interface.  Today we’ll look at a simple implementation of the ITask interface.


 


I’m not a big fan of reading to be people what they can read for themselves so let’s move on to the code…


 


[Caveat: this is sample code.  This whole series on the blog is sample code.  While I am making a reasonable effort with respect to error handling and design, I am not going to take up a lot of room on the blog with comments and error checking that distracts from the intent of the code.]


 


namespace MBFTaskGenerator


{


      public class MBFTaskFile : ITask


      {


            string m_Namespace;


            string m_Class;


            string m_BaseClass;


 


            List<ITaskProperty> m_Properties = new List<ITaskProperty>();


 


            public MBFTaskFile(TasksTask task)


            {


                  Namespace = task.Namespace;


                  Class = task.Class;


                  BaseClass = (task.BaseClass == null) ?


                        typeof(Microsoft.Build.Utilities.Task).FullName : task.BaseClass;


            }


 


            public IList<ITaskProperty> Properties


            {


                  get


                  {


                        return m_Properties;


                  }


            }


 


            public string Namespace


            {


                  get


                  {


                        return m_Namespace;


                  }


                  set


                  {


                        m_Namespace = value;


                  }


            }


 


            public string Class


            {


                  get


                  {


                        return m_Class;


                  }


                  set


                  {


                        m_Class = value;


                  }


            }


 


            public string BaseClass


            {


                  get


                  {


                        return m_BaseClass;


                  }


                  set


                  {


                        m_BaseClass = value;


                  }


            }


      }


}


 


I think the only thing that deserves any explanation is that the default BaseClass, if one is not provided, is Microsoft.Build.Utilities.Task.  I choose to implement this in code, instead of in the XSD file because it allows me to validate at compile time instead of catching a problem at runtime.


 


So that is a basic implementation of the ITask interface.


 


Tomorrow we’ll look at the ITaskProperty interface.  It has a bit more to it.


 

Comments (1)