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.