Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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.