protected override void ExecuteTask()
{
// ensure base directory is set, even if fileset was not initialized
// from XML
if (References.BaseDirectory == null) {
References.BaseDirectory = new DirectoryInfo(Project.BaseDirectory);
}
// check to see if any of the underlying interop dlls or the typelibs have changed
// otherwise, it's not necessary to reimport.
if (NeedsCompiling()) {
// using a stringbuilder vs. StreamWriter since this program will not accept response files.
_argumentBuilder = new StringBuilder();
_argumentBuilder.Append("\"" + TypeLib.FullName + "\"");
// any option that specifies a file name must be wrapped in quotes
// to handle cases with spaces in the path.
_argumentBuilder.AppendFormat(" /out:\"{0}\"", OutputFile.FullName);
// suppresses the Microsoft startup banner display
_argumentBuilder.Append(" /nologo");
if (AsmVersion != null) {
_argumentBuilder.AppendFormat(" /asmversion:\"{0}\"", AsmVersion);
}
if (Namespace != null) {
_argumentBuilder.AppendFormat(" /namespace:\"{0}\"", Namespace);
}
if (Primary) {
_argumentBuilder.Append(" /primary");
}
if (Unsafe) {
_argumentBuilder.Append(" /unsafe");
}
if (DelaySign) {
_argumentBuilder.Append(" /delaysign");
}
if (PublicKeyFile != null) {
_argumentBuilder.AppendFormat(" /publickey:\"{0}\"", PublicKeyFile.FullName);
}
if (KeyFile != null) {
_argumentBuilder.AppendFormat(" /keyfile:\"{0}\"", KeyFile.FullName);
}
if (KeyContainer != null) {
_argumentBuilder.AppendFormat(" /keycontainer:\"{0}\"", KeyContainer);
}
if (StrictRef) {
_argumentBuilder.Append(" /strictref");
}
if (SysArray) {
_argumentBuilder.Append(" /sysarray");
}
if (Transform != null) {
if (SupportsTransform) {
_argumentBuilder.AppendFormat(" /transform:\"{0}\"", Transform);
}
}
if (Verbose) {
// displays extra information
_argumentBuilder.Append(" /verbose");
} else {
// suppresses all output except for errors
_argumentBuilder.Append(" /silent");
}
foreach (string fileName in References.FileNames) {
_argumentBuilder.AppendFormat(" /reference:\"{0}\"", fileName);
}
// call base class to do the work
base.ExecuteTask();
}
}